I totonu o lenei tusiga, matou te faʻasoa le poto masani o le faʻapipiʻiina ma le tuʻuina atu o talosaga iOS i tagata faʻaoga, lea na faʻaputuina e le Plarium Krasnodar studio i le faagasologa o le debugging CI / CD.

Sauniuniga
Soʻo se tagata o loʻo i ai i se tasi auala poʻo se isi e aʻafia i le atinaʻeina o talosaga mo masini Apple ua uma ona talisapaia le feteʻenaʻiga faigofie o atinaʻe. O faigata e maua i soʻo se mea: mai le lisi o faʻamatalaga a le tagata atiae i le debug ma fausia meafaigaluega.
E tele tala e uiga i "faʻavae" i luga o le Initaneti, o lea o le a matou taumafai e faʻamaonia le mea autu. O mea nei e te mana'omia e fau lelei ai lau talosaga:
- ;
- fa'avae i masini macOS, o loʻo galue o se 'auʻaunaga fausiaina;
- gaosia , lea o le a faʻaaogaina e sainia ai le talosaga;
- faia le talosaga ma tulaga ese (e tatau ona maitauina le taua o le Bundle Identifier, aua o le faʻaaogaina o le wildcard ID e le mafai ai ona faʻaogaina le tele o galuega o le talosaga, mo se faʻataʻitaʻiga: Faʻatasi Domains, Push Notifications, Apple Sign In ma isi);
- saini talosaga.
E tatau ona gaosia le tusi faamaonia a le tagata atiaŹ»e e ala i le Keychain i soŹ»o se masini e faŹ»avae i luga macOSE matuÄ tÄua tele le ituaiga o tusi faamaonia. E fuafua i le siosiomaga o le talosaga (Dev, QA, Staging, Production), o le a eseese (Atina'e po'o le Tu'uina Atu), e fa'apea fo'i le ituaiga o le fa'ailoga o le saini o le talosaga.
Ituaiga autu o talaaga otooto:
- Atina'e ā ua mamanuina e sainia ai le talosaga a le 'au atia'e, e fa'aaogaina se tusi fa'amaonia o le Atina'e (igoa o le ituaiga iPhone Atina'e: XXXXX);
- Fa'apitoa - ua mamanuina mo le sainia o se talosaga su'ega ma le fa'amaoniga i totonu e le matagaluega o le QA, o le tusi fa'amaonia o le Fa'asalalauga a le tagata atia'e e fa'aaogaina (igoa o le ituaiga iPhone Tufatufaina: XXXXX);
- Faleoloa Faleoloa - faʻasaʻo fale mo suʻega fafo e ala i TestFlight ma faʻapipiʻi i le Faleoloa App, faʻaaogaina le tusi faamaonia o le Faʻasalalauga.
Pe a fa'atupuina fa'amatalaga Fa'alautele ma Ad Hoc, o lo'o fa'aalia fo'i , lea e mafai ona e faʻapipiʻi ai se fale, lea e mafai ai ona e faʻatapulaʻaina avanoa mo tagata faʻaoga. E leai se lisi o masini i totonu o le App Store faʻamatalaga, talu ai o le puleaina o avanoa i le taimi o suʻega beta tapunia e faʻatautaia e TestFlight, lea o le a talanoaina mulimuli ane.
Mo le faʻamalamalamaga, e mafai ona e tuʻuina atu le faʻamatalaga a le tagata atiaʻe i le tulaga o se laulau i lalo. E fa'afaigofie ai ona malamalama po'o le a le tapula'a tatou te mana'omia mo le fa'apotopotoga ma le mea e maua mai ai.

Fono Aoao
Ina ia faafaigofieina le tuueseeseina o faapotopotoga e ala i galuega faatino ma siosiomaga, matou te faaaogaina igoa talaaga pei ${ProjectName}_${Instance}, o lona uiga, igoa ole poloketi + faʻataʻitaʻiga (faʻalagolago ile siosiomaga ole talosaga: Dev, QA, GD, Staging, Live, ma isi).
A fa'aulufale mai i le fale faigaluega, o le fa'ailoga e suia lona igoa i se ID tulaga ese ma fa'anofo i le faila /Users/$Username/Library/MobileDevice/Provisioning Profiles (o fea $Username e fetaui ma le igoa ole tagata fa'aoga ole fale faigaluega).
E lua auala e fausia ai se faila *.ipa - legacy (PackageApplication) ma le taimi nei (e ala i le XcAchive creation and export). O le auala muamua ua manatu ua le toe aoga, talu ai talu mai le version 8.3 o le faila faila faila faila ua aveese mai le tufatufa Xcode. Ina ia faʻaaogaina, e tatau ona e kopiina le module mai le Xcode tuai (version 8.2 ma muamua) i le faila:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/
Ona fai lea o le poloaiga:
chmod +x /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/*O le isi mea e te mana'omia e aoina le *.app faila o le talosaga:
xcodebuild
-workspace $ProjectDir/$ProjectName.xcworkspace
-scheme $SchemeName
-sdk iphoneos
build
-configuration Release
-derivedDataPath build
CODE_SIGN_IDENTITY=ā$DevAccNameā
PROVISIONING_PROFILE=ā$ProfileIdā
DEPLOYMENT_POSTPROCESSING=YES
SKIP_INSTALL=YES
ENABLE_BITCODE=NO
Afai:
-workspace - ala i le faila o le poloketi.
-scheme - le polokalame na faʻaaogaina, faʻamaonia i totonu o le poloketi.
-derivedDataPath ā ala e sii mai ai le talosaga ua tuufaatasia (*.app).
CODE_SIGN_IDENTITY ā le igoa o le teugatupe a le tagata atiaŹ»e, lea e mafai ona faŹ»amaonia i le Keychain (iPhone Atina'e: XXXX XXXXXXX, e aunoa ma le TeamID i totonu o fa'aputuga).

PROVISIONING_PROFILE - Profile ID mo le sainia o le talosaga, lea e mafai ona maua i le poloaiga:
cd "/Users/$Username/Library/MobileDevice/Provisioning Profiles/" && find *.mobileprovision -type f | xargs grep -li ">${ProjectName}_${Instance}<" | sed -e 's/.mobileprovision//' Afai e fa'aogaina e le talosaga se fa'amatalaga fa'aopoopo (mo se fa'ata'ita'iga, mo Push Notifications), ona fa'apea lea PROVISIONING_PROFILE faailoa mai:
APP_PROFILE=ā$AppProfileā
EXTENSION_PROFILE=ā$ExtProfileā O le isi, o le faila *.app e maua mai e tatau ona afifi i *.ipa. Ina ia faia lenei mea, e mafai ona e faŹ»aogaina se poloaiga e pei o:
/usr/bin/xcrun --sdk iphoneos PackageApplication
-v $(find "$ProjectDir/build/Build/Products/Release-iphoneos" -name "*.app")
-o "$ProjectDir/$ProjectName_$Instance.ipa"Ae ui i lea, o lenei metotia ua manatu ua le toe aoga mai le manatu o Apple. E talafeagai le mauaina o *.ipa e ala i le auina atu i fafo mai le faila o talosaga.
Muamua e tatau ona e aoina le archive ma le poloaiga:
xcodebuild
-workspace $ProjectDir/$ProjectName.xcworkspace
-scheme $SchemeName
-sdk iphoneos
-configuration Release
archive
-archivePath $ProjectDir/build/$ProjectName.xcarchive
CODE_SIGN_IDENTITY=ā$DevAccNameā
PROVISIONING_PROFILE=ā$ProfileIdā
ENABLE_BITCODE=NO
SYNCHRONOUS_SYMBOL_PROCESSING=FALSE O le eseesega o loʻo taoto i le faʻapotopotoga auala ma filifiliga SYNCHRONOUS_SYMBOL_PROCESSING, lea e fa'agata ai le la'uina o fa'ailoga ile taimi fau.
O le isi mea tatou te manaʻomia le faʻatupuina o se faila ma faʻasalalauga faʻasalalau:
ExportSettings="$ProjectDir/exportOptions.plist"
cat << EOF > $ExportSettings
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>compileBitcode</key>
<false/>
<key>uploadBitcode</key>
<false/>
<key>uploadSymbols</key>
<false/>
<key>method</key>
<string>$Method</string>
<key>provisioningProfiles</key>
<dict>
<key>$BundleID</key>
<string>$ProfileId</string>
</dict>
<key>signingCertificate</key>
<string>$DevAccName</string>
<key>signingStyle</key>
<string>manual</string>
<key>stripSwiftSymbols</key>
<true/>
<key>teamID</key>
<string>$TeamID</string>
<key>thinning</key>
<string><none></string>
</dict>
</plist>
EOF
Afai:
$Method - auala tuʻuina atu, e fetaui ma le ituaiga faʻamatalaga saini saini, o lona uiga, mo le Atinaʻeina o le tau o le atinaʻe, mo Ad Hoc - ad-hoc, ma mo le Faleoloa Store - app-store.
$BundleID - ID ID, lea o loʻo faʻamaonia i le faʻatulagaina o talosaga. E mafai ona e siaki i le poloaiga:
defaults read $ProjectDir/Info CFBundleIdentifier $DevAccName Šø $ProfileId - igoa fa'atupuina ma fa'ailoga ID fa'ailoga saini na fa'aaoga muamua ma e tatau ona fetaui ma fa'atauga i tulaga fa'atau atu.
$TeamID ā o se ID e sefulu-numera i totonu o fa'apuipui pe a uma le igoa o le tagata atia'e, fa'ata'ita'iga: iPhone Tagata Atiina'e: ā¦ā¦ (XXXXXXXXXXXX); e mafai ona fa'amaonia i le Keychain.
Le isi, faʻaaoga le faʻatonuga auina atu i fafo, matou te maua le faila * .ipa talafeagai:
xcodebuild
-exportArchive
-archivePath $ProjectDir/build/$ProjectName.xcarchive
-exportPath $ProjectDir
-exportOptionsPlist $ExportSettingsFaʻamatalaga faʻatau
O le taimi nei o le faila na aoina e manaʻomia ona tuʻuina atu i le tagata faʻaaogaina, o lona uiga, faʻapipiʻi i luga o le masini.
E tele auaunaga mo le tufatufaina atu o Atinaʻe ma Ad Hoc fausia, e pei o HockeyApp, AppBlade ma isi, ae i lenei tusiga o le a tatou talanoa e uiga i se server tutoʻatasi mo le tufatufaina o talosaga.
O le faʻapipiʻiina o le talosaga mo iOS e faia i laʻasaga 2:
- Mauaina o le fa'aaliga fa'apipi'i talosaga e ala i le Auaunaga o Mea.
- Fa'apipi'iina o le *.ipa faila e tusa ai ma fa'amatalaga fa'amaonia i le fa'aaliga e ala i le HTTPS.
O lea la, tatou te manaʻomia muamua le faʻatupuina o se faʻaaliga faʻapipiʻi (ituaiga faila *.plist) ma le faʻatonuga:
cat << EOF > $manifest
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>items</key>
<array>
<dict>
<key>assets</key>
<array>
<dict>
<key>kind</key>
<string>software-package</string>
<key>url</key>
<string>$ipaUrl</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>$BundleID</string>
<key>bundle-version</key>
<string>$AppVersion</string>
<key>kind</key>
<string>software</string>
<key>title</key>
<string>$ProjectName_$Instance</string>
<key>subtitle</key>
<string>$Instance</string>
</dict>
</dict>
</array>
</dict>
</plist>
EOFE pei ona mafai ona e vaʻaia, o le faʻaaliga e aofia ai toetoe o mea uma e aofia ai i le fausiaina o le talosaga.
Fa'asologa o talosaga ($AppVersion) e mafai ona siaki i le poloaiga:
defaults read $ProjectDir/Info CFBundleVersion Parakalafa $ipaUrl o lo'o iai se feso'ota'iga sa'o e la'u mai ai le faila *.ipa. Mai le lona fitu o le iOS, e tatau ona faʻapipiʻi le talosaga e ala i le HTTPS. I le lona valu lomiga, o le faatulagaga o le faaaliga ua suia teisi: poloka ma faatulagaga mo ata talosaga e pei
<images>
<image>...</image>
</images>O lea la, e faʻapipiʻi le talosaga, o se itulau HTML faigofie ma se fesoʻotaʻiga pei o lenei ua lava:
itms-services://?action=download-manifest&url=https://$ServerUrl/$ProjectName/$Instance/iOS/$AppVersion/manifest.plistMo manaʻoga o le atinaʻe ma le suʻega matagaluega, ua faia e Plarium lana lava fale faʻapipiʻi talosaga, lea e maua ai:
- tutoatasi ma le tutoatasi,
- fa'atotonugalemu o le fa'atonutonuina o avanoa ma fa'amautu le fa'apipi'iina o tusi talosaga e ala i feso'ota'iga "le tumau" fa'atupuina malosi,
- galuega fa'alautele (o lona uiga, o le au atina'e, pe a mana'omia, e mafai ona tu'ufa'atasia galuega o lo'o misi i se talosaga o lo'o iai).
Suʻega
O lenei o le a matou talanoa e uiga i suʻega faʻasalalau muamua o le faʻaaogaina o le talosaga .
Tulaga mana'omia mo le la'uina o le ituaiga o fa'amatalaga saini a le App Store ma le i ai o ki API fa'atupuina.
E tele auala e sii mai ai le talosaga:
- e ala i le Xcode (Organizer),
- e ala i altool,
- e ala i le Application Loader mo lomiga tuai o Xcode (lea Transporter).
Mo le faʻapipiʻiina otometi, e faʻaaogaina altool, lea e lua foi auala faʻatagaina:
- Fa'amatalaga Fa'amatalaga Fa'apitoa,
- API Key.
E sili atu le downloadina o le talosaga e faʻaaoga ai le API Key.
Ina ia maua le API Key, alu ile ma fau se ki. I le faaopoopo atu i le ki lava ia i le *.p8 format, matou te manaʻomia ni taʻiala se lua: IssuerID ma KeyID.

Sosoo ai, fa'aulufale mai le ki na siiina i le fale faufale:
mkdir -p ~/.appstoreconnect/private_keys
mv ~/Downloads/AuthKey_${KeyID}.p8 ~/.appstoreconnect/private_keys/Aʻo leʻi tuʻuina atu le talosaga i TestFlight, e tatau ona e faʻamaonia le talosaga, matou te faia lenei mea i le poloaiga:
xcrun altool
--validate-app
-t ios
-f $(find "$ProjectDir" -name "*.ipa")
--apiKey ā$KeyIDā
--apiIssuer ā$IssuerIDā le mea apiKey Šø apiIssuer iai fa'atauga fanua mai le API fa'atupuina itulau autu.
Ma le isi, i luga o le faʻamaonia manuia, matou te utaina le talosaga ma le poloaiga --upload-app fa'atasi ai ma tapula'a tutusa.
O le talosaga o le a fa'ata'ita'iina e Apple i totonu o le tasi pe lua aso ma o le a avanoa mo tagata su'esu'e i fafo: o le a imeli i latou mo le fa'apipi'iina.
O le isi auala e la'u mai ai se talosaga e ala i le altool o le fa'aogaina lea o le Fa'amatalaga Fa'amatalaga Fa'apitoa.
Ina ia maua le App-Specific Password e tatau ona e alu i ai ma fa'atupu i le vaega Saogalemu.

Le isi, e tatau ona e fatuina se faʻamaumauga faʻamaumau i Keychain ma lenei faʻaupuga. Mai le lomiga 11 o Xcode e mafai ona faia lenei mea i le poloaiga:
xcrun altool --store-password-in-keychain-item "Altool" -u "$DeveloperName" -p $AppPswdAfai:
$DeveloperName - le igoa o le iOS developer account na faʻaaogaina e saini i totonu i auaunaga a Apple.
$AppPswd - fa'atupuina Fa'amatalaga Fa'amatalaga Fa'apitoa.
Le isi, matou te maua le tau o le asc-provider parameter ma siaki le manuia o le faʻaulufaleina o upu faʻaulu ma le poloaiga:
xcrun altool --list-providers -u "$DeveloperName" -p "@keychain:Altool"Matou te maua le gaioiga:
Provider listing:
- Long Name - - Short Name -
XXXXXXX XXXXXXXXXE pei ona mafai ona e vaʻai, o le manaʻomia Short Name value (asc-provider) e fetaui ma le $TeamID parakalafa na matou faʻaogaina i le fausiaina o le talosaga.
Ina ia faʻamaonia ma utaina le talosaga i TestFlight, faʻaaoga le poloaiga:
xcrun altool
--(validate|upload)-app
-f $(find "$ProjectDir" -name "*.ipa")
-u "$DeveloperName"
-p "@keychain:Altool" E pei o se tau fa'ailoga -p e mafai ona e ave le tau $AppPswd i se faiga e le'i fa'ailogaina (fa'ailoa).
Ae ui i lea, e pei ona taʻua muamua, mai le tulaga o le faʻatinoga, e sili atu le filifilia o le API Key mo le faʻatagaina o le altool, talu ai o lomiga eseese o le Xcode o loʻo i ai ni faʻafitauli faʻapitoa ("e le o vaʻaia" Keychain, faʻatagaina mea sese i le taimi o le lafoina, ma isi).
Na'o le mea moni lava. Ou te mana'o i tagata uma o lo'o a'afia i fau manuia ma fa'asa'olotoga e leai ni fa'alavelave i le Faleoloa Fa'atau.
puna: www.habr.com
