iOS aplikazioak eraikitzeko eta entregatzeko ezaugarriak

Artikulu honetan, erabiltzaileei iOS aplikazioak muntatu eta entregatzeko esperientzia partekatzen dugu, Plarium Krasnodar estudioak CI/CD arazketa prozesuan pilatu duena.

iOS aplikazioak eraikitzeko eta entregatzeko ezaugarriak

Prestakuntza

Apple gailuetarako aplikazioen garapenean modu batean edo bestean parte hartzen duen pertsona guztiek baloratu dute dagoeneko azpiegituraren erosotasun eztabaidagarria. Zailtasunak nonahi aurkitzen dira: garatzaileen profilaren menutik hasi eta arazketa eta eraikitze tresnetara.

Interneten "oinarrizkoei" buruzko artikulu ugari daude, beraz, gauza nagusia nabarmentzen saiatuko gara. Hona hemen zure aplikazioa behar bezala eraikitzeko behar duzuna:

  • garatzaileen kontua;
  • macOS-en oinarritutako gailu bat eraikitze-zerbitzari gisa jarduten duena;
  • sortu garatzaileen ziurtagiria, eskaera sinatzeko gehiago erabiliko dena;
  • bakarrarekin sortutako aplikazioa ID (Kontuan izan behar da Bundle Identifier-aren garrantzia, komodinaren IDa erabiltzeak ezinezko egiten baitu aplikazioaren funtzio asko erabiltzea, adibidez: Domeinu elkartuak, Push jakinarazpenak, Apple Saioa hasi eta beste batzuk);
  • profila aplikazioaren sinadurak.

Garatzaile-ziurtagiria Keychain bidez sortu behar da edozein macOS gailutan. Ziurtagiri mota oso garrantzitsua da. Aplikazio-ingurunearen arabera (Dev, QA, Staging, Production) desberdina izango da (Garapena edo Banaketa), baita aplikazioaren sinadura profil mota ere.

Profil mota nagusiak:

  • Garapena - garapen-taldearen aplikazioa sinatzeko xedea, Garapen-ziurtagiria erabiltzen da (iPhone Developer izena: XXXXX);
  • Ad Hoc - QA sailak proba-aplikazio bat sinatzeko eta barne egiaztapena egiteko pentsatuta, garatzailearen Banaketa-ziurtagiria erabiltzen da (mota izena iPhone Banaketa: XXXXX);
  • App Store - askatu TestFlight bidez kanpoko probak egiteko eta App Storera kargatzeko, garatzailearen Banaketa ziurtagiria erabiltzen da.

Garapena eta Ad Hoc profilak sortzerakoan ere adierazten da gailuen zerrenda, zeinean eraiki dezakezun, erabiltzaileen sarbidea gehiago mugatzeko aukera ematen duena. App Store profilean ez dago gailuen zerrendarik, beta proba itxietan sarbide-kontrola TestFlight-k kudeatzen baitu, geroago aztertuko dena.

Argitasuna lortzeko, garatzailearen profila aurkez dezakezu beheko taula baten moduan. Horri esker, errazago uler daiteke zein parametro behar ditugun muntatzeko eta nondik lortu.

iOS aplikazioak eraikitzeko eta entregatzeko ezaugarriak

muntaia

Asanbladak proiektuaren eta ingurunearen arabera bereiztea errazteko, bezalako profil izenak erabiltzen ditugu ${ProjectName}_${Instance}, hau da, proiektuaren izena + instantzia (aplikazio-ingurunearen araberakoa da: Dev, QA, GD, Staging, Live, eta abar).

Eraikitze-zerbitzarira inportatzen denean, profilak bere izena ID esklusibo batera aldatzen du eta karpetara eramaten da /Users/$Username/Library/MobileDevice/Provisioning Profiles (Non $Username eraikuntza zerbitzariaren erabiltzaile-kontuaren izenari dagokio).

*.ipa fitxategi bat eraikitzeko bi modu daude: ondarea (PackageApplication) eta modernoa (XcAchive sortu eta esportatu bidez). Lehen metodoa zaharkitutzat jotzen da, 8.3 bertsioaz geroztik aplikazioaren fitxategien paketearen modulua Xcode banaketatik kendu baita. Erabiltzeko, Xcode zaharretik (8.2 bertsioa eta aurrekoak) modulua kopiatu behar duzu karpetara:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/

