eas submit iOS: vanlige feil og hvordan du fikser dem
Av Mehdi Azizi
Publisert , 10 min
Feiler eas submit? De ekte meldingene fra EAS og App Store Connect, årsaken og løsningen: ascAppId, API-nøkkel, Apple-avtale, ITMS-koder.
Når eas submit --platform ios feiler, sier meldingen nesten alltid hvor du skal lete. Enten er EAS-konfigurasjonen din ufullstendig, eller så blokkerer Apple-kontoen din, eller så avviser Apple binærfilen. De to første tilfellene fikser du på noen minutter, uten nytt build. Det tredje kjenner du igjen på en ITMS-kode, og det krever nesten alltid et nytt build.
Jeg publiserer iOS-appene mine, blant annet Solys, TradaZen og Nolera, med Expo og EAS. Meldingene jeg siterer her er kopiert fra kildekoden til EAS CLI, på Expos offisielle GitHub-repo, lest gjennom 3. november 2026. Det gamle Expo-forumet sender deg nå videre til Discord: koden er fortsatt den sikreste kilden. For hele løpet, fra eas.json-filen til innsending til gjennomgang, les først EAS Submit iOS: publiser en Expo-app på App Store. Her reparerer vi.
Hva eas submit gjør, og hva den trenger
Ifølge Expos dokumentasjon sender kommandoen .ipa-filen din til App Store Connect. Buildet dukker opp i TestFlight etter at Apple har behandlet det, vanligvis etter 10 til 15 minutter. Den sender ikke appen din til gjennomgang: det må du fortsatt gjøre selv i App Store Connect.
Expos side om iOS-innsending lister tre forutsetninger:
- en betalt Apple Developer-konto, påkrevd for all innsending til App Store;
- bundle-ID-en i
ios.bundleIdentifier; - EAS CLI installert og logget inn på Expo-kontoen din.
For å sende uten interaksjon legger samme side til to innstillinger:
ascAppIdisubmit-profilen ieas.json, nummeret til appoppføringen din i App Store Connect;- en App Store Connect API-nøkkel, administrert av EAS eller levert av deg. Hvordan du lager den, hvilken rolle den har og hvordan du trekker den tilbake, står i App Store Connect API-nøkkel (.p8).
Minimumsprofilen er bare noen få linjer. Verdien er fiktiv:
{
"submit": {
"production": {
"ios": {
"ascAppId": "1234567890"
}
}
}
}
Hvis EAS allerede tar vare på API-nøkkelen din, holder denne profilen. Sånn er det for de fleste appene mine.
Les meldingen: tre feilfamilier
Før du leter etter løsningen, finn ut når kommandoen stopper. Denne tabellen er rutenettet jeg bruker ved hver feil.
| Når feilen skjer | Familie | Nytt build? |
|---|---|---|
| Før noe er sendt | EAS-konfigurasjon | Nei |
| Tilkobling til Apple, opprettelse av app | Apple-konto | Nei |
| Etter sending, kode ITMS-90xxx | Binærfil avvist | Nesten alltid |
Detaljene finner du på siden for innsendingen, i Expo-dashbordet. Expo anbefaler å lese loggene der og se etter boblen «Build Annotations», som viser vanlige feilårsaker. I terminalen viser --verbose alltid loggene fra EAS Submit, ifølge EAS CLI-referansen.
Feil i EAS-konfigurasjonen
«Set ascAppId in the submit profile (eas.json) or re-run this command in interactive mode.»
Du kjørte kommandoen med --non-interactive, for eksempel i CI, og profilen din inneholder ikke ascAppId. Koden i EAS CLI stopper da: den kan verken spørre deg eller opprette appoppføringen for deg.
Løsning: kopier nummeret til appoppføringen inn i ascAppId. Expo forklarer hvor du finner det: i App Store Connect åpner du appen din, så App Information. Det er feltet Apple ID, under General Information, et tall på rundt ti sifre. Det er verken Apple-e-postadressen din eller bundle-ID-en din.
På Nolera, uten ascAppId, krevde kommandoen en Apple Developer-økt, som utløper. Etter at nummeret kom inn i eas.json, spør innsendingen ikke om noe lenger.
Legg til
ascAppIdfør buildet, ikke etter. Til og med SDK 57 inkluderer fingeravtrykket Expo beregner alltideas.json. På Vigie, der runtime-versjonen følgerfingerprint-policyen, endret fingeravtrykket seg da jeg la til dette nummeret etter et build: en oppdatering publisert etterpå ville aldri nådd det installerte buildet. Fra og med SDK 58 ignorerer standardinnstillingen for fingeravtrykk,balanced,eas.json, ifølge Expos endringslogg.
«App Store Connect API Keys cannot be set up in --non-interactive mode.»
Profilen din inneholder ingen nøkkel, og EAS har ingen knyttet til appen din. Expo presiserer at kommandoen i ikke-interaktiv modus ikke kan be deg om en nøkkel, og at den feiler med denne meldingen.
To mulige løsninger:
- La EAS lage og ta vare på nøkkelen. Kjør
eas credentials --platform iosén gang i interaktiv modus på maskinen din, og la den sette opp en App Store Connect API-nøkkel for appen. - Bruk din egen nøkkel i
ascApiKeyPath,ascApiKeyIssuerIdogascApiKeyId. Ifølge eas.json-referansen godtar disse tre feltene miljøvariabler, som$ASC_API_KEY_PATH.
På den siste appen min ville --auto-submit ha en Apple-ID for å lage sin egen innsendingsnøkkel. Jeg la de tre feltene for min egen nøkkel i profilen i arbeidskopien min, aldri committet. Så sendte jeg det ferdige buildet 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.»
Variabelen inneholder noe annet enn et appspesifikt passord, ofte selve Apple-passordet ditt. EAS CLI sjekker dette formatet før noe sendes.
Ifølge Apples hjelpeside lager du et appspesifikt passord på account.apple.com, under App-Specific Passwords, med tofaktorautentisering slått på. Det trekkes tilbake så snart du endrer passordet til Apple-kontoen din. Expo anser denne metoden som mindre sikker enn API-nøkkelen, som er standardmetoden og den anbefalte.
Feil i Apple-kontoen
«… agree to the latest Program License Agreement in your developer account.»
Hele meldingen begynner med «You currently don't have access to this membership resource». Hos Apple kan råsvaret inneholde «Unable to process request - PLA Update available». De nyere innsendingsstegene i EAS viser heller «A required Apple agreement is missing or has expired».
Årsaken er den samme: Apple har oppdatert en avtale, og ingen har godtatt den. Bare kontoinnehaveren, Account Holder, kan godta avtaler, ifølge Apples rolletabell. Koden i EAS ber vedkommende gå via Business-siden i App Store Connect, og deretter, hvis Apple foreslår det, via kontoen sin på developer.apple.com. Kjør så kommandoen på nytt. Avtalen for betalte apper har sin egen guide: Paid Apps Agreement i App Store Connect.
«App Store Connect rejected the API authentication credentials.»
Apple svarte med en 401-feil, NOT_AUTHORIZED. EAS nevner tre årsaker: en nøkkel som ikke lenger er aktiv, en nøkkel fra en annen App Store Connect-konto, eller feil Key ID, nøkkelinnhold eller Issuer ID.
Sjekk de to ID-ene i App Store Connect, menyen Users and Access, fanen Integrations. Ifølge Apple vises Issuer ID øverst på siden, og Key ID i listen over aktive nøkler. En tilbakekalt nøkkel kan aldri aktiveres igjen. Apple viser den i 30 dager under Revoked: du må lage en ny.
«App Store Connect app for application identifier … was not found.»
Appoppføringen som ascAppId peker på, finnes ikke med nøkkelen din. EAS ber deg sjekke nummeret, og at nøkkelen faktisk har tilgang til appen i riktig konto. Den lister til og med noen apper som er synlige med denne nøkkelen. Med Apples egne opplastingsverktøy vises det samme problemet som «No suitable application records were found».
Tre årsaker går igjen, to av dem nevnt i denne tråden på Apples forum:
- Appoppføringen finnes ikke. Opprett den i App Store Connect, eller fjern
ascAppIdså kommandoen oppretter den. - Nummeret kommer fra en annen konto. Du har kopiert
ascAppIdfra et annet team eller et annet prosjekt. - Brukeren har ikke tilgang til appen. En App Manager eller Developer kan være begrenset til enkelte apper. En team-nøkkel har derimot tilgang til alle apper i kontoen.
«… is not available to team» eller «… is not available to provider»
Denne meldingen dukker opp når EAS oppretter appoppføringen for deg fordi ascAppId mangler. Bundle-ID-en er allerede tatt av et annet team. EAS ber deg endre den i appkonfigurasjonen og kjøre på nytt.
«App name "…" is already taken. Using generated name "…"»
Dette er ikke en feil. Når navnet allerede er tatt på App Store, legger EAS til seks tilfeldige tegn og prøver igjen, opptil fem ganger. Du gir appoppføringen nytt navn senere i App Store Connect. For å unngå dette, fyll inn appName og language i profilen før første innsending: uten language blir hovedspråket en-US.
Feil i binærfilen: ITMS-kodene
Etter sendingen behandler Apple buildet. Hvis det avvises, viser loggen én eller flere ITMS-koder. Dette er de som innsendingssteget i EAS kjenner igjen og oversetter:
| ITMS-kode | Hva Apple avviser | Løsning |
|---|---|---|
| 90189 | Buildnummeret er allerede brukt | autoIncrement |
| 90062, 90186, 90478 | Versjonen er lukket eller passert | Øk version |
| 90683 | Tillatelsestekst mangler | ios.infoPlist |
| 90725 | For gammel iOS SDK | iOS-image eller Expo SDK |
| 90054, 90055 | Bundle ulik appoppføringen det sendes til | Rett ascAppId |
| 90022, 90023, 90391, 90713 | Ikoner mangler eller er feil deklarert | Gå gjennom ikonene |
| 90771 | ID-er for bakgrunnsoppgaver mangler | ios.infoPlist |
Tre presiseringer fra disse meldingene:
- Buildnummeret er unikt per versjon. For 90189 anbefaler EAS
"autoIncrement": trueieas.json. Alt står i buildnummer og versjon. - For 90725 anbefaler EAS å velge et nyere iOS-image i
eas.json, og om nødvendig å gå over til en støttet Expo SDK. - For 90771 deklarerer Info.plist bakgrunnsmodusen
processing, men ikke nøkkelenBGTaskSchedulerPermittedIdentifiers.
Unntatt for 90054 og 90055, der det holder å peke på riktig appoppføring eller et annet build, gjelder løsningen binærfilen: lag et nytt build og send det på nytt. To av kodene har sin egen guide: ITMS-90683 med Expo og ITMS-90725.
I slutten av september 2026 ble et build av Solys avvist ved levering for ITMS-90683. Jeg hadde fjernet en tillatelsestekst for bilder mens jeg ryddet i konfigurasjonsfilen. Solys bruker ikke bilder, men et bibliotek i prosjektet kaller Photos-API-et i iOS. Apple analyserer binærfilen, ikke faktisk bruk: siden da har jeg aldri fjernet disse tekstene.
Statusen Missing Compliance er derimot ikke en innsendingsfeil. Det mangler en erklæring om kryptering fra deg, forklart i guiden for publisering med EAS.
Sjekklisten min før hver innsending
ascAppIdstår isubmit-profilen, lagt til før buildet.- API-nøkkelen administreres av EAS, eller de tre feltene peker på en
.p8som ligger utenfor repoet. - Account Holder har godtatt de nyeste avtalene i App Store Connect.
autoIncrementer på, med"appVersionSource": "remote", anbefalt av Expo siden EAS CLI 12.versioner høyere enn den siste godkjente versjonen.- Hvert sensitivt API i binærfilen har sin tillatelsestekst.
- For en ny app er
appNameoglanguagefylt inn før første innsending.
Send din første app uten å bli sittende fast
Kommandoen er bare ett steg. iOS & Android Kit bygger på startkoden til appene mine, abonnementer inkludert, og tar deg gjennom fire steg helt til App Store, i ditt eget tempo.
Hvis du forbereder din første lansering, ta den gratis diagnosen: den forteller deg hva som faktisk stopper deg, og sender deg sjekklisten min mot avvisninger fra Apple. For appoppføringen, skjermbildene og godkjenningen går siden publisere en app på App Store gjennom hvert steg.
Ofte stilte spørsmål
Hvorfor feiler eas submit bare i CI?
I --non-interactive-modus kan ikke kommandoen spørre deg om noe. Den trenger ascAppId i profilen og en API-nøkkel som allerede er knyttet til appen, eller de tre feltene i eas.json. På maskinen din ville den ha stilt deg disse spørsmålene.
Må jeg lage et nytt build etter en feil i eas submit?
Bare hvis Apple avviser binærfilen, med en ITMS-kode. Unntak: for ITMS-90054 og 90055 pekte buildet på feil appoppføring, og det holder å sende det til riktig. Konfigurasjons- og kontofeil retter du i eas.json, i App Store Connect eller i Apple-kontoen din. Så sender du det samme buildet på nytt, for eksempel med --latest eller --id.
Hvor ser jeg loggene for en EAS Submit-innsending?
På siden for innsendingen, i Expo-dashbordet. Expo anbefaler å lese loggene der og boblen «Build Annotations». I terminalen legger du til --verbose for alltid å vise loggene.
Kan jeg bruke eas submit med en gratis Apple-konto?
Nei. Expo krever en betalt Apple Developer-konto for å sende en app til App Store. Gratiskontoen lar deg teste på din egen iPhone, ikke bruke App Store Connect.
Hvilken rolle skal API-nøkkelen ha for eas submit?
Expos guide gir nøkkelen rollen Admin. Ifølge Apples rolletabell kan også rollene App Manager og Developer laste opp builds. Expo-buildene mine kjører med en team-nøkkel med rollen App Manager. Bare Account Holder og Admins kan lage en team-nøkkel.
Hva betyr «Increment Build Number» i EAS?
Apple har avvist buildet med koden ITMS-90189: dette buildnummeret finnes allerede for denne versjonen. Slå på "autoIncrement": true i eas.json, eller øk ios.buildNumber, og lag så et nytt build.

