# eas submit iOS greške: uzroci i rješenja

> eas submit ne prolazi? Stvarne poruke EAS-a i App Store Connecta, njihov uzrok i rješenje: ascAppId, API ključ, Appleov ugovor, ITMS kodovi.

Izvorna stranica: [eas submit iOS greške: uzroci i rješenja](https://devoria.fr/hr/blog/eas-submit-ios-greske-rjesenja)
Autor: [Mehdi Azizi](https://devoria.fr/hr/mehdi-azizi)
Objavljeno: 2026-11-04
Zadnja revizija sadržaja: 2026-11-04


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](https://github.com/expo/eas-cli), 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](https://devoria.fr/hr/blog/eas-submit-ios-objava-expo-aplikacije-app-store). Ovdje popravljamo.

## Što radi eas submit i što mu treba

Prema [Expoovoj dokumentaciji](https://docs.expo.dev/deploy/submit-to-app-stores/), 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](https://docs.expo.dev/submit/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:

- **`ascAppId`** u `submit` profilu datoteke `eas.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)](https://devoria.fr/hr/blog/app-store-connect-api-kljuc-p8).

Minimalni profil stane u par redaka. Vrijednost je izmišljena:

```json
{
  "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](https://docs.expo.dev/deploy/submit-to-app-stores/) 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](https://docs.expo.dev/eas/cli/).

## 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](https://github.com/expo/eas-cli/blob/main/packages/eas-cli/src/submit/ios/IosSubmitCommand.ts) 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](https://github.com/expo/fyi/blob/main/asc-app-id.md): 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 `ascAppId` prije builda, ne poslije. Do SDK-a 57 [otisak koji računa Expo](https://github.com/expo/expo/blob/main/packages/@expo/fingerprint/src/sourcer/Expo.ts) uvijek uključuje `eas.json`. Na Vigieju, čija runtime verzija prati politiku `fingerprint`, 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`, ignorira `eas.json`, prema [Expoovom popisu promjena](https://github.com/expo/expo/blob/main/packages/@expo/fingerprint/CHANGELOG.md).

### "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](https://docs.expo.dev/submit/ios/): 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 ios` u 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`, `ascApiKeyIssuerId` i `ascApiKeyId`. Prema [referenci za eas.json](https://docs.expo.dev/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](https://github.com/expo/eas-cli/blob/main/packages/eas-cli/src/submit/ios/IosSubmitCommand.ts) provjerava taj format prije bilo kakvog slanja.

Prema [Appleovoj pomoći](https://support.apple.com/en-us/102654), 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](https://github.com/expo/fyi/blob/main/apple-app-specific-password.md), 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](https://developer.apple.com/help/account/access/roles/). [Kod EAS-a](https://github.com/expo/eas-cli/blob/main/packages/build-tools/src/steps/utils/ios/AscApiClient.ts) 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](https://devoria.fr/hr/blog/paid-apps-agreement-statusi-w-8ben-prva-isplata).

### "App Store Connect rejected the API authentication credentials."

Apple je odgovorio greškom 401, `NOT_AUTHORIZED`. [EAS](https://github.com/expo/eas-cli/blob/main/packages/build-tools/src/steps/utils/ios/AscApiClient.ts) 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](https://developer.apple.com/documentation/appstoreconnectapi/generating-tokens-for-api-requests), 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](https://developer.apple.com/documentation/appstoreconnectapi/revoking-api-keys) 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](https://github.com/expo/eas-cli/blob/main/packages/build-tools/src/steps/utils/ios/AscApiUtils.ts) 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](https://developer.apple.com/forums/thread/106806):

- **Zapis aplikacije ne postoji.** Izradi ga u App Store Connectu ili makni `ascAppId` da ga naredba izradi.
- **Broj je s drugog računa.** Kopirao si `ascAppId` drugog 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](https://developer.apple.com/documentation/appstoreconnectapi/creating-api-keys-for-app-store-connect-api) 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](https://github.com/expo/eas-cli/blob/main/packages/eas-cli/src/credentials/ios/appstore/ensureAppExists.ts) 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`](https://docs.expo.dev/eas/json/).

## 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](https://github.com/expo/eas-cli/blob/main/packages/build-tools/src/steps/functions/uploadToAsc.ts) 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": true` u `eas.json`. Sve je u članku [broj builda i verzija](https://devoria.fr/hr/blog/app-store-connect-build-number-verzija).
- **Za 90725** EAS savjetuje da u `eas.json` odabereš 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](https://devoria.fr/hr/blog/itms-90683-missing-purpose-string-expo) i [ITMS-90725](https://devoria.fr/hr/blog/itms-90725-sdk-version-issue-expo).

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](https://devoria.fr/hr/blog/eas-submit-ios-objava-expo-aplikacije-app-store).

## Moja check-lista prije svakog slanja

- `ascAppId` je u `submit` profilu, dodan prije builda.
- API ključem upravlja EAS ili njegova tri polja pokazuju na `.p8` spremljen izvan repozitorija.
- Account Holder je prihvatio najnovije ugovore u App Store Connectu.
- `autoIncrement` je uključen, uz `"appVersionSource": "remote"`, što [Expo preporučuje](https://docs.expo.dev/build-reference/app-versions/) od EAS CLI-ja 12.
- `version` je veća od zadnje odobrene verzije.
- Svaki osjetljivi API prisutan u binarnoj datoteci ima svoju rečenicu za dopuštenje.
- Za novu aplikaciju `appName` i `language` ispunjeni su prije prvog slanja.

## Pošalji svoju prvu aplikaciju bez zapinjanja

Naredba je samo jedan korak. [iOS & Android Kit](https://devoria.fr/hr/kits/ios) 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](https://devoria.fr/hr/diagnostic): 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](https://devoria.fr/hr/expertise/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.


## Tvoj projekt

[Review Kit](https://devoria.fr/hr/kits/app-review): Moja checklista za App Store pregled, moja Appleova odbijanja i kako sam ih ispravio, checklista za Google Play i tri Claude Code skilla. 49 €.

[iOS & Android Kit](https://devoria.fr/hr/kits/ios): Napravi svoju iPhone i Android aplikaciju s Claude Codeom: početni kod mojih aplikacija, put do trgovina i svi kitovi. 99 €.

[Dijagnoza: što te dijeli od tvoje iPhone aplikacije](https://devoria.fr/hr/diagnostic): 7 pitanja, 60 sekundi: saznaj što te stvarno koči da objaviš svoju iPhone aplikaciju, dobij svoj put u 4 koraka i kit koji ti odgovara.
