U ovom članku dijelimo iskustvo sastavljanja i isporuke iOS aplikacija korisnicima koje je studio Plarium Krasnodar skupio u procesu otklanjanja pogrešaka CI/CD-a.
Trening
Svatko tko je na ovaj ili onaj način uključen u razvoj aplikacija za Apple uređaje već je cijenio kontroverznu pogodnost infrastrukture. Poteškoće se nalaze posvuda: od izbornika profila razvojnog programera do alata za uklanjanje pogrešaka i izradu.
Na internetu postoji mnogo članaka o “osnovama”, pa ćemo pokušati istaknuti ono glavno. Evo što vam je potrebno za uspješnu izradu vaše aplikacije:
uređaj temeljen na macOS-u koji djeluje kao poslužitelj za izgradnju;
generiran certifikat programera, koji će se dalje koristiti za potpisivanje zahtjeva;
kreirana aplikacija s jedinstvenim ID (treba napomenuti važnost identifikatora paketa, jer upotreba zamjenskog ID-a onemogućuje korištenje mnogih funkcija aplikacije, na primjer: pridružene domene, push obavijesti, Apple prijava i druge);
Certifikat razvojnog programera mora se generirati putem Keychaina na bilo kojem macOS uređaju. Vrlo je važna vrsta certifikata. Ovisno o okruženju aplikacije (Dev, QA, Staging, Production) razlikovat će se (Razvoj ili Distribucija), kao i vrsta profila potpisa aplikacije.
Glavne vrste profila:
Razvoj - namijenjen za potpisivanje aplikacije razvojnog tima, koristi se Razvojni certifikat (naziv tipa iPhone Developer: XXXXX);
Ad Hoc - namijenjen potpisivanju testne aplikacije i internoj provjeri od strane QA odjela, koristi se Distribution certifikat programera (tip naziva iPhone Distribution: XXXXX);
App Store - izdanje verzije za vanjsko testiranje putem TestFlighta i učitavanje u App Store, koristi se Distribucijski certifikat razvojnog programera.
Kod generiranja razvojnih i ad hoc profila također je naznačeno popis uređaja, na koji možete instalirati međugradnju, koja vam omogućuje dodatno ograničavanje pristupa korisnicima. Ne postoji popis uređaja u App Store profilu, budući da kontrolu pristupa tijekom zatvorenog beta testiranja obavlja TestFlight, o čemu ćemo kasnije.
Radi jasnoće, možete predstaviti profil programera u obliku tablice u nastavku. To olakšava razumijevanje parametara koji su nam potrebni za montažu i odakle ih dobiti.
zbor
Kako bismo olakšali odvajanje sklopova po projektu i okruženju, koristimo nazive profila kao što su ${ProjectName}_${Instance}, odnosno naziv projekta + instanca (ovisi o okruženju aplikacije: Dev, QA, GD, Staging, Live i tako dalje).
Kada se uveze na poslužitelj za izradu, profil mijenja svoje ime u jedinstveni ID i premješta se u mapu /Users/$Username/Library/MobileDevice/Provisioning Profiles (gdje $Username odgovara nazivu korisničkog računa poslužitelja za izgradnju).
Postoje dva načina za izradu *.ipa datoteke - naslijeđeni (PackageApplication) i moderan (putem XcAchive stvaranja i izvoza). Prva se metoda smatra zastarjelom jer je od verzije 8.3 modul za pakiranje datoteka aplikacije uklonjen iz Xcode distribucije. Da biste ga koristili, trebate kopirati modul iz starog Xcode-a (verzija 8.2 i starije) u mapu: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/
$Method — način isporuke, odgovara tipu profila potpisa aplikacije, odnosno za Development vrijednost će biti development, za Ad Hoc - ad-hoc, a za App Store - app-store.
$BundleID — ID aplikacije, koji je naveden u postavkama aplikacije. Možete provjeriti naredbom:
defaults read $ProjectDir/Info CFBundleIdentifier
$DevAccName и $ProfileId — ime razvojnog programera i postavke ID profila potpisa koje su prethodno korištene i moraju odgovarati vrijednostima u postavkama izvoza.
$TeamID — deseteroznamenkasti ID u zagradama iza imena programera, primjer: iPhone Developer: …… (XXXXXXXXXX); može se provjeriti u Keychain-u.
Zatim, koristeći naredbu za izvoz, dobivamo potrebnu *.ipa datoteku:
Sada prikupljenu datoteku treba isporučiti krajnjem korisniku, odnosno instalirati je na uređaj.
Postoje mnoge usluge za distribuciju Development i Ad Hoc buildova, kao što su HockeyApp, AppBlade i drugi, ali u ovom ćemo članku govoriti o samostalnom poslužitelju za distribuciju aplikacija.
Instalacija aplikacije za iOS odvija se u 2 faze:
Primanje manifesta instalacije aplikacije putem usluge Stavke.
Instalacija *.ipa datoteke prema podacima navedenim u manifestu putem HTTPS-a.
Dakle, prvo moramo generirati instalacijski manifest (tip datoteke *.plist) s naredbom:
Kao što vidite, manifest sadrži gotovo sve parametre uključene u izradu aplikacije.
Verzija aplikacije ($AppVersion) može se provjeriti naredbom:
defaults read $ProjectDir/Info CFBundleVersion
Parametar $ipaUrl sadrži izravnu vezu za preuzimanje *.ipa datoteke. Od sedme verzije iOS-a aplikacija mora biti instalirana putem HTTPS-a. U osmoj verziji, format manifesta malo se promijenio: blokovi s postavkama za ikone aplikacija poput
<images>
<image>...</image>
</images>
Dakle, za instalaciju aplikacije dovoljna je jednostavna HTML stranica s poveznicom poput ove:
gdje apiKey и apiIssuer imaju vrijednosti polja sa stranice za generiranje API ključa.
Zatim, nakon uspješne provjere valjanosti, učitavamo aplikaciju s naredbom --upload-app s istim parametrima.
Apple će testirati aplikaciju u roku od jednog ili dva dana, a zatim će postati dostupna vanjskim testerima: poslat će im e-poštom veze za instalaciju.
Drugi način preuzimanja aplikacije putem altoola je korištenje lozinke za određenu aplikaciju.
Da biste dobili zaporku za određenu aplikaciju, morate otići na link i generirajte ga u odjeljku Sigurnost.
Zatim biste trebali stvoriti zapis poslužitelja za izgradnju u Keychainu s ovom lozinkom. Od verzije 11 Xcode-a to se može učiniti naredbom:
Kao vrijednost parametra -p možete uzeti vrijednost $AppPswd u nešifriranom (eksplicitnom) obliku.
Međutim, kao što je već spomenuto, sa stajališta performansi, bolje je odabrati API ključ za autorizaciju altoola, jer različite verzije Xcode-a imaju određene probleme ("ne vidi" Keychain, pogreške autorizacije tijekom učitavanja itd.).
To je zapravo sve. Svima uključenima želim uspješne izrade i izdanja bez problema u App Storeu.