eas submit iOS fejl: almindelige fejl og løsninger
Af Mehdi Azizi
Udgivet , 10 min.
Fejler eas submit? De rigtige beskeder fra EAS og App Store Connect, årsagen og løsningen: ascAppId, API-nøgle, Apple-aftale, ITMS-koder.
Når eas submit --platform ios fejler, fortæller beskeden næsten altid, hvor du skal kigge. Enten er din EAS-konfiguration ufuldstændig, eller også blokerer din Apple-konto, eller også afviser Apple binærfilen. De to første tilfælde retter du på få minutter, uden et nyt build. Det tredje genkender du på en ITMS-kode, og det kræver næsten altid et nyt build.
Jeg udgiver mine iOS-apps, blandt andre Solys, TradaZen og Nolera, med Expo og EAS. Beskederne her er kopieret fra kildekoden til EAS CLI på Expos officielle GitHub-repo, gennemlæst den 3. november 2026. Expos gamle forum henviser nu til Discord, så koden er stadig den sikreste kilde. Vil du have hele forløbet, fra eas.json-filen til indsendelsen til review, så læs først EAS Submit iOS: udgiv en Expo-app på App Store. Her reparerer vi.
Hvad eas submit gør, og hvad den skal bruge
Ifølge Expos dokumentation sender kommandoen din .ipa-fil til App Store Connect. Buildet dukker op i TestFlight, når Apple har behandlet det, typisk efter 10 til 15 minutter. Den sender ikke din app til review: det skal du stadig selv gøre i App Store Connect.
Expos side om iOS-indsendelse nævner tre forudsætninger:
- en betalt Apple Developer-konto, som kræves for al indsendelse til App Store;
- bundle-id'et i
ios.bundleIdentifier; - EAS CLI installeret og logget ind på din Expo-konto.
For at sende uden interaktion tilføjer samme side to indstillinger:
ascAppIdisubmit-profilen ieas.json, nummeret på din app i App Store Connect;- en App Store Connect API-nøgle, administreret af EAS eller leveret af dig. Hvordan du opretter den, hvilken rolle den har, og hvordan du tilbagekalder den, står i App Store Connect API-nøgle (.p8).
Den minimale profil fylder kun få linjer. Værdien er opdigtet:
{
"submit": {
"production": {
"ios": {
"ascAppId": "1234567890"
}
}
}
}
Hvis EAS allerede opbevarer din API-nøgle, er denne profil nok. Sådan er det for de fleste af mine apps.
Læs beskeden: tre slags fejl
Før du leder efter løsningen, så find ud af, hvornår kommandoen stopper. Denne tabel er det skema, jeg bruger ved hver fejl.
| Hvornår fejlen sker | Type | Nyt build? |
|---|---|---|
| Før noget bliver sendt | EAS-konfiguration | Nej |
| Forbindelse til Apple, oprettelse af app | Apple-konto | Nej |
| Efter afsendelse, kode ITMS-90xxx | Binærfil afvist | Næsten altid |
Detaljerne finder du på siden for indsendelsen i Expos dashboard. Expo anbefaler at læse logfilerne der og kigge efter boksen "Build Annotations", som viser de almindelige årsager til fejl. I terminalen viser flaget --verbose altid EAS Submit-logfilerne, ifølge EAS CLI-referencen.
Fejl i EAS-konfigurationen
"Set ascAppId in the submit profile (eas.json) or re-run this command in interactive mode."
Du har kørt kommandoen med --non-interactive, for eksempel i CI, og din profil indeholder ikke ascAppId. EAS CLI-koden stopper så: den kan hverken stille dig spørgsmål eller oprette appen for dig.
Løsning: kopiér nummeret på din app ind i ascAppId. Expo forklarer, hvor du finder det: i App Store Connect åbner du din app og derefter App Information. Det er feltet Apple ID under General Information, et tal på cirka ti cifre. Det er hverken din Apple-e-mailadresse eller dit bundle-id.
På Nolera bad kommandoen mig uden ascAppId om en Apple Developer-session, som udløber. Siden nummeret kom ind i eas.json, spørger afsendelsen ikke om noget.
Tilføj
ascAppIdfør buildet, ikke bagefter. Op til SDK 57 inkluderer det fingerprint, Expo beregner, altideas.json. På Vigie, hvor runtime-versionen følgerfingerprint-politikken, ændrede det fingerprintet at tilføje nummeret efter et build: en opdatering udgivet bagefter ville aldrig have nået det installerede build. Fra SDK 58 ignorerer fingerprintets standardindstilling,balanced,eas.json, ifølge Expos changelog.
"App Store Connect API Keys cannot be set up in --non-interactive mode."
Din profil indeholder ingen nøgle, og EAS har ingen nøgle knyttet til din app. Expo skriver det tydeligt: i ikke-interaktiv tilstand kan kommandoen ikke bede dig om en nøgle, og den fejler med denne besked.
To mulige løsninger:
- Lad EAS oprette og opbevare nøglen. Kør
eas credentials --platform iosén gang i interaktiv tilstand på din maskine, og lad den sætte en App Store Connect API-nøgle op til din app. - Brug din egen nøgle i
ascApiKeyPath,ascApiKeyIssuerIdogascApiKeyId. Ifølge eas.json-referencen accepterer de tre felter miljøvariabler, som$ASC_API_KEY_PATH.
På min seneste app ville flaget --auto-submit have et Apple-login for at oprette sin nøgle til afsendelse. Jeg satte de tre felter for min egen nøgle ind i profilen i min lokale arbejdskopi, som aldrig blev committet. Så sendte jeg det færdige build med --id og --non-interactive.
"EXPO_APPLE_APP_SPECIFIC_PASSWORD must be in the format xxxx-xxxx-xxxx-xxxx, where x is a lowercase letter."
Variablen indeholder noget andet end en app-specifik adgangskode, ofte selve din Apple-adgangskode. EAS CLI tjekker formatet, før noget bliver sendt.
Ifølge Apples hjælp genererer du en app-specifik adgangskode på account.apple.com under App-Specific Passwords, med totrinsgodkendelse slået til. Den bliver tilbagekaldt, så snart du ændrer adgangskoden til din Apple-konto. Expo vurderer metoden som mindre sikker end API-nøglen, som er standardmetoden og den anbefalede.
Fejl på Apple-kontoen
"… agree to the latest Program License Agreement in your developer account."
Den fulde besked starter med "You currently don't have access to this membership resource". Fra Apples side kan det rå svar indeholde "Unable to process request - PLA Update available". EAS' nyere afsendelsestrin viser i stedet "A required Apple agreement is missing or has expired".
Årsagen er den samme: Apple har opdateret en aftale, og ingen har accepteret den. Kun kontoens ejer, Account Holder, kan acceptere aftaler, ifølge Apples oversigt over roller. EAS-koden beder vedkommende gå til Business-siden i App Store Connect og derefter, hvis Apple foreslår det, til sin konto på developer.apple.com. Kør så kommandoen igen. Aftalen for betalte apps har sin egen guide: Paid Apps Agreement i App Store Connect.
"App Store Connect rejected the API authentication credentials."
Apple svarede med en 401-fejl, NOT_AUTHORIZED. EAS nævner tre årsager: en nøgle, der ikke længere er aktiv, en nøgle fra en anden App Store Connect-konto, eller et forkert Key ID, nøgleindhold eller Issuer ID.
Tjek de to id'er i App Store Connect, menuen Users and Access, fanen Integrations. Ifølge Apple står Issuer ID øverst på siden, og Key ID i listen over aktive nøgler. En tilbagekaldt nøgle kan aldrig genaktiveres. Apple viser den i 30 dage under Revoked: du skal generere en ny.
"App Store Connect app for application identifier … was not found."
Appen, som ascAppId peger på, kan ikke findes med din nøgle. EAS beder dig tjekke nummeret, og at nøglen faktisk har adgang til appen på den rigtige konto. Den lister endda nogle af de apps, nøglen kan se. Med Apples egne upload-værktøjer viser samme problem sig som "No suitable application records were found".
Tre årsager går igen, hvoraf to er nævnt i denne tråd på Apples forum:
- Appen findes ikke. Opret den i App Store Connect, eller fjern
ascAppId, så kommandoen opretter den. - Nummeret kommer fra en anden konto. Du har kopieret
ascAppIdfra et andet team eller et andet projekt. - Brugeren har ikke adgang til appen. En App Manager eller Developer kan være begrænset til bestemte apps. En teamnøgle har derimod adgang til alle apps på kontoen.
"… is not available to team" eller "… is not available to provider"
Beskeden dukker op, når EAS opretter appen for dig, fordi ascAppId mangler. Bundle-id'et er allerede taget af et andet team. EAS beder dig ændre det i din apps konfiguration og så køre igen.
"App name "…" is already taken. Using generated name "…""
Det er ikke en fejl. Når navnet allerede er taget på App Store, tilføjer EAS seks tilfældige tegn og prøver igen, op til fem gange. Du kan omdøbe appen senere i App Store Connect. For at undgå det, så udfyld appName og language i profilen før den første afsendelse: uden language er primærsproget en-US.
Fejl i binærfilen: ITMS-koderne
Efter afsendelsen behandler Apple buildet. Afviser Apple det, nævner loggen en eller flere ITMS-koder. Her er dem, EAS' afsendelsestrin genkender og oversætter:
| ITMS-kode | Hvad Apple afviser | Løsning |
|---|---|---|
| 90189 | Buildnummeret er allerede brugt | autoIncrement |
| 90062, 90186, 90478 | Versionen er lukket eller overhalet | Hæv version |
| 90683 | Manglende tilladelsestekst | ios.infoPlist |
| 90725 | For gammelt iOS SDK | iOS-image eller Expo SDK |
| 90054, 90055 | Bundle matcher ikke den valgte app | Ret ascAppId |
| 90022, 90023, 90391, 90713 | Ikoner mangler eller er forkert angivet | Gennemgå ikonerne |
| 90771 | Manglende id'er til baggrundsopgaver | ios.infoPlist |
Tre præciseringer fra beskederne:
- Buildnummeret er unikt pr. version. Ved 90189 anbefaler EAS
"autoIncrement": trueieas.json. Alt står i buildnummer og version. - Ved 90725 anbefaler EAS at vælge et nyere iOS-image i
eas.jsonog om nødvendigt at skifte til et understøttet Expo SDK. - Ved 90771 angiver din Info.plist baggrundstilstanden
processing, men ikke nøglenBGTaskSchedulerPermittedIdentifiers.
Bortset fra 90054 og 90055, hvor det er nok at sigte mod den rigtige app eller et andet build, rammer løsningen binærfilen: lav et nyt build, og send det igen. To af koderne har deres egen guide: ITMS-90683 med Expo og ITMS-90725.
I slutningen af september 2026 blev et build af Solys afvist ved levering på grund af ITMS-90683. Jeg havde fjernet en tilladelsestekst om fotos, mens jeg ryddede op i konfigurationsfilen. Solys bruger ikke fotos, men et bibliotek i projektet kalder iOS' Photos-API. Apple analyserer binærfilen, ikke den faktiske brug: siden da fjerner jeg aldrig de tekster.
Statussen Missing Compliance er derimod ikke en afsendelsesfejl. Den mangler din erklæring om kryptering, som er forklaret i guiden til udgivelse med EAS.
Min tjekliste før hver afsendelse
ascAppIdstår isubmit-profilen, tilføjet før buildet.- API-nøglen administreres af EAS, eller dens tre felter peger på en
.p8gemt uden for repoet. - Account Holder har accepteret de seneste aftaler i App Store Connect.
autoIncrementer slået til, med"appVersionSource": "remote", anbefalet af Expo siden EAS CLI 12.versioner højere end den senest godkendte version.- Hver følsom API i binærfilen har sin tilladelsestekst.
- For en ny app er
appNameoglanguageudfyldt før den første afsendelse.
Send din første app uden at gå i stå
Kommandoen er kun ét trin. iOS & Android Kit tager udgangspunkt i startkoden fra mine apps, abonnementer inklusive, og følger fire trin helt til App Store, i dit eget tempo.
Forbereder du din første udgivelse, så tag din gratis diagnose: den fortæller dig, hvad der virkelig blokerer dig, og sender dig min tjekliste mod afvisninger fra Apple. Til appsiden, screenshots og godkendelsen gennemgår siden udgiv en app på App Store hvert trin.
Ofte stillede spørgsmål
Hvorfor fejler eas submit kun i CI?
I --non-interactive-tilstand kan kommandoen ikke spørge dig om noget. Den skal have ascAppId i profilen og en API-nøgle, der allerede er knyttet til appen, eller nøglens tre felter i eas.json. På din egen maskine ville den have stillet dig de spørgsmål.
Skal jeg lave et nyt build efter en fejl i eas submit?
Kun hvis Apple afviser binærfilen med en ITMS-kode. Undtagelse: ved ITMS-90054 og 90055 pegede buildet på den forkerte app, og det er nok at sende det til den rigtige. Konfigurations- og kontofejl retter du i eas.json, i App Store Connect eller på din Apple-konto. Derefter sender du det samme build igen, for eksempel med --latest eller --id.
Hvor ser jeg logfilerne for en EAS Submit-afsendelse?
På siden for indsendelsen i Expos dashboard. Expo anbefaler at læse logfilerne der og boksen "Build Annotations". I terminalen tilføjer du --verbose for altid at vise logfilerne.
Kan jeg bruge eas submit med en gratis Apple-konto?
Nej. Expo kræver en betalt Apple Developer-konto for at sende en app til App Store. Den gratis konto lader dig teste på din egen iPhone, men ikke bruge App Store Connect.
Hvilken rolle skal API-nøglen have til eas submit?
Expos guide giver nøglen rollen Admin. Ifølge Apples oversigt over roller kan rollerne App Manager og Developer også uploade builds. Mine Expo-builds kører med en teamnøgle med rollen App Manager. Kun Account Holder og Admins kan generere en teamnøgle.
Hvad betyder "Increment Build Number" i EAS?
Apple har afvist buildet med koden ITMS-90189: buildnummeret findes allerede for denne version. Slå "autoIncrement": true til i eas.json, eller hæv ios.buildNumber, og lav så et nyt build.