Eta gero exekutatu komandoa:

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

Ondoren, aplikazioaren *.app fitxategia bildu behar duzu:

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

Non:

-workspace — proiektuaren fitxategirako bidea.

-scheme — erabilitako eskema, proiektuan zehaztuta.

-derivedDataPath — muntatutako aplikazioa deskargatzeko bidea (*.app).

CODE_SIGN_IDENTITY — Garatzaile-kontuaren izena, Giltza-katean egiazta daitekeena (iPhone garatzailea: XXXX XXXXXXX, TeamID gabe parentesi artean).

iOS aplikazioak eraikitzeko eta entregatzeko ezaugarriak

PROVISIONING_PROFILE — Aplikazioa sinatzeko profilaren IDa, komandoarekin lor daitekeena:

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

Aplikazioak profil gehigarri bat erabiltzen badu (adibidez, Push Jakinarazpenetarako), orduan ordez PROVISIONING_PROFILE adierazi:

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

Ondoren, sortzen den *.app fitxategia *.ipa-n paketatu behar da. Horretarako, honelako komando bat erabil dezakezu:

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

Hala ere, metodo hau zaharkitutzat jotzen da Appleren ikuspuntutik. Garrantzitsua da *.ipa lortzea aplikazioaren artxibotik esportatuz.

Lehenik eta behin artxiboa bildu behar duzu komandoarekin:

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

Desberdintasunak muntaketa metodoan eta aukeretan daude SYNCHRONOUS_SYMBOL_PROCESSING, sinboloen deskarga desgaitzen duena eraikuntza garaian.

Ondoren, esportazio ezarpenekin fitxategi bat sortu behar dugu:

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

Non:

$Method — entrega-metodoa, aplikazioaren sinadura profil motari dagokio, hau da, Garapenerako balioa garapena izango da, Ad Hoc - ad-hoc eta App Store - app-store.

$BundleID — Aplikazioaren IDa, aplikazioaren ezarpenetan zehazten dena. Komandoarekin egiaztatu dezakezu:

defaults read $ProjectDir/Info CFBundleIdentifier

$DevAccName и $ProfileId — Garatzaile-izena eta sinadura-profilaren ID ezarpenak, aurretik erabili ziren eta esportazio-ezarpenetako balioekin bat etorri behar dute.

$TeamID — hamar zifrako IDa garatzailearen izenaren ondoren parentesi artean, adibidez: iPhone Garatzailea: …… (XXXXXXXXXX); Keychain-en egiaztatu daiteke.

Ondoren, esportazio komandoa erabiliz, beharrezko *.ipa fitxategia lortuko dugu:

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

Доставка

Orain bildutako fitxategia azken erabiltzaileari entregatu behar zaio, hau da, gailuan instalatu.

Garapen eta Ad Hoc eraikuntzak banatzeko zerbitzu asko daude, hala nola HockeyApp, AppBlade eta beste batzuk, baina artikulu honetan aplikazioak banatzeko zerbitzari autonomo bati buruz hitz egingo dugu.

iOS-erako aplikazioa instalatzea 2 fasetan egiten da:

  1. Aplikazioaren instalazioaren manifestua Items Zerbitzuaren bidez jasotzea.
  2. *.ipa fitxategia HTTPS bidez manifestuan zehaztutako informazioaren arabera instalatzea.

Horrela, lehenik instalazioaren manifestua sortu behar dugu (fitxategi mota *.plist) komandoarekin:

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

Ikus dezakezunez, manifestuak aplikazioa eraikitzeko parte hartzen duten ia parametro guztiak ditu.

Aplikazioaren bertsioa ($AppVersion) komandoarekin egiaztatu daiteke:

defaults read $ProjectDir/Info CFBundleVersion

Parametroa $ipaUrl *.ipa fitxategia deskargatzeko esteka zuzena dauka. iOS-en zazpigarren bertsiotik aurrera, aplikazioa HTTPS bidez instalatu behar da. Zortzigarren bertsioan, manifestuaren formatua zertxobait aldatu da: aplikazioen ikonoen ezarpenak dituzten blokeak.

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

