iOS-Entwicklerzertifikat und Provisioning Profile mit Expo
Von Mehdi Azizi
Veröffentlicht am , 9 Min.
Das Zertifikat zeigt, wer deine App signiert, das Profil, welche App auf welchen iPhones läuft. Mit Expo erstellt und erneuert EAS beides.
Ein iOS-Entwicklerzertifikat beweist, wer deine App signiert hat. Das Provisioning Profile (Bereitstellungsprofil) verknüpft dieses Zertifikat mit einer bestimmten App und legt fest, wo sie laufen darf. Mit Expo musst du beides fast nie von Hand erstellen: EAS erzeugt, speichert und erneuert sie, sobald du einen Build startest.
Trotzdem lohnt es sich zu verstehen, was jede Datei tut. An dem Tag, an dem sich ein Build nicht installieren lässt oder ein Upload hängt, spart dir genau dieses Wissen einen ganzen Tag. Dieser Guide geht die vier Bestandteile durch, ihre Laufzeit, Apples Limits und die typischen Fehler, jeweils mit Lösung.
Ich veröffentliche meine iOS-Apps mit Expo und EAS, darunter Solys und TradaZen. Den kompletten Weg findest du in eine iOS-App ohne Mac veröffentlichen. Hier schauen wir unter die Haube der Signierung.
Warum Apple eine Signatur verlangt
Eine iOS-App muss signiert sein, damit sie sich auf einem iPhone installieren oder an App Store Connect senden lässt. Die Signatur garantiert, dass die App von einem Apple bekannten Entwickler stammt und seitdem niemand sie verändert hat.
Beim App Store beruhigt ein Detail. Laut Apples Technical Note TN3161 prüft der App Store beim Upload, ob dein Distributionszertifikat gültig ist, und signiert die App dann neu. Ab da hängt sie nicht mehr vom Ablaufdatum deines Zertifikats ab. Deine Zertifikate müssen also beim Upload gültig sein, nicht während der gesamten Lebensdauer der App.
Die vier Bestandteile, die du kennen solltest
Die Expo-Dokumentation zu Credentials nennt für iOS drei: das Distributionszertifikat, die Profile und den Push-Notification-Schlüssel. Ich ergänze die App-ID, ohne die es kein Profil gibt.
Das Distributionszertifikat
Das ist deine Entwicklersignatur. Apples Hilfe zu Zertifikaten unterscheidet zwei Arten:
- Apple Development dient dazu, deine App während der Entwicklung auf deinen Geräten zu starten. Es gehört einer Person.
- Apple Distribution dient zur Verteilung auf festgelegte Testgeräte oder zum Upload an App Store Connect. Es gehört dem Team, und nur der Account Holder oder ein Admin kann es erstellen.
Das Distributionszertifikat gehört zu keiner bestimmten App: Dasselbe signiert alle deine Apps. Dazu gehört ein privater Schlüssel, und erst der ermöglicht das Signieren. Laut TN3161 ist ein Apple-Zertifikat in der Regel ein Jahr ab Erstellung gültig.
Die App-ID
Die App-ID identifiziert deine App in einem Profil. Sie übernimmt deinen Bundle Identifier, zum Beispiel com.example.myapp (fiktives Beispiel). Laut Apples Hilfe enthält sie außerdem die Liste der erlaubten Capabilities: Push-Benachrichtigungen, App Groups, Sign in with Apple …
Bei Expo ist das das Feld ios.bundleIdentifier in deiner Konfiguration. Leg ihn einmal fest und ändere ihn nicht mehr: Er muss überall identisch sein, in deiner Konfiguration genauso wie in App Store Connect. Die App-ID läuft nicht ab. Und laut Expo-Doku zu iOS-Capabilities synchronisiert EAS ihre Capabilities bei jedem Build mit deiner Konfiguration.
Das Provisioning Profile
Das Profil stellt die Verbindung her. Es enthält eine App-ID, ein Zertifikat und je nach Typ eine Liste erlaubter Geräte. Drei Typen betreffen dich:
- Development: deine Test-App auf deinen registrierten Geräten.
- Ad hoc: ein Build, der sich auf einer festen Liste von Geräten installieren lässt, jedes über seine UDID identifiziert. Das ist die „interne Verteilung“ von EAS.
- App Store: für App Store Connect und TestFlight. Es enthält keine Geräteliste, erklärt die Note TN3125.
Jedes Profil hat ein Ablaufdatum: laut Apple in der Regel höchstens ein Jahr, laut Expo 12 Monate.
Der Push-Schlüssel (APNs)
Der APNs-Schlüssel erlaubt deinem Server oder dem von Expo, Benachrichtigungen an deine App zu senden. Es ist eine .p8-Datei, die du nur einmal herunterladen kannst: Apple bewahrt sie nicht in deinem Account auf. Ein Schlüssel gilt für alle deine Apps, und er läuft nie ab.
Die Übersichtstabelle
| Bestandteil | Zweck | Laufzeit | Wer kümmert sich darum mit Expo |
|---|---|---|---|
| Distributionszertifikat | Deine Builds signieren | In der Regel 1 Jahr | EAS, nach dem Login |
| App-ID | Deine App identifizieren | Kein Ablauf | Du, dann EAS |
| App-Store-Profil | An Apple senden | Bis zu 12 Monate | EAS |
| Ad-hoc-Profil | Auf deinen iPhones testen | Bis zu 12 Monate | EAS und deine Geräte |
| APNs-Push-Schlüssel | Benachrichtigungen senden | Kein Ablauf | EAS oder du |
| Profil (Gratis-Account) | Über Xcode testen | 7 Tage | Xcode, nicht EAS |
„Du, dann EAS“: Du wählst den Bundle Identifier, EAS kümmert sich um die Capabilities. „EAS und deine Geräte“: Du registrierst jedes Test-iPhone, EAS baut das Profil. Die letzte Zeile betrifft den kostenlosen Apple-Account: Laut Apples Hilfe zu Accounts laufen dessen Profile 7 Tage nach Erstellung ab.
Apples Limits, die du kennen solltest
- Distributionszertifikate: sehr wenige pro Account. Apples Hilfe spricht von einem pro Distributionstyp und Team, die Expo-Tabelle von einem Limit von 2. Merk dir die Regel: Erstell nicht bei jedem Build oder auf jedem Rechner ein neues Zertifikat.
- APNs-Schlüssel: maximal 2 pro Account, laut Expo.
- Profile: kein Limit, laut Expo.
- Geräte: bis zu 100 pro Produktfamilie und Mitgliedsjahr, laut Apples Hilfe zu Geräten. Ein Gerät zu deaktivieren macht keinen Platz frei. Der Zähler springt zu Beginn des nächsten Mitgliedsjahres wieder auf 100, wenn du die Geräte entfernst.
Was EAS für dich erledigt
Laut Expos Seite zu verwalteten Credentials bietet dir dein erster iOS-Build an, das Fehlende zu erzeugen. Du meldest dich bei deinem Apple Developer Account an, EAS erstellt Distributionszertifikat, Profil und Push-Schlüssel und speichert sie auf seinen Servern. Die folgenden Builds verwenden sie wieder.
Drei nützliche Punkte:
- Dein Apple-Passwort bleibt auf deinem Rechner. Expos Sicherheitsseite stellt klar, dass es nicht an die Server geschickt wird und die gespeicherten Credentials verschlüsselt sind.
eas credentialszeigt dir alles: Zertifikat, Profile, Push-Schlüssel. Mit dem Befehl kannst du sie auch ersetzen oder entfernen.- Löschen in EAS löscht nicht bei Apple. Um einen Platz freizumachen, musst du im Apple-Portal widerrufen.
Du kannst die Kontrolle auch mit lokalen Credentials behalten: Eine Datei credentials.json verweist auf dein Zertifikat (.p12) und dein Profil (.mobileprovision). Expo verlangt, diese Dateien in die .gitignore aufzunehmen. Das ist dieselbe Regel wie bei API-Schlüsseln in einer Expo-App: Ein Secret landet nie im Repository.
Typische Fehler und wie du sie löst
Abgelaufenes Profil
Ein Ad-hoc-Build trägt sein Profil in sich: Läuft es ab, öffnet sich die App auf deinen Test-iPhones nicht mehr. Im App Store dagegen hat der Ablauf laut Expo keinerlei Auswirkung auf die App in Produktion. Die Lösung: Starte einen neuen Build. EAS erzeugt ein neues Profil, oder du machst es selbst mit eas credentials. Installiere den neuen Build danach auf deinen Geräten.
Verwechsle das nicht mit TestFlight: Ein TestFlight-Build läuft nach 90 Tagen ab, egal wie es um dein Zertifikat steht. Die Details stehen in TestFlight zum Testen deiner iPhone-App.
Abgelaufenes oder widerrufenes Zertifikat
Apple ist da eindeutig: Ist deine Mitgliedschaft gültig, sind deine Apps im App Store nicht betroffen. Du kannst aber keinen Build mehr hochladen, der mit diesem Zertifikat signiert ist. Ein hochgeladener, aber noch nicht eingereichter Build kann als Invalid Binary markiert werden, wenn sein Zertifikat widerrufen wurde. Und Profile mit einem widerrufenen Zertifikat werden ungültig.
Die Lösung: Erstell ein neues Zertifikat über eas credentials oder beim nächsten Build und lass EAS die Profile neu erzeugen. Und widerrufe nie reflexartig ein Zertifikat, das funktioniert.
Gerät fehlt im Ad-hoc-Profil
Der Installationslink funktioniert bei dir, aber nicht auf dem iPhone eines Testers. Ursache: Die Expo-Doku zur internen Verteilung erklärt, dass nur Geräte, die zum Zeitpunkt des Builds im Profil stehen, die App installieren können.
Die Lösung:
- Registriere das Gerät mit
eas device:create. - Starte einen Build im interaktiven Modus, angemeldet bei deinem Apple-Account, damit EAS das Profil aktualisiert. Oder signiere den bestehenden Build mit
eas build:resignneu, ohne alles neu zu kompilieren. - In der CI verwendet der nicht interaktive Modus das Profil wieder, ohne seine Liste zu aktualisieren. Füge die Option
--refresh-ad-hoc-provisioning-profilehinzu.
Bei einem neuen oder gerade verlängerten Account kann Apple 24 bis 72 Stunden brauchen, um ein neues Gerät zu verarbeiten. Der erste Build, der es enthält, kann also fehlschlagen: Warte und starte ihn dann neu.
Zertifikatslimit erreicht
Apple verweigert die Erstellung eines neuen Distributionszertifikats. Oft liegen noch alte Zertifikate herum: in Xcode auf einem anderen Mac erstellt oder von einem anderen Build-Dienst. Verwende das bestehende Zertifikat wieder, wenn du seine .p12-Datei hast. Sonst widerrufe das nicht mehr genutzte im Apple-Portal. Ein Widerruf betrifft deine veröffentlichten Apps nicht, macht aber die Profile ungültig, die es enthielten.
„Provisioning profile doesn't include signing certificate“
Diese Xcode-Meldung bedeutet, dass das Profil nicht das Zertifikat enthält, dessen privater Schlüssel auf deinem Rechner liegt. Typische Ursache: Du mischst die automatische Signierung von Xcode mit den Credentials von EAS. Entscheide dich für eine einzige Quelle: EAS-Builds mit verwalteten Credentials oder lokale Credentials, aber nicht beides.
Keine Benachrichtigungen mehr nach Widerruf des Schlüssels
Widerrufst du deinen APNs-Schlüssel, erhalten laut Expo alle Apps, die ihn nutzen, keine Benachrichtigungen mehr. Erstell einen neuen Schlüssel und lade ihn mit eas credentials hoch. Die Expo-Push-Tokens deiner Nutzer ändern sich nicht.
Capability hinzugefügt, Profil ungültig
Einen Dienst wie Push-Benachrichtigungen oder App Groups zu aktivieren macht das Profil ungültig: Du musst es neu erzeugen. Mit EAS werden die Capabilities bei jedem Build synchronisiert. Wird das Profil weiterhin abgelehnt, kannst du mit eas credentials ein neues erzeugen.
Wie es nach der Signierung weitergeht
Ein signierter Build ist nur ein Schritt. Store-Eintrag, Screenshots, Datenschutz und Einreichung zur Prüfung findest du gesammelt in eine App im App Store veröffentlichen. Hast du noch keine Mitgliedschaft, fang mit dem Apple-Entwicklerkonto an. Und warum ich Einsteigern Expo empfehle, liest du in React Native und Expo für eine mobile App.
Wenn du deine erste Veröffentlichung vorbereitest
Mach vor deinem ersten Upload die kostenlose Diagnose: Sie zeigt dir, was in deinem Projekt wirklich blockiert, und schickt dir meine Checkliste gegen Apple-Ablehnungen.
Um die App zu bauen, Abos einzubinden und sie zu veröffentlichen, ohne mit der Signierung zu kämpfen, begleitet dich das iOS & Android Kit in vier Schritten mit dem Startcode meiner Apps, in deinem Tempo.
Häufige Fragen
Was ist ein Provisioning Profile?
Das ist die Datei, die deiner App erlaubt, zu laufen oder an Apple zu gehen. Sie verknüpft eine App-ID, ein Zertifikat und je nach Typ eine Geräteliste. Ein App-Store-Profil enthält kein Gerät, ein Ad-hoc-Profil listet einige auf.
Ist das iOS-Entwicklerzertifikat kostenlos?
Es kostet nichts extra: Das Distributionszertifikat ist im Apple Developer Program für 99 $ pro Jahr enthalten. Mit einem kostenlosen Apple-Account lässt dich Xcode auf höchstens 3 Geräten testen, aber die Profile laufen nach 7 Tagen ab und Veröffentlichen ist nicht möglich.
Wie lange ist ein Apple-Distributionszertifikat gültig?
Laut Apple in der Regel ein Jahr ab Erstellung. Provisioning Profiles gelten ebenfalls höchstens 12 Monate. Der Push-Schlüssel dagegen läuft nie ab.
Was passiert, wenn mein Distributionszertifikat abläuft?
Für deine Apps im App Store nichts, solange deine Mitgliedschaft gültig ist. Du kannst nur keinen neuen Build mehr hochladen, der mit diesem Zertifikat signiert ist. Mit EAS wird beim nächsten Build oder mit eas credentials ein neues Zertifikat erstellt.
Brauche ich einen Mac, um ein iOS-Zertifikat zu erstellen?
Nein, wenn du EAS nutzt. Du meldest dich über die Kommandozeile bei deinem Apple-Account an, und EAS erzeugt Zertifikat und Profil, unter Windows genauso wie unter Linux. Ohne EAS läuft der klassische Weg über Xcode oder die Schlüsselbundverwaltung eines Macs.
Wie viele Geräte kann ein Ad-hoc-Profil enthalten?
Dein Account kann bis zu 100 iPhones pro Mitgliedsjahr registrieren, und genauso viele für jede andere Gerätefamilie. Ein deaktiviertes Gerät zählt weiterhin mit. Willst du mit mehr Leuten testen, nimm TestFlight.

