V tem članku delimo izkušnje pri sestavljanju in dostavi iOS aplikacij uporabnikom, ki jih je studio Plarium Krasnodar nabral v procesu odpravljanja napak CI/CD.
Izobraževanje
Vsakdo, ki se tako ali drugače ukvarja z razvojem aplikacij za naprave Apple, je že ocenil kontroverzno priročnost infrastrukture. Težave so povsod: od menija profila razvijalca do orodij za odpravljanje napak in gradnjo.
Na internetu je veliko člankov o "osnovah", zato bomo poskušali izpostaviti glavno stvar. Tukaj je tisto, kar potrebujete za uspešno izdelavo aplikacije:
naprava, ki temelji na sistemu macOS in deluje kot gradbeni strežnik;
ustvarjena potrdilo razvijalca, ki se bo v nadaljevanju uporabljal za podpis vloge;
ustvarili aplikacijo z edinstveno ID (opozoriti je treba na pomembnost identifikatorja paketa, ker uporaba ID-ja z nadomestnimi znaki onemogoča uporabo številnih funkcij aplikacije, na primer: povezane domene, potisna obvestila, prijava Apple in druge);
Potrdilo razvijalca je treba ustvariti prek Keychaina v kateri koli napravi macOS. Vrsta certifikata je zelo pomembna. Odvisno od aplikacijskega okolja (razvoj, zagotavljanje kakovosti, uprizoritev, produkcija) se bo razlikovalo (razvoj ali distribucija), kot tudi vrsta profila podpisa aplikacije.
Glavne vrste profilov:
Razvoj - namenjen podpisovanju aplikacije razvojne ekipe, uporablja se Razvojni certifikat (ime tipa iPhone Developer: XXXXX);
Ad Hoc - namenjen podpisovanju testne aplikacije in interni verifikaciji s strani QA oddelka, uporablja se Distribution certifikat razvijalca (ime tipa iPhone Distribution: XXXXX);
App Store - izdaja gradnje za zunanje testiranje prek TestFlight in nalaganje v App Store, uporablja se razvijalčevo potrdilo o distribuciji.
Pri generiranju razvojnih in ad hoc profilov je tudi navedeno seznam naprav, na katerega lahko namestite gradnjo, ki omogoča dodatno omejitev dostopa uporabnikom. V profilu App Store ni seznama naprav, saj nadzor dostopa med zaprtim testiranjem beta izvaja TestFlight, o katerem bomo razpravljali kasneje.
Zaradi jasnosti lahko predstavite profil razvijalca v obliki spodnje tabele. Tako lažje razumemo, katere parametre potrebujemo za montažo in kje jih dobiti.
Skupščina
Za lažje ločevanje sklopov po projektu in okolju uporabljamo imena profilov, kot je ${ProjectName}_${Instance}, to je ime projekta + primerek (odvisno od aplikacijskega okolja: Dev, QA, GD, Staging, Live in tako naprej).
Ko je profil uvožen v gradbeni strežnik, spremeni svoje ime v edinstven ID in se premakne v mapo /Users/$Username/Library/MobileDevice/Provisioning Profiles (Kje $Username ustreza imenu uporabniškega računa gradbenega strežnika).
Datoteko *.ipa lahko zgradite na dva načina - stari (PackageApplication) in sodoben (prek ustvarjanja in izvoza XcAchive). Prva metoda velja za zastarelo, saj je bil od različice 8.3 modul za pakiranje datotek aplikacije odstranjen iz distribucije Xcode. Če ga želite uporabiti, morate kopirati modul iz starega Xcode (različica 8.2 in starejše) v mapo: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/
$Method — način dostave, ustreza vrsti profila podpisa aplikacije, to pomeni, da bo za razvoj vrednost razvoj, za ad hoc - ad-hoc in za App Store - trgovina z aplikacijami.
$BundleID — ID aplikacije, ki je določen v nastavitvah aplikacije. Preverite lahko z ukazom:
defaults read $ProjectDir/Info CFBundleIdentifier
$DevAccName и $ProfileId — nastavitve ID-ja profila razvijalca in podpisa, ki so bile uporabljene prej in se morajo ujemati z vrednostmi v nastavitvah izvoza.
$TeamID — desetmestni ID v oklepaju za imenom razvijalca, na primer: iPhone Developer: …… (XXXXXXXXXX); preverite v Keychainu.
Nato z ukazom za izvoz pridobimo potrebno datoteko *.ipa:
Zdaj je treba zbrano datoteko dostaviti končnemu uporabniku, torej namestiti na napravo.
Obstaja veliko storitev za distribucijo razvojnih in ad hoc gradenj, kot so HockeyApp, AppBlade in druge, vendar bomo v tem članku govorili o samostojnem strežniku za distribucijo aplikacij.
Namestitev aplikacije za iOS poteka v 2 stopnjah:
Prejemanje manifesta namestitve aplikacije prek storitve Items Service.
Namestitev datoteke *.ipa v skladu z informacijami, navedenimi v manifestu prek HTTPS.
Tako moramo najprej ustvariti namestitveni manifest (vrsta datoteke *.plist) z ukazom:
Kot lahko vidite, manifest vsebuje skoraj vse parametre, vključene v izdelavo aplikacije.
Različica aplikacije ($AppVersion) lahko preverite z ukazom:
defaults read $ProjectDir/Info CFBundleVersion
Parameter $ipaUrl vsebuje neposredno povezavo za prenos datoteke *.ipa. Od sedme različice sistema iOS je treba aplikacijo namestiti prek HTTPS. V osmi različici se je oblika manifesta nekoliko spremenila: bloki z nastavitvami za ikone aplikacij, kot je
<images>
<image>...</image>
</images>
Tako je za namestitev aplikacije dovolj preprosta stran HTML s povezavo, kot je ta:
Za potrebe oddelkov za razvoj in testiranje je Plarium izdelal lastno aplikacijo za namestitev gradnje, ki nam omogoča:
samostojnost in neodvisnost,
centralizacija nadzora dostopa in varna namestitev aplikacij preko »začasnih« dinamično ustvarjenih povezav,
razširljivo funkcionalnost (to pomeni, da lahko razvojna ekipa po potrebi integrira manjkajoče funkcije v obstoječo aplikacijo).
Testiranje
Zdaj bomo govorili o testiranju aplikacije pred objavo z uporabo testni let.
Zahtevani pogoji za prenos so vrsta podpisnega profila App Store in prisotnost generiranih ključev API.
Aplikacijo lahko prenesete na več načinov:
prek Xcode (organizator),
prek altoola,
prek Application Loaderja za starejše različice Xcode (zdaj Transporter).
Za samodejni prenos se uporablja altool, ki ima tudi dva načina avtorizacije:
Geslo za posamezno aplikacijo,
API ključ.
Zaželeno je, da aplikacijo prenesete s ključem API.
Če želite pridobiti ključ API, pojdite na povezava in ustvarite ključ. Poleg samega ključa v formatu *.p8 bomo potrebovali še dva parametra: IssuerID in KeyID.
Kot vrednost parametra -p lahko prevzamete vrednost $AppPswd v nešifrirani (eksplicitni) obliki.
Vendar, kot že omenjeno, je z vidika zmogljivosti bolje izbrati ključ API za avtorizacijo altool, saj imajo različne različice Xcode določene težave (»ne vidi« Keychain, avtorizacijske napake med nalaganjem itd.).
To je pravzaprav vse. Vsem udeleženim želim uspešne gradnje in izdaje brez težav v App Store.