Horrela, aplikazioa instalatzeko, nahikoa da HTML orrialde sinple bat honelako esteka batekin:

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

Garapen eta proba sailen beharretarako, Plarium-ek bere eraikuntza-instalazio-aplikazioa sortu du, honek ematen diguna:

  • autonomia eta independentzia,
  • sarbide-kontrolaren zentralizazioa eta aplikazioen instalazio segurua dinamikoki sortutako "aldi baterako" esteken bidez,
  • funtzionalitate hedagarria (hau da, garapen-taldeak, behar izanez gero, falta diren funtzioak lehendik dagoen aplikazio batean integra ditzake).

Testing

Orain aplikazioaren bertsio-aurreko probak erabiliz hitz egingo dugu TestFlight.

Deskargatzeko beharrezkoak diren baldintzak App Store sinadura profil mota eta sortutako API gakoen presentzia dira.

Aplikazioa deskargatzeko hainbat modu daude:

  • Xcode bidez (Antolatzailea),
  • altool bidez,
  • Xcode-ren (orain Transporter) bertsio zaharragoetarako Aplikazio Loader bidez.

Deskarga automatikorako, altool erabiltzen da, bi baimen-metodo ere baditu:

  • Aplikazioaren pasahitz espezifikoa,
  • API gakoa.

Hobe da aplikazioa deskargatzea API gakoa erabiliz.

API gakoa lortzeko, joan hona link eta gako bat sortu. *.p8 formatuan dagoen gakoa beraz gain, bi parametro beharko ditugu: IssuerID eta KeyID.

iOS aplikazioak eraikitzeko eta entregatzeko ezaugarriak

Ondoren, inportatu deskargatutako gakoa eraikuntza zerbitzarira:

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

Aplikazioa TestFlight-era igo aurretik, aplikazioa balioztatu behar duzu, hau komandoarekin egiten dugu:

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

non apiKey и apiIssuer izan eremu-balioak API gakoak sortzeko orrialdetik.

Ondoren, baliozkotze arrakastatsuan, aplikazioa komandoarekin kargatuko dugu --upload-app parametro berdinekin.

Aplikazioa Applek egun batean edo bitan probatuko du eta, ondoren, kanpoko probatzaileentzako eskuragarri egongo da: posta elektronikoz instalatzeko estekak bidaliko zaizkie.

Altool bidez aplikazio bat deskargatzeko beste modu bat aplikazioaren pasahitz espezifikoa erabiltzea da.

Aplikazioaren pasahitz zehatza lortzeko, joan behar duzu link eta sortu Segurtasuna atalean.

iOS aplikazioak eraikitzeko eta entregatzeko ezaugarriak

Ondoren, eraikitze-zerbitzariaren erregistro bat sortu beharko zenuke Keychain-en pasahitz honekin. Xcode-ren 11. bertsiotik hau komandoarekin egin daiteke:

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

Non:

$DeveloperName — Apple zerbitzuetan saioa hasteko erabilitako iOS garatzailearen kontuaren izena.

$AppPswd — sortutako aplikazioaren pasahitz espezifikoa.

Ondoren, asc-provider parametroaren balioa lortuko dugu eta pasahitz inportazioaren arrakasta egiaztatuko dugu komandoarekin:

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

Irteera lortzen dugu:

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

Ikus dezakezun bezala, behar den izen laburren balioa (asc-provider) bat dator aplikazioa eraikitzerakoan erabili genuen $TeamID parametroarekin.

Aplikazioa TestFlight-n balioztatzeko eta kargatzeko, erabili komandoa:

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

Parametro-balio gisa -p balioa har dezakezu $AppPswd zifratu gabeko forman (esplizituan).

Hala ere, lehen esan bezala, errendimenduaren ikuspuntutik, hobe da altool baimentzeko API gakoa hautatzea, Xcode-ren bertsio ezberdinek arazo batzuk baitituzte (“ez du ikusten” Giltza-katea, kargatzerakoan baimen-akatsak, etab.).

Hori da guztia, egia esan. Parte hartzen duten guztiei aplikazio arrakastatsuak eta arazorik gabeko bertsioak opa ditut App Store-n.

Iturria: www.habr.com

Gehitu iruzkin berria