eas submit iOS: vanliga fel och hur du fixar dem
Av Mehdi Azizi
Publicerad , 10 min
Misslyckas eas submit? De riktiga felmeddelandena från EAS och App Store Connect, orsaken och lösningen: ascAppId, API-nyckel, Apple-avtal, ITMS-koder.
När eas submit --platform ios misslyckas säger meddelandet nästan alltid var du ska leta. Antingen är din EAS-konfiguration ofullständig, eller så blockerar ditt Apple-konto, eller så avvisar Apple binärfilen. De två första fallen fixar du på några minuter, utan nytt build. Det tredje känner du igen på en ITMS-kod, och det kräver nästan alltid ett nytt build.
Jag publicerar mina iOS-appar, bland annat Solys, TradaZen och Nolera, med Expo och EAS. Meddelandena som citeras här är kopierade från källkoden till EAS CLI, på Expos officiella GitHub-repo, genomläst den 3 november 2026. Expos gamla forum hänvisar numera till Discord: koden är fortfarande den säkraste källan. För hela flödet, från filen eas.json till inskickning för granskning, läs först EAS Submit iOS: publicera en Expo-app på App Store. Här lagar vi.
Vad eas submit gör, och vad den behöver
Enligt Expos dokumentation skickar kommandot din .ipa-fil till App Store Connect. Buildet dyker upp i TestFlight när Apple har bearbetat det, oftast efter 10 till 15 minuter. Det skickar inte in din app för granskning: det steget gör du själv i App Store Connect.
Expos sida om iOS-inskickning listar tre förutsättningar:
- ett betalt Apple Developer-konto, som krävs för all uppladdning till App Store;
- bundle-identifieraren i
ios.bundleIdentifier; - EAS CLI installerat och inloggat på ditt Expo-konto.
För att skicka utan interaktion lägger samma sida till två inställningar:
ascAppIdisubmit-profilen ieas.json, numret på din app i App Store Connect;- en App Store Connect API-nyckel, hanterad av EAS eller som du tillhandahåller själv. Hur du skapar den, vilken roll den har och hur du återkallar den går jag igenom i App Store Connect API-nyckel (.p8).
Den minimala profilen ryms på några rader. Värdet är påhittat:
{
"submit": {
"production": {
"ios": {
"ascAppId": "1234567890"
}
}
}
}
Om EAS redan har din API-nyckel räcker den här profilen. Så är det för de flesta av mina appar.
Läs meddelandet: tre familjer av fel
Innan du letar efter lösningen, kolla var kommandot stannar. Den här tabellen är mallen jag använder vid varje misslyckande.
| När det misslyckas | Familj | Nytt build? |
|---|---|---|
| Innan något skickas | EAS-konfiguration | Nej |
| Anslutning till Apple, skapande av appen | Apple-konto | Nej |
| Efter uppladdningen, kod ITMS-90xxx | Binärfil avvisad | Nästan alltid |
Detaljerna hittar du på inskickningens sida i Expos dashboard. Expo rekommenderar att du läser loggarna där och letar efter rutan "Build Annotations", som pekar ut vanliga orsaker till fel. I terminalen visar flaggan --verbose alltid EAS Submits loggar, enligt EAS CLI-referensen.
Fel i EAS-konfigurationen
"Set ascAppId in the submit profile (eas.json) or re-run this command in interactive mode."
Du körde kommandot med --non-interactive, till exempel i CI, och din profil saknar ascAppId. EAS CLI-koden stannar då: den kan varken ställa frågor till dig eller skapa appen åt dig.
Lösning: kopiera in appens nummer i ascAppId. Expo visar var du hittar det: öppna din app i App Store Connect, sedan App Information. Det är fältet Apple ID, under General Information, ett tal på ungefär tio siffror. Det är varken din Apple-e-postadress eller din bundle-identifierare.
På Nolera, utan ascAppId, krävde kommandot en Apple Developer-session, som går ut. Sedan numret ligger i eas.json frågar uppladdningen inte efter något längre.
Lägg till
ascAppIdföre buildet, inte efter. Fram till SDK 57 inkluderar fingeravtrycket som Expo beräknar alltideas.json. På Vigie, där runtime-versionen följer policynfingerprint, ändrade det fingeravtrycket att lägga till numret efter ett build: en uppdatering som publicerades efteråt hade aldrig nått det installerade buildet. Sedan SDK 58 ignorerar fingeravtryckets standardförval,balanced, fileneas.json, enligt Expos ändringslogg.
"App Store Connect API Keys cannot be set up in --non-interactive mode."
Din profil innehåller ingen nyckel, och EAS har ingen kopplad till din app. Expo förklarar: i icke-interaktivt läge kan kommandot inte be dig om en nyckel, och det misslyckas med det här meddelandet.
Två möjliga lösningar:
- Låt EAS skapa och spara nyckeln. Kör
eas credentials --platform iosen gång i interaktivt läge på din dator, och låt den konfigurera en App Store Connect API-nyckel för din app. - Ta med din egen nyckel i
ascApiKeyPath,ascApiKeyIssuerIdochascApiKeyId. Enligt referensen för eas.json accepterar de tre fälten miljövariabler, som$ASC_API_KEY_PATH.
På min senaste app ville flaggan --auto-submit ha ett Apple-ID för att skapa sin uppladdningsnyckel. Jag lade de tre fälten för min egen nyckel i profilen i min lokala arbetskopia, aldrig commitad. Sedan skickade jag det färdiga buildet med --id och --non-interactive.
"EXPO_APPLE_APP_SPECIFIC_PASSWORD must be in the format xxxx-xxxx-xxxx-xxxx, where x is a lowercase letter."
Variabeln innehåller något annat än ett appspecifikt lösenord, ofta själva Apple-lösenordet. EAS CLI kontrollerar formatet innan något skickas.
Enligt Apples hjälp skapar du ett appspecifikt lösenord på account.apple.com, under App-Specific Passwords, med tvåfaktorsautentisering aktiverad. Det återkallas så fort du ändrar lösenordet till ditt Apple-konto. Expo anser att den här metoden är mindre säker än API-nyckeln, som är deras standard och rekommenderade metod.
Fel i Apple-kontot
"… agree to the latest Program License Agreement in your developer account."
Hela meddelandet börjar med "You currently don't have access to this membership resource". På Apples sida kan råsvaret innehålla "Unable to process request - PLA Update available". EAS nyare uppladdningssteg visar hellre "A required Apple agreement is missing or has expired".
Orsaken är densamma: Apple har uppdaterat ett avtal och ingen har godkänt det. Bara kontoinnehavaren, Account Holder, kan godkänna avtal, enligt Apples rolltabell. EAS-koden ber hen gå via sidan Business i App Store Connect, och sedan, om Apple föreslår det, via sitt konto på developer.apple.com. Kör sedan kommandot igen. Avtalet för betalappar har en egen guide: Paid Apps Agreement i App Store Connect.
"App Store Connect rejected the API authentication credentials."
Apple svarade med ett 401-fel, NOT_AUTHORIZED. EAS nämner tre orsaker: en nyckel som inte längre är aktiv, en nyckel från ett annat App Store Connect-konto, eller fel Key ID, nyckelinnehåll eller Issuer ID.
Kontrollera de två identifierarna i App Store Connect, menyn Users and Access, fliken Integrations. Enligt Apple visas Issuer ID högst upp på sidan och Key ID i listan över aktiva nycklar. En återkallad nyckel kan aldrig återaktiveras. Apple visar den i 30 dagar under Revoked: du måste skapa en ny.
"App Store Connect app for application identifier … was not found."
Appen som ascAppId pekar på går inte att hitta med din nyckel. EAS ber dig kontrollera numret, och att nyckeln faktiskt har åtkomst till appen i rätt konto. Den listar till och med några appar som syns med nyckeln. Med Apples egna uppladdningsverktyg visas samma problem som "No suitable application records were found".
Tre orsaker återkommer, varav två tas upp i den här tråden på Apples forum:
- Appen finns inte. Skapa den i App Store Connect, eller ta bort
ascAppIdså att kommandot skapar den. - Numret kommer från ett annat konto. Du kopierade
ascAppIdfrån ett annat team eller ett annat projekt. - Användaren har inte åtkomst till appen. En App Manager eller Developer kan vara begränsad till vissa appar. En teamnyckel däremot har åtkomst till alla appar i kontot.
"… is not available to team" eller "… is not available to provider"
Det här meddelandet dyker upp när EAS skapar appen åt dig, eftersom ascAppId saknas. Bundle-identifieraren är redan tagen av ett annat team. EAS ber dig ändra den i appens konfiguration och sedan köra igen.
"App name "…" is already taken. Using generated name "…""
Det här är inget fel. När namnet redan är taget på App Store lägger EAS till sex slumpmässiga tecken och försöker igen, upp till fem gånger. Du byter namn på appen senare i App Store Connect. För att undvika det, fyll i appName och language i profilen före första uppladdningen: utan language blir huvudspråket en-US.
Fel i binärfilen: ITMS-koderna
Efter uppladdningen bearbetar Apple buildet. Om det avvisas nämner loggen en eller flera ITMS-koder. Här är de som EAS uppladdningssteg känner igen och översätter:
| ITMS-kod | Vad Apple avvisar | Lösning |
|---|---|---|
| 90189 | Buildnumret är redan använt | autoIncrement |
| 90062, 90186, 90478 | Versionen är stängd eller redan passerad | Höj version |
| 90683 | Behörighetstext saknas | ios.infoPlist |
| 90725 | För gammalt iOS SDK | iOS-image eller Expo SDK |
| 90054, 90055 | Bundle skiljer sig från målappen | Rätta ascAppId |
| 90022, 90023, 90391, 90713 | Ikoner saknas eller är fel deklarerade | Se över ikonerna |
| 90771 | Identifierare för bakgrundsuppgifter saknas | ios.infoPlist |
Tre förtydliganden från de här meddelandena:
- Buildnumret är unikt per version. För 90189 rekommenderar EAS
"autoIncrement": trueieas.json. Allt finns i buildnummer och version. - För 90725 rekommenderar EAS att du väljer en nyare iOS-image i
eas.json, och vid behov byter till en Expo SDK som stöds. - För 90771 deklarerar din Info.plist bakgrundsläget
processing, men inte nyckelnBGTaskSchedulerPermittedIdentifiers.
Utom för 90054 och 90055, där det räcker att peka på rätt app eller ett annat build, gäller lösningen binärfilen: gör ett nytt build och skicka det igen. Två koder har egna guider: ITMS-90683 med Expo och ITMS-90725.
I slutet av september 2026 avvisades ett build av Solys vid leveransen med ITMS-90683. Jag hade tagit bort en behörighetstext för foton när jag städade konfigurationsfilen. Solys använder inte foton, men ett bibliotek i projektet anropar iOS Photos-API. Apple analyserar binärfilen, inte den faktiska användningen: sedan dess tar jag aldrig bort de här texterna.
Statusen Missing Compliance är däremot inget uppladdningsfel. Det som saknas är din deklaration om kryptering, som förklaras i guiden för publicering med EAS.
Min checklista före varje uppladdning
ascAppIdfinns isubmit-profilen, tillagd före buildet.- API-nyckeln hanteras av EAS, eller så pekar dess tre fält på en
.p8som ligger utanför repot. - Account Holder har godkänt de senaste avtalen i App Store Connect.
autoIncrementär aktivt, med"appVersionSource": "remote", rekommenderat av Expo sedan EAS CLI 12.versionär högre än den senast godkända versionen.- Varje känsligt API i binärfilen har sin behörighetstext.
- För en ny app är
appNameochlanguageifyllda före första uppladdningen.
Skicka din första app utan att fastna
Kommandot är bara ett steg. iOS & Android Kit utgår från startkoden för mina appar, prenumerationer inräknade, och följer fyra steg ända till App Store, i din egen takt.
Om du förbereder din första release, gör din gratis diagnos: den visar vad som verkligen blockerar dig och skickar dig min checklista mot avvisningar från Apple. För appsidan, skärmbilderna och granskningen går sidan publicera en app på App Store igenom varje steg.
Vanliga frågor
Varför misslyckas eas submit bara i CI?
I läget --non-interactive kan kommandot inte fråga dig om något. Det behöver ascAppId i profilen och en API-nyckel som redan är kopplad till appen, eller nyckelns tre fält i eas.json. På din dator hade det ställt de frågorna till dig.
Måste jag göra ett nytt build efter ett fel i eas submit?
Bara om Apple avvisar binärfilen med en ITMS-kod. Undantag: för ITMS-90054 och 90055 pekade buildet på fel app, och det räcker att skicka det till rätt app. Konfigurations- och kontofel fixar du i eas.json, i App Store Connect eller i ditt Apple-konto. Sedan skickar du samma build igen, till exempel med --latest eller --id.
Var ser jag loggarna för en uppladdning med EAS Submit?
På inskickningens sida i Expos dashboard. Expo rekommenderar att du läser loggarna där och rutan "Build Annotations". I terminalen lägger du till --verbose för att alltid visa loggarna.
Kan man använda eas submit med ett gratis Apple-konto?
Nej. Expo kräver ett betalt Apple Developer-konto för att skicka en app till App Store. Gratiskontot låter dig testa på din egen iPhone, men inte använda App Store Connect.
Vilken roll ska API-nyckeln ha för eas submit?
Expos guide ger nyckeln rollen Admin. Enligt Apples rolltabell kan även rollerna App Manager och Developer ladda upp builds. Mina Expo-builds körs med en teamnyckel med rollen App Manager. Bara Account Holder och Admins kan skapa en teamnyckel.
Vad betyder "Increment Build Number" i EAS?
Apple avvisade buildet med koden ITMS-90189: buildnumret finns redan för den här versionen. Aktivera "autoIncrement": true i eas.json, eller höj ios.buildNumber, och gör sedan ett nytt build.

