iOS lietojumprogrammu izveides un piegādes iespējas

Å ajā rakstā mēs dalāmies pieredzē par iOS aplikāciju komplektÄ“Å”anu un piegādi lietotājiem, ko Plarium Krasnodar studija ir uzkrājusi CI/CD atkļūdoÅ”anas procesā.

iOS lietojumprogrammu izveides un piegādes iespējas

TreniņŔ

Katrs cilvēks, kurÅ” tā vai citādi ir iesaistÄ«ts Apple ierīču aplikāciju izstrādē, jau ir novērtējis strÄ«dÄ«go infrastruktÅ«ras ērtÄ«bas. GrÅ«tÄ«bas ir sastopamas visur: no izstrādātāja profila izvēlnes lÄ«dz atkļūdoÅ”anas un veidoÅ”anas rÄ«kiem.

Internetā ir daudz rakstu par ā€œpamatiemā€, tāpēc mēs centÄ«simies izcelt galveno. LÅ«k, kas jums nepiecieÅ”ams, lai veiksmÄ«gi izveidotu lietojumprogrammu:

  • izstrādātāja konts;
  • uz macOS balstÄ«ta ierÄ«ce, kas darbojas kā bÅ«vÄ“Å”anas serveris;
  • radÄ«ts izstrādātāja sertifikāts, kas turpmāk tiks izmantota pieteikuma parakstÄ«Å”anai;
  • izveidota lietojumprogramma ar unikālu ID (jāpiezÄ«mē Bundle Identifier nozÄ«me, jo aizstājējzÄ«mju ID izmantoÅ”ana padara neiespējamu izmantot daudzas aplikācijas funkcijas, piemēram: Associated Domains, Push Notifications, Apple Sign In un citas);
  • profils pieteikuma paraksti.

Izstrādātāja sertifikāts ir jāģenerē, izmantojot Keychain jebkurā macOS ierÄ«cē. Sertifikāta veids ir ļoti svarÄ«gs. AtkarÄ«bā no lietojumprogrammas vides (izstrādātājs, kvalitātes nodroÅ”ināŔana, stadija, ražoÅ”ana) tā atŔķirsies (izstrāde vai izplatÄ«Å”ana), kā arÄ« lietojumprogrammas paraksta profila veids.

Galvenie profilu veidi:

  • Izstrāde - paredzēta izstrādes komandas pieteikuma parakstÄ«Å”anai, tiek izmantots Izstrādes sertifikāts (tipa nosaukums iPhone Developer: XXXXX);
  • Ad Hoc - paredzēts testa lietojumprogrammas parakstÄ«Å”anai un iekŔējai pārbaudei, ko veic kvalitātes nodroÅ”ināŔanas nodaļa, tiek izmantots izstrādātāja Distribution sertifikāts (tipa nosaukums iPhone Distribution: XXXXX);
  • App Store ā€” izlaidums ārējai testÄ“Å”anai, izmantojot TestFlight, un augÅ”upielādei App Store, tiek izmantots izstrādātāja izplatÄ«Å”anas sertifikāts.

Veidojot izstrādes un Ad Hoc profilus, tas arÄ« tiek norādÄ«ts ierīču saraksts, kurā varat instalēt bÅ«vējumu, kas ļauj vēl vairāk ierobežot lietotāju piekļuvi. App Store profilā nav ierīču saraksta, jo piekļuves kontroli slēgtās beta testÄ“Å”anas laikā veic TestFlight, kas tiks apspriests vēlāk.

SkaidrÄ«bas labad tālāk esoŔās tabulas veidā varat parādÄ«t izstrādātāja profilu. Tādējādi ir vieglāk saprast, kādi parametri mums nepiecieÅ”ami montāžai un no kurienes tos iegÅ«t.

iOS lietojumprogrammu izveides un piegādes iespējas

Montāža

Lai atvieglotu montāžas atdalÄ«Å”anu pēc projekta un vides, mēs izmantojam profilu nosaukumus, piemēram ${ProjectName}_${Instance}, tas ir, projekta nosaukums + gadÄ«jums (atkarÄ«gs no lietojumprogrammas vides: Dev, QA, GD, Staging, Live un tā tālāk).

Kad profils tiek importēts bÅ«vÄ“Å”anas serverÄ«, tā nosaukums tiek mainÄ«ts uz unikālu ID un tiek pārvietots uz mapi /Users/$Username/Library/MobileDevice/Provisioning Profiles (kur $Username atbilst bÅ«vÄ“Å”anas servera lietotāja konta nosaukumam).

Ir divi veidi, kā izveidot *.ipa failu ā€“ mantojums (PackageApplication) un moderns (izmantojot XcAchive izveidi un eksportÄ“Å”anu). Pirmā metode tiek uzskatÄ«ta par novecojuÅ”u, jo kopÅ” versijas 8.3 lietotņu failu iepakojuma modulis ir noņemts no Xcode izplatÄ«Å”anas. Lai to izmantotu, modulis ir jākopē no vecā Xcode (versija 8.2 un vecāka) uz mapi:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/

