Mga tampok ng pagbuo at paghahatid ng mga iOS application
Sa artikulong ito, ibinabahagi namin ang karanasan sa pag-assemble at paghahatid ng mga iOS application sa mga user, na naipon ng Plarium Krasnodar studio sa proseso ng pag-debug ng CI/CD.
Pagsasanay
Ang bawat tao na nasa isang paraan o iba pang kasangkot sa pagbuo ng mga aplikasyon para sa mga aparatong Apple ay pinahahalagahan na ang kontrobersyal na kaginhawahan ng imprastraktura. Ang mga paghihirap ay matatagpuan sa lahat ng dako: mula sa menu ng profile ng developer hanggang sa debug at bumuo ng mga tool.
Maraming mga artikulo tungkol sa "mga pangunahing kaalaman" sa Internet, kaya susubukan naming i-highlight ang pangunahing bagay. Narito ang kailangan mo upang matagumpay na mabuo ang iyong aplikasyon:
nilikha application na may natatanging ID (dapat tandaan ang kahalagahan ng Bundle Identifier, dahil ang paggamit ng wildcard ID ay ginagawang imposibleng gumamit ng maraming function ng application, halimbawa: Mga Kaugnay na Domain, Push Notification, Apple Sign In at iba pa);
Dapat na bumuo ng certificate ng developer sa pamamagitan ng Keychain sa anumang macOS device. Napakahalaga ng uri ng sertipiko. Depende sa environment ng application (Dev, QA, Staging, Production) ito ay mag-iiba (Development o Distribution), gayundin ang uri ng application signature profile.
Pangunahing uri ng mga profile:
Development - nilayon para sa pagpirma sa aplikasyon ng development team, isang Development certificate ang ginagamit (type name iPhone Developer: XXXXX);
Ad Hoc - nilayon para sa pagpirma ng isang pagsubok na aplikasyon at panloob na pag-verify ng departamento ng QA, ginagamit ang sertipiko ng Pamamahagi ng developer (type name iPhone Distribution: XXXXX);
App Store - i-release ang build para sa external na pagsubok sa pamamagitan ng TestFlight at pag-upload sa App Store, ginagamit ang Distribution certificate ng developer.
Kapag bumubuo ng mga profile ng Development at Ad Hoc, ipinapahiwatig din ito listahan ng device, kung saan maaari kang mag-install ng build, na nagbibigay-daan sa iyong higit pang paghigpitan ang pag-access para sa mga user. Walang listahan ng mga device sa profile ng App Store, dahil ang kontrol sa pag-access sa panahon ng closed beta testing ay pinangangasiwaan ng TestFlight, na tatalakayin sa ibang pagkakataon.
Para sa kalinawan, maaari mong ipakita ang profile ng developer sa anyo ng isang talahanayan sa ibaba. Ginagawa nitong mas madaling maunawaan kung anong mga parameter ang kailangan namin para sa pagpupulong at kung saan kukunin ang mga ito.
Assembly
Upang gawing mas madaling paghiwalayin ang mga asembliya ayon sa proyekto at kapaligiran, ginagamit namin ang mga pangalan ng profile tulad ng ${ProjectName}_${Instance}, iyon ay, pangalan ng proyekto + instance (depende sa environment ng application: Dev, QA, GD, Staging, Live, at iba pa).
Kapag na-import sa build server, binabago ng profile ang pangalan nito sa isang natatanging ID at inilipat sa folder /Users/$Username/Library/MobileDevice/Provisioning Profiles (Saan $Username tumutugma sa pangalan ng user account ng build server).
Mayroong dalawang mga paraan upang makabuo ng isang *.ipa file - legacy (packageApplication) at moderno (sa pamamagitan ng xcachive na paglikha at pag -export). Ang unang pamamaraan ay itinuturing na hindi na ginagamit, dahil mula sa bersyon 8.3 ang module ng packaging ng app ng app ay tinanggal mula sa pamamahagi ng XCODE. Upang magamit ito, kailangan mong kopyahin ang module mula sa lumang xcode (bersyon 8.2 at mas maaga) sa folder: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/
-scheme — ang ginamit na pamamaraan, na tinukoy sa proyekto.
-derivedDataPath — landas upang i-download ang binuong application (*.app).
CODE_SIGN_IDENTITY — ang pangalan ng developer account, na maaaring ma-verify sa Keychain (iPhone Developer: XXXX XXXXXXX, walang TeamID sa mga bracket).
PROVISIONING_PROFILE — Profile ID para sa pagpirma sa aplikasyon, na maaaring makuha gamit ang utos:
cd "/Users/$Username/Library/MobileDevice/Provisioning Profiles/" && find *.mobileprovision -type f | xargs grep -li ">${ProjectName}_${Instance}<" | sed -e 's/.mobileprovision//'
Kung ang application ay gumagamit ng isang karagdagang profile (halimbawa, para sa mga abiso sa pagtulak), kung gayon sa halip na PROVISIONING_PROFILE ipahiwatig:
Gayunpaman, ang pamamaraang ito ay itinuturing na hindi na ginagamit mula sa pananaw ng Apple. May kaugnayan ang pagkuha ng *.ipa sa pamamagitan ng pag-export mula sa archive ng application.
Una kailangan mong kolektahin ang archive gamit ang utos:
Ang mga pagkakaiba ay nasa paraan ng pagpupulong at mga pagpipilian SYNCHRONOUS_SYMBOL_PROCESSING, na hindi pinapagana ang pag-unload ng simbolo sa oras ng pagbuo.
Susunod na kailangan naming bumuo ng isang file na may mga setting ng pag-export:
$Method — paraan ng paghahatid, tumutugma sa uri ng profile ng lagda ng application, iyon ay, para sa Development ang halaga ay magiging development, para sa Ad Hoc - ad-hoc, at para sa App Store - app-store.
$BundleID — Application ID, na tinukoy sa mga setting ng application. Maaari mong suriin gamit ang utos:
defaults read $ProjectDir/Info CFBundleIdentifier
$DevAccName и $ProfileId — pangalan ng developer at mga setting ng profile ID ng lagda na ginamit dati at dapat tumugma sa mga halaga sa mga setting ng pag-export.
$TeamID — sampung-digit na ID sa mga bracket pagkatapos ng pangalan ng developer, halimbawa: iPhone Developer: …… (XXXXXXXXXX); maaaring i-check sa Keychain.
Susunod, gamit ang export command, makuha namin ang kinakailangang *.ipa file:
Ngayon ang nakolekta na file ay kailangang maihatid sa end user, iyon ay, naka -install sa aparato.
Mayroong maraming mga serbisyo para sa pamamahagi ng Development at Ad Hoc build, tulad ng HockeyApp, AppBlade at iba pa, ngunit sa artikulong ito ay pag-uusapan natin ang tungkol sa isang standalone na server para sa pamamahagi ng mga application.
Ang pag-install ng application para sa iOS ay nagaganap sa 2 yugto:
Pagtanggap ng application installation manifest sa pamamagitan ng Items Service.
Pag-install ng *.ipa file ayon sa impormasyong tinukoy sa manifest sa pamamagitan ng HTTPS.
Kaya, kailangan muna nating bumuo ng manifest ng pag-install (uri ng file *.plist) gamit ang command:
Tulad ng nakikita mo, ang manifest ay naglalaman ng halos lahat ng mga parameter na kasangkot sa pagbuo ng application.
Bersyon ng aplikasyon ($AppVersion) Maaaring suriin gamit ang utos:
defaults read $ProjectDir/Info CFBundleVersion
Parametro $ipaUrl naglalaman ng direktang link para i-download ang *.ipa file. Mula sa ikapitong bersyon ng iOS, dapat na mai-install ang application sa pamamagitan ng HTTPS. Sa ikawalong bersyon, bahagyang nagbago ang format ng manifest: mga bloke na may mga setting para sa mga icon ng application tulad ng
<images>
<image>...</image>
</images>
Kaya, upang mai-install ang application, sapat na ang isang simpleng HTML page na may link na tulad nito:
Para sa mga pangangailangan ng mga departamento ng pag-unlad at pagsubok, ang Plarium ay lumikha ng sarili nitong build install application, na nagbibigay sa amin ng:
awtonomiya at kalayaan,
sentralisasyon ng kontrol sa pag-access at secure na pag-install ng mga application sa pamamagitan ng "pansamantalang" dynamic na nilikha na mga link,
napapalawak na functionality (iyon ay, ang development team, kung kinakailangan, ay maaaring isama ang mga nawawalang function sa isang umiiral na application).
Pagsubok
Ngayon ay pag-uusapan natin ang tungkol sa pre-release na pagsubok ng application na ginagamit TestFlight.
Ang mga kinakailangang kundisyon para sa pag-download ay ang uri ng profile ng lagda ng App Store at ang pagkakaroon ng mga nabuong API key.
Mayroong maraming mga paraan upang i -download ang application:
sa pamamagitan ng Xcode (Organizer),
Via Altool,
sa pamamagitan ng Application Loader para sa mga mas lumang bersyon ng Xcode (Transporter ngayon).
Para sa awtomatikong pag-download, ginagamit ang altool, na mayroon ding dalawang paraan ng awtorisasyon:
Password na Partikular sa App,
API Key.
Mas mainam na i -download ang application gamit ang API key.
Upang makuha ang API Key, pumunta sa link at bumuo ng isang susi. Bilang karagdagan sa mismong key sa *.p8 na format, kakailanganin namin ng dalawang parameter: IssuerID at KeyID.
Susunod, i-import ang na-download na key sa build server:
saan apiKey и apiIssuer may mga halaga ng field mula sa pahina ng pagbuo ng key ng API.
Susunod, sa matagumpay na pagpapatunay, ni-load namin ang application gamit ang command --upload-app na may parehong mga parameter.
Ang application ay susuriin ng Apple sa loob ng isa o dalawang araw at pagkatapos ay magiging available sa mga panlabas na tester: sila ay magpapadala sa email ng mga link para sa pag-install.
Ang isa pang paraan upang mag-download ng isang application sa pamamagitan ng altool ay ang paggamit ng Password na Partikular sa App.
Upang makuha ang password na tukoy sa app na kailangan mong puntahan link at buuin ito sa seksyong Seguridad.
Susunod, dapat kang lumikha ng talaan ng build server sa Keychain gamit ang password na ito. Mula sa bersyon 11 ng Xcode maaari itong gawin gamit ang utos:
Provider listing:
- Long Name - - Short Name -
XXXXXXX XXXXXXXXX
Gaya ng nakikita mo, ang kinakailangang halaga ng Maikling Pangalan (asc-provider) ay tumutugma sa parameter na $TeamID na ginamit namin sa pagbuo ng application.
Upang patunayan at i-load ang application sa TestFlight, gamitin ang command:
Bilang halaga ng parameter -p maaari mong kunin ang halaga $AppPswd sa hindi naka-encrypt (tahasang) form.
Gayunpaman, tulad ng nabanggit na, mula sa punto ng view ng pagganap, mas mahusay na pumili ng API Key para sa awtorisasyon ng altool, dahil ang iba't ibang mga bersyon ng Xcode ay may ilang mga problema ("hindi nakikita" Keychain, mga error sa awtorisasyon sa panahon ng pag-upload, atbp.).
Iyon lang, talaga. Nais ko ang lahat na kasangkot sa matagumpay na pagbuo at mga paglabas na walang problema sa App Store.