U ovom članku dijelimo iskustvo izgradnje i isporuke iOS aplikacija korisnicima, koje je Plarium Krasnodar stekao u procesu otklanjanja grešaka u CI/CD-u.
Trening
Svaka osoba, na ovaj ili onaj način povezana s razvojem aplikacija za Apple uređaje, već je uspjela cijeniti kontroverznu pogodnost infrastrukture. Složenosti su svuda, od menija profila programera do alata za otklanjanje grešaka i pravljenje.
Na internetu ima dosta članaka o „osnovama“, pa ćemo pokušati da istaknemo ono glavno. Evo šta vam je potrebno za uspješnu izradu aplikacije:
uređaj zasnovan na macOS-u koji djeluje kao server za izgradnju;
generisano sertifikat programera, koji će se dalje koristiti za potpisivanje aplikacije;
kreirana aplikacija sa unikatnom ID (Treba napomenuti važnost Bundle Identifier-a, jer upotreba džoker ID-a onemogućava korištenje mnogih funkcija aplikacije, na primjer: Pridružene domene, Push obavijesti, Apple Sign In i druge);
Certifikat programera mora biti generiran putem Keychain-a na bilo kojem macOS uređaju. Vrsta sertifikata je veoma važna. U zavisnosti od okruženja aplikacije (Dev, QA, Staging, Production), razlikuje se (razvoj ili distribucija), kao i tip profila za potpisivanje aplikacije.
Glavne vrste profila:
Razvoj - dizajniran za potpisivanje aplikacije razvojnog tima, koristi se razvojni certifikat (naziv tipa iPhone Developer: XXXXX);
Ad Hoc - namijenjen za potpisivanje testne aplikacije i internu verifikaciju od strane QA odjela, korištenjem sertifikata o distribuciji programera (naziv tipa iPhone Distribution: XXXXX);
App Store je verzija izdanja za eksterno testiranje putem TestFlight-a i otpremanje u App Store, koristeći sertifikat o distribuciji programera.
Prilikom generiranja razvojnih i ad hoc profila, to je također naznačeno popis uređaja, na koji možete instalirati build, što vam omogućava dodatno ograničavanje pristupa korisnicima. Ne postoji lista uređaja u App Store profilu, jer je TestFlight, o čemu će biti reči kasnije, odgovoran za kontrolu pristupa tokom zatvorenog beta testiranja.
Radi jasnoće, možete predstaviti profil programera u obliku tabele ispod. To olakšava razumijevanje koji su nam parametri za sklop potrebni i odakle ih dobiti.
Montaža
Da bismo olakšali odvajanje sklopova po projektu i okruženju, koristimo nazive profila forme ${ProjectName}_${Instance}, odnosno naziv projekta + instanca (u zavisnosti od okruženja aplikacije: Dev, QA, GD, Staging, Live, itd.).
Kada se uveze na server za izgradnju, profil mijenja svoje ime u jedinstveni ID i premješta se u mapu /Users/$Username/Library/MobileDevice/Provisioning Profiles (Gdje $Username odgovara imenu korisničkog naloga servera za izgradnju).
Postoje dva načina za sastavljanje *.ipa datoteke - zastarjela (PackageApplication) i moderna (kroz kreiranje i izvoz XcAchivea). Prva metoda se smatra zastarjelom, budući da je modul za pakovanje datoteka aplikacije uklonjen iz Xcode distribucije od verzije 8.3. Da biste ga koristili, morate kopirati modul iz starog Xcodea (verzija 8.2 i ranije) u mapu: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/
$Method - način isporuke, odgovara tipu profila aplikacije potpisa, odnosno za razvoj će vrijednost biti razvoj, 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 - postavke imena programera i profila potpisa koje su prethodno korištene i moraju odgovarati vrijednostima u postavkama izvoza.
$TeamID - desetocifreni ID u zagradama iza imena programera, primjer: iPhone Developer: ...... (XXXXXXXXXX); može se provjeriti u Keychain-u.
Zatim, koristeći naredbu za izvoz, dobijamo potrebnu * .ipa datoteku:
Sada sastavljenu datoteku treba isporučiti krajnjem korisniku, odnosno instalirati na uređaj.
Postoji mnogo servisa za distribuciju Development i Ad Hoc build-ova, kao što su HockeyApp, AppBlade i drugi, ali u ovom članku ćemo se fokusirati na samostalni server za distribuciju aplikacija.
Instalacija iOS aplikacije odvija se u 2 faze:
Dobijanje manifesta instalacije aplikacije putem usluge Items.
Instaliranje *.ipa datoteke prema informacijama navedenim u manifestu putem HTTPS-a.
Dakle, prvo moramo generirati instalacijski manifest (tip datoteke *.plist) sa naredbom:
Kao što vidite, manifest sadrži gotovo sve parametre uključene u izgradnju aplikacije.
Verzija aplikacije ($AppVersion) može se provjeriti naredbom:
defaults read $ProjectDir/Info CFBundleVersion
Parametar $ipaUrl sadrži direktnu vezu za preuzimanje *.ipa datoteke. Od sedme verzije iOS-a, aplikacija mora biti instalirana putem HTTPS-a. U osmoj verziji format manifesta je malo promijenjen: uklonjeni su blokovi s postavkama za ikone aplikacija u pogledu.
<images>
<image>...</image>
</images>
Dakle, za instaliranje aplikacije dovoljna je jednostavna html stranica sa linkom poput ove:
Gde apiKey и apiIssuer imaju vrijednosti polja sa stranice za generiranje API ključeva.
Nadalje, nakon uspješne validacije, učitavamo aplikaciju sa naredbom --upload-app sa istim parametrima.
Aplikaciju će Apple testirati u roku od jednog ili dva dana, a nakon toga će postati dostupna vanjskim testerima: poštom će im biti poslani linkovi za instalaciju.
Drugi način za preuzimanje aplikacije putem altool-a je korištenje lozinke specifične za aplikaciju.
Da biste dobili posebnu lozinku za aplikaciju, trebate otići na link i generirajte ga u odjeljku Sigurnost.
Zatim kreirajte unos servera za izgradnju u Keychain-u sa 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šifrovanom (eksplicitnom) obliku.
Međutim, kao što je već spomenuto, sa stanovišta performansi, bolje je odabrati API ključ za autorizaciju alata, jer različite verzije Xcode-a imaju određene probleme („ne vidi“ Keychain, greške pri autorizaciji pri učitavanju itd. ).
To je, u stvari, sve. Želim svima koji su uključeni u uspješne verzije i izdanja bez problema u App Storeu.