eas submit iOS greške: uzroci i rješenja
Autor: Mehdi Azizi
Objavljeno , 10 min
eas submit ne prolazi? Stvarne poruke EAS-a i App Store Connecta, njihov uzrok i rješenje: ascAppId, API ključ, Appleov ugovor, ITMS kodovi.
Kad eas submit --platform ios ne prođe, poruka ti gotovo uvijek kaže gdje gledati. Ili ti je EAS konfiguracija nepotpuna, ili te blokira Apple račun, ili Apple odbija binarnu datoteku. Prva dva slučaja rješavaš za par minuta, bez novog builda. Treći prepoznaješ po ITMS kodu i gotovo uvijek traži novi build.
Svoje iOS aplikacije, među njima Solys, TradaZen i Nolera, objavljujem s Expoom i EAS-om. Poruke koje ovdje navodim kopirane su iz izvornog koda EAS CLI-ja, s Expoova službenog GitHub repozitorija, pregledanog 3. studenoga 2026. Stari Expo forum sada preusmjerava na Discord, pa je kod i dalje najpouzdaniji izvor. Za cijeli put, od datoteke eas.json do slanja na pregled, prvo pročitaj EAS Submit iOS: objava Expo aplikacije na App Store. Ovdje popravljamo.
Što radi eas submit i što mu treba
Prema Expoovoj dokumentaciji, naredba šalje tvoju .ipa datoteku u App Store Connect. Build se pojavi u TestFlightu nakon što ga Apple obradi, obično za 10 do 15 minuta. Naredba ne šalje tvoju aplikaciju na pregled: to i dalje moraš napraviti u App Store Connectu.
Expoova stranica o slanju za iOS navodi tri preduvjeta:
- plaćeni Apple Developer račun, obavezan za svako slanje na App Store;
- bundle identifier u
ios.bundleIdentifier; - instaliran EAS CLI, prijavljen na tvoj Expo račun.
Za slanje bez interakcije ista stranica dodaje dvije postavke:
ascAppIdusubmitprofilu datotekeeas.json, broj tvoje aplikacije u App Store Connectu;- App Store Connect API ključ, kojim upravlja EAS ili ga daješ ti. Kako ga izraditi, koju ulogu mu dati i kako ga opozvati, opisano je u članku App Store Connect API ključ (.p8).
Minimalni profil stane u par redaka. Vrijednost je izmišljena:
{
"submit": {
"production": {
"ios": {
"ascAppId": "1234567890"
}
}
}
}
Ako EAS već čuva tvoj API ključ, ovaj profil je dovoljan. Tako je kod većine mojih aplikacija.
Kako čitati poruku: tri vrste grešaka
Prije nego tražiš rješenje, pogledaj u kojem trenutku naredba staje. Ova tablica je shema koju primjenjujem kod svakog neuspjeha.
| Trenutak neuspjeha | Vrsta | Novi build? |
|---|---|---|
| Prije bilo kakvog slanja | EAS konfiguracija | Ne |
| Spajanje na Apple, izrada zapisa aplikacije | Apple račun | Ne |
| Nakon slanja, kod ITMS-90xxx | Odbijen binarni | Gotovo uvijek |
Detalje čitaš na stranici slanja, u Expoovoj nadzornoj ploči. Expo savjetuje da ondje pročitaš zapise i potražiš oblačić "Build Annotations", koji upozorava na česte uzroke neuspjeha. U terminalu opcija --verbose uvijek prikazuje zapise EAS Submita, prema referenci EAS CLI-ja.
Greške EAS konfiguracije
"Set ascAppId in the submit profile (eas.json) or re-run this command in interactive mode."
Pokrenuo si naredbu s --non-interactive, recimo u kontinuiranoj integraciji, a tvoj profil nema ascAppId. Kod EAS CLI-ja tada staje: ne može te ništa pitati niti umjesto tebe izraditi zapis aplikacije.
Rješenje: prepiši broj svoje aplikacije u ascAppId. Expo kaže gdje ga naći: u App Store Connectu otvori aplikaciju, zatim App Information. To je polje Apple ID, pod General Information, broj od desetak znamenki. To nije tvoja Apple e-mail adresa niti bundle identifier.
Na Noleri mi je naredba bez ascAppId tražila Apple Developer sesiju, koja istječe. Otkad je broj u eas.json, slanje više ništa ne traži.
Dodaj
ascAppIdprije builda, ne poslije. Do SDK-a 57 otisak koji računa Expo uvijek uključujeeas.json. Na Vigieju, čija runtime verzija prati politikufingerprint, dodavanje tog broja nakon builda promijenilo je otisak: update objavljen poslije nikad ne bi stigao do instaliranog builda. Od SDK-a 58 zadana postavka otiska,balanced, ignoriraeas.json, prema Expoovom popisu promjena.
"App Store Connect API Keys cannot be set up in --non-interactive mode."
Tvoj profil nema ključ, a EAS nema nijedan povezan s tvojom aplikacijom. Expo to pojašnjava: u neinteraktivnom načinu naredba te ne može pitati za ključ, pa pada s ovom porukom.
Dva moguća rješenja:
- Pusti EAS da izradi i čuva ključ. Jednom pokreni
eas credentials --platform iosu interaktivnom načinu, na svom računalu, i pusti ga da postavi App Store Connect API ključ za tvoju aplikaciju. - Donesi vlastiti ključ u
ascApiKeyPath,ascApiKeyIssuerIdiascApiKeyId. Prema referenci za eas.json, ta tri polja prihvaćaju varijable okruženja, poput$ASC_API_KEY_PATH.
Na mojoj zadnjoj aplikaciji opcija --auto-submit htjela je Apple podatke za prijavu kako bi izradila ključ za slanje. Stavio sam tri polja svog ključa u profil u svojoj radnoj kopiji, nikad commitanoj. Onda sam gotov build poslao s --id i --non-interactive.
"EXPO_APPLE_APP_SPECIFIC_PASSWORD must be in the format xxxx-xxxx-xxxx-xxxx, where x is a lowercase letter."
Varijabla sadrži nešto drugo, a ne lozinku za aplikaciju, često samu tvoju Apple lozinku. EAS CLI provjerava taj format prije bilo kakvog slanja.
Prema Appleovoj pomoći, lozinka za aplikaciju generira se na account.apple.com, u odjeljku App-Specific Passwords, uz uključenu dvofaktorsku autentifikaciju. Opoziva se čim promijeniš lozinku Apple računa. Expo ovu metodu smatra manje sigurnom od API ključa, svoje zadane i preporučene metode.
Greške Apple računa
"… agree to the latest Program License Agreement in your developer account."
Cijela poruka počinje s "You currently don't have access to this membership resource". Sirovi Appleov odgovor može sadržavati "Unable to process request - PLA Update available". Novi koraci slanja u EAS-u radije prikazuju "A required Apple agreement is missing or has expired".
Uzrok je isti: Apple je ažurirao ugovor, a nitko ga nije prihvatio. Ugovore može prihvatiti samo vlasnik računa, Account Holder, prema Appleovoj tablici uloga. Kod EAS-a traži od njega da prođe kroz stranicu Business u App Store Connectu, a zatim, ako Apple to ponudi, kroz svoj račun na developer.apple.com. Nakon toga ponovno pokreni naredbu. Ugovor za plaćene aplikacije ima svoj vodič: Paid Apps Agreement u App Store Connectu.
"App Store Connect rejected the API authentication credentials."
Apple je odgovorio greškom 401, NOT_AUTHORIZED. EAS navodi tri uzroka: ključ koji više nije aktivan, ključ s drugog App Store Connect računa, ili pogrešan Key ID, sadržaj ključa ili Issuer ID.
Provjeri oba identifikatora u App Store Connectu, izbornik Users and Access, kartica Integrations. Prema Appleu, Issuer ID prikazuje se na vrhu stranice, a Key ID na popisu aktivnih ključeva. Opozvani ključ nikad se ne može ponovno aktivirati. Apple ga prikazuje 30 dana pod Revoked: moraš generirati novi.
"App Store Connect app for application identifier … was not found."
Aplikacija na koju cilja ascAppId ne može se pronaći s tvojim ključem. EAS traži da provjeriš taj broj i da ključ stvarno ima pristup aplikaciji na pravom računu. Čak navodi nekoliko aplikacija vidljivih s tim ključem. S Appleovim alatima za slanje isti se problem prikazuje kao "No suitable application records were found".
Ponavljaju se tri uzroka, od kojih su dva zabilježena u ovoj temi na Appleovim forumima:
- Zapis aplikacije ne postoji. Izradi ga u App Store Connectu ili makni
ascAppIdda ga naredba izradi. - Broj je s drugog računa. Kopirao si
ascAppIddrugog tima ili drugog projekta. - Korisnik nema pristup aplikaciji. App Manager ili Developer mogu biti ograničeni na određene aplikacije. Timski ključ, s druge strane, ima pristup svim aplikacijama na računu.
"… is not available to team" ili "… is not available to provider"
Ova se poruka pojavljuje kad EAS umjesto tebe izrađuje zapis aplikacije jer nema ascAppId. Bundle identifier već je zauzeo drugi tim. EAS traži da ga promijeniš u konfiguraciji aplikacije i ponovno pokreneš naredbu.
"App name "…" is already taken. Using generated name "…""
Ovo nije neuspjeh. Kad je ime već zauzeto na App Storeu, EAS doda šest nasumičnih znakova i pokuša ponovno, do pet puta. Aplikaciju ćeš kasnije preimenovati u App Store Connectu. Da to izbjegneš, ispuni appName i language u profilu prije prvog slanja: bez language glavni jezik je en-US.
Greške binarne datoteke: ITMS kodovi
Nakon slanja Apple obrađuje build. Ako ga odbije, zapis navodi jedan ili više ITMS kodova. Evo onih koje korak slanja u EAS-u prepoznaje i prevodi:
| ITMS kod | Što Apple odbija | Rješenje |
|---|---|---|
| 90189 | Broj builda već je zauzet | autoIncrement |
| 90062, 90186, 90478 | Verzija zatvorena ili već nadmašena | Povećaj version |
| 90683 | Nedostaje rečenica za dopuštenje | ios.infoPlist |
| 90725 | Prestar iOS SDK | iOS image ili Expo SDK |
| 90054, 90055 | Bundle se razlikuje od ciljane aplikacije | Ispravi ascAppId |
| 90022, 90023, 90391, 90713 | Ikone nedostaju ili su krivo deklarirane | Provjeri ikone |
| 90771 | Nedostaju identifikatori pozadinskih zadataka | ios.infoPlist |
Tri pojašnjenja iz tih poruka:
- Broj builda jedinstven je po verziji. Za 90189 EAS preporučuje
"autoIncrement": trueueas.json. Sve je u članku broj builda i verzija. - Za 90725 EAS savjetuje da u
eas.jsonodabereš noviji iOS image, a po potrebi prijeđeš na podržani Expo SDK. - Za 90771 tvoj Info.plist deklarira pozadinski način
processing, ali ne i ključBGTaskSchedulerPermittedIdentifiers.
Osim za 90054 i 90055, gdje je dovoljno ciljati pravu aplikaciju ili drugi build, rješenje dira binarnu datoteku: napravi novi build, pa ga ponovno pošalji. Dva koda imaju svoj vodič: ITMS-90683 s Expoom i ITMS-90725.
Krajem rujna 2026. jedan build Solysa odbijen je pri isporuci zbog ITMS-90683. Maknuo sam rečenicu za dopuštenje za fotografije dok sam čistio konfiguracijsku datoteku. Solys ne koristi fotografije, ali jedna biblioteka u projektu poziva iOS Photos API. Apple analizira binarnu datoteku, ne stvarnu upotrebu: od tada te rečenice više nikad ne mičem.
Status Missing Compliance nije greška slanja. Nedostaje ti izjava o enkripciji, objašnjena u vodiču za objavu s EAS-om.
Moja check-lista prije svakog slanja
ascAppIdje usubmitprofilu, dodan prije builda.- API ključem upravlja EAS ili njegova tri polja pokazuju na
.p8spremljen izvan repozitorija. - Account Holder je prihvatio najnovije ugovore u App Store Connectu.
autoIncrementje uključen, uz"appVersionSource": "remote", što Expo preporučuje od EAS CLI-ja 12.versionje veća od zadnje odobrene verzije.- Svaki osjetljivi API prisutan u binarnoj datoteci ima svoju rečenicu za dopuštenje.
- Za novu aplikaciju
appNameilanguageispunjeni su prije prvog slanja.
Pošalji svoju prvu aplikaciju bez zapinjanja
Naredba je samo jedan korak. iOS & Android Kit kreće od početnog koda mojih aplikacija, uključujući pretplate, i prati četiri koraka do App Storea, tvojim tempom.
Ako pripremaš svoje prvo izdanje, napravi besplatnu dijagnozu: reći će ti što te stvarno koči i poslati ti moju check-listu protiv Appleovih odbijanja. Za stranicu aplikacije, snimke zaslona i odobrenje, stranica objava aplikacije na App Store prolazi kroz svaki korak.
Česta pitanja
Zašto eas submit ne prolazi samo u kontinuiranoj integraciji?
U načinu --non-interactive naredba te ništa ne može pitati. Treba joj ascAppId u profilu i API ključ već povezan s aplikacijom, ili njegova tri polja u eas.json. Na tvom računalu postavila bi ti ta pitanja.
Treba li napraviti novi build nakon greške u eas submitu?
Samo ako Apple odbije binarnu datoteku, s ITMS kodom. Iznimka: kod ITMS-90054 i 90055 build je ciljao krivu aplikaciju, pa ga je dovoljno ponovno poslati na pravu. Greške konfiguracije i računa rješavaš u eas.json, u App Store Connectu ili na svom Apple računu. Zatim ponovno šalješ isti build, na primjer s --latest ili --id.
Gdje vidjeti zapise slanja u EAS Submitu?
Na stranici slanja, u Expoovoj nadzornoj ploči. Expo savjetuje da ondje pročitaš zapise i oblačić "Build Annotations". U terminalu dodaj --verbose da se zapisi uvijek prikazuju.
Može li se eas submit koristiti s besplatnim Apple računom?
Ne. Expo traži plaćeni Apple Developer račun za slanje aplikacije na App Store. Besplatni račun omogućuje testiranje na tvom iPhoneu, ali ne i korištenje App Store Connecta.
Koju ulogu dati API ključu za eas submit?
Expoov vodič ključu daje ulogu Admin. Prema Appleovoj tablici uloga, slanje buildova dostupno je i ulogama App Manager i Developer. Moji Expo buildovi rade s timskim ključem s ulogom App Manager. Timski ključ mogu generirati samo Account Holder i Admini.
Što znači "Increment Build Number" u EAS-u?
Apple je odbio build s kodom ITMS-90189: taj broj builda već postoji za tu verziju. Uključi "autoIncrement": true u eas.json ili povećaj ios.buildNumber, pa napravi novi build.