Un pēc tam palaidiet komandu:

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

Tālāk jums ir jāapkopo lietojumprogrammas *.app fails:

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

Kur:

-workspace ā€” ceļŔ uz projekta failu.

-scheme ā€” projektā norādÄ«tā izmantotā shēma.

-derivedDataPath ā€” ceļŔ, lai lejupielādētu salikto lietojumprogrammu (*.app).

CODE_SIGN_IDENTITY ā€” izstrādātāja konta nosaukums, ko var verificēt Keychain (iPhone izstrādātājs: XXXX XXXXXXX, bez TeamID iekavās).

iOS lietojumprogrammu izveides un piegādes iespējas

PROVISIONING_PROFILE ā€” Profila ID pieteikuma parakstÄ«Å”anai, ko var iegÅ«t ar komandu:

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

Ja lietojumprogramma izmanto papildu profilu (piemēram, Push Notifications), tad tā vietā PROVISIONING_PROFILE norādīt:

APP_PROFILE=ā€$AppProfileā€ 
EXTENSION_PROFILE=ā€$ExtProfileā€ 

Pēc tam iegÅ«tais *.app fails ir jāiepako failā *.ipa. Lai to izdarÄ«tu, varat izmantot Ŕādu komandu:

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

Tomēr Ŕī metode tiek uzskatÄ«ta par novecojuÅ”u no Apple viedokļa. Aktuāli ir iegÅ«t *.ipa, eksportējot no lietojumprogrammu arhÄ«va.

Vispirms jums ir jāsavāc arhīvs ar komandu:

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

AtŔķirÄ«bas slēpjas montāžas metodē un opcijās SYNCHRONOUS_SYMBOL_PROCESSING, kas atspējo simbolu izkrauÅ”anu izveides laikā.

Tālāk mums ir jāģenerē fails ar eksporta iestatījumiem:

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

Kur:

$Method ā€” piegādes metode atbilst lietojumprogrammas paraksta profila tipam, tas ir, izstrādei vērtÄ«ba bÅ«s izstrāde, Ad Hoc - ad-hoc un App Store - lietotņu veikals.

$BundleID ā€” Lietojumprogrammas ID, kas norādÄ«ts programmas iestatÄ«jumos. To var pārbaudÄ«t ar komandu:

defaults read $ProjectDir/Info CFBundleIdentifier

$DevAccName Šø $ProfileId ā€” izstrādātāja vārda un paraksta profila ID iestatÄ«jumi, kas tika izmantoti iepriekÅ”, un tiem jāatbilst eksporta iestatÄ«jumu vērtÄ«bām.

$TeamID ā€” desmit ciparu ID iekavās aiz izstrādātāja vārda, piemēram: iPhone Developer: ā€¦ā€¦ (XXXXXXXXXX); var pārbaudÄ«t Keychain.

Tālāk, izmantojot eksporta komandu, mēs iegÅ«stam nepiecieÅ”amo *.ipa failu:

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

Piegāde

Tagad savāktais fails ir jānogādā gala lietotājam, tas ir, jāinstalē ierīcē.

AttÄ«stÄ«bas un Ad Hoc bÅ«vējumu izplatÄ«Å”anai ir daudz pakalpojumu, piemēram, HockeyApp, AppBlade un citi, taču Å”ajā rakstā mēs runāsim par atseviŔķu serveri lietojumprogrammu izplatÄ«Å”anai.

Lietojumprogrammas instalÄ“Å”ana operētājsistēmai iOS notiek 2 posmos:

  1. Lietojumprogrammas instalÄ“Å”anas manifesta saņemÅ”ana, izmantojot vienumu pakalpojumu.
  2. *.ipa faila instalÄ“Å”ana saskaņā ar manifestā norādÄ«to informāciju, izmantojot HTTPS.

Tādējādi mums vispirms ir jāģenerē instalācijas manifests (faila tips *.plist) ar komandu:

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

Kā redzat, manifestā ir gandrīz visi parametri, kas saistīti ar lietojumprogrammas izveidi.

Lietojumprogrammas versija ($AppVersion) var pārbaudīt ar komandu:

defaults read $ProjectDir/Info CFBundleVersion

Parametrs $ipaUrl satur tieÅ”u saiti *.ipa faila lejupielādei. Sākot ar septÄ«to iOS versiju, lietojumprogramma jāinstalē, izmantojot HTTPS. Astotajā versijā manifesta formāts ir nedaudz mainÄ«jies: bloki ar iestatÄ«jumiem lietojumprogrammu ikonām, piemēram

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

Tādējādi, lai instalētu lietojumprogrammu, pietiek ar vienkārÅ”u HTML lapu ar Ŕādu saiti:

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

