eas submit iOS hibák: gyakori üzenetek és javításuk
Írta: Mehdi Azizi
Megjelent: , 10 p
Elakadt az eas submit? Az EAS és az App Store Connect valódi hibaüzenetei, okuk és javításuk: ascAppId, API-kulcs, Apple-szerződés, ITMS-kódok.
Ha az eas submit --platform ios elhasal, az üzenet szinte mindig megmondja, hol keresd a hibát. Vagy hiányos az EAS-konfigurációd, vagy az Apple-fiókod blokkol, vagy az Apple elutasítja a binárist. Az első két eset pár perc alatt javítható, új build nélkül. A harmadikat egy ITMS-kódról ismered fel, és szinte mindig új buildet igényel.
Az iOS-appjaimat, köztük a Solyst, a TradaZent és a Nolerát, Expóval és EAS-szel adom ki. Az itt idézett üzeneteket az EAS CLI forráskódjából másoltam ki, az Expo hivatalos GitHub-repójából, 2026. november 3-i állapot szerint. Az Expo régi fóruma már a Discordra irányít át, így a kód marad a legmegbízhatóbb forrás. A teljes folyamathoz, az eas.json fájltól a review-ra küldésig, előbb olvasd el ezt: EAS Submit iOS: Expo-app kiadása az App Store-ba. Itt javítunk.
Mit csinál az eas submit, és mi kell hozzá
Az Expo dokumentációja szerint a parancs feltölti az .ipa fájlodat az App Store Connectbe. A build az Apple feldolgozása után jelenik meg a TestFlightban, általában 10-15 perc alatt. Nem küldi review-ra az appodat: ezt az App Store Connectben kell megtenned.
Az Expo iOS-feltöltésről szóló oldala három előfeltételt sorol fel:
- fizetős Apple Developer-fiók, ez minden App Store-feltöltéshez kötelező;
- a bundle azonosító az
ios.bundleIdentifiermezőben; - telepített EAS CLI, bejelentkezve az Expo-fiókodba.
Interakció nélküli küldéshez ugyanez az oldal két további beállítást ír elő:
ascAppIdazeas.jsonsubmitprofiljában, ez az App Store Connect-adatlapod száma;- egy App Store Connect API-kulcs, amelyet az EAS kezel, vagy te adsz meg. A létrehozását, a szerepkörét és a visszavonását itt részletezem: App Store Connect API-kulcs (.p8).
A minimális profil pár sorból áll. Az érték kitalált:
{
"submit": {
"production": {
"ios": {
"ascAppId": "1234567890"
}
}
}
}
Ha az EAS már tárolja az API-kulcsodat, ez a profil elég. A legtöbb appomnál így van.
Az üzenet olvasása: három hibacsalád
Mielőtt a javítást keresnéd, nézd meg, hol áll meg a parancs. Ezt a táblázatot használom minden hibánál.
| A hiba időpontja | Család | Új build kell? |
|---|---|---|
| Bármilyen feltöltés előtt | EAS-konfiguráció | Nem |
| Kapcsolódás az Apple-höz, adatlap létrehozása | Apple-fiók | Nem |
| Feltöltés után, ITMS-90xxx kód | Elutasított bináris | Szinte mindig |
A részleteket a beküldés oldalán látod, az Expo dashboardján. Az Expo azt javasolja, hogy ott olvasd el a naplókat, és keresd a „Build Annotations” buborékot, amely a gyakori hibaokokat jelzi. A terminálban a --verbose kapcsoló mindig megjeleníti az EAS Submit naplóit, az EAS CLI referenciája szerint.
EAS-konfigurációs hibák
„Set ascAppId in the submit profile (eas.json) or re-run this command in interactive mode.”
A parancsot --non-interactive kapcsolóval futtattad, például CI-ban, és a profilodban nincs ascAppId. Az EAS CLI kódja ilyenkor leáll: se kérdezni nem tud, se létrehozni helyetted az adatlapot.
Javítás: másold be az adatlapod számát az ascAppId mezőbe. Az Expo megmutatja, hol találod: az App Store Connectben nyisd meg az appodat, majd az App Information részt. Ez az Apple ID mező a General Information alatt, egy nagyjából tízjegyű szám. Nem az Apple e-mail-címed, és nem is a bundle azonosítód.
A Nolerán ascAppId nélkül a parancs Apple Developer-munkamenetet kért, ami lejár. Amióta a szám benne van az eas.json-ban, a feltöltés semmit nem kér.
Az
ascAppId-t a build előtt add hozzá, ne utána. Az SDK 57-ig az Expo által számolt ujjlenyomat mindig tartalmazza azeas.json-t. A Vigién, ahol a runtime verzió afingerprintszabályt követi, a szám build utáni hozzáadása megváltoztatta az ujjlenyomatot: egy utána kiadott frissítés soha nem jutott volna el a telepített buildre. Az SDK 58 óta az ujjlenyomat alapértelmezett presetje, abalanced, figyelmen kívül hagyja azeas.json-t, az Expo changelogja szerint.
„App Store Connect API Keys cannot be set up in --non-interactive mode.”
A profilodban nincs kulcs, és az EAS-nek sincs az appodhoz rendelt kulcsa. Az Expo leírja: nem interaktív módban a parancs nem tud kulcsot kérni tőled, ezért ezzel az üzenettel elhasal.
Két lehetséges javítás:
- Hagyd, hogy az EAS hozza létre és tárolja a kulcsot. Futtasd egyszer az
eas credentials --platform iosparancsot interaktív módban a gépeden, és hagyd, hogy beállítson egy App Store Connect API-kulcsot az appodhoz. - Add meg a saját kulcsodat az
ascApiKeyPath,ascApiKeyIssuerIdésascApiKeyIdmezőkben. Az eas.json referenciája szerint ez a három mező környezeti változót is elfogad, például$ASC_API_KEY_PATH.
A legutóbbi appomnál a --auto-submit kapcsoló Apple-azonosítót kért, hogy létrehozza a feltöltési kulcsát. Beírtam a saját kulcsom három mezőjét a munkapéldányom profiljába, amit soha nem commitoltam. Aztán a kész buildet --id és --non-interactive kapcsolókkal küldtem fel.
„EXPO_APPLE_APP_SPECIFIC_PASSWORD must be in the format xxxx-xxxx-xxxx-xxxx, where x is a lowercase letter.”
A változóban nem alkalmazásspecifikus jelszó van, gyakran maga az Apple-jelszavad. Az EAS CLI minden feltöltés előtt ellenőrzi ezt a formátumot.
Az Apple súgója szerint alkalmazásspecifikus jelszót az account.apple.com oldalon, az App-Specific Passwords résznél generálhatsz, bekapcsolt kétlépcsős hitelesítéssel. Amint megváltoztatod az Apple-fiókod jelszavát, visszavonódik. Az Expo ezt a módszert kevésbé biztonságosnak tartja az API-kulcsnál, ami az alapértelmezett és ajánlott módszere.
Apple-fiókhibák
„… agree to the latest Program License Agreement in your developer account.”
A teljes üzenet így kezdődik: „You currently don't have access to this membership resource”. Az Apple nyers válaszában ez is szerepelhet: „Unable to process request - PLA Update available”. Az EAS újabb feltöltési lépései inkább ezt írják ki: „A required Apple agreement is missing or has expired”.
Az ok ugyanaz: az Apple frissített egy szerződést, és senki nem fogadta el. Szerződést csak a fiók tulajdonosa, az Account Holder fogadhat el, az Apple szerepkör-táblázata szerint. Az EAS kódja arra kéri, hogy menjen az App Store Connect Business oldalára, majd, ha az Apple felajánlja, a developer.apple.com-os fiókjába. Utána futtasd újra a parancsot. A fizetős appok szerződésének saját útmutatója van: Paid Apps Agreement az App Store Connectben.
„App Store Connect rejected the API authentication credentials.”
Az Apple 401-es hibával, NOT_AUTHORIZED válasszal felelt. Az EAS három okot említ: a kulcs már nem aktív, a kulcs egy másik App Store Connect-fiókhoz tartozik, vagy hibás a Key ID, a kulcs tartalma vagy az Issuer ID.
Ellenőrizd a két azonosítót az App Store Connectben, a Users and Access menü Integrations fülén. Az Apple szerint az Issuer ID az oldal tetején látszik, a Key ID az aktív kulcsok listájában. Egy visszavont kulcs soha nem aktiválható újra. Az Apple 30 napig mutatja a Revoked alatt: újat kell generálnod.
„App Store Connect app for application identifier … was not found.”
Az ascAppId által megjelölt adatlap nem található a kulcsoddal. Az EAS arra kér, ellenőrizd ezt a számot, és azt, hogy a kulcs valóban hozzáfér-e az apphoz a megfelelő fiókban. Még néhány, a kulccsal látható appot is kilistáz. Az Apple saját feltöltőeszközeivel ugyanez a probléma „No suitable application records were found” formában jelenik meg.
Három ok szokott előfordulni, ebből kettőt ebben az Apple-fórumszálban találtak:
- Az adatlap nem létezik. Hozd létre az App Store Connectben, vagy töröld az
ascAppId-t, hogy a parancs hozza létre. - A szám egy másik fiókból származik. Egy másik csapat vagy másik projekt
ascAppId-ját másoltad be. - A felhasználónak nincs hozzáférése az apphoz. Egy App Manager vagy Developer bizonyos appokra korlátozható. Egy csapatkulcs viszont a fiók összes appjához hozzáfér.
„… is not available to team” vagy „… is not available to provider”
Ez az üzenet akkor jelenik meg, amikor az EAS hozza létre helyetted az adatlapot, mert nincs ascAppId. A bundle azonosítót már egy másik csapat lefoglalta. Az EAS arra kér, hogy változtasd meg az appod konfigurációjában, majd futtasd újra.
„App name "…" is already taken. Using generated name "…"”
Ez nem hiba. Ha a név már foglalt az App Store-ban, az EAS hat véletlen karaktert fűz hozzá, és újrapróbálja, legfeljebb ötször. Az adatlapot később átnevezheted az App Store Connectben. Ha el akarod kerülni, add meg az appName és a language mezőt a profilban az első feltöltés előtt: language nélkül az elsődleges nyelv en-US.
Bináris hibák: az ITMS-kódok
Feltöltés után az Apple feldolgozza a buildet. Ha elutasítja, a napló egy vagy több ITMS-kódot ír ki. Ezeket ismeri fel és fordítja le az EAS feltöltési lépése:
| ITMS-kód | Mit utasít el az Apple | Javítás |
|---|---|---|
| 90189 | Már foglalt buildszám | autoIncrement |
| 90062, 90186, 90478 | Lezárt vagy már túllépett verzió | Emeld a version-t |
| 90683 | Hiányzó engedélykérő szöveg | ios.infoPlist |
| 90725 | Túl régi iOS SDK | iOS image vagy Expo SDK |
| 90054, 90055 | A bundle eltér a megcélzott adatlaptól | Javítsd az ascAppId-t |
| 90022, 90023, 90391, 90713 | Hiányzó vagy rosszul deklarált ikonok | Nézd át az ikonokat |
| 90771 | Hiányzó háttérfeladat-azonosítók | ios.infoPlist |
Három pontosítás ezekből az üzenetekből:
- A buildszám verziónként egyedi. A 90189-re az EAS az
"autoIncrement": truebeállítást javasolja azeas.json-ban. Minden részlet itt: buildszám és verzió. - A 90725-re az EAS azt javasolja, válassz újabb iOS image-et az
eas.json-ban, és ha kell, válts egy támogatott Expo SDK-ra. - A 90771-nél az Info.plist deklarálja a
processingháttérmódot, de aBGTaskSchedulerPermittedIdentifierskulcsot nem.
A 90054 és 90055 kivételével, ahol elég a jó adatlapot vagy egy másik buildet megcélozni, a javítás a binárist érinti: készíts új buildet, majd küldd fel újra. Két kódnak saját útmutatója van: ITMS-90683 Expóval és ITMS-90725.
2026 szeptemberének végén a Solys egyik buildjét ITMS-90683 miatt utasították el leadáskor. Egy konfigurációs takarítás során kivettem egy fotókra vonatkozó engedélykérő szöveget. A Solys nem használ fotókat, de a projekt egyik könyvtára meghívja az iOS Photos API-ját. Az Apple a binárist elemzi, nem a tényleges használatot: azóta soha nem törlöm ezeket a szövegeket.
A Missing Compliance státusz viszont nem feltöltési hiba. A titkosításra vonatkozó nyilatkozatod hiányzik, ezt az EAS-es kiadási útmutató magyarázza el.
Az ellenőrzőlistám minden feltöltés előtt
- Az
ascAppIdasubmitprofilban van, a build előtt hozzáadva. - Az API-kulcsot az EAS kezeli, vagy a három mezője egy repón kívül tárolt
.p8fájlra mutat. - Az Account Holder elfogadta a legfrissebb szerződéseket az App Store Connectben.
- Az
autoIncrementbe van kapcsolva,"appVersionSource": "remote"mellett, amit az Expo ajánl az EAS CLI 12 óta. - A
versionnagyobb, mint a legutóbbi jóváhagyott verzió. - A binárisban lévő minden érzékeny API-nak megvan az engedélykérő szövege.
- Új appnál az
appNameés alanguageki van töltve az első feltöltés előtt.
Az első appod feltöltése elakadás nélkül
A parancs csak egy lépés. Az iOS & Android Kit az appjaim kiinduló kódjából indul, előfizetésekkel együtt, és négy lépésben visz el az App Store-ig, a saját tempódban.
Ha az első kiadásodra készülsz, csináld meg az ingyenes diagnózist: megmondja, mi akaszt meg valójában, és elküldi az Apple-elutasítás elleni ellenőrzőlistámat. Az adatlaphoz, a képernyőképekhez és a jóváhagyáshoz az app kiadása az App Store-ban oldal minden lépést végigvesz.
Gyakori kérdések
Miért csak CI-ban hasal el az eas submit?
--non-interactive módban a parancs semmit nem kérdezhet tőled. Kell neki az ascAppId a profilban és egy, az apphoz már hozzárendelt API-kulcs, vagy a kulcs három mezője az eas.json-ban. A gépeden ezeket megkérdezte volna.
Kell új build egy eas submit hiba után?
Csak ha az Apple ITMS-kóddal elutasítja a binárist. Kivétel: az ITMS-90054 és 90055 esetén a build rossz adatlapot célzott, elég a jóra újraküldeni. A konfigurációs és fiókhibák az eas.json-ban, az App Store Connectben vagy az Apple-fiókodban javíthatók. Utána ugyanazt a buildet küldöd fel újra, például --latest vagy --id kapcsolóval.
Hol látom egy EAS Submit feltöltés naplóit?
A beküldés oldalán, az Expo dashboardján. Az Expo azt javasolja, hogy ott olvasd el a naplókat és a „Build Annotations” buborékot. A terminálban add hozzá a --verbose kapcsolót, hogy mindig megjelenjenek a naplók.
Használható az eas submit ingyenes Apple-fiókkal?
Nem. Az Expo fizetős Apple Developer-fiókot ír elő az App Store-ba való feltöltéshez. Az ingyenes fiókkal a saját iPhone-odon tesztelhetsz, de az App Store Connectet nem használhatod.
Milyen szerepkört adjak az API-kulcsnak az eas submithez?
Az Expo útmutatója Admin szerepkört ad a kulcsnak. Az Apple szerepkör-táblázata szerint buildet az App Manager és a Developer szerepkör is feltölthet. Az Expo-buildjeim App Manager szerepkörű csapatkulccsal futnak. Csapatkulcsot csak az Account Holder és az Adminok generálhatnak.
Mit jelent az „Increment Build Number” az EAS-ben?
Az Apple ITMS-90189 kóddal utasította el a buildet: ez a buildszám már létezik ehhez a verzióhoz. Kapcsold be az "autoIncrement": true beállítást az eas.json-ban, vagy emeld az ios.buildNumber értékét, majd készíts új buildet.

