iOS certifikát vývojára: provisioning profile a Expo
Autor: Mehdi Azizi
Zverejnené , 9 min
Certifikát dokazuje, kto podpísal tvoju appku, provisioning profile určuje ktorú appku a na ktorých iPhonoch. S Expo ich EAS vytvorí aj obnoví za teba.
iOS certifikát vývojára dokazuje, kto podpísal tvoju appku. Provisioning profile (profil na distribúciu) spája tento certifikát s konkrétnou appkou a určuje, kde môže bežať. S Expo ich takmer nikdy nemusíš vytvárať ručne: EAS ich vytvorí, uloží a obnoví, keď spustíš build.
Pochopiť, čo ktorý súbor robí, sa ale oplatí. V deň, keď sa build odmietne nainštalovať alebo sa zasekne odoslanie, ti práve tieto vedomosti ušetria celý deň. Tento návod prejde všetky štyri prvky, ich platnosť, limity Apple a typické chyby, ku každej aj s riešením.
Svoje iOS appky, medzi nimi Solys a TradaZen, publikujem cez Expo a EAS. Celý postup nájdeš v článku publikovať iOS appku bez Macu. Tu sa pozrieme pod kapotu podpisovania.
Prečo Apple vyžaduje podpis
iOS appka musí byť podpísaná, aby sa dala nainštalovať na iPhone alebo odoslať do App Store Connect. Podpis zaručuje, že appka pochádza od vývojára, ktorého Apple pozná, a že ju odvtedy nikto nezmenil.
Pri App Store je tu jeden upokojujúci detail. Podľa technickej poznámky Apple TN3161 App Store pri odoslaní overí, že tvoj distribučný certifikát je platný, a potom appku podpíše nanovo. Odvtedy už appka nezávisí od dátumu expirácie tvojho certifikátu. Tvoje certifikáty teda musia byť platné v momente odoslania, nie počas celého života appky.
Štyri prvky, ktoré musíš poznať
Dokumentácia Expo o prihlasovacích údajoch uvádza pre iOS tri: distribučný certifikát, profily a kľúč pre push notifikácie. Ja pridávam ešte App ID, bez ktorého žiadny profil neexistuje.
Distribučný certifikát
Je to tvoj podpis vývojára. Nápoveda Apple o certifikátoch rozlišuje dve skupiny:
- Apple Development slúži na spúšťanie appky na tvojich zariadeniach počas vývoja. Patrí jednej osobe.
- Apple Distribution slúži na distribúciu na určené testovacie zariadenia alebo na odoslanie do App Store Connect. Patrí tímu a vytvoriť ho môže len držiteľ účtu alebo admin.
Distribučný certifikát sa netýka žiadnej konkrétnej appky: ten istý podpisuje všetky tvoje appky. Patrí k nemu súkromný kľúč a práve ten umožňuje podpisovať. Podľa TN3161 platí certifikát Apple spravidla jeden rok od vytvorenia.
Identifikátor appky (App ID)
App ID identifikuje tvoju appku v profile. Preberá tvoj bundle identifier, napríklad com.exemple.monapp (vymyslený príklad). Podľa nápovedy Apple obsahuje aj zoznam povolených capabilities: push notifikácie, App Groups, Sign in with Apple…
V Expo je to pole ios.bundleIdentifier v tvojej konfigurácii. Vyber ho raz a navždy: musí byť všade rovnaký, v konfigurácii aj v App Store Connect. App ID neexpiruje. A podľa dokumentácie Expo o iOS capabilities EAS pri každom builde zosynchronizuje jeho capabilities s tvojou konfiguráciou.
Provisioning profile
Profil všetko prepája. Obsahuje App ID, certifikát a podľa typu aj zoznam povolených zariadení. Týkajú sa ťa tri typy:
- Development: tvoja testovacia appka na tvojich registrovaných zariadeniach.
- Ad hoc: build, ktorý sa dá nainštalovať na presný zoznam zariadení, každé identifikované svojím UDID. Toto je „internal distribution“ v EAS.
- App Store: pre App Store Connect a TestFlight. Neobsahuje žiadny zoznam zariadení, vysvetľuje poznámka TN3125.
Každý profil má dátum expirácie: podľa Apple spravidla najviac jeden rok, podľa Expo 12 mesiacov.
Kľúč pre push notifikácie (APNs)
Kľúč APNs povoľuje tvojmu serveru, alebo serveru Expo, posielať notifikácie do tvojej appky. Je to súbor .p8, ktorý sa dá stiahnuť len raz: Apple si ho v tvojom účte neuchováva. Jeden kľúč slúži pre všetky tvoje appky a nikdy neexpiruje.
Súhrnná tabuľka
| Prvok | Slúži na | Platnosť | Kto ho spravuje s Expo |
|---|---|---|---|
| Distribučný certifikát | Podpisovanie buildov | Spravidla jeden rok | EAS, po prihlásení |
| App ID | Identifikáciu appky | Neexpiruje | Ty, potom EAS |
| Profil App Store | Odoslanie do Apple | Až 12 mesiacov | EAS |
| Profil ad hoc | Inštaláciu na tvoje iPhony | Až 12 mesiacov | EAS a tvoje zariadenia |
| Push kľúč APNs | Posielanie notifikácií | Neexpiruje | EAS alebo ty |
| Profil bezplatného účtu | Testovanie cez Xcode | 7 dní | Xcode, nie EAS |
„Ty, potom EAS“: bundle identifier vyberáš ty, o capabilities sa postará EAS. „EAS a tvoje zariadenia“: každý testovací iPhone zaregistruješ ty, profil vyrobí EAS. Posledný riadok sa týka bezplatného Apple účtu: podľa nápovedy Apple o účtoch jeho profily expirujú 7 dní po vytvorení.
Limity Apple, ktoré musíš poznať
- Distribučné certifikáty: na účet ich je veľmi málo. Nápoveda Apple hovorí o jednom na typ distribúcie a tím, tabuľka Expo o limite 2. Zapamätaj si pravidlo: nevytváraj nový certifikát pri každom builde ani na každom počítači.
- Kľúče APNs: najviac 2 na účet, podľa Expo.
- Profily: bez limitu, podľa Expo.
- Zariadenia: až 100 na produktovú rodinu a rok členstva, podľa nápovedy Apple o zariadeniach. Deaktivácia zariadenia neuvoľní miesto. Počítadlo sa vráti na 100 na začiatku ďalšieho roka členstva, ak zariadenia odstrániš.
Čo za teba urobí EAS
Podľa stránky Expo o spravovaných údajoch ti prvý iOS build ponúkne vygenerovať, čo chýba. Prihlásiš sa do svojho Apple Developer účtu, EAS vytvorí distribučný certifikát, profil a push kľúč a uloží ich na svoje servery. Ďalšie buildy ich použijú znova.
Tri užitočné body:
- Tvoje heslo k Apple zostáva na tvojom počítači. Bezpečnostná stránka Expo upresňuje, že sa neposiela na ich servery a že uložené údaje sú šifrované.
eas credentialsti ukáže všetko: certifikát, profily, push kľúč. Príkaz ich umožňuje aj nahradiť alebo odstrániť.- Vymazanie v EAS neznamená vymazanie u Apple. Ak chceš uvoľniť miesto, musíš certifikát zrušiť (revoke) na portáli Apple.
Kontrolu si môžeš nechať aj cez lokálne údaje: súbor credentials.json odkazuje na tvoj certifikát (.p12) a profil (.mobileprovision). Expo žiada pridať tieto súbory do .gitignore. Je to rovnaké pravidlo ako pri API kľúčoch v Expo appke: tajomstvo nikdy nepatrí do repozitára.
Typické chyby a ako ich vyriešiť
Expirovaný profil
Ad hoc build v sebe nesie svoj profil: keď expiruje, appka sa na tvojich testovacích iPhonoch už neotvorí. Na App Store však podľa Expo expirácia nemá na appku v produkcii žiadny vplyv. Riešenie: spusti nový build. EAS vygeneruje nový profil, alebo to urobíš sám cez eas credentials. Potom nový build znova nainštaluj na svoje zariadenia.
Nezamieňaj si to s TestFlight: build v TestFlight expiruje po 90 dňoch bez ohľadu na certifikát. Podrobnosti nájdeš v článku TestFlight na testovanie iPhone appky.
Expirovaný alebo zrušený certifikát
Apple to hovorí jasne: ak je tvoje členstvo platné, tvoje appky, ktoré už sú na App Store, to neovplyvní. Nový build podpísaný týmto certifikátom však už neodošleš. Build odoslaný, ale ešte nepodaný na review, môže byť označený ako Invalid Binary, ak bol jeho certifikát zrušený. A profily, ktoré obsahujú zrušený certifikát, sa stanú neplatnými.
Riešenie: vytvor nový certifikát cez eas credentials alebo pri ďalšom builde a nechaj EAS vyrobiť profily nanovo. A nikdy nerušíš funkčný certifikát len zo zvyku.
Zariadenie chýba v ad hoc profile
Inštalačný odkaz u teba funguje, ale na iPhone testera nie. Príčina: dokumentácia Expo o internal distribution vysvetľuje, že appku môžu nainštalovať len zariadenia, ktoré boli v profile v čase buildu.
Riešenie:
- Zaregistruj zariadenie príkazom
eas device:create. - Spusti nový build v interaktívnom režime, prihlásený do Apple účtu, aby EAS aktualizoval profil. Alebo existujúci build znova podpíš cez
eas build:resignbez kompletného prekompilovania. - V CI neinteraktívny režim použije profil znova bez aktualizácie zoznamu. Pridaj voľbu
--refresh-ad-hoc-provisioning-profile.
Na novom alebo práve obnovenom účte môže Apple spracovávať nové zariadenie 24 až 72 hodín. Prvý build, ktorý ho obsahuje, preto môže zlyhať: počkaj a skús to znova.
Dosiahnutý limit certifikátov
Apple odmietne vytvoriť nový distribučný certifikát. Často sa niekde povaľujú staré certifikáty: vytvorené v Xcode na inom Macu alebo inou build službou. Použi existujúci certifikát, ak máš jeho súbor .p12. Ak nie, zruš ten, ktorý už nepoužívaš, na portáli Apple. Zrušenie neovplyvní tvoje appky, ktoré už sú online, ale zneplatní profily, ktoré ho obsahovali.
„Provisioning profile doesn't include signing certificate“
Táto správa z Xcode znamená, že profil neobsahuje certifikát, ktorého súkromný kľúč máš na počítači. Typická príčina: miešanie automatického podpisovania v Xcode a údajov z EAS. Vyber si jeden zdroj pravdy: EAS buildy so spravovanými údajmi, alebo lokálne údaje, ale nie oboje.
Notifikácie nefungujú po zrušení kľúča
Ak zrušíš svoj kľúč APNs, Expo upozorňuje, že všetky appky, ktoré ho používajú, prestanú dostávať notifikácie. Vytvor nový kľúč a nahraj ho cez eas credentials. Expo Push tokeny tvojich používateľov sa nemenia.
Pridaná capability, neplatný profil
Zapnutie služby ako push notifikácie alebo App Groups zneplatní profil: treba ho vygenerovať znova. S EAS prebieha synchronizácia capabilities pri každom builde. Ak je profil stále odmietaný, eas credentials ti umožní vygenerovať nový.
Čo nasleduje po podpísaní
Podpísaný build je len jeden krok. Stránka v obchode, screenshoty, súkromie a odoslanie na review sú spolu v článku publikovať aplikáciu na App Store. Ak ešte nemáš členstvo, začni Apple vývojárskym účtom. A ak chceš pochopiť, prečo začiatočníkom odporúčam Expo, prečítaj si React Native a Expo pre mobilnú appku.
Ak pripravuješ svoju prvú publikáciu
Pred prvým odoslaním si urob bezplatnú diagnostiku: povie ti, čo v tvojom projekte naozaj blokuje, a pošle ti môj checklist proti zamietnutiu od Apple.
Ak chceš appku postaviť, zapojiť predplatné a publikovať ju bez boja s podpisovaním, iOS & Android Kit ťa prevedie postupom v štyroch krokoch so štartovacím kódom mojich appiek, vlastným tempom.
Často kladené otázky
Čo je provisioning profile?
Je to súbor, ktorý povoľuje tvojej appke bežať alebo ísť do Apple. Spája App ID, certifikát a podľa typu aj zoznam zariadení. Profil App Store neobsahuje žiadne zariadenie, ad hoc profil ich pár uvádza.
Je iOS certifikát vývojára zadarmo?
Nemá samostatnú cenu: distribučný certifikát je súčasťou Apple Developer Program za 99 $ ročne. S bezplatným Apple účtom ti Xcode dovolí testovať najviac na 3 zariadeniach, ale profily expirujú po 7 dňoch a publikovanie nie je možné.
Ako dlho platí distribučný certifikát Apple?
Podľa Apple spravidla jeden rok od vytvorenia. Provisioning profily platia tiež najviac 12 mesiacov. Kľúč pre push notifikácie nikdy neexpiruje.
Čo sa stane, keď môj distribučný certifikát expiruje?
Tvojim appkám, ktoré už sú na App Store, sa nič nestane, kým je tvoje členstvo platné. Len už nemôžeš odoslať nový build podpísaný týmto certifikátom. S EAS sa nový certifikát vytvorí pri ďalšom builde alebo cez eas credentials.
Potrebujem Mac na vytvorenie iOS certifikátu?
Nie, ak používaš EAS. Do Apple účtu sa prihlásiš z príkazového riadku a EAS vygeneruje certifikát aj profil, na Windowse aj na Linuxe. Bez EAS vedie klasická cesta cez Xcode alebo Keychain Access na Macu.
Koľko zariadení môže obsahovať ad hoc profil?
Tvoj účet môže zaregistrovať až 100 iPhonov na rok členstva a rovnako veľa pre každú ďalšiu rodinu zariadení. Deaktivované zariadenie sa stále počíta. Ak chceš testovať s viacerými ľuďmi, použi TestFlight.