Izstrādes un testÄ“Å”anas nodaļu vajadzÄ«bām Plarium ir izveidojis savu bÅ«vinstalācijas lietojumprogrammu, kas sniedz mums:

  • autonomija un neatkarÄ«ba,
  • piekļuves kontroles centralizācija un droÅ”a lietojumprogrammu instalÄ“Å”ana, izmantojot ā€œpagaiduā€ dinamiski izveidotas saites,
  • paplaÅ”ināma funkcionalitāte (tas ir, izstrādes komanda, ja nepiecieÅ”ams, var integrēt trÅ«kstoŔās funkcijas esoÅ”ajā lietojumprogrammā).

TestēŔana

Tagad mēs runāsim par lietojumprogrammas pirmsizlaides testÄ“Å”anu, izmantojot TestFlight.

NepiecieÅ”amie lejupielādes nosacÄ«jumi ir App Store paraksta profila veids un Ä£enerēto API atslēgu klātbÅ«tne.

Ir vairāki veidi, kā lejupielādēt lietojumprogrammu:

  • izmantojot Xcode (organizatoru),
  • izmantojot altool,
  • izmantojot Application Loader vecākām Xcode versijām (tagad Transporter).

Automātiskajai lejupielādei tiek izmantots altool, kuram ir arī divas autorizācijas metodes:

  • Lietotnei specifiska parole,
  • API atslēga.

Ieteicams lejupielādēt lietojumprogrammu, izmantojot API atslēgu.

Lai iegÅ«tu API atslēgu, dodieties uz saite un Ä£enerēt atslēgu. Papildus paÅ”ai atslēgai *.p8 formātā mums bÅ«s nepiecieÅ”ami divi parametri: IssuerID un KeyID.

iOS lietojumprogrammu izveides un piegādes iespējas

Pēc tam importējiet lejupielādēto atslēgu bÅ«vÄ“Å”anas serverÄ«:

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

Pirms lietojumprogrammas augÅ”upielādes TestFlight, jums ir jāvalidē lietojumprogramma, mēs to darām ar komandu:

xcrun altool 
--validate-app 
-t ios 
-f $(find "$ProjectDir" -name "*.ipa") 
--apiKey ā€œ$KeyIDā€ 
--apiIssuer ā€œ$IssuerIDā€ 

Kur apiKey Šø apiIssuer ir lauka vērtÄ«bas no API atslēgas Ä£enerÄ“Å”anas lapas.

Pēc veiksmÄ«gas validācijas mēs ielādējam lietojumprogrammu ar komandu --upload-app ar tiem paÅ”iem parametriem.

Lietojumprogrammu Apple testēs vienas vai divu dienu laikā, un pēc tam tā kļūs pieejama ārējiem testētājiem: viņiem pa e-pastu tiks nosÅ«tÄ«tas saites instalÄ“Å”anai.

Vēl viens veids, kā lejupielādēt lietojumprogrammu, izmantojot altool, ir lietotnes specifiskās paroles izmantoÅ”ana.

Lai iegÅ«tu lietotnei specifisko paroli, jums jāiet uz saite un Ä£enerējiet to sadaļā DroŔība.

iOS lietojumprogrammu izveides un piegādes iespējas

Pēc tam ar Å”o paroli jums vajadzētu izveidot servera izveides ierakstu Keychain. No Xcode versijas 11 to var izdarÄ«t ar komandu:

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

Kur:

$DeveloperName ā€” iOS izstrādātāja konta nosaukums, kas tiek izmantots, lai pieteiktos Apple pakalpojumos.

$AppPswd ā€” Ä£enerēta lietotnei specifiska parole.

Tālāk mēs iegÅ«stam parametra asc-provider vērtÄ«bu un pārbaudām paroles importÄ“Å”anas panākumus ar komandu:

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

Mēs iegūstam izvadi:

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

Kā redzat, nepiecieÅ”amā Short Name vērtÄ«ba (asc-provider) sakrÄ«t ar $TeamID parametru, ko izmantojām, veidojot lietojumprogrammu.

Lai apstiprinātu un ielādētu programmu TestFlight, izmantojiet komandu:

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

Kā parametra vērtÄ«ba -p jÅ«s varat ņemt vērtÄ«bu $AppPswd neÅ”ifrētā (skaidri izteiktā) formā.

Tomēr, kā jau minēts, no veiktspējas viedokļa rÄ«ka autorizācijai labāk izvēlēties API atslēgu, jo dažādām Xcode versijām ir noteiktas problēmas (ā€œneredzā€ Keychain, autorizācijas kļūdas augÅ”upielādes laikā utt.).

Tas arÄ« viss, patiesÄ«bā. Es novēlu visiem, kas iesaistÄ«ti App Store, veiksmÄ«gu veidoÅ”anu un bezproblēmu izlaiÅ”anu.

Avots: www.habr.com

Pievieno komentāru