eas submit iOS: pogoste napake in kako jih odpraviš
Avtor: Mehdi Azizi
Objavljeno , 10 min
eas submit ne uspe? Pravi sporočili EAS in App Store Connect, vzrok in rešitev: ascAppId, ključ API, Applova pogodba, kode ITMS.
Ko eas submit --platform ios ne uspe, ti sporočilo skoraj vedno pove, kje iskati. Bodisi je tvoja konfiguracija EAS nepopolna, bodisi te blokira Applov račun, bodisi Apple zavrne binarno datoteko. Prva dva primera odpraviš v nekaj minutah, brez novega builda. Tretjega prepoznaš po kodi ITMS in skoraj vedno zahteva nov build.
Svoje aplikacije za iOS, med njimi Solys, TradaZen in Nolera, objavljam z Expo in EAS. Sporočila, ki jih navajam tukaj, so kopirana iz izvorne kode EAS CLI, z uradnega Expovega repozitorija na GitHubu, ki sem ga pregledal 3. novembra 2026. Stari Expov forum zdaj preusmerja na Discord, zato ostaja koda najzanesljivejši vir. Za celotno pot, od datoteke eas.json do oddaje v pregled, najprej preberi EAS Submit iOS: objava aplikacije Expo v App Store. Tukaj popravljamo.
Kaj naredi eas submit in kaj potrebuje
Po Expovi dokumentaciji ukaz pošlje tvojo datoteko .ipa v App Store Connect. Build se prikaže v TestFlightu, ko ga Apple obdela, običajno v 10 do 15 minutah. Aplikacije ne odda v pregled: to moraš narediti sam v App Store Connect.
Expova stran o pošiljanju za iOS navaja tri predpogoje:
- plačljiv račun Apple Developer, ki je obvezen za vsako pošiljanje v App Store;
- identifikator bundla v
ios.bundleIdentifier; - nameščen EAS CLI, povezan s tvojim računom Expo.
Za pošiljanje brez interakcije ista stran doda še dve nastavitvi:
ascAppIdv profilusubmitveas.json, številka tvoje strani aplikacije v App Store Connect;- ključ API za App Store Connect, ki ga upravlja EAS ali ga zagotoviš sam. Ustvarjanje, vloga in preklic so podrobno opisani v ključ API za App Store Connect (.p8).
Minimalni profil je dolg le nekaj vrstic. Vrednost je izmišljena:
{
"submit": {
"production": {
"ios": {
"ascAppId": "1234567890"
}
}
}
}
Če EAS že hrani tvoj ključ API, ta profil zadošča. Tako je pri večini mojih aplikacij.
Branje sporočila: tri družine napak
Preden iščeš rešitev, ugotovi, kdaj se ukaz ustavi. Ta tabela je shema, ki jo uporabim ob vsakem neuspehu.
| Trenutek neuspeha | Družina | Nov build? |
|---|---|---|
| Pred kakršnim koli pošiljanjem | Konfiguracija EAS | Ne |
| Povezava z Applom, ustvarjanje strani | Applov račun | Ne |
| Po pošiljanju, koda ITMS-90xxx | Zavrnjena binarka | Skoraj vedno |
Podrobnosti prebereš na strani oddaje, v Expovi nadzorni plošči. Expo svetuje, da tam prebereš dnevnike in poiščeš oblaček »Build Annotations«, ki opozarja na pogoste vzroke neuspeha. V terminalu možnost --verbose vedno prikaže dnevnike EAS Submit, piše v referenci EAS CLI.
Napake konfiguracije EAS
»Set ascAppId in the submit profile (eas.json) or re-run this command in interactive mode.«
Ukaz si zagnal z --non-interactive, na primer v neprekinjeni integraciji, tvoj profil pa ne vsebuje ascAppId. Koda EAS CLI se takrat ustavi: ne more te ničesar vprašati, niti ne more ustvariti strani namesto tebe.
Rešitev: prepiši številko svoje strani v ascAppId. Expo pove, kje jo najdeš: v App Store Connect odpri svojo aplikacijo, nato App Information. To je polje Apple ID pod General Information, število z okoli desetimi števkami. Ni tvoj Applov e-poštni naslov in ni tvoj identifikator bundla.
Pri Nolera je ukaz brez ascAppId od mene zahteval sejo Apple Developer, ki poteče. Odkar je številka v eas.json, pošiljanje ne zahteva ničesar več.
ascAppIddodaj pred buildom, ne po njem. Do SDK 57 prstni odtis, ki ga izračuna Expo, vedno vključujeeas.json. Pri Vigie, katere različica izvajalnega okolja sledi politikifingerprint, je dodajanje te številke po buildu spremenilo prstni odtis: posodobitev, objavljena pozneje, ne bi nikoli dosegla nameščenega builda. Od SDK 58 privzeta nastavitev prstnega odtisa,balanced, ignoriraeas.json, piše v Expovem dnevniku sprememb.
»App Store Connect API Keys cannot be set up in --non-interactive mode.«
Tvoj profil ne vsebuje ključa in EAS nima nobenega, povezanega s tvojo aplikacijo. Expo pojasnjuje: v neinteraktivnem načinu te ukaz ne more vprašati za ključ, zato ne uspe s tem sporočilom.
Dve možni rešitvi:
- Naj EAS ustvari in hrani ključ. Enkrat zaženi
eas credentials --platform iosv interaktivnem načinu na svojem računalniku in pusti, da za tvojo aplikacijo nastavi ključ API za App Store Connect. - Prinesi svoj ključ v
ascApiKeyPath,ascApiKeyIssuerIdinascApiKeyId. Po referenci eas.json ta tri polja sprejemajo okoljske spremenljivke, kot je$ASC_API_KEY_PATH.
Pri moji zadnji aplikaciji je možnost --auto-submit zahtevala Applov ID, da bi ustvarila svoj ključ za pošiljanje. Tri polja svojega ključa sem vpisal v profil v svoji delovni kopiji, ki je nikoli nisem commital. Nato sem dokončani build poslal z --id in --non-interactive.
»EXPO_APPLE_APP_SPECIFIC_PASSWORD must be in the format xxxx-xxxx-xxxx-xxxx, where x is a lowercase letter.«
Spremenljivka vsebuje nekaj drugega kot geslo za aplikacijo, pogosto kar tvoje Applovo geslo. EAS CLI ta format preveri pred vsakim pošiljanjem.
Po Applovi pomoči geslo za aplikacijo ustvariš na account.apple.com, v razdelku App-Specific Passwords, z vklopljenim dvostopenjskim preverjanjem. Prekliče se, takoj ko spremeniš geslo svojega Applovega računa. Expo ocenjuje to metodo kot manj varno od ključa API, ki je njegova privzeta in priporočena metoda.
Napake Applovega računa
»… agree to the latest Program License Agreement in your developer account.«
Celotno sporočilo se začne z »You currently don't have access to this membership resource«. Na Applovi strani lahko surov odgovor vsebuje »Unable to process request - PLA Update available«. Novejši koraki pošiljanja v EAS prikažejo raje »A required Apple agreement is missing or has expired«.
Vzrok je isti: Apple je posodobil pogodbo in je nihče ni sprejel. Pogodbe lahko sprejme samo imetnik računa, Account Holder, piše v Applovi tabeli vlog. Koda EAS ga napoti na stran Business v App Store Connect, nato pa, če Apple to ponudi, še v njegov račun na developer.apple.com. Potem ukaz zaženi znova. Pogodba za plačljive aplikacije ima svoj vodnik: Paid Apps Agreement v App Store Connect.
»App Store Connect rejected the API authentication credentials.«
Apple je odgovoril z napako 401, NOT_AUTHORIZED. EAS navaja tri vzroke: ključ ni več aktiven, ključ pripada drugemu računu App Store Connect, ali pa so Key ID, vsebina ključa ali Issuer ID napačni.
Oba identifikatorja preveri v App Store Connect, v meniju Users and Access, zavihek Integrations. Po Applu je Issuer ID prikazan na vrhu strani, Key ID pa na seznamu aktivnih ključev. Preklicanega ključa ni mogoče nikoli več aktivirati. Apple ga prikazuje 30 dni pod Revoked: ustvariti moraš novega.
»App Store Connect app for application identifier … was not found.«
Strani, na katero kaže ascAppId, s tvojim ključem ni mogoče najti. EAS te prosi, da preveriš to številko in da ima ključ res dostop do aplikacije v pravem računu. Navede celo nekaj aplikacij, vidnih s tem ključem. Z Applovimi orodji za pošiljanje se ista težava prikaže kot »No suitable application records were found«.
Ponavljajo se trije vzroki, dva od njih sta omenjena v tej niti Applovih forumov:
- Stran ne obstaja. Ustvari jo v App Store Connect ali odstrani
ascAppId, da jo ustvari ukaz. - Številka je iz drugega računa. Kopiral si
ascAppIddruge ekipe ali drugega projekta. - Uporabnik nima dostopa do aplikacije. App Manager ali Developer je lahko omejen na določene aplikacije. Ključ ekipe pa ima dostop do vseh aplikacij v računu.
»… is not available to team« ali »… is not available to provider«
To sporočilo se pojavi, ko EAS ustvari stran namesto tebe, ker ni ascAppId. Identifikator bundla je že zasedla druga ekipa. EAS te prosi, da ga spremeniš v konfiguraciji aplikacije in ukaz zaženeš znova.
»App name "…" is already taken. Using generated name "…"«
To ni neuspeh. Ko je ime v App Storu že zasedeno, EAS doda šest naključnih znakov in poskusi znova, največ petkrat. Stran boš pozneje preimenoval v App Store Connect. Da se temu izogneš, pred prvim pošiljanjem v profilu izpolni appName in language: brez language je glavni jezik en-US.
Napake binarke: kode ITMS
Po pošiljanju Apple build obdela. Če ga zavrne, dnevnik navede eno ali več kod ITMS. Tukaj so tiste, ki jih korak pošiljanja v EAS prepozna in prevede:
| Koda ITMS | Kaj Apple zavrne | Rešitev |
|---|---|---|
| 90189 | Številka builda je že zasedena | autoIncrement |
| 90062, 90186, 90478 | Različica je zaprta ali že presežena | Zvišaj version |
| 90683 | Manjka besedilo za dovoljenje | ios.infoPlist |
| 90725 | Prestar SDK za iOS | Slika iOS ali SDK Expo |
| 90054, 90055 | Bundle se ne ujema s ciljno stranjo | Popravi ascAppId |
| 90022, 90023, 90391, 90713 | Ikone manjkajo ali so napačno navedene | Preglej ikone |
| 90771 | Manjkajo identifikatorji opravil v ozadju | ios.infoPlist |
Tri pojasnila iz teh sporočil:
- Številka builda je edinstvena za vsako različico. Za 90189 EAS priporoča
"autoIncrement": trueveas.json. Vse je v številka builda in različica. - Za 90725 EAS svetuje, da v
eas.jsonizbereš novejšo sliko iOS in po potrebi preideš na podprt SDK Expo. - Za 90771 tvoj Info.plist navaja način delovanja v ozadju
processing, ne pa ključaBGTaskSchedulerPermittedIdentifiers.
Razen pri 90054 in 90055, kjer je dovolj, da ciljaš pravo stran ali drug build, rešitev zadeva binarko: naredi nov build in ga pošlji znova. Dve kodi imata svoj vodnik: ITMS-90683 z Expo in ITMS-90725.
Konec septembra 2026 je bil build aplikacije Solys ob dostavi zavrnjen zaradi ITMS-90683. Med čiščenjem konfiguracijske datoteke sem odstranil besedilo za dovoljenje za fotografije. Solys fotografij ne uporablja, vendar knjižnica v projektu kliče API Photos v iOS. Apple analizira binarko, ne dejanske uporabe: od takrat teh besedil nikoli več ne odstranjujem.
Status Missing Compliance pa ni napaka pošiljanja. Manjka tvoja izjava o šifriranju, ki je razložena v vodniku za objavo z EAS.
Moj kontrolni seznam pred vsakim pošiljanjem
ascAppIdje v profilusubmit, dodan pred buildom.- Ključ API upravlja EAS, ali pa njegova tri polja kažejo na
.p8, shranjen zunaj repozitorija. - Account Holder je v App Store Connect sprejel najnovejše pogodbe.
autoIncrementje vklopljen, skupaj z"appVersionSource": "remote", ki ga Expo priporoča od EAS CLI 12.versionje višja od zadnje odobrene različice.- Vsak občutljiv API v binarki ima svoje besedilo za dovoljenje.
- Pri novi aplikaciji sta
appNameinlanguageizpolnjena pred prvim pošiljanjem.
Pošlji svojo prvo aplikacijo, ne da bi obtičal
Ukaz je le en korak. iOS & Android Kit izhaja iz začetne kode mojih aplikacij, vključno z naročninami, in te v štirih korakih pripelje do App Stora, v tvojem tempu.
Če pripravljaš svojo prvo izdajo, opravi brezplačno diagnozo: pove ti, kaj te v resnici zavira, in ti pošlje moj kontrolni seznam proti Applovim zavrnitvam. Za stran aplikacije, posnetke zaslona in odobritev stran objava aplikacije v App Store obdela vsak korak.
Pogosta vprašanja
Zakaj eas submit ne uspe samo v neprekinjeni integraciji?
V načinu --non-interactive te ukaz ne more ničesar vprašati. Potrebuje ascAppId v profilu in ključ API, ki je že povezan z aplikacijo, ali njegova tri polja v eas.json. Na tvojem računalniku bi ti ta vprašanja zastavil.
Ali moram po napaki eas submit narediti nov build?
Samo če Apple zavrne binarko s kodo ITMS. Izjema: pri ITMS-90054 in 90055 je build ciljal napačno stran, zato ga je dovolj poslati na pravo. Napake konfiguracije in računa odpraviš v eas.json, v App Store Connect ali v svojem Applovem računu. Nato pošlješ isti build, na primer z --latest ali --id.
Kje vidim dnevnike pošiljanja EAS Submit?
Na strani oddaje, v Expovi nadzorni plošči. Expo svetuje, da tam prebereš dnevnike in oblaček »Build Annotations«. V terminalu dodaj --verbose, da se dnevniki vedno prikažejo.
Ali lahko eas submit uporabljam z brezplačnim Applovim računom?
Ne. Expo za pošiljanje aplikacije v App Store zahteva plačljiv račun Apple Developer. Brezplačni račun omogoča testiranje na tvojem iPhonu, ne pa uporabe App Store Connect.
Kakšno vlogo naj dam ključu API za eas submit?
Expov vodnik ključu dodeli vlogo Admin. Po Applovi tabeli vlog je pošiljanje buildov odprto tudi vlogama App Manager in Developer. Moji buildi Expo tečejo s ključem ekipe z vlogo App Manager. Ključ ekipe lahko ustvarita samo Account Holder in Admini.
Kaj pomeni »Increment Build Number« v EAS?
Apple je build zavrnil s kodo ITMS-90189: ta številka builda za to različico že obstaja. Vklopi "autoIncrement": true v eas.json ali zvišaj ios.buildNumber, nato naredi nov build.

