Az iOS-alkalmazások létrehozásának és szállításának jellemzői
Ebben a cikkben megosztjuk az iOS-alkalmazások összeállításával és a felhasználókkal való eljuttatásával kapcsolatos tapasztalatokat, amelyeket a Plarium Krasnodar stúdió a CI/CD hibakeresése során halmozott fel.
Edzés
Minden olyan személy, aki valamilyen módon részt vesz az Apple eszközök alkalmazásainak fejlesztésében, már értékelte az infrastruktúra vitatott kényelmét. A nehézségek mindenhol megtalálhatók: a fejlesztői profil menütől a hibakereső és -építő eszközökig.
Az „alapokról” rengeteg cikk található az interneten, ezért igyekszünk kiemelni a lényeget. Íme, mire van szüksége az alkalmazás sikeres elkészítéséhez:
egyedi alkalmazással készült ID (Meg kell jegyezni a Bundle Identifier fontosságát, mert a helyettesítő karakter azonosító használata lehetetlenné teszi az alkalmazás számos funkciójának használatát, például: Társított tartományok, Push Notifications, Apple Sign In és mások);
Fejlesztői tanúsítványt kell generálni a Keychain segítségével bármely macOS-eszközön. A tanúsítvány típusa nagyon fontos. Az alkalmazáskörnyezettől függően (Fejlesztő, minőségbiztosítás, állomásozás, gyártás) eltérő lehet (fejlesztés vagy terjesztés), valamint az alkalmazás aláírási profiljának típusa.
Ad Hoc - tesztalkalmazás aláírására és a minőségbiztosítási részleg belső ellenőrzésére szolgál, a fejlesztő terjesztési tanúsítványát használják (típusnév iPhone Distribution: XXXXX);
App Store – kiadás a TestFlight-on keresztüli külső teszteléshez és az App Store-ba való feltöltéshez, a fejlesztő terjesztési tanúsítványa használatos.
Fejlesztési és Ad Hoc profilok generálásakor ez is feltüntetésre kerül eszközlista, amelyre telepíthet egy buildet, amely lehetővé teszi a felhasználók hozzáférésének további korlátozását. Az App Store profilban nincs eszközök listája, mivel a zárt béta tesztelés során a hozzáférés szabályozását a TestFlight kezeli, amiről később lesz szó.
Az egyértelműség kedvéért a fejlesztő profilját az alábbi táblázat formájában is bemutathatja. Így könnyebben érthető, hogy milyen paraméterekre van szükségünk az összeszereléshez, és honnan szerezzük be azokat.
gyülekezés
Az összeállítások projekt és környezet szerinti szétválasztásának megkönnyítése érdekében profilneveket használunk, mint pl ${ProjectName}_${Instance}, azaz a projekt neve + példány (az alkalmazási környezettől függően: Dev, QA, GD, Staging, Live és így tovább).
Amikor importálják az összeállítási kiszolgálóra, a profil nevét egyedi azonosítóra változtatja, és átkerül a mappába /Users/$Username/Library/MobileDevice/Provisioning Profiles (ahol $Username megfelel a build szerver felhasználói fiók nevének).
Kétféleképpen készíthet *.ipa fájlt – örökölt (PackageApplication) és modern (XcAchive létrehozásával és exportálásával). Az első módszer elavultnak tekinthető, mivel a 8.3-as verzió óta az alkalmazásfájl-csomagoló modult eltávolították az Xcode-terjesztésből. Használatához át kell másolnia a modult a régi Xcode-ból (8.2 és korábbi verzió) a mappába: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/
A különbségek az összeszerelési módban és az opciókban rejlenek SYNCHRONOUS_SYMBOL_PROCESSING, amely letiltja a szimbólumok eltávolítását az építési időben.
Ezután létre kell hoznunk egy fájlt az exportálási beállításokkal:
$Method — szállítási mód, az alkalmazás aláírási profil típusának felel meg, vagyis a Fejlesztésnél fejlesztés, az Ad Hoc esetében az ad-hoc, az App Store esetében pedig az alkalmazásbolt lesz az érték.
$BundleID — Alkalmazásazonosító, amely az alkalmazás beállításaiban van megadva. A következő paranccsal ellenőrizheti:
defaults read $ProjectDir/Info CFBundleIdentifier
$DevAccName и $ProfileId — a korábban használt fejlesztői név és aláírási profil azonosító beállításai, amelyeknek meg kell egyeznie az exportálási beállításokban szereplő értékekkel.
$TeamID — tízjegyű azonosító zárójelben a fejlesztő neve után, példa: iPhone Fejlesztő: …… (XXXXXXXXXX); Kulcstartóban ellenőrizhető.
Ezután az export paranccsal megkapjuk a szükséges *.ipa fájlt:
Most az összegyűjtött fájlt el kell juttatni a végfelhasználóhoz, azaz telepíteni kell az eszközre.
Számos szolgáltatás létezik a fejlesztési és ad hoc buildek terjesztésére, mint például a HockeyApp, AppBlade és mások, de ebben a cikkben az alkalmazások terjesztésére szolgáló önálló szerverről lesz szó.
Az iOS alkalmazás telepítése 2 lépésben történik:
Az alkalmazás telepítési jegyzékének fogadása az Item Servicen keresztül.
Az *.ipa fájl telepítése a jegyzékben megadott információk szerint HTTPS-en keresztül.
Ezért először létre kell hoznunk egy telepítési jegyzéket (*.plist fájltípus) a következő paranccsal:
Amint láthatja, a jegyzék szinte minden paramétert tartalmaz, amelyek az alkalmazás felépítéséhez szükségesek.
Alkalmazás verzió ($AppVersion) a következő paranccsal ellenőrizhető:
defaults read $ProjectDir/Info CFBundleVersion
Paraméter $ipaUrl tartalmaz egy közvetlen hivatkozást az *.ipa fájl letöltéséhez. Az iOS hetedik verziójától kezdve az alkalmazást HTTPS-en keresztül kell telepíteni. A nyolcadik verzióban a jegyzék formátuma kissé megváltozott: blokkok az alkalmazásikonok beállításaival, mint például
<images>
<image>...</image>
</images>
Így az alkalmazás telepítéséhez elegendő egy egyszerű HTML oldal egy ilyen hivatkozással:
A fejlesztési és tesztelési részlegek igényeire a Plarium elkészítette saját build telepítő alkalmazását, amely a következőket nyújtja:
autonómia és függetlenség,
a hozzáférés-vezérlés központosítása és az alkalmazások biztonságos telepítése „ideiglenes” dinamikusan létrehozott hivatkozásokon keresztül,
bővíthető funkcionalitás (vagyis a fejlesztőcsapat szükség esetén integrálhatja a hiányzó funkciókat egy meglévő alkalmazásba).
tesztelés
Most az alkalmazás kiadás előtti teszteléséről fogunk beszélni TestFlight.
A letöltéshez szükséges feltételek az App Store aláírási profil típusa és a generált API-kulcsok megléte.
Az alkalmazás letöltésének többféle módja van:
az Xcode-on keresztül (Szervező),
alteszközön keresztül,
az Application Loader segítségével az Xcode (most Transporter) régebbi verzióihoz.
Az automatikus letöltéshez az altool használatos, amelynek két engedélyezési módja is van:
Alkalmazás-specifikus jelszó,
API kulcs.
Célszerű az alkalmazást az API-kulcs segítségével letölteni.
Az API-kulcs beszerzéséhez látogasson el ide link és generál egy kulcsot. A *.p8 formátumú kulcson kívül két paraméterre lesz szükségünk: Kibocsátóazonosítóra és Kulcsazonosítóra.
Ezután importálja a letöltött kulcsot a build szerverre:
ahol apiKey и apiIssuer mezőértékekkel rendelkezik az API-kulcsgeneráló oldalon.
Ezután sikeres érvényesítés után betöltjük az alkalmazást a paranccsal --upload-app ugyanazokkal a paraméterekkel.
Az alkalmazást az Apple egy-két napon belül teszteli, majd elérhetővé válik a külső tesztelők számára: e-mailben küldik el nekik a telepítéshez szükséges linkeket.
Egy másik módja annak, hogy egy alkalmazást az altoolon keresztül töltsön le, az alkalmazásspecifikus jelszó használata.
Az alkalmazásspecifikus jelszó beszerzéséhez a következő helyre kell lépnie link és generálja azt a Biztonság részben.
Ezután hozzon létre egy build szerverrekordot a Keychainben ezzel a jelszóval. Az Xcode 11-es verziójától ezt a következő paranccsal lehet megtenni:
Paraméter értékként -p veheted az értéket $AppPswd titkosítatlan (explicit) formában.
Azonban, mint már említettük, a teljesítmény szempontjából jobb, ha az API kulcsot választja az altool hitelesítéshez, mivel az Xcode különböző verzióiban vannak bizonyos problémák ("nem látja" a kulcstartót, engedélyezési hibák feltöltés közben stb.).
Valójában ennyi. Mindenkinek, aki részt vesz, kívánok sikeres összeállítást és problémamentes kiadásokat az App Store-ban.