Eiginleikar þess að smíða og afhenda iOS forrit

Í þessari grein deilum við reynslunni af því að setja saman og afhenda notendum iOS forrit, sem Plarium Krasnodar stúdíóið hefur safnað í ferlinu við að kemba CI/CD.

Eiginleikar þess að smíða og afhenda iOS forrit

Þjálfun

Sérhver einstaklingur sem á einn eða annan hátt tekur þátt í þróun forrita fyrir Apple tæki hefur þegar metið hin umdeildu þægindi innviðanna. Erfiðleikar finnast alls staðar: frá prófílvalmynd þróunaraðila til villuleitar og smíðaverkfæra.

Það eru fullt af greinum um „grunnatriði“ á netinu, svo við munum reyna að draga fram það helsta. Hér er það sem þú þarft til að byggja upp forritið þitt með góðum árangri:

  • reikningur þróunaraðila;
  • macOS byggt tæki sem virkar sem smíðaþjónn;
  • myndast vottorð þróunaraðila, sem verður frekar notað til að undirrita umsóknina;
  • búið til forrit með einstökum ID (Athuga skal mikilvægi búntaauðkennisins, vegna þess að notkun algildisauðkennis gerir það ómögulegt að nota margar aðgerðir forritsins, til dæmis: tengd lén, ýtt tilkynningar, Apple innskráningu og fleira);
  • uppsetningu undirskrift umsókna.

Framleiðsluvottorð verður að búa til með lyklakippu á hvaða macOS tæki sem er. Tegund vottorðs er mjög mikilvægt. Það fer eftir umsóknarumhverfinu (Dev, QA, Staging, Production) það mun vera mismunandi (þróun eða dreifing), sem og tegund undirskriftarsniðs forrits.

Helstu tegundir prófíla:

  • Þróun - ætlað til að undirrita umsókn þróunarteymisins, þróunarvottorð er notað (tegundarheiti iPhone Developer: XXXXX);
  • Ad Hoc - ætlað til að undirrita prófunarforrit og innri sannprófun af QA deild, dreifingarvottorð þróunaraðila er notað (tegundarheiti iPhone Distribution: XXXXX);
  • App Store - slepptu smíði fyrir ytri prófun í gegnum TestFlight og upphleðslu í App Store, dreifingarvottorð þróunaraðila er notað.

Þegar búið er til þróunar- og ad hoc prófíla er það einnig gefið til kynna tækjalista, þar sem þú getur sett upp byggingu sem gerir þér kleift að takmarka aðgang notenda enn frekar. Það er enginn listi yfir tæki í App Store prófílnum, þar sem aðgangsstýring á lokuðum beta prófun er meðhöndluð af TestFlight, sem verður fjallað um síðar.

Til glöggvunar geturðu kynnt prófíl þróunaraðila í formi töflu hér að neðan. Þetta gerir það auðveldara að skilja hvaða færibreytur við þurfum fyrir samsetningu og hvaðan á að fá þær.

Eiginleikar þess að smíða og afhenda iOS forrit

Þing

Til að gera það auðveldara að aðgreina samsetningar eftir verkefnum og umhverfi notum við prófílnöfn eins og ${ProjectName}_${Instance}, það er nafn verkefnis + tilvik (fer eftir umsóknarumhverfi: Dev, QA, GD, Staging, Live, og svo framvegis).

Þegar það er flutt inn á byggingarþjóninn breytir prófíllinn nafni sínu í einstakt auðkenni og er fært í möppuna /Users/$Username/Library/MobileDevice/Provisioning Profiles (Hvar $Username samsvarar nafni notandareiknings byggingarþjónsins).

Það eru tvær leiðir til að búa til *.ipa skrá - arfleifð (PackageApplication) og nútímaleg (í gegnum XcAchive sköpun og útflutning). Fyrsta aðferðin er talin úrelt, þar sem frá útgáfu 8.3 hefur app skráarpakkningareiningin verið fjarlægð úr Xcode dreifingunni. Til að nota það þarftu að afrita eininguna úr gamla Xcode (útgáfa 8.2 og eldri) í möppuna:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/

Og keyrðu síðan skipunina:

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

Næst þarftu að safna *.app skránni af forritinu:

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

Hvar:

-workspace — slóð að verkefnaskránni.

-scheme — kerfið sem notað er, tilgreint í verkefninu.

-derivedDataPath — slóð til að hlaða niður samsettu forriti (*.app).

CODE_SIGN_IDENTITY — nafn þróunarreiknings, sem hægt er að staðfesta í lyklakippu (iPhone forritari: XXXX XXXXXXX, án TeamID innan sviga).

Eiginleikar þess að smíða og afhenda iOS forrit

PROVISIONING_PROFILE — Auðkenni sniðs til að undirrita umsóknina, sem hægt er að fá með skipuninni:

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

Ef forritið notar viðbótarsnið (til dæmis fyrir Push Notifications), þá í staðinn fyrir PROVISIONING_PROFILE gefa til kynna:

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

Næst ætti að pakka *.app skránni sem myndast í *.ipa. Til að gera þetta geturðu notað skipun eins og:

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

Hins vegar er þessi aðferð talin úrelt frá sjónarhóli Apple. Það skiptir máli að fá *.ipa með því að flytja út úr umsóknasafninu.

Fyrst þarftu að safna skjalasafninu með skipuninni:

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

Munurinn liggur í samsetningaraðferðinni og valkostunum SYNCHRONOUS_SYMBOL_PROCESSING, sem slekkur á affermingu tákns á byggingartíma.

Næst þurfum við að búa til skrá með útflutningsstillingum:

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

Hvar:

$Method — afhendingaraðferð, samsvarar gerð forrits undirskriftarsniðs, það er, fyrir þróun verður gildið þróun, fyrir Ad Hoc - ad-hoc og fyrir App Store - app-store.

$BundleID — Auðkenni forrits, sem er tilgreint í stillingum forritsins. Þú getur athugað með skipuninni:

defaults read $ProjectDir/Info CFBundleIdentifier

$DevAccName и $ProfileId — nafn þróunaraðila og auðkenni undirskriftarsniðs sem voru notaðar áður og verða að passa við gildin í útflutningsstillingunum.

$TeamID — tíu stafa auðkenni í sviga á eftir nafni þróunaraðila, dæmi: iPhone þróunaraðili: …… (XXXXXXXXXX); hægt að athuga í Keychain.

Næst, með því að nota útflutningsskipunina, fáum við nauðsynlega *.ipa skrá:

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

Afhending

Nú þarf að afhenda söfnuðu skránni til endanotanda, það er að segja uppsett á tækinu.

Það eru margar þjónustur til að dreifa þróunar- og ad hoc-byggingum, svo sem HockeyApp, AppBlade og fleiri, en í þessari grein munum við tala um sjálfstæðan netþjón til að dreifa forritum.

Uppsetning forritsins fyrir iOS fer fram í 2 áföngum:

  1. Að fá uppsetningarskrá forritsins í gegnum Items Service.
  2. Uppsetning á *.ipa skránni í samræmi við upplýsingarnar sem tilgreindar eru í upplýsingaskránni í gegnum HTTPS.

Þannig þurfum við fyrst að búa til uppsetningarskrá (skráartegund *.plist) með skipuninni:

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

Eins og þú sérð inniheldur upplýsingaskráin næstum allar breytur sem taka þátt í að byggja upp forritið.

Forritsútgáfa ($AppVersion) er hægt að athuga með skipuninni:

defaults read $ProjectDir/Info CFBundleVersion

Viðfang $ipaUrl inniheldur beinan hlekk til að hlaða niður *.ipa skránni. Frá sjöundu útgáfu af iOS verður að setja upp forritið í gegnum HTTPS. Í áttundu útgáfunni hefur snið upplýsingaskrárinnar breyst lítillega: blokkir með stillingum fyrir forritatákn eins og

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

