Likarolo tsa ho aha le ho tsamaisa lits'ebetso tsa iOS

Sehloohong sena, re arolelana phihlelo ea ho bokella le ho fana ka likopo tsa iOS ho basebelisi, tseo studio ea Plarium Krasnodar e e bokeletseng nakong ea ho lokisa CI / CD.

Likarolo tsa ho aha le ho tsamaisa lits'ebetso tsa iOS

Ho lokisetsa

Motho e mong le e mong ea kentseng letsoho ka tsela e 'ngoe ho nts'etsopele ea likopo tsa lisebelisoa tsa Apple o se a ananetse boiketlo bo tsosang khang ba meaho. Mathata a fumaneha hohle: ho tloha ho menu ea profil ea moqapi ho ea ho debug le lisebelisoa tsa ho aha.

Ho na le lingoloa tse ngata mabapi le "metheo" inthaneteng, kahoo re tla leka ho totobatsa ntho ea mantlha. Mona ke seo u se hlokang ho aha kopo ea hau ka katleho:

  • ak'haonte ea moqapi;
  • sesebelisoa se thehiloeng ho macOS se sebetsang e le seva sa kaho;
  • hlahisoa setifikeiti sa moqapi, e tla boela e sebelisoe ho saena kopo;
  • kopo e entsoeng ka mokhoa o ikhethileng ID (bohlokoa ba Sekhetho sa Bundle bo lokela ho hlokomeloa, hobane tšebeliso ea wildcard ID e etsa hore ho se khonehe ho sebelisa mesebetsi e mengata ea kopo, mohlala: Associated Domains, Push Notifications, Apple Sign In le tse ling);
  • boemo mesaeno ea kopo.

Setifikeiti sa nts'etsopele se tlameha ho hlahisoa ka Keychain ho sesebelisoa sefe kapa sefe sa macOS. Mofuta oa setifikeiti o bohlokoa haholo. Ho ipapisitse le tikoloho ea kopo (Dev, QA, Staging, Production) e tla fapana (Ntšetso-pele kapa Phano), joalo ka mofuta oa profil ea signature ea kopo.

Mefuta e meng ea profaele:

  • Nts'etsopele - e reretsoeng ho saena ts'ebeliso ea sehlopha sa nts'etsopele, ho sebelisoa setifikeiti sa Nts'etsopele (lebitso la mofuta oa iPhone Developer: XXXXX);
  • Ad Hoc - e reretsoeng ho saena kopo ea tlhahlobo le netefatso ea ka hare ke lefapha la QA, ho sebelisoa setifikeiti sa Phatlalatso sa moqapi (lebitso la mofuta oa iPhone Distribution: XXXXX);
  • App Store - moaho oa tokollo bakeng sa liteko tsa kantle ka TestFlight le ho kenya Lebenkeleng la App, ho sebelisoa setifikeiti sa Phatlalatso sa mohlahlami.

Ha o hlahisa li-profiles tsa Development le Ad Hoc, e boetse e bontšoa lethathamo la lisebelisoa, eo ho eona u ka kenyang mohaho, e leng se u lumellang ho thibela ho fihlella ho basebelisi. Ha ho na lethathamo la lisebelisoa profilong ea App Store, kaha taolo ea phihlello nakong ea tlhahlobo ea beta e koetsoeng e sebetsoa ke TestFlight, e tla tšohloa hamorao.

Bakeng sa ho hlaka, o ka hlahisa boemo ba moqapi ka mokhoa oa tafole e ka tlase. Sena se etsa hore ho be bonolo ho utloisisa hore na re hloka li-parameter life bakeng sa kopano le hore na re ka li fumana hokae.

Likarolo tsa ho aha le ho tsamaisa lits'ebetso tsa iOS

Kopano

Ho etsa hore ho be bonolo ho arola likopano ka morero le tikoloho, re sebelisa mabitso a profil joalo ka ${ProjectName}_${Instance}, ke hore, lebitso la morero + mohlala (ho itšetlehile ka tikoloho ea kopo: Dev, QA, GD, Staging, Live, joalo-joalo).

Ha e romelloa ho seva sa mohaho, profil e fetola lebitso la eona ho ID e ikhethang 'me e isoa foldareng /Users/$Username/Library/MobileDevice/Provisioning Profiles (kae $Username e tsamaellana le lebitso la ak'haonte ea mosebelisi ea seva ea kaho).

Ho na le mekhoa e 'meli ea ho aha *.ipa faele - lefa (PackageApplication) le ea morao-rao (ka XcAchive pōpo le ho romela thepa). Mokhoa oa pele o nkuoa o sa sebetse, kaha mofuta oa 8.3 mojule oa ho paka faele ea sesebelisoa o tlositsoe phetisong ea Xcode. Ho e sebelisa, o hloka ho kopitsa mojule ho tloha Xcode ea khale (mofuta oa 8.2 le pejana) ho foldareng:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/

Ebe u tsamaisa taelo:

chmod +x /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/*

E latelang o hloka ho bokella *.app faele ea ts'ebeliso:

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

Moo:

-workspace - tsela ea faele ea morero.

-scheme - moralo o sebelisitsoeng, o boletsoeng morerong.

-derivedDataPath — tsela ea ho khoasolla sesebelisoa se kopaneng (*.app).

CODE_SIGN_IDENTITY - lebitso la ak'haonte ea moqapi, e ka netefatsoang ho Keychain (iPhone Developer: XXXX XXXXXXX, ntle le TeamID ka masakaneng).

Likarolo tsa ho aha le ho tsamaisa lits'ebetso tsa iOS

PROVISIONING_PROFILE - ID ea profil ea ho saena kopo, e ka fumanoang ka taelo:

cd "/Users/$Username/Library/MobileDevice/Provisioning Profiles/" && find *.mobileprovision -type f | xargs grep -li ">${ProjectName}_${Instance}<" | sed -e 's/.mobileprovision//'

Haeba sesebelisoa se sebelisa profaele e eketsehileng (mohlala, bakeng sa Litsebiso tsa Push), sebakeng sa PROVISIONING_PROFILE bontša:

APP_PROFILE=”$AppProfile” 
EXTENSION_PROFILE=”$ExtProfile” 

Ka mor'a moo, sephetho sa *.app faele se lokela ho kenngoa ho *.ipa. Ho etsa sena, o ka sebelisa taelo e kang:

/usr/bin/xcrun --sdk iphoneos PackageApplication 
-v $(find "$ProjectDir/build/Build/Products/Release-iphoneos" -name "*.app") 
-o "$ProjectDir/$ProjectName_$Instance.ipa"

Leha ho le joalo, mokhoa ona o nkoa e le oa khale ho ea ka pono ea Apple. Ho bohlokoa ho fumana *.ipa ka ho romella kantle ho naha ho tsoa polokelong ea lits'ebetso.

Pele u lokela ho bokella archive ka taelo:

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

Phapang e teng ka mokhoa oa kopano le likhetho SYNCHRONOUS_SYMBOL_PROCESSING, e thibelang ho laolla letšoao ka nako ea kaho.

E latelang re hloka ho hlahisa faele e nang le litlhophiso tsa ho romela thepa:

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

Moo:

$Method — mokhoa oa ho tsamaisa, o tsamaellana le mofuta oa profil ea signature ea ts'ebeliso, ke hore, bakeng sa Ntlafatso boleng e tla ba nts'etsopele, bakeng sa Ad Hoc - ad-hoc, le bakeng sa App Store - app-store.

$BundleID - ID ea kopo, e boletsoeng litlhophisong tsa kopo. O ka sheba ka taelo:

defaults read $ProjectDir/Info CFBundleIdentifier

$DevAccName и $ProfileId - lebitso la moqapi le litlhophiso tsa ID tsa profil ea signature tse neng li sebelisoa pele mme li tlameha ho ts'oana le boleng ho litlhophiso tsa kantle ho naha.

$TeamID - ID ea linomoro tse leshome ka masakaneng ka mor'a lebitso la moqapi, mohlala: iPhone Developer: …… (XXXXXXXXXX); e ka hlahlojoa ho Keychain.

Ka mor'a moo, re sebelisa taelo ea ho romela thepa, re fumana faele e hlokahalang * .ipa:

xcodebuild 
-exportArchive 
-archivePath $ProjectDir/build/$ProjectName.xcarchive 
-exportPath $ProjectDir 
-exportOptionsPlist $ExportSettings

Boitsebiso ba ho romella

Hona joale faele e bokelitsoeng e hloka ho fetisetsoa ho mosebelisi oa ho qetela, ke hore, e kenngoa mochine.

Ho na le lits'ebeletso tse ngata tsa ho aba Development and Ad Hoc builds, tse kang HockeyApp, AppBlade le tse ling, empa sehloohong sena re tla bua ka seva se ikemetseng bakeng sa ho aba likopo.

Ho kenya ts'ebeliso ea iOS ho etsahala ka mekhahlelo e 'meli:

  1. Ho fumana ponahatso ea ho instola sesebelisoa ka Items Service.
  2. Ho kenya *.ipa faele ho latela lintlha tse boletsoeng ho manifest ka HTTPS.

Kahoo, re lokela ho qala ka ho hlahisa ponahalo ea ho instola (mofuta oa faele *.plist) ka taelo:

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>
EOF

Joalo ka ha u bona, manifesto e na le liparamente tsohle tse amehang ho aheng ts'ebeliso.

Mofuta oa ts'ebeliso ($AppVersion) e ka hlahlojoa ka taelo:

defaults read $ProjectDir/Info CFBundleVersion

Parameter $ipaUrl e na le sehokelo se tobileng sa ho khoasolla faele ea *.ipa. Ho tsoa ho mofuta oa bosupa oa iOS, sesebelisoa se tlameha ho kenngoa ka HTTPS. Mofuteng oa borobeli, sebopeho sa manifesto se fetohile hanyenyane: li-blocks tse nang le litlhophiso tsa litšoantšo tsa kopo joaloka

<images>
   <image>...</image>
</images>

Kahoo, ho kenya ts'ebeliso, leqephe le bonolo la HTML le sehokelo se kang sena le lekane:

itms-services://?action=download-manifest&url=https://$ServerUrl/$ProjectName/$Instance/iOS/$AppVersion/manifest.plist

Bakeng sa litlhoko tsa mafapha a nts'etsopele le liteko, Plarium e iketselitse kopo ea eona ea ho kenya mohaho, e re fang:

  • boipuso le boikemelo,
  • ho kenya letsoho taolong ea phihlello le ho kenya lits'ebetso tse bolokehileng ka lihokelo tsa "nakoana" tse entsoeng ka matla,
  • ts'ebetso e atolositsoeng (ke hore, sehlopha sa nts'etsopele, haeba ho hlokahala, se ka kopanya mesebetsi e sieo ts'ebetsong e teng).

Teko

Joale re tla bua ka tlhahlobo ea pele ea tokollo ea kopo e sebelisoang TloBella.

Maemo a hlokahalang bakeng sa ho khoasolla ke mofuta oa profaele ea signature ea App Store le boteng ba linotlolo tsa API tse entsoeng.

Ho na le mekhoa e mengata ea ho jarolla sesebelisoa:

  • ka Xcode (Mohlophisi),
  • ka altool,
  • ka Sesebelisoa sa Loader bakeng sa mefuta ea khale ea Xcode (hona joale ke Transporter).

Bakeng sa ho jarolla ka bohona, ho sebelisoa altool, e nang le mekhoa e 'meli ea tumello:

  • Password e khethehileng ea App,
  • Senotlolo sa API.

Ho molemo ho khoasolla sesebelisoa u sebelisa senotlolo sa API.

Ho fumana Senotlolo sa API, ea ho kgokahanyo le ho hlahisa senotlolo. Ho phaella ho senotlolo ka boeona ka mokhoa oa *.p8, re tla hloka li-parameter tse peli: IssuerID le KeyID.

Likarolo tsa ho aha le ho tsamaisa lits'ebetso tsa iOS

E latelang, kenya senotlolo se jarollotsoeng ho seva sa moaho:

mkdir -p ~/.appstoreconnect/private_keys
mv ~/Downloads/AuthKey_${KeyID}.p8 ~/.appstoreconnect/private_keys/

Pele o kenya kopo ho TestFlight, o hloka ho netefatsa kopo, re etsa sena ka taelo:

xcrun altool 
--validate-app 
-t ios 
-f $(find "$ProjectDir" -name "*.ipa") 
--apiKey “$KeyID” 
--apiIssuer “$IssuerID” 

Moo apiKey и apiIssuer e na le boleng ba tšimo ho tsoa leqepheng la tlhahiso ea senotlolo sa API.

Ka mor'a moo, ha ho netefatsoa ka katleho, re kenya kopo ka taelo --upload-app ka liparamente tse tšoanang.

Sesebelisoa se tla lekoa ke Apple nakong ea letsatsi le le leng kapa a mabeli 'me e tla fumaneha ho bahlahlobi ba kantle: ba tla romelloa lihokelo tsa lengolo-tsoibila bakeng sa ho kengoa.

Tsela e 'ngoe ea ho khoasolla sesebelisoa ka altool ke ho sebelisa Password-Specific Password.

Ho fumana Password-Specific Password u lokela ho ea ho eona kgokahanyo mme o e hlahise karolong ya Tshireletso.

Likarolo tsa ho aha le ho tsamaisa lits'ebetso tsa iOS

E latelang, o lokela ho theha rekoto ea seva ho Keychain ka password ena. Ho tsoa ho mofuta oa 11 oa Xcode sena se ka etsoa ka taelo:

xcrun altool --store-password-in-keychain-item "Altool" -u "$DeveloperName" -p $AppPswd

Moo:

$DeveloperName — lebitso la ak'haonte ea moetsi oa iOS e sebelisoang ho kena lits'ebeletso tsa Apple.

$AppPswd — e hlahisitswe App-Specific Password.

Ka mor'a moo, re fumana boleng ba parameter ea asc-provider mme re hlahloba katleho ea ho kenya phasewete ka taelo:

xcrun altool --list-providers -u "$DeveloperName" -p "@keychain:Altool"

Re fumana tlhahiso:

Provider listing:
- Long Name - - Short Name -
XXXXXXX        XXXXXXXXX

Joalo ka ha u bona, boleng bo hlokahalang ba Lebitso le Lekhutšoane (asc-provider) bo tsamaellana le paramente ea $TeamID eo re e sebelisitseng ha re theha kopo.

Ho netefatsa le ho kenya ts'ebeliso ho TestFlight, sebelisa taelo:

xcrun altool 
--(validate|upload)-app   
-f $(find "$ProjectDir" -name "*.ipa") 
-u "$DeveloperName" 
-p "@keychain:Altool" 

E le boleng ba parameter -p o ka nka boleng $AppPswd ka mokhoa o sa ngolisoang (o hlakileng).

Leha ho le joalo, joalokaha ho se ho boletsoe, ho ea ka pono ea ts'ebetso, ho molemo ho khetha API Key bakeng sa tumello ea altool, kaha mefuta e fapaneng ea Xcode e na le mathata a itseng ("ha e bone" Keychain, liphoso tsa tumello nakong ea ho kenya, joalo-joalo).

Ke phetho, hantle-ntle. Ke lakatsa eka bohle ba amehang kaho e atlehileng le litokollo tse se nang mathata Lebenkeleng la App.

Source: www.habr.com

Eketsa ka tlhaloso