iOS-utvecklarcertifikat: provisioning profile och Expo
Av Mehdi Azizi
Publicerad , 9 min
Certifikatet visar vem som signerar din app, provisioning profile säger vilken app och vilka iPhones. Med Expo skapar och förnyar EAS båda åt dig.
Ett iOS-utvecklarcertifikat bevisar vem som har signerat din app. Provisioning profile kopplar certifikatet till en specifik app och anger var den får köras. Med Expo behöver du nästan aldrig skapa dem för hand: EAS skapar, lagrar och förnyar dem när du startar ett bygge.
Det är ändå bra att förstå vad varje fil gör. Den dagen ett bygge vägrar installeras eller en uppladdning fastnar är det den kunskapen som sparar dig en hel dag. Den här guiden går igenom de fyra delarna, hur länge de gäller, Apples gränser och de vanligaste felen, med lösningen på vart och ett.
Jag publicerar mina iOS-appar med Expo och EAS, bland annat Solys och TradaZen. Hela vägen finns i publicera en iOS-app utan Mac. Här öppnar vi motorhuven på signeringen.
Varför Apple kräver en signatur
En iOS-app måste vara signerad för att kunna installeras på en iPhone eller skickas till App Store Connect. Signaturen garanterar att appen kommer från en utvecklare som Apple känner till och att ingen har ändrat den sedan dess.
För App Store finns en lugnande detalj. Enligt Apples tekniska notis TN3161 kontrollerar App Store att ditt distributionscertifikat är giltigt vid uppladdningen och signerar sedan om appen, som då inte längre är beroende av certifikatets utgångsdatum. Dina certifikat måste alltså vara giltiga när du laddar upp, inte under appens hela livstid.
De fyra delarna du behöver känna till
Expos dokumentation om inloggningsuppgifter räknar upp tre för iOS: distributionscertifikatet, profilerna och nyckeln för pushnotiser. Jag lägger till app-ID:t, eftersom ingen profil kan finnas utan det.
Distributionscertifikatet
Det här är din signatur som utvecklare. Apples hjälp om certifikat skiljer på två typer:
- Apple Development används för att köra din app på dina enheter under utvecklingen. Det tillhör en person.
- Apple Distribution används för att distribuera till utvalda testenheter eller för att skicka till App Store Connect. Det tillhör teamet, och bara kontoinnehavaren eller en admin kan skapa det.
Distributionscertifikatet hör inte till någon specifik app: samma certifikat signerar alla dina appar. Det har en privat nyckel, och det är den som gör att du kan signera. Enligt TN3161 gäller ett Apple-certifikat normalt i ett år från att det skapades.
App-ID:t (App ID)
App ID identifierar din app i en profil. Det bygger på ditt bundle-ID, till exempel com.example.myapp (påhittat exempel). Enligt Apples hjälp innehåller det också listan över tillåtna funktioner: pushnotiser, App Groups, Sign in with Apple…
Med Expo är det fältet ios.bundleIdentifier i din konfiguration. Välj det en gång för alla: det måste vara identiskt överallt, både i din konfiguration och i App Store Connect. App ID går aldrig ut. Och enligt Expos dokumentation om iOS-funktioner synkar EAS dess funktioner med din konfiguration vid varje bygge.
Provisioning profile
Profilen knyter ihop allt. Den innehåller ett App ID, ett certifikat och, beroende på typ, en lista över tillåtna enheter. Tre typer är aktuella för dig:
- Development: din testapp på dina registrerade enheter.
- Ad hoc: ett bygge som kan installeras på en bestämd lista enheter, var och en identifierad med sitt UDID. Det är EAS "interna distribution".
- App Store: för App Store Connect och TestFlight. Den innehåller ingen enhetslista, förklarar notisen TN3125.
Varje profil har ett utgångsdatum: normalt högst ett år enligt Apple, 12 månader enligt Expo.
Nyckeln för pushnotiser (APNs)
APNs-nyckeln ger din server, eller Expos, rätt att skicka notiser till din app. Det är en .p8-fil som bara kan laddas ner en gång: Apple sparar den inte i ditt konto. En och samma nyckel fungerar för alla dina appar, och den går aldrig ut.
Sammanfattande tabell
| Del | Används till | Giltighet | Vem sköter det med Expo |
|---|---|---|---|
| Distributionscertifikat | Signera dina byggen | Normalt ett år | EAS, efter inloggning |
| App ID | Identifiera din app | Går inte ut | Du, sedan EAS |
| App Store-profil | Skicka till Apple | Upp till 12 månader | EAS |
| Ad hoc-profil | Installera på dina iPhones | Upp till 12 månader | EAS och dina enheter |
| APNs-pushnyckel | Skicka notiser | Går inte ut | EAS eller du |
| Profil för gratiskonto | Testa via Xcode | 7 dagar | Xcode, inte EAS |
"Du, sedan EAS": du väljer bundle-ID:t, EAS tar hand om funktionerna. "EAS och dina enheter": du registrerar varje test-iPhone, EAS skapar profilen. Sista raden gäller det kostnadsfria Apple-kontot: enligt Apples hjälp om konton går dess profiler ut 7 dagar efter att de skapats.
Apples gränser du bör känna till
- Distributionscertifikat: väldigt få per konto. Apples hjälp talar om ett enda per distributionstyp och team, Expos tabell om en gräns på 2. Kom ihåg regeln: skapa inte ett nytt certifikat för varje bygge eller på varje dator.
- APNs-nycklar: högst 2 per konto, enligt Expo.
- Profiler: ingen gräns, enligt Expo.
- Enheter: upp till 100 per produktfamilj och medlemsår, enligt Apples hjälp om enheter. Att inaktivera en enhet frigör ingen plats. Räknaren återställs till 100 i början av nästa medlemsår, om du tar bort enheterna.
Det här gör EAS åt dig
Enligt Expos sida om hanterade inloggningsuppgifter erbjuder ditt första iOS-bygge att skapa det som saknas. Du loggar in på ditt Apple Developer-konto, EAS skapar distributionscertifikatet, profilen och pushnyckeln och lagrar dem sedan på sina servrar. Följande byggen återanvänder dem.
Tre bra saker att veta:
- Ditt Apple-lösenord stannar på din dator. Expos säkerhetssida anger att det inte skickas till deras servrar och att lagrade uppgifter är krypterade.
eas credentialsvisar allt: certifikat, profiler, pushnyckel. Kommandot låter dig också ersätta eller ta bort dem.- Att ta bort i EAS tar inte bort hos Apple. För att frigöra en plats måste du återkalla i Apples portal.
Du kan också behålla kontrollen med lokala uppgifter: en credentials.json-fil pekar på ditt certifikat (.p12) och din profil (.mobileprovision). Expo ber dig lägga till de filerna i .gitignore. Det är samma regel som för API-nycklar i en Expo-app: en hemlighet hamnar aldrig i repot.
Vanliga fel och hur du löser dem
Utgången profil
Ett ad hoc-bygge bär med sig sin profil: när den går ut går appen inte längre att öppna på dina test-iPhones. På App Store däremot bekräftar Expo att utgången inte påverkar appen i produktion alls. Lösningen: kör ett nytt bygge. EAS skapar en ny profil, eller så gör du det själv med eas credentials. Installera sedan om det nya bygget på dina enheter.
Blanda inte ihop det med TestFlight: ett TestFlight-bygge går ut efter 90 dagar, oavsett ditt certifikat. Detaljerna finns i TestFlight för att testa din iPhone-app.
Utgånget eller återkallat certifikat
Apple är tydliga: om ditt medlemskap är giltigt påverkas inte dina appar som redan finns på App Store. Däremot kan du inte längre ladda upp byggen signerade med det certifikatet. Ett bygge som laddats upp men ännu inte skickats in kan markeras Invalid Binary om dess certifikat har återkallats. Och profiler som innehåller ett återkallat certifikat blir ogiltiga.
Lösningen: skapa ett nytt certifikat via eas credentials eller vid nästa bygge, och låt sedan EAS göra om profilerna. Och återkalla aldrig reflexmässigt ett certifikat som fungerar.
Enheten saknas i ad hoc-profilen
Installationslänken fungerar hos dig, men inte på en testares iPhone. Orsak: Expos dokumentation om intern distribution förklarar att bara enheter som fanns i profilen när bygget gjordes kan installera appen.
Lösningen:
- Registrera enheten med
eas device:create. - Kör ett nytt bygge i interaktivt läge, inloggad på ditt Apple-konto, så att EAS uppdaterar profilen. Eller signera om det befintliga bygget med
eas build:resign, utan att kompilera om allt. - I CI återanvänder icke-interaktivt läge profilen utan att uppdatera listan. Lägg till flaggan
--refresh-ad-hoc-provisioning-profile.
På ett nytt eller nyss förnyat konto kan Apple behöva 24 till 72 timmar för att behandla en ny enhet. Det första bygget som inkluderar den kan alltså misslyckas: vänta och kör sedan igen.
Gränsen för certifikat är nådd
Apple vägrar skapa ett nytt distributionscertifikat. Ofta ligger gamla certifikat kvar: skapade i Xcode på en annan Mac eller av en annan byggtjänst. Återanvänd det befintliga certifikatet om du har dess .p12-fil. Annars återkallar du det som inte längre används i Apples portal. En återkallelse påverkar inte dina appar som redan är publicerade, men den gör profilerna som innehöll certifikatet ogiltiga.
"Provisioning profile doesn't include signing certificate"
Det här meddelandet från Xcode betyder att profilen inte innehåller det certifikat vars privata nyckel finns på din dator. Typisk orsak: att blanda Xcodes automatiska signering med EAS uppgifter. Välj en enda sanningskälla: EAS-byggen med hanterade uppgifter, eller lokala uppgifter, men inte båda.
Notiser slutar fungera efter återkallad nyckel
Om du återkallar din APNs-nyckel varnar Expo för att alla appar som använder den slutar ta emot notiser. Skapa en ny nyckel och ladda upp den med eas credentials. Dina användares Expo Push-tokens ändras inte.
Ny funktion, ogiltig profil
Att aktivera en tjänst som pushnotiser eller App Groups gör profilen ogiltig: den måste skapas om. Med EAS synkas funktionerna vid varje bygge. Om profilen fortfarande nekas kan du skapa en ny med eas credentials.
Nästa steg efter signeringen
Ett signerat bygge är bara ett steg. Produktsidan, skärmbilderna, integriteten och inskickningen för granskning samlas i publicera en app på App Store. Om du inte har ditt medlemskap ännu, börja med Apples utvecklarkonto. Och för att förstå varför jag rekommenderar Expo till nybörjare, läs React Native och Expo för en mobilapp.
Om du förbereder din första publicering
Innan din första uppladdning, gör den kostnadsfria diagnosen: den visar vad som verkligen blockerar i ditt projekt och skickar dig min checklista mot avslag från Apple.
För att bygga appen, koppla in prenumerationer och publicera den utan att slåss med signeringen följer iOS & Android Kit vägen i fyra steg med startkoden från mina appar, i din egen takt.
Vanliga frågor
Vad är en provisioning profile?
Det är filen som låter din app köras eller skickas till Apple. Den kopplar ihop ett app-ID, ett certifikat och, beroende på typ, en lista över enheter. En App Store-profil innehåller inga enheter, en ad hoc-profil listar några stycken.
Är iOS-utvecklarcertifikatet gratis?
Det har inget eget pris: distributionscertifikatet ingår i Apple Developer Program, för 99 $ per år. Med ett kostnadsfritt Apple-konto låter Xcode dig testa på högst 3 enheter, men profilerna går ut efter 7 dagar och du kan inte publicera.
Hur länge gäller ett distributionscertifikat från Apple?
Normalt ett år från att det skapades, enligt Apple. Provisioning profiles gäller också i högst 12 månader. Nyckeln för pushnotiser går däremot aldrig ut.
Vad händer om mitt distributionscertifikat går ut?
Ingenting för dina appar som redan finns på App Store, så länge ditt medlemskap är giltigt. Du kan bara inte längre ladda upp nya byggen signerade med det certifikatet. Med EAS skapas ett nytt certifikat vid nästa bygge eller med eas credentials.
Behöver man en Mac för att skapa ett iOS-certifikat?
Nej, inte om du använder EAS. Du loggar in på ditt Apple-konto från kommandoraden, och EAS skapar certifikatet och profilen, både på Windows och Linux. Utan EAS går den klassiska metoden via Xcode eller nyckelringen på en Mac.
Hur många enheter kan en ad hoc-profil innehålla?
Ditt konto kan registrera upp till 100 iPhones per medlemsår, och lika många för varje annan enhetsfamilj. En inaktiverad enhet räknas fortfarande. Vill du testa med fler personer, använd TestFlight.

