# EAS Submit iOS: Expo-App im App Store veröffentlichen

> EAS Submit schickt deinen iOS-Build an App Store Connect, wo er in TestFlight landet. Die Einreichung zur Prüfung machst du selbst in App Store Connect.

Originalseite: [EAS Submit iOS: Expo-App im App Store veröffentlichen](https://devoria.fr/de/blog/eas-submit-ios-expo-app-app-store-veroeffentlichen)
Autor: [Mehdi Azizi](https://devoria.fr/de/mehdi-azizi)
Veröffentlicht: 2026-10-25
Letzte inhaltliche Überarbeitung: 2026-10-25


`eas submit --platform ios` schickt deinen iOS-Build an App Store Connect, wo er nach der Verarbeitung durch Apple in TestFlight erscheint. **Der Befehl reicht deine App nicht zur Prüfung bei Apple ein: Build auswählen und zur Prüfung einreichen musst du weiterhin selbst in App Store Connect.** Um das Hochladen zu automatisieren, braucht er die Nummer deines App-Eintrags (`ascAppId`) und einen App Store Connect API-Schlüssel.

Ich veröffentliche meine iOS-Apps, darunter Solys, TradaZen und Nolera, mit Expo, EAS Build und EAS Submit. Dieser Guide folgt der [Expo-Dokumentation zum iOS-Upload](https://docs.expo.dev/submit/ios/), geprüft am 25. Oktober 2026. Ohne Mac findest du den kompletten Ablauf in [iOS-App ohne Mac veröffentlichen](https://devoria.fr/de/blog/ios-app-ohne-mac-veroeffentlichen-expo-eas). Hier geht es nur um den Upload.

## Was du vor dem ersten Befehl brauchst

Expo nennt drei Voraussetzungen:

- **Ein kostenpflichtiges Apple-Developer-Konto.** Preis und Anmeldung findest du unter [Apple-Entwicklerkonto](https://devoria.fr/de/blog/apple-developer-account-kosten).
- **Eine Bundle-ID** in `ios.bundleIdentifier`. Laut [Referenz der Expo-Konfiguration](https://docs.expo.dev/versions/latest/config/app/) denkst du sie dir selbst aus, sie muss aber im App Store eindeutig sein.
- **EAS CLI installiert**, danach `eas login` mit deinem Expo-Konto.

Außerdem brauchst du einen signierten Production-Build. EAS Build erstellt ihn mit dem Zertifikat und dem Profil, die es für dich verwaltet, wie in iOS-Zertifikat und Provisioning Profile erklärt.

### Der App-Eintrag in App Store Connect: du oder EAS?

EAS Submit lädt ein Binary zu einer App hoch, die in App Store Connect existieren muss.

**Du kannst sie selbst anlegen.** [Apples Hilfe](https://developer.apple.com/help/app-store-connect/create-an-app-record/add-a-new-app) beschreibt das Fenster New App: Plattform, Name, Primärsprache, Bundle-ID, SKU und Benutzerzugriff. Du brauchst dafür die Rolle Account Holder, Admin oder App Manager.

**EAS kann sie auch beim ersten Upload anlegen.** Laut [Expo-Seite zu TestFlight](https://docs.expo.dev/submit/testflight/) erstellt `eas submit` den Eintrag, wenn du deinen ersten Build hochlädst. Laut [Referenz zu eas.json](https://docs.expo.dev/eas/json/) überspringt ein gesetztes `ascAppId` diesen Schritt. Der Name kommt aus `appName`, sonst aus dem `name` deiner Konfiguration. Die Primärsprache kommt aus `language`, Standardwert `en-US`. **Wenn deine App zuerst auf Französisch erscheint, setz `language` vor diesem ersten Upload.**

Danach trägst du die Nummer des Eintrags in `ascAppId` ein. Expo sagt, wo du sie findest: Öffne deine App in App Store Connect, dann App Information. Es ist das Feld Apple ID unter General Information. **Das ist eine Zahl, nicht deine Bundle-ID.**

## Warum ein API-Schlüssel statt deiner Apple-ID

EAS Submit verbindet sich mit Apple über deine Apple-ID oder einen App Store Connect API-Schlüssel.

Die Apple-ID scheitert an der Zwei-Faktor-Authentifizierung, die [Apple](https://developer.apple.com/support/authentication/) von allen App-Store-Connect-Nutzern verlangt: Ein Mensch muss die Anmeldung bestätigen. Das app-spezifische Passwort in `EXPO_APPLE_APP_SPECIFIC_PASSWORD` umgeht diesen Schritt, aber [Expo hält es für weniger sicher](https://github.com/expo/fyi/blob/main/apple-app-specific-password.md) als den API-Schlüssel, seine Standard- und empfohlene Methode. **Mit dem Schlüssel klappt die Authentifizierung ganz ohne Interaktion, und damit lässt sich der Upload automatisieren.**

Zwei Wege, ihn zu bekommen:

- **Lass EAS ihn verwalten.** Führ `eas credentials --platform ios` aus, wähl das Profil `production`, melde dich bei deinem Apple-Konto an und wähl dann „App Store Connect: Manage your API Key“.
- **Bring deinen eigenen Schlüssel mit.** In App Store Connect: Users and Access, Tab Integrations, App Store Connect API, Team Keys, dann Generate API Key. Du brauchst ein Admin-Konto, und [Expos Anleitung](https://github.com/expo/fyi/blob/main/creating-asc-api-key.md) gibt dem Schlüssel die Rolle Admin.

Im zweiten Fall notierst du die Key ID aus der Liste der aktiven Schlüssel und die Issuer ID [oben auf der Seite Integrations](https://developer.apple.com/documentation/appstoreconnectapi/generating-tokens-for-api-requests). Vor allem: Bewahr die `.p8`-Datei auf. [Du kannst sie nur einmal herunterladen](https://developer.apple.com/documentation/appstoreconnectapi/creating-api-keys-for-app-store-connect-api), und Apple behält keine Kopie.

> Ein Admin-Schlüssel kann laut Apple Benutzer in deinem Konto anlegen und löschen. Apple verlangt, dass du den Schlüssel nie in einem Code-Repository ablegst.

## Die minimale eas.json zum Kopieren

Alle Werte sind Platzhalter: Ersetz sie durch deine eigenen.

```json
{
  "cli": {
    "appVersionSource": "remote"
  },
  "build": {
    "production": {
      "autoIncrement": true
    }
  },
  "submit": {
    "production": {
      "ios": {
        "ascAppId": "1234567890",
        "appleTeamId": "ABCDE12345",
        "ascApiKeyPath": "./keys/AuthKey_XXXXXXXXXX.p8",
        "ascApiKeyIssuerId": "your-issuer-id",
        "ascApiKeyId": "XXXXXXXXXX"
      }
    }
  }
}
```

- **`appVersionSource` und `autoIncrement`**: Die EAS-Server speichern die Build-Nummer und erhöhen sie bei jedem Production-Build. [Expo empfiehlt diesen Remote-Modus](https://docs.expo.dev/build-reference/app-versions/) seit EAS CLI 12.
- **`ascAppId`**: die Nummer deines App-Eintrags. Ohne sie scheitert der nicht-interaktive Modus.
- **`appleTeamId`**: die ID deines Apple-Developer-Teams.
- **`ascApiKeyPath`, `ascApiKeyIssuerId`, `ascApiKeyId`**: dein API-Schlüssel. Alle drei Felder akzeptieren Umgebungsvariablen. Füg den Ordner `keys` zu deiner `.gitignore` hinzu.

Das Feld `appleId` brauchst du nur, wenn du dich mit deiner Apple-ID anmeldest. Wenn EAS deinen Schlüssel schon verwaltet, entfern auch die drei `ascApiKey`-Felder. Bei meinen drei Apps, geprüft am 25. Oktober, enthält das Production-Submit-Profil nur `ascAppId`, bei Solys zusätzlich `appleTeamId`: kein Schlüssel in der Datei.

## Build starten, dann hochladen

```bash
eas build --platform ios --profile production
eas submit --platform ios
```

Ohne weitere Option lässt dich `eas submit` den Build auswählen und fragt beim ersten Start nach deiner Apple-ID. Das Submit-Profil `production` wird standardmäßig verwendet, wenn es existiert. Die [EAS-CLI-Referenz](https://docs.expo.dev/eas/cli/) listet die Optionen, die die Auswahl ersparen:

| Option           | Was sie macht                        |
| ---------------- | ------------------------------------ |
| `--latest`       | Lädt den neuesten iOS-Build hoch     |
| `--id`           | Lädt einen bestimmten EAS-Build hoch |
| `--path`         | Lädt eine lokale .ipa-Datei hoch     |
| `--url`          | Lädt ein Online-Archiv hoch          |
| `--groups`       | Fügt zu einer internen Gruppe hinzu  |
| `--what-to-test` | Füllt „What to test“ aus             |

Um alles zu verketten, häng `--auto-submit` an den Build-Befehl. Laut [Expo-Seite zum automatischen Upload](https://docs.expo.dev/build/automate-submissions/) geht der fertige Build an EAS Submit, mit dem Submit-Profil, das genauso heißt wie das Build-Profil. Für ein anderes: `--auto-submit-with-profile=name`. **Der Build geht an TestFlight, nicht zur Prüfung.**

In der Continuous Integration fügst du `--non-interactive` und ein `EXPO_TOKEN` hinzu. Der Befehl kann dich dann nichts fragen: Er braucht `ascAppId` im Profil und einen API-Schlüssel, entweder den, den EAS mit der App verknüpft hat, oder deinen eigenen in den drei `ascApiKey`-Feldern.

## Was nach dem Upload passiert

**1. Apple verarbeitet den Build.** Er muss diese Verarbeitung durchlaufen, bevor er in App Store Connect erscheint, und [Apple schickt dir am Ende eine E-Mail](https://developer.apple.com/help/app-store-connect/manage-builds/upload-builds). Expo spricht meist von 10 bis 15 Minuten, bis du ihn in TestFlight siehst.

**2. Exportkonformität.** Der Status Missing Compliance bedeutet, dass deine Angabe zur Verschlüsselung fehlt. App Store Connect stellt diese Fragen bei jeder neuen Version, außer die Info.plist beantwortet sie schon. Bei Expo heißt der Schlüssel `ios.config.usesNonExemptEncryption`:

```json
{
  "expo": {
    "ios": {
      "config": {
        "usesNonExemptEncryption": false
      }
    }
  }
}
```

Laut [Apple](https://developer.apple.com/documentation/security/complying-with-encryption-export-regulations) passt `false`, wenn deine App inklusive Bibliotheken keine oder nur ausgenommene Verschlüsselung nutzt. Die Systemverschlüsselung, etwa HTTPS über URLSession, ist das in der Regel. **Gib `false` nur an, wenn es für deine App stimmt: Die Angabe ist verbindlich.** Wie jeder Info.plist-Schlüssel braucht sie einen neuen Build.

**3. TestFlight.** Im Status Ready to Submit kann der Build [laut Apple](https://developer.apple.com/help/app-store-connect/reference/app-build-statuses) an interne Tester gehen, die Beta-Prüfung für externe durchlaufen oder zur App-Store-Prüfung gehen. Das Feld `groups` im Profil fügt ihn deinen internen Gruppen hinzu. Alles Weitere steht in [TestFlight zum Testen deiner App](https://devoria.fr/de/blog/testflight-iphone-app-testen).

## Hochladen ist nicht Einreichen zur Prüfung

[Expo schreibt es](https://docs.expo.dev/submit/introduction/): Ein TestFlight-Build wird nicht automatisch im App Store veröffentlicht. EAS Submit füllt weder deinen Store-Eintrag noch deine Screenshots aus. In App Store Connect bleiben vier Schritte, beschrieben in [Apples Hilfe zur Einreichung](https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/submit-an-app):

1. **Füll die Pflicht-Metadaten** der Version aus.
2. **Wähl den Build** im Abschnitt Build der Version.
3. **Klick auf „Add for Review“.** Die Version wechselt zu Ready for Review, aber noch ist nichts zur Prüfung unterwegs.
4. **Klick auf „Submit for Review“.** Der Status wechselt zu In Review, sobald die Prüfung beginnt.

## Häufige Fehler und ihre Lösung

| Angezeigter Fehler    | Ursache                         | Lösung                    |
| --------------------- | ------------------------------- | ------------------------- |
| ITMS-90189            | Build-Nummer schon vergeben     | `autoIncrement`           |
| ITMS-90062 oder 90186 | Version bereits geschlossen     | `version` erhöhen         |
| „Set ascAppId“        | `ascAppId` fehlt in der CI      | `ascAppId` hinzufügen     |
| „API Keys cannot“     | Kein Schlüssel verknüpft        | `eas credentials`         |
| ITMS-90683            | Purpose String fehlt            | `ios.infoPlist`           |
| ITMS-91053            | Manifest unvollständig          | `ios.privacyManifests`    |
| ITMS-90725            | iOS-SDK zu alt                  | Expo SDK aktualisieren    |
| Missing Compliance    | Verschlüsselung nicht angegeben | `usesNonExemptEncryption` |

Laut Expo ist eine schon verwendete Build-Nummer ein häufiger Grund für abgelehnte Uploads: Alles dazu in Build-Nummer und Version. Drei Fehler haben einen eigenen Guide: [ITMS-90683 mit Expo](https://devoria.fr/de/blog/itms-90683-missing-purpose-string-expo), [ITMS-91053 mit Expo](https://devoria.fr/de/blog/itms-91053-missing-api-declaration-expo-beheben) und ITMS-90725.

Die beiden Meldungen in Anführungszeichen kommen von EAS und werden in dessen Konfiguration behoben. Missing Compliance lässt sich auch lösen, indem du die Fragen in App Store Connect beantwortest. **Bei allen anderen Zeilen betrifft die Lösung das Binary: Mach einen neuen Build und lade ihn erneut hoch.** Ein Remote-Update ändert weder die Info.plist noch das Manifest noch die Nummern.

## Deine erste App ohne Herumprobieren hochladen

Der Befehl ist nur ein Schritt. Das [iOS Kit](https://devoria.fr/de/kits/ios) basiert auf dem Starter Code meiner Apps, Abos inklusive, und führt dich in vier Schritten bis in den App Store, in deinem Tempo.

Wenn du deinen ersten Release vorbereitest, [mach deine kostenlose Diagnose](https://devoria.fr/de/diagnostic): Sie zeigt dir, was dich wirklich blockiert, und schickt dir meine Checkliste gegen Apple-Ablehnungen. Für Store-Eintrag, Screenshots und Freigabe deckt die Seite [App im App Store veröffentlichen](https://devoria.fr/de/expertise/app-im-app-store-veroeffentlichen) jeden Schritt ab.

## Häufige Fragen

### Wie veröffentliche ich eine Expo-App im App Store?

Starte einen Production-Build mit EAS Build und lade ihn dann mit `eas submit --platform ios` hoch. Nach der Verarbeitung durch Apple erscheint er in TestFlight. In App Store Connect füllst du dann den Store-Eintrag aus, wählst diesen Build in der Version und klickst auf „Add for Review“ und „Submit for Review“.

### Reicht EAS Submit meine App zur Prüfung bei Apple ein?

Nein. EAS Submit lädt das Binary zu App Store Connect hoch, und der Build landet in TestFlight. Die Einreichung zur Prüfung machst du von Hand in App Store Connect, sobald der Eintrag ausgefüllt und der Build ausgewählt ist.

### Wo finde ich die ascAppId meiner App?

Öffne deine App in App Store Connect, dann App Information. Es ist das Feld Apple ID unter General Information. Das ist eine Zahl, nicht zu verwechseln mit deiner Bundle-ID.

### Brauche ich eine Apple-ID, um eas submit zu nutzen?

Beim ersten Start fragt der Befehl danach. Danach kann er mit `ascAppId` im Profil und einem App Store Connect API-Schlüssel ohne Interaktion laufen, auch in der Continuous Integration. Der API-Schlüssel ist die Standard- und empfohlene Methode von Expo.

### Wie lange dauert es, bis der Build in TestFlight erscheint?

Expo spricht meist von 10 bis 15 Minuten Verarbeitung bei Apple, und Apple schickt dir am Ende eine E-Mail. Bleibt der Build im Status Missing Compliance, beantworte die Fragen zur Verschlüsselung und gib sie dann für die nächsten Builds in deiner Konfiguration an.


## Dein Projekt

[Apple Review Kit](https://devoria.fr/de/kits/review-apple): Meine Checkliste für die App-Store-Review, meine korrigierten Apple-Ablehnungen, Notizen für den Tester und zwei Claude-Code-Skills, die deine App prüfen. 29 €.

[iOS Kit](https://devoria.fr/de/kits/ios): Bau deine iPhone-App mit Claude Code: der Starter Code meiner Apps, Skills, die seine Arbeit prüfen, plus Apple Review Kit, App Store Screenshots Kit und ASO Kit. 129,99 €.
