iOS certifikát vývojáře a provisioning profile s Expo
Autor: Mehdi Azizi
Publikováno , 9 min
Certifikát dokazuje, kdo podepsal tvou appku, provisioning profile určuje kterou appku a na kterých iPhonech. S Expo oboje vytvoří a obnoví EAS za tebe.
Certifikát vývojáře iOS dokazuje, kdo tvou appku podepsal. Provisioning profile (zřizovací profil) propojuje tento certifikát s konkrétní appkou a říká, kde smí běžet. S Expo je skoro nikdy nemusíš vyrábět ručně: EAS je vytvoří, uloží a obnoví, když spustíš build.
Vědět, co který soubor dělá, se ale pořád hodí. Až se ti jednou build odmítne nainstalovat nebo se zasekne odeslání, právě tohle ti ušetří celý den. Tenhle návod projde všechny čtyři prvky, jejich platnost, limity Applu a typické chyby, u každé i s řešením.
Své iOS appky, mimo jiné Solys a TradaZen, publikuju přes Expo a EAS. Celý postup najdeš v článku publikovat iOS appku bez Macu. Tady se podíváme pod kapotu podepisování.
Proč Apple vyžaduje podpis
Aby se iOS appka dala nainstalovat na iPhone nebo odeslat do App Store Connect, musí být podepsaná. Podpis zaručuje, že appka pochází od vývojáře, kterého Apple zná, a že ji od té doby nikdo nezměnil.
U App Storu je jeden uklidňující detail. Podle technické poznámky Applu TN3161 App Store při odeslání ověří, že je tvůj distribuční certifikát platný, a pak appku znovu podepíše. Od té chvíle už appka nezávisí na datu vypršení tvého certifikátu. Tvoje certifikáty tedy musí být platné v okamžiku odeslání, ne po celou dobu života appky.
Čtyři prvky, které potřebuješ znát
Dokumentace Expo k přihlašovacím údajům jich pro iOS uvádí tři: distribuční certifikát, profily a klíč pro push notifikace. Já přidávám ještě identifikátor appky, bez kterého žádný profil neexistuje.
Distribuční certifikát
Je to tvůj podpis vývojáře. Nápověda Applu k certifikátům rozlišuje dvě skupiny:
- Apple Development slouží ke spouštění appky na tvých zařízeních během vývoje. Patří jedné osobě.
- Apple Distribution slouží k distribuci na určená testovací zařízení nebo k odeslání do App Store Connect. Patří týmu a vytvořit ho může jen vlastník účtu nebo admin.
Distribuční certifikát se netýká žádné konkrétní appky: tentýž podepisuje všechny tvoje appky. Patří k němu privátní klíč a právě ten umožňuje podepisovat. Podle TN3161 platí certifikát Applu obvykle jeden rok od vytvoření.
Identifikátor appky (App ID)
App ID identifikuje tvou appku v profilu. Přebírá tvůj bundle identifier, třeba com.example.myapp (smyšlený příklad). Podle nápovědy Applu nese také seznam povolených funkcí (capabilities): push notifikace, App Groups, Sign in with Apple…
V Expo je to pole ios.bundleIdentifier v konfiguraci. Zvol ho jednou provždy: musí být všude stejné, v konfiguraci i v App Store Connect. App ID nevyprší. A podle dokumentace Expo k iOS capabilities EAS při každém buildu synchronizuje jeho funkce s tvou konfigurací.
Provisioning profile
Profil všechno propojuje. Obsahuje App ID, certifikát a podle typu i seznam povolených zařízení. Týkají se tě tři typy:
- Development: testovací verze appky na tvých registrovaných zařízeních.
- Ad hoc: build, který se dá nainstalovat na přesný seznam zařízení, každé identifikované svým UDID. To je „interní distribuce“ v EAS.
- App Store: pro App Store Connect a TestFlight. Neobsahuje žádný seznam zařízení, jak vysvětluje poznámka TN3125.
Každý profil má datum vypršení: podle Applu obvykle nejvýš jeden rok, podle Expo 12 měsíců.
Klíč pro push notifikace (APNs)
Klíč APNs opravňuje tvůj server, nebo server Expo, posílat tvé appce notifikace. Je to soubor .p8, který si můžeš stáhnout jen jednou: Apple ho ve tvém účtu neuchovává. Jeden klíč poslouží pro všechny tvoje appky a nikdy nevyprší.
Souhrnná tabulka
| Prvek | K čemu slouží | Platnost | Kdo ho spravuje s Expo |
|---|---|---|---|
| Distribuční certifikát | Podepisování buildů | Obvykle jeden rok | EAS, po přihlášení |
| App ID | Identifikace appky | Nevyprší | Ty, pak EAS |
| Profil App Store | Odeslání do Applu | Až 12 měsíců | EAS |
| Profil ad hoc | Instalace na tvé iPhony | Až 12 měsíců | EAS a tvoje zařízení |
| Push klíč APNs | Posílání notifikací | Nevyprší | EAS nebo ty |
| Profil bezplatného účtu | Testování přes Xcode | 7 dní | Xcode, ne EAS |
„Ty, pak EAS“: bundle identifier si volíš ty, o funkce se postará EAS. „EAS a tvoje zařízení“: každý testovací iPhone zaregistruješ ty, profil vyrobí EAS. Poslední řádek se týká bezplatného účtu Apple: podle nápovědy Applu k účtům jeho profily vyprší 7 dní po vytvoření.
Limity Applu, které musíš znát
- Distribuční certifikáty: na účet jich je velmi málo. Nápověda Applu mluví o jediném na typ distribuce a tým, tabulka Expo o limitu 2. Zapamatuj si pravidlo: nevytvářej nový certifikát při každém buildu ani na každém počítači.
- Klíče APNs: podle Expo maximálně 2 na účet.
- Profily: podle Expo bez limitu.
- Zařízení: až 100 na produktovou rodinu a rok členství, podle nápovědy Applu k zařízením. Deaktivace zařízení místo neuvolní. Počítadlo se vrátí na 100 na začátku dalšího roku členství, pokud zařízení odebereš.
Co za tebe udělá EAS
Podle stránky Expo o spravovaných přihlašovacích údajích ti první iOS build nabídne vygenerovat, co chybí. Přihlásíš se ke svému účtu Apple Developer, EAS vytvoří distribuční certifikát, profil a push klíč a uloží je na svých serverech. Další buildy je použijí znovu.
Tři užitečné body:
- Tvoje heslo k Applu zůstává na tvém počítači. Bezpečnostní stránka Expo upřesňuje, že se na jejich servery neposílá a že uložené údaje jsou šifrované.
eas credentialsti ukáže všechno: certifikát, profily, push klíč. Příkaz je umí i nahradit nebo odebrat.- Smazání v EAS nemaže u Applu. Chceš-li uvolnit místo, musíš certifikát zneplatnit (revoke) v portálu Applu.
Kontrolu si můžeš nechat i přes lokální přihlašovací údaje: soubor credentials.json odkazuje na tvůj certifikát (.p12) a profil (.mobileprovision). Expo žádá, abys tyhle soubory přidal do .gitignore. Je to stejné pravidlo jako u API klíčů v Expo appce: tajemství nikdy nepatří do repozitáře.
Typické chyby a jak je vyřešit
Vypršelý profil
Ad hoc build si svůj profil nese s sebou: když vyprší, appka se na tvých testovacích iPhonech přestane otevírat. U App Storu naopak Expo potvrzuje, že vypršení nemá na appku v produkci žádný vliv. Řešení: spusť nový build. EAS vygeneruje nový profil, nebo to uděláš sám přes eas credentials. Pak nový build znovu nainstaluj na svá zařízení.
Nepleť si to s TestFlightem: build v TestFlightu vyprší po 90 dnech bez ohledu na certifikát. Podrobnosti jsou v článku TestFlight pro testování iPhone appky.
Vypršelý nebo zneplatněný certifikát
Apple to říká jasně: pokud máš platné členství, tvých appek už na App Storu se to nedotkne. Jen už nemůžeš odeslat build podepsaný tímto certifikátem. Build odeslaný, ale ještě neodevzdaný ke kontrole může dostat stav Invalid Binary, pokud byl jeho certifikát zneplatněn. A profily obsahující zneplatněný certifikát přestanou platit.
Řešení: vytvoř nový certifikát přes eas credentials nebo při dalším buildu a nech EAS přegenerovat profily. A nikdy nezneplatňuj fungující certifikát jen tak ze zvyku.
Zařízení chybí v ad hoc profilu
Instalační odkaz u tebe funguje, ale na iPhonu testera ne. Příčina: dokumentace Expo k interní distribuci vysvětluje, že appku můžou nainstalovat jen zařízení, která byla v profilu v okamžiku buildu.
Řešení:
- Zaregistruj zařízení přes
eas device:create. - Spusť nový build v interaktivním režimu, přihlášený ke svému účtu Apple, aby EAS profil aktualizoval. Nebo existující build znovu podepiš přes
eas build:resign, bez nové kompilace. - V CI neinteraktivní režim profil použije znovu, ale jeho seznam neaktualizuje. Přidej volbu
--refresh-ad-hoc-provisioning-profile.
U nového nebo čerstvě obnoveného účtu může Applu zpracování nového zařízení trvat 24 až 72 hodin. První build, který ho obsahuje, tak může selhat: počkej a spusť ho znovu.
Dosažen limit certifikátů
Apple odmítá vytvořit nový distribuční certifikát. Často se někde povalují staré certifikáty: vytvořené z Xcode na jiném Macu nebo jinou build službou. Použij existující certifikát, pokud máš jeho soubor .p12. Jinak zneplatni ten, který už nepoužíváš, v portálu Applu. Zneplatnění neovlivní tvoje appky, které už jsou venku, ale zneplatní profily, které ho obsahovaly.
„Provisioning profile doesn't include signing certificate“
Tahle hláška z Xcode znamená, že profil neobsahuje certifikát, jehož privátní klíč máš na počítači. Typická příčina: míchání automatického podepisování v Xcode s přihlašovacími údaji EAS. Zvol jediný zdroj pravdy: buildy EAS se spravovanými údaji, nebo lokální údaje, ale ne obojí.
Notifikace nefungují po zneplatnění klíče
Když zneplatníš svůj klíč APNs, Expo upozorňuje, že všechny appky, které ho používají, přestanou dostávat notifikace. Vytvoř nový klíč a nahraj ho přes eas credentials. Expo Push tokeny tvých uživatelů se nemění.
Přidaná funkce, neplatný profil
Zapnutí služby, jako jsou push notifikace nebo App Groups, zneplatní profil: musíš ho vygenerovat znovu. S EAS probíhá synchronizace funkcí při každém buildu. Pokud je profil i tak odmítán, přes eas credentials vygeneruješ nový.
Co dál po podepsání
Podepsaný build je jen jeden krok. Stránka v obchodě, screenshoty, soukromí a odeslání ke kontrole najdeš pohromadě v článku publikovat aplikaci na App Store. Jestli ještě nemáš členství, začni u vývojářského účtu Apple. A proč začátečníkům doporučuju Expo, se dočteš v článku React Native a Expo pro mobilní appku.
Pokud chystáš svou první publikaci
Před prvním odesláním si udělej bezplatnou diagnostiku: řekne ti, co tvůj projekt opravdu brzdí, a pošle ti můj checklist proti zamítnutí od Applu.
Chceš appku postavit, napojit předplatné a publikovat ji, aniž by ses pral s podepisováním? iOS & Android Kit tě provede postupem ve čtyřech krocích se startovacím kódem mých appek, svým tempem.
Časté dotazy
Co je provisioning profile?
Je to soubor, který tvé appce povoluje běžet nebo odejít k Applu. Propojuje identifikátor appky, certifikát a podle typu i seznam zařízení. Profil App Store neobsahuje žádné zařízení, ad hoc profil jich pár vyjmenovává.
Je certifikát vývojáře iOS zdarma?
Samostatně nic nestojí: distribuční certifikát je součástí Apple Developer Programu za 99 dolarů ročně. S bezplatným účtem Apple ti Xcode dovolí testovat nejvýš na 3 zařízeních, ale profily vyprší po 7 dnech a publikovat nejde.
Jak dlouho platí distribuční certifikát Applu?
Podle Applu obvykle jeden rok od vytvoření. Provisioning profily platí také nejvýš 12 měsíců. Klíč pro push notifikace naopak nikdy nevyprší.
Co se stane, když mi vyprší distribuční certifikát?
Tvým appkám, které už jsou na App Storu, se nic nestane, dokud máš platné členství. Jen už s tímto certifikátem nemůžeš odeslat nový podepsaný build. S EAS se nový certifikát vytvoří při dalším buildu nebo přes eas credentials.
Potřebuju Mac k vytvoření iOS certifikátu?
Ne, pokud jedeš přes EAS. Přihlásíš se ke svému účtu Apple z příkazové řádky a EAS vygeneruje certifikát i profil, na Windows stejně jako na Linuxu. Bez EAS vede klasická cesta přes Xcode nebo Klíčenku (Keychain Access) na Macu.
Kolik zařízení může obsahovat ad hoc profil?
Tvůj účet může zaregistrovat až 100 iPhonů za rok členství a stejně tolik pro každou další rodinu zařízení. Deaktivované zařízení se pořád počítá. Chceš-li testovat s víc lidmi, použij TestFlight.

