iOS fejlesztői tanúsítvány és provisioning profile Expóval
Írta: Mehdi Azizi
Megjelent: , 9 p
A tanúsítvány igazolja, ki írta alá az appot, a provisioning profile pedig, melyik appot és hol. Expóval az EAS kezeli mindkettőt.
Az iOS fejlesztői tanúsítvány azt igazolja, ki írta alá az appodat. A provisioning profile (kiépítési profil) ezt a tanúsítványt egy konkrét apphoz köti, és megmondja, hol futhat. Expóval szinte soha nem kell kézzel előállítanod őket: az EAS létrehozza, tárolja és megújítja őket, amikor buildet indítasz.
Azért érdemes érteni, mit csinál az egyes fájlok. Amikor egy build nem hajlandó települni, vagy elakad egy feltöltés, ez a tudás spórol meg neked egy napot. Ez az útmutató sorra veszi a négy elemet, az élettartamukat, az Apple korlátait és a tipikus hibákat, mindegyikhez a megoldással.
Az iOS-es appjaimat Expóval és EAS-szel adom ki, köztük a Solyst és a TradaZent. A teljes folyamat itt van: iOS app kiadása Mac nélkül. Most az aláírás motorházteteje alá nézünk.
Miért követeli meg az Apple az aláírást
Egy iOS appot alá kell írni ahhoz, hogy iPhone-ra települjön, vagy elmenjen az App Store Connectbe. Az aláírás garantálja, hogy az app egy Apple által ismert fejlesztőtől jön, és azóta senki nem módosította.
Az App Store-nál van egy megnyugtató részlet. Az Apple TN3161-es technikai jegyzete szerint az App Store a feltöltéskor ellenőrzi, hogy érvényes-e a terjesztési tanúsítványod, aztán újra aláírja az appot, ami onnantól nem függ a tanúsítványod lejárati dátumától. A tanúsítványaidnak tehát a feltöltés pillanatában kell érvényesnek lenniük, nem az app teljes élete alatt.
A négy elem, amit ismerned kell
Az Expo azonosítókról szóló dokumentációja hármat sorol fel iOS-re: a terjesztési tanúsítványt, a profilokat és a push értesítési kulcsot. Én hozzáveszem az app azonosítót is, amely nélkül nem létezik profil.
A terjesztési tanúsítvány
Ez a fejlesztői aláírásod. Az Apple tanúsítványokról szóló súgója két családot különböztet meg:
- Apple Development: arra való, hogy fejlesztés közben a saját eszközeiden futtasd az appot. Egy személyhez tartozik.
- Apple Distribution: kijelölt teszteszközökre való terjesztéshez vagy az App Store Connectbe való feltöltéshez kell. A csapathoz tartozik, és csak a fiók tulajdonosa vagy egy admin hozhatja létre.
A terjesztési tanúsítvány nem egy adott apphoz tartozik: ugyanaz írja alá az összes appodat. Tartozik hozzá egy privát kulcs, és valójában az teszi lehetővé az aláírást. A TN3161 szerint egy Apple-tanúsítvány általában a létrehozásától számítva egy évig érvényes.
Az app azonosító (App ID)
Az App ID azonosítja az appodat egy profilban. A bundle azonosítódat veszi át, például com.example.myapp (kitalált példa). Az Apple súgója szerint az engedélyezett képességek listáját is tartalmazza: push értesítések, App Groups, Sign in with Apple…
Expóban ez a konfigurációd ios.bundleIdentifier mezője. Egyszer és mindenkorra válaszd ki: mindenhol azonosnak kell lennie, a konfigurációdban és az App Store Connectben is. Az App ID nem jár le. És az Expo iOS-képességekről szóló doksija szerint az EAS minden buildnél szinkronizálja a képességeit a konfigurációddal.
A provisioning profile
A profil teremti meg a kapcsolatot. Tartalmaz egy App ID-t, egy tanúsítványt és a típusától függően az engedélyezett eszközök listáját. Három típus érint téged:
- Development: a tesztappod a regisztrált eszközeiden.
- Ad hoc: egy pontos eszközlistára telepíthető build, ahol minden eszközt az UDID-ja azonosít. Ez az EAS „belső terjesztése”.
- App Store: az App Store Connecthez és a TestFlighthoz. Nem tartalmaz eszközlistát, ahogy a TN3125-ös jegyzet elmagyarázza.
Minden profilnak van lejárati dátuma: az Apple szerint általában legfeljebb egy év, az Expo szerint 12 hónap.
A push értesítési kulcs (APNs)
Az APNs-kulcs feljogosítja a szerveredet, vagy az Expóét, hogy értesítéseket küldjön az appodnak. Ez egy .p8 fájl, amit csak egyszer tölthetsz le: az Apple nem őrzi meg a fiókodban. Ugyanaz a kulcs az összes appodhoz jó, és soha nem jár le.
Az összefoglaló táblázat
| Elem | Mire való | Élettartam | Ki kezeli Expóval |
|---|---|---|---|
| Terjesztési tanúsítvány | A buildjeid aláírása | Általában egy év | Az EAS, bejelentkezés után |
| App ID | Az appod azonosítása | Nem jár le | Te, aztán az EAS |
| App Store profil | Feltöltés az Apple-nek | Legfeljebb 12 hónap | Az EAS |
| Ad hoc profil | Telepítés az iPhone-jaidra | Legfeljebb 12 hónap | Az EAS és az eszközeid |
| APNs push kulcs | Értesítések küldése | Nem jár le | Az EAS vagy te |
| Ingyenes fiók profilja | Tesztelés Xcode-dal | 7 nap | Az Xcode, nem az EAS |
„Te, aztán az EAS”: te választod a bundle azonosítót, az EAS intézi a képességeket. „Az EAS és az eszközeid”: te regisztrálsz minden teszt-iPhone-t, az EAS elkészíti a profilt. Az utolsó sor az ingyenes Apple-fiókra vonatkozik: az Apple fiókokról szóló súgója szerint ennek profiljai a létrehozásuk után 7 nappal lejárnak.
Az Apple korlátai, amiket ismerned kell
- Terjesztési tanúsítványok: fiókonként nagyon kevés. Az Apple súgója csapatonként és terjesztési típusonként egyről beszél, az Expo táblázata 2-es korlátról. A szabályt jegyezd meg: ne hozz létre új tanúsítványt minden buildnél vagy minden gépen.
- APNs-kulcsok: fiókonként legfeljebb 2, az Expo szerint.
- Profilok: nincs korlát, az Expo szerint.
- Eszközök: termékcsaládonként és tagsági évenként legfeljebb 100, az Apple eszközökről szóló súgója szerint. Egy eszköz letiltása nem szabadít fel helyet. A számláló a következő tagsági év elején áll vissza 100-ra, ha eltávolítod az eszközöket.
Amit az EAS megcsinál helyetted
Az Expo kezelt azonosítókról szóló oldala szerint az első iOS buildednél felajánlja, hogy legenerálja, ami hiányzik. Bejelentkezel az Apple Developer fiókodba, az EAS létrehozza a terjesztési tanúsítványt, a profilt és a push kulcsot, majd a saját szerverein tárolja őket. A következő buildek ezeket használják újra.
Három hasznos tudnivaló:
- Az Apple-jelszavad a gépeden marad. Az Expo biztonsági oldala leírja, hogy nem kerül fel a szervereikre, és a tárolt azonosítók titkosítva vannak.
- Az
eas credentialsmindent megmutat: tanúsítványt, profilokat, push kulcsot. A paranccsal le is cserélheted vagy eltávolíthatod őket. - Ami az EAS-ben törlődik, az nem törlődik az Apple-nél. Ha helyet akarsz felszabadítani, az Apple portálján kell visszavonnod.
Kézben is tarthatod a dolgot helyi azonosítókkal: egy credentials.json fájl mutat a tanúsítványodra (.p12) és a profilodra (.mobileprovision). Az Expo kéri, hogy ezeket a fájlokat tedd be a .gitignore-ba. Ugyanaz a szabály, mint egy Expo app API-kulcsainál: titok soha nem kerül a repóba.
Tipikus hibák és a megoldásuk
Lejárt profil
Egy ad hoc build magával viszi a profilját: amikor az lejár, az app nem nyílik meg többé a teszt-iPhone-jaidon. Az App Store-on viszont az Expo megerősíti, hogy a lejáratnak semmilyen hatása nincs az élesben futó appra. A megoldás: indíts új buildet. Az EAS új profilt generál, vagy megcsinálod magad az eas credentials paranccsal. Utána telepítsd újra az új buildet az eszközeidre.
Ne keverd össze a TestFlighttal: egy TestFlight build 90 nap után lejár, a tanúsítványodtól függetlenül. A részletek: TestFlight az iPhone-os appod teszteléséhez.
Lejárt vagy visszavont tanúsítvány
Az Apple egyértelmű: ha érvényes a tagságod, az App Store-on már fent lévő appjaidat nem érinti. Viszont ezzel a tanúsítvánnyal aláírt buildet már nem tölthetsz fel. Egy feltöltött, de még be nem küldött build Invalid Binary jelölést kaphat, ha a tanúsítványát visszavonták. És a visszavont tanúsítványt tartalmazó profilok érvénytelenné válnak.
A megoldás: hozz létre új tanúsítványt az eas credentials paranccsal vagy a következő buildnél, aztán hagyd, hogy az EAS újracsinálja a profilokat. És soha ne vonj vissza reflexből egy működő tanúsítványt.
Az eszköz hiányzik az ad hoc profilból
A telepítési link nálad működik, de egy tesztelő iPhone-ján nem. Az ok: az Expo belső terjesztésről szóló doksija szerint csak azok az eszközök telepíthetik az appot, amelyek a build pillanatában benne voltak a profilban.
A megoldás:
- Regisztráld az eszközt az
eas device:createparanccsal. - Indíts új buildet interaktív módban, bejelentkezve az Apple-fiókodba, hogy az EAS frissítse a profilt. Vagy írd alá újra a meglévő buildet az
eas build:resignparanccsal, teljes újrafordítás nélkül. - CI-ban a nem interaktív mód újrahasználja a profilt, de nem frissíti a listáját. Add hozzá a
--refresh-ad-hoc-provisioning-profileopciót.
Új vagy épp megújított fióknál az Apple-nek 24-72 óra is kellhet egy új eszköz feldolgozásához. Az első build, amely tartalmazza, ezért elbukhat: várj, aztán indítsd újra.
Elérted a tanúsítványkorlátot
Az Apple nem engedi új terjesztési tanúsítvány létrehozását. Gyakran régi tanúsítványok lógnak ott: egy másik Macen Xcode-ból vagy egy másik build-szolgáltatással létrehozottak. Használd újra a meglévő tanúsítványt, ha megvan a .p12 fájlja. Ha nincs, vond vissza azt, amelyik már nem kell, az Apple portálján. A visszavonás nem érinti a már élő appjaidat, de érvényteleníti az azt tartalmazó profilokat.
„Provisioning profile doesn't include signing certificate”
Ez az Xcode-üzenet azt jelenti, hogy a profil nem tartalmazza azt a tanúsítványt, amelynek a privát kulcsa a gépeden van. Tipikus ok: az Xcode automatikus aláírásának és az EAS azonosítóinak keverése. Válassz egyetlen igazságforrást: EAS buildek kezelt azonosítókkal, vagy helyi azonosítók, de ne mindkettő.
Kulcsvisszavonás után leálltak az értesítések
Ha visszavonod az APNs-kulcsodat, az Expo figyelmeztet, hogy az összes app, amely használja, nem kap többé értesítéseket. Hozz létre új kulcsot, és töltsd fel az eas credentials paranccsal. A felhasználóid Expo Push tokenjei nem változnak.
Új képesség, érvénytelen profil
Egy szolgáltatás bekapcsolása, például a push értesítéseké vagy az App Groupsé, érvénytelenné teszi a profilt: újra kell generálni. EAS-szel a képességek szinkronizálása minden buildnél megtörténik. Ha a profilt továbbra is elutasítja, az eas credentials paranccsal generálhatsz újat.
Mi jön az aláírás után
Egy aláírt build csak egy lépés. Az adatlap, a képernyőképek, az adatvédelem és a felülvizsgálatra küldés itt van összegyűjtve: alkalmazás kiadása az App Store-ban. Ha még nincs tagságod, kezdd az Apple fejlesztői fiókkal. Ha pedig érteni akarod, miért ajánlom kezdőknek az Expót, olvasd el: React Native és Expo mobilapphoz.
Ha az első kiadásodra készülsz
Az első feltöltés előtt csináld meg az ingyenes diagnosztikát: megmondja, mi akad el valójában a projektedben, és elküldi az Apple-elutasítás elleni ellenőrzőlistámat.
Az app felépítéséhez, az előfizetések bekötéséhez és a kiadáshoz úgy, hogy ne kelljen az aláírással birkóznod, az iOS & Android Kit négy lépésben vezet végig a folyamaton, az appjaim kiinduló kódjával, a saját tempódban.
Gyakori kérdések
Mi az a provisioning profile?
Az a fájl, amely engedélyezi, hogy az appod fusson, vagy elmenjen az Apple-höz. Összeköt egy app azonosítót, egy tanúsítványt és a típusától függően egy eszközlistát. Egy App Store profil nem tartalmaz eszközt, egy ad hoc profil felsorol néhányat.
Ingyenes az iOS fejlesztői tanúsítvány?
Nincs külön ára: a terjesztési tanúsítvány benne van az Apple Developer Programban, ami évi 99 dollár. Ingyenes Apple-fiókkal az Xcode legfeljebb 3 eszközön enged tesztelni, de a profilok 7 nap után lejárnak, és kiadni nem lehet.
Meddig érvényes egy Apple terjesztési tanúsítvány?
Az Apple szerint általában a létrehozásától számított egy évig. A provisioning profile-ok is legfeljebb 12 hónapig érvényesek. A push értesítési kulcs viszont soha nem jár le.
Mi történik, ha lejár a terjesztési tanúsítványom?
Az App Store-on már fent lévő appjaiddal semmi, amíg érvényes a tagságod. Egyszerűen nem tölthetsz fel többé új buildet ezzel a tanúsítvánnyal aláírva. EAS-szel új tanúsítvány jön létre a következő buildnél vagy az eas credentials paranccsal.
Kell Mac egy iOS-tanúsítvány létrehozásához?
Nem, ha az EAS-t használod. A parancssorból bejelentkezel az Apple-fiókodba, és az EAS legenerálja a tanúsítványt és a profilt, Windowson és Linuxon is. EAS nélkül a klasszikus módszer az Xcode-on vagy egy Mac kulcskarikáján keresztül megy.
Hány eszközt tartalmazhat egy ad hoc profil?
A fiókod tagsági évenként legfeljebb 100 iPhone-t regisztrálhat, és ugyanennyit minden más eszközcsaládból. Egy letiltott eszköz továbbra is beleszámít. Ha több emberrel akarsz tesztelni, használd a TestFlightot.

