iOS developerski certifikat: provisioning profile i Expo
Autor: Mehdi Azizi
Objavljeno , 9 min
Certifikat dokazuje tko potpisuje aplikaciju, a profil koju i na kojim iPhoneima. S Expoom EAS izrađuje i obnavlja oboje.
Developerski iOS certifikat dokazuje tko je potpisao tvoju aplikaciju. Provisioning profile (profil za distribuciju) povezuje taj certifikat s točno određenom aplikacijom i kaže gdje se ona smije pokretati. S Expoom ih gotovo nikad ne moraš raditi ručno: EAS ih izrađuje, sprema i obnavlja kad pokreneš build.
I dalje je korisno razumjeti što koja datoteka radi. Onog dana kad se build ne želi instalirati ili slanje zapne, upravo ti to znanje štedi cijeli dan. Ovaj vodič prolazi kroz četiri elementa, koliko traju, Appleova ograničenja i tipične greške, uz rješenje za svaku.
Svoje iOS aplikacije, među njima Solys i TradaZen, objavljujem s Expoom i EAS-om. Cijeli postupak opisan je u tekstu objavi iOS aplikaciju bez Maca. Ovdje otvaramo haubu potpisivanja.
Zašto Apple traži potpis
iOS aplikacija mora biti potpisana da bi se instalirala na iPhone ili otišla u App Store Connect. Potpis jamči da aplikacija dolazi od developera kojeg Apple poznaje i da je u međuvremenu nitko nije mijenjao.
Što se tiče App Storea, jedan detalj umiruje. Prema Appleovoj tehničkoj bilješci TN3161, App Store pri slanju provjerava je li tvoj distribucijski certifikat valjan, a zatim aplikaciju ponovno potpisuje, pa ona više ne ovisi o datumu isteka tvog certifikata. Certifikati ti dakle moraju biti valjani u trenutku slanja, a ne kroz cijeli život aplikacije.
Četiri elementa koje trebaš znati
Expova dokumentacija o vjerodajnicama za iOS navodi tri: distribucijski certifikat, profile i ključ za push obavijesti. Ja dodajem i App ID, bez kojeg nijedan profil ne postoji.
Distribucijski certifikat
To je tvoj developerski potpis. Appleova pomoć o certifikatima razlikuje dvije vrste:
- Apple Development služi za pokretanje aplikacije na tvojim uređajima tijekom razvoja. Pripada jednoj osobi.
- Apple Distribution služi za distribuciju na određene testne uređaje ili za slanje u App Store Connect. Pripada timu, a mogu ga izraditi samo vlasnik računa ili admin.
Distribucijski certifikat nije vezan ni uz jednu aplikaciju: isti potpisuje sve tvoje aplikacije. Ide uz privatni ključ, a upravo on omogućuje potpisivanje. Prema TN3161, Appleov certifikat u pravilu vrijedi godinu dana od izrade.
Identifikator aplikacije (App ID)
App ID identificira tvoju aplikaciju u profilu. Preuzima tvoj bundle identifier, na primjer com.exemple.monapp (izmišljen primjer). Prema Appleovoj pomoći, nosi i popis dopuštenih mogućnosti: push obavijesti, App Groups, Sign in with Apple…
U Expou je to polje ios.bundleIdentifier u tvojoj konfiguraciji. Odaberi ga jednom zauvijek: mora biti isti posvuda, i u konfiguraciji i u App Store Connectu. App ID ne istječe. A prema Expovoj dokumentaciji o iOS mogućnostima, EAS pri svakom buildu usklađuje njegove mogućnosti s tvojom konfiguracijom.
Provisioning profile
Profil je poveznica. Sadrži App ID, certifikat i, ovisno o vrsti, popis dopuštenih uređaja. Tebe zanimaju tri vrste:
- Development: tvoja testna aplikacija na tvojim registriranim uređajima.
- Ad hoc: build koji se može instalirati na točno određen popis uređaja, a svaki je prepoznat po svom UDID-u. To je „interna distribucija” u EAS-u.
- App Store: za App Store Connect i TestFlight. Ne sadrži nikakav popis uređaja, objašnjava bilješka TN3125.
Svaki profil ima datum isteka: prema Appleu u pravilu najviše godinu dana, prema Expou 12 mjeseci.
Ključ za push obavijesti (APNs)
APNs ključ dopušta tvom serveru, ili Expovom, slanje obavijesti tvojoj aplikaciji. To je .p8 datoteka koja se preuzima samo jednom: Apple je ne čuva na tvom računu. Isti ključ služi za sve tvoje aplikacije i nikad ne istječe.
Sažeta tablica
| Element | Služi za | Trajanje | Tko njime upravlja uz Expo |
|---|---|---|---|
| Distribucijski certifikat | Potpisivanje buildova | U pravilu godinu dana | EAS, nakon prijave |
| App ID | Identifikaciju aplikacije | Ne istječe | Ti, zatim EAS |
| App Store profil | Slanje Appleu | Do 12 mjeseci | EAS |
| Ad hoc profil | Instalaciju na tvoje iPhonee | Do 12 mjeseci | EAS i tvoji uređaji |
| APNs push ključ | Slanje obavijesti | Ne istječe | EAS ili ti |
| Profil besplatnog računa | Testiranje preko Xcodea | 7 dana | Xcode, ne EAS |
„Ti, zatim EAS”: ti biraš bundle identifier, EAS se brine za mogućnosti. „EAS i tvoji uređaji”: ti registriraš svaki testni iPhone, EAS izrađuje profil. Zadnji redak odnosi se na besplatni Apple račun: prema Appleovoj pomoći o računima, njegovi profili istječu 7 dana nakon izrade.
Appleova ograničenja koja trebaš znati
- Distribucijski certifikati: vrlo malo po računu. Appleova pomoć govori o jednom po vrsti distribucije i po timu, Expova tablica o ograničenju od 2. Zapamti pravilo: ne izrađuj novi certifikat za svaki build ili na svakom računalu.
- APNs ključevi: najviše 2 po računu, prema Expou.
- Profili: bez ograničenja, prema Expou.
- Uređaji: do 100 po obitelji proizvoda i po godini članstva, prema Appleovoj pomoći o uređajima. Deaktiviranje uređaja ne oslobađa mjesto. Brojač se vraća na 100 na početku sljedeće godine članstva, ako ukloniš uređaje.
Što EAS radi umjesto tebe
Prema Expovoj stranici o upravljanim vjerodajnicama, tvoj prvi iOS build nudi ti da generiraš ono što nedostaje. Prijaviš se na svoj Apple Developer račun, EAS izradi distribucijski certifikat, profil i push ključ te ih spremi na svoje servere. Sljedeći buildovi ih ponovno koriste.
Tri korisne stvari:
- Tvoja Apple lozinka ostaje na tvom računalu. Expova stranica o sigurnosti navodi da se ne šalje na njihove servere i da su spremljene vjerodajnice šifrirane.
eas credentialspokazuje ti sve: certifikat, profile, push ključ. Naredbom ih možeš i zamijeniti ili ukloniti.- Brisanje u EAS-u ne briše kod Applea. Da oslobodiš mjesto, moraš opozvati u Appleovom portalu.
Kontrolu možeš zadržati i lokalnim vjerodajnicama: datoteka credentials.json upućuje na tvoj certifikat (.p12) i profil (.mobileprovision). Expo traži da te datoteke dodaš u .gitignore. Isto pravilo vrijedi i za API ključeve u Expo aplikaciji: tajna nikad ne ide u repozitorij.
Tipične greške i kako ih riješiti
Istekao profil
Ad hoc build nosi svoj profil u sebi: kad on istekne, aplikacija se više ne otvara na tvojim testnim iPhoneima. Na App Storeu pak, Expo potvrđuje da istek nema nikakav učinak na aplikaciju u produkciji. Rješenje: pokreni novi build. EAS generira novi profil, ili to sam napraviš s eas credentials. Zatim ponovno instaliraj novi build na svoje uređaje.
Ne miješaj to s TestFlightom: TestFlight build istječe nakon 90 dana, bez obzira na tvoj certifikat. Detalji su u tekstu TestFlight za testiranje iPhone aplikacije.
Istekao ili opozvan certifikat
Apple je jasan: ako ti je članstvo valjano, aplikacije koje su već na App Storeu nisu pogođene. Ali više ne možeš slati buildove potpisane tim certifikatom. Build koji je poslan, a još nije predan na pregled, može dobiti oznaku Invalid Binary ako mu je certifikat opozvan. I profili koji sadrže opozvani certifikat postaju nevaljani.
Rješenje: izradi novi certifikat preko eas credentials ili pri sljedećem buildu, pa pusti EAS da ponovno napravi profile. I nikad refleksno ne opozivaj certifikat koji radi.
Uređaj nije u ad hoc profilu
Link za instalaciju radi kod tebe, ali ne na iPhoneu testera. Uzrok: Expova dokumentacija o internoj distribuciji objašnjava da aplikaciju mogu instalirati samo uređaji koji su bili u profilu u trenutku builda.
Rješenje:
- Registriraj uređaj s
eas device:create. - Pokreni novi build u interaktivnom načinu, prijavljen na svoj Apple račun, da EAS ažurira profil. Ili ponovno potpiši postojeći build s
eas build:resign, bez ponovnog kompajliranja. - U kontinuiranoj integraciji neinteraktivni način ponovno koristi profil bez ažuriranja popisa. Dodaj opciju
--refresh-ad-hoc-provisioning-profile.
Na novom ili tek obnovljenom računu Appleu može trebati 24 do 72 sata da obradi novi uređaj. Prvi build koji ga uključuje zato može pasti: pričekaj, pa pokreni ponovno.
Dosegnuto ograničenje certifikata
Apple odbija izraditi novi distribucijski certifikat. Često se negdje vuku stari certifikati: izrađeni iz Xcodea na drugom Macu ili preko drugog build servisa. Ponovno iskoristi postojeći certifikat ako imaš njegovu .p12 datoteku. Ako nemaš, opozovi onaj koji se više ne koristi u Appleovom portalu. Opoziv ne utječe na tvoje aplikacije koje su već objavljene, ali poništava profile koji su ga sadržavali.
„Provisioning profile doesn't include signing certificate”
Ova Xcode poruka znači da profil ne sadrži certifikat čiji je privatni ključ na tvom računalu. Tipičan uzrok: miješanje automatskog potpisivanja u Xcodeu i EAS vjerodajnica. Odaberi jedan izvor istine: EAS buildove s upravljanim vjerodajnicama ili lokalne vjerodajnice, ali ne oboje.
Obavijesti prestale nakon opoziva ključa
Ako opozoveš svoj APNs ključ, Expo upozorava da sve aplikacije koje ga koriste više ne primaju obavijesti. Izradi novi ključ i pošalji ga s eas credentials. Expo Push tokeni tvojih korisnika se ne mijenjaju.
Dodana mogućnost, nevaljan profil
Uključivanje usluge poput push obavijesti ili App Groups čini profil nevaljanim: treba ga ponovno generirati. S EAS-om se usklađivanje mogućnosti radi pri svakom buildu. Ako profil i dalje bude odbijen, eas credentials ti omogućuje da generiraš novi.
Što slijedi nakon potpisivanja
Potpisan build samo je jedan korak. Stranica aplikacije, snimke zaslona, privatnost i slanje na pregled opisani su u tekstu objava aplikacije na App Storeu. Ako još nemaš članstvo, kreni od Apple developerskog računa. A da shvatiš zašto početnicima preporučujem Expo, pročitaj React Native i Expo za mobilnu aplikaciju.
Ako pripremaš svoju prvu objavu
Prije prvog slanja napravi besplatnu dijagnostiku: reći će ti što stvarno koči tvoj projekt i poslati ti moju checklistu protiv Appleovih odbijanja.
Da izgradiš aplikaciju, povežeš pretplate i objaviš je bez borbe s potpisivanjem, iOS & Android Kit vodi te kroz četiri koraka s početnim kodom mojih aplikacija, tvojim tempom.
Česta pitanja
Što je provisioning profile?
To je datoteka koja tvojoj aplikaciji dopušta da se pokreće ili da ode Appleu. Povezuje App ID, certifikat i, ovisno o vrsti, popis uređaja. App Store profil ne sadrži nijedan uređaj, ad hoc profil ih navodi nekoliko.
Je li developerski iOS certifikat besplatan?
Nema zasebnu cijenu: distribucijski certifikat uključen je u Apple Developer Program, koji stoji 99 $ godišnje. S besplatnim Apple računom Xcode ti dopušta testiranje na najviše 3 uređaja, ali profili istječu nakon 7 dana i objava nije moguća.
Koliko traje Appleov distribucijski certifikat?
Prema Appleu, u pravilu godinu dana od izrade. I provisioning profili traju najviše 12 mjeseci. Ključ za push obavijesti pak nikad ne istječe.
Što se događa ako mi distribucijski certifikat istekne?
Tvojim aplikacijama koje su već na App Storeu ništa, dok god ti je članstvo valjano. Samo više ne možeš slati nove buildove potpisane tim certifikatom. S EAS-om se novi certifikat izrađuje pri sljedećem buildu ili s eas credentials.
Treba li mi Mac za izradu iOS certifikata?
Ne, ako koristiš EAS. Na Apple račun se prijaviš iz naredbenog retka, a EAS generira certifikat i profil, i na Windowsu i na Linuxu. Bez EAS-a, klasični način ide preko Xcodea ili Keychain Accessa na Macu.
Koliko uređaja može sadržavati ad hoc profil?
Tvoj račun može registrirati do 100 iPhonea po godini članstva, i isto toliko za svaku drugu obitelj uređaja. Deaktivirani uređaj i dalje se broji. Za testiranje s više ljudi koristi TestFlight.