Þannig að til að setja upp forritið nægir einföld HTML síða með tengli eins og þessum:

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

Fyrir þarfir þróunar- og prófunardeildanna hefur Plarium búið til sitt eigið uppsetningarforrit sem gefur okkur:

  • sjálfræði og sjálfstæði,
  • miðstýring aðgangsstýringar og örugga uppsetningu forrita með „tímabundnum“ kröftugum tenglum,
  • stækkanleg virkni (þ.e. þróunarteymið, ef nauðsyn krefur, getur samþætt aðgerðir sem vantar í núverandi forrit).

Prófun

Nú munum við tala um forútgáfuprófun á forritinu með því að nota TestFlight.

Áskilin skilyrði fyrir niðurhali eru gerð App Store undirskriftarsniðs og tilvist myndaða API lykla.

Það eru nokkrar leiðir til að hlaða niður forritinu:

  • í gegnum Xcode (Organizer),
  • í gegnum altool,
  • í gegnum Application Loader fyrir eldri útgáfur af Xcode (nú Transporter).

Fyrir sjálfvirkt niðurhal er altool notað, sem einnig hefur tvær heimildaraðferðir:

  • Appsértækt lykilorð,
  • API lykill.

Æskilegt er að hlaða niður forritinu með því að nota API lykilinn.

Til að fá API lykilinn skaltu fara á tengill og búa til lykil. Til viðbótar við lykilinn sjálfan á *.p8 sniði, þurfum við tvær breytur: IssuerID og KeyID.

Eiginleikar þess að smíða og afhenda iOS forrit

Næst skaltu flytja inn niðurhalaða lykilinn á byggingarþjóninn:

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

Áður en þú hleður forritinu upp á TestFlight þarftu að staðfesta forritið, við gerum þetta með skipuninni:

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

Hvar apiKey и apiIssuer hafa svæðisgildi frá API lyklamyndunarsíðunni.

Næst, eftir árangursríka staðfestingu, hleðum við forritinu með skipuninni --upload-app með sömu breytur.

Forritið verður prófað af Apple innan eins eða tveggja daga og verður þá aðgengilegt utanaðkomandi prófunaraðilum: þeir fá sent hlekki í tölvupósti til uppsetningar.

Önnur leið til að hlaða niður forriti í gegnum altool er að nota App-Specific Password.

Til að fá app-sértæka lykilorðið sem þú þarft að fara á tengill og búa til það í öryggishlutanum.

Eiginleikar þess að smíða og afhenda iOS forrit

Næst ættirðu að búa til gagnagrunnsskrá í Keychain með þessu lykilorði. Frá útgáfu 11 af Xcode er hægt að gera þetta með skipuninni:

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

Hvar:

$DeveloperName — heiti iOS þróunarreiknings sem notaður er til að skrá sig inn á þjónustu Apple.

$AppPswd — búið til app-sérstakt lykilorð.

Næst fáum við gildi asc-provider færibreytunnar og athugum árangur innflutnings lykilorðs með skipuninni:

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

Við fáum úttakið:

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

Eins og þú sérð fellur tilskilið Short Name gildi (asc-provider) saman við $TeamID færibreytuna sem við notuðum við smíði forritsins.

Til að staðfesta og hlaða forritinu inn í TestFlight, notaðu skipunina:

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

Sem færibreytugildi -p þú getur tekið gildi $AppPswd í ódulkóðuðu (skýrri) formi.

Hins vegar, eins og áður hefur verið nefnt, frá sjónarhóli frammistöðu, er betra að velja API lykil fyrir altool heimild, þar sem mismunandi útgáfur af Xcode hafa ákveðin vandamál („sér ekki“ lyklakippu, heimildarvillur við upphleðslu osfrv.).

Það er allt, reyndar. Ég óska ​​öllum sem taka þátt í farsælum smíðum og vandræðalausum útgáfum í App Store.

Heimild: www.habr.com

Bæta við athugasemd