# EAS Submit iOS: objava Expo aplikacije na App Store

> EAS Submit šalje tvoj iOS build u App Store Connect, gdje stiže u TestFlight. Slanje na reviziju i dalje radiš sam u App Store Connectu.

Izvorna stranica: [EAS Submit iOS: objava Expo aplikacije na App Store](https://devoria.fr/hr/blog/eas-submit-ios-objava-expo-aplikacije-app-store)
Autor: [Mehdi Azizi](https://devoria.fr/hr/mehdi-azizi)
Objavljeno: 2026-10-25
Zadnja revizija sadržaja: 2026-10-25


`eas submit --platform ios` šalje tvoj iOS build u App Store Connect, gdje se pojavljuje u TestFlightu nakon što ga Apple obradi. **Naredba ne šalje tvoju aplikaciju na Appleovu reviziju: odabir builda i slanje na reviziju i dalje radiš u App Store Connectu.** Da bi to automatizirao, treba joj broj tvoje aplikacije (`ascAppId`) i App Store Connect API ključ.

Svoje iOS aplikacije, među njima Solys, TradaZen i Nolera, objavljujem s Expo, EAS Build i EAS Submit. Ovaj vodič prati [Expovu dokumentaciju o slanju za iOS](https://docs.expo.dev/submit/ios/), provjerenu 25. listopada 2026. Ako nemaš Mac, cijeli put je u [objavi iOS aplikacije bez Maca](https://devoria.fr/hr/blog/objavi-ios-aplikaciju-bez-maca-expo-eas). Ovdje se bavimo samo slanjem.

## Što ti treba prije prve naredbe

Expo navodi tri preduvjeta:

- **Plaćeni Apple Developer račun.** Cijena i registracija su u [Apple developer računu](https://devoria.fr/hr/blog/apple-developer-racun-cijena).
- **Bundle identifier** u `ios.bundleIdentifier`. Prema [referenci Expo konfiguracije](https://docs.expo.dev/versions/latest/config/app/), sam ga smišljaš, ali mora biti jedinstven na App Storeu.
- **Instaliran EAS CLI**, pa `eas login` sa svojim Expo računom.

Treba ti i potpisani produkcijski build. EAS Build ga radi s certifikatom i profilom kojima upravlja umjesto tebe, kako objašnjava iOS certifikat i provisioning profile.

### Zapis u App Store Connectu: ti ili EAS?

EAS Submit šalje binarnu datoteku aplikaciji koja mora postojati u App Store Connectu.

**Možeš je sam napraviti.** [Appleova pomoć](https://developer.apple.com/help/app-store-connect/create-an-app-record/add-a-new-app) opisuje prozor New App: platforma, naziv, primarni jezik, bundle identifier, SKU i pristup korisnika. Treba ti uloga Account Holder, Admin ili App Manager.

**EAS je može napraviti i pri prvom slanju.** Prema [Expovoj stranici o TestFlightu](https://docs.expo.dev/submit/testflight/), `eas submit` stvara zapis kad pošalješ svoj prvi build. Prema [referenci za eas.json](https://docs.expo.dev/eas/json/), ako upišeš `ascAppId`, taj se korak preskače. Naziv dolazi iz `appName`, a ako njega nema, iz `name` tvoje konfiguracije. Primarni jezik dolazi iz `language`, koji je prema zadanim postavkama `en-US`. **Ako ti aplikacija prvo izlazi na hrvatskom, upiši `language` prije tog prvog slanja.**

Zatim prepiši broj aplikacije u `ascAppId`. Expo kaže gdje ga naći: otvori aplikaciju u App Store Connectu, pa App Information. To je polje Apple ID, pod General Information. **To je broj, a ne tvoj bundle identifier.**

## Zašto API ključ, a ne Apple ID

EAS Submit se spaja na Apple tvojim Apple ID-jem ili App Store Connect API ključem.

Apple ID zapinje na dvofaktorskoj autentifikaciji, koju [Apple zahtijeva](https://developer.apple.com/support/authentication/) od svih korisnika App Store Connecta: netko mora potvrditi prijavu. Lozinka za aplikaciju, proslijeđena u `EXPO_APPLE_APP_SPECIFIC_PASSWORD`, zaobilazi taj korak, ali [Expo je smatra manje sigurnom](https://github.com/expo/fyi/blob/main/apple-app-specific-password.md) od API ključa, koji mu je zadana i preporučena metoda. **Ključ omogućuje autentifikaciju bez ikakve interakcije, pa tako i automatizaciju slanja.**

Dva načina da ga dobiješ:

- **Neka njime upravlja EAS.** Pokreni `eas credentials --platform ios`, odaberi profil `production`, prijavi se na Apple račun, pa odaberi "App Store Connect: Manage your API Key".
- **Donesi vlastiti ključ.** U App Store Connectu: Users and Access, kartica Integrations, App Store Connect API, Team Keys, pa Generate API Key. Treba ti Admin račun, a [Expov vodič](https://github.com/expo/fyi/blob/main/creating-asc-api-key.md) ključu daje ulogu Admin.

U drugom slučaju zapiši Key ID, prikazan na popisu aktivnih ključeva, i Issuer ID, [na vrhu stranice Integrations](https://developer.apple.com/documentation/appstoreconnectapi/generating-tokens-for-api-requests). Najvažnije, sačuvaj `.p8` datoteku: [možeš je preuzeti samo jednom](https://developer.apple.com/documentation/appstoreconnectapi/creating-api-keys-for-app-store-connect-api), a Apple ne čuva kopiju.

> Admin ključ, prema Appleu, može stvarati i brisati korisnike tvog računa. Apple traži da ključ nikad ne spremaš u repozitorij koda.

## Minimalni eas.json za kopiranje

Sve su vrijednosti izmišljene: zamijeni ih svojima.

```json
{
  "cli": {
    "appVersionSource": "remote"
  },
  "build": {
    "production": {
      "autoIncrement": true
    }
  },
  "submit": {
    "production": {
      "ios": {
        "ascAppId": "1234567890",
        "appleTeamId": "ABCDE12345",
        "ascApiKeyPath": "./keys/AuthKey_XXXXXXXXXX.p8",
        "ascApiKeyIssuerId": "tvoj-issuer-id",
        "ascApiKeyId": "XXXXXXXXXX"
      }
    }
  }
}
```

- **`appVersionSource` i `autoIncrement`**: EAS serveri čuvaju broj builda i povećavaju ga pri svakom produkcijskom buildu. [Expo preporučuje ovaj udaljeni način](https://docs.expo.dev/build-reference/app-versions/) od EAS CLI 12.
- **`ascAppId`**: broj tvoje aplikacije. Bez njega neinteraktivni način ne uspijeva.
- **`appleTeamId`**: identifikator tvog Apple Developer tima.
- **`ascApiKeyPath`, `ascApiKeyIssuerId`, `ascApiKeyId`**: tvoj API ključ. Sva tri polja prihvaćaju varijable okruženja. Dodaj mapu `keys` u svoj `.gitignore`.

Polje `appleId` treba ti samo ako se prijavljuješ Apple ID-jem. Ako EAS već upravlja tvojim ključem, makni i tri polja `ascApiKey`. U moje tri aplikacije, provjerene 25. listopada, produkcijski profil za slanje sadrži samo `ascAppId`, plus `appleTeamId` kod Solysa: nijednog ključa u datoteci.

## Pokreni build, pa slanje

```bash
eas build --platform ios --profile production
eas submit --platform ios
```

Bez drugih opcija, `eas submit` te pita koji build poslati i, pri prvom pokretanju, traži tvoj Apple ID. Profil za slanje `production` uzima se prema zadanim postavkama ako postoji. [Referenca EAS CLI-ja](https://docs.expo.dev/eas/cli/) navodi opcije koje preskaču odabir:

| Opcija           | Što radi                    |
| ---------------- | --------------------------- |
| `--latest`       | Šalje zadnji iOS build      |
| `--id`           | Šalje određeni EAS build    |
| `--path`         | Šalje lokalnu .ipa datoteku |
| `--url`          | Šalje arhivu s interneta    |
| `--groups`       | Dodaje u internu grupu      |
| `--what-to-test` | Popunjava "What to test"    |

Da sve ide u jednom potezu, dodaj `--auto-submit` naredbi za build. Prema [Expovoj stranici o automatskom slanju](https://docs.expo.dev/build/automate-submissions/), gotov build ide u EAS Submit s profilom za slanje istog imena kao profil builda. Za neki drugi: `--auto-submit-with-profile=ime`. **Build ide u TestFlight, ne na reviziju.**

U kontinuiranoj integraciji dodaj `--non-interactive` i token `EXPO_TOKEN`. Naredba te tada ne može ništa pitati: treba joj `ascAppId` u profilu i API ključ, onaj koji je EAS povezao s aplikacijom ili tvoj u tri polja `ascApiKey`.

## Što se događa nakon slanja

**1. Apple obrađuje build.** Mora proći tu obradu prije nego što se pojavi u App Store Connectu, a [Apple ti na kraju šalje e-mail](https://developer.apple.com/help/app-store-connect/manage-builds/upload-builds). Expo obično spominje 10 do 15 minuta dok ga ne vidiš u TestFlightu.

**2. Izvozna usklađenost.** Status Missing Compliance znači da nedostaje tvoja izjava o enkripciji. App Store Connect postavlja ta pitanja za svaku novu verziju, osim ako Info.plist već odgovara na njih. U Expu se ključ zove `ios.config.usesNonExemptEncryption`:

```json
{
  "expo": {
    "ios": {
      "config": {
        "usesNonExemptEncryption": false
      }
    }
  }
}
```

Prema [Appleu](https://developer.apple.com/documentation/security/complying-with-encryption-export-regulations), `false` odgovara ako tvoja aplikacija, uključujući biblioteke, ne koristi nikakvu enkripciju ili samo izuzetu enkripciju. Enkripcija sustava, poput HTTPS-a preko URLSessiona, obično je izuzeta. **Upiši `false` samo ako to stvarno vrijedi za tvoju aplikaciju: izjava te obvezuje.** Kao i svaki ključ u Info.plistu, traži novi build.

**3. TestFlight.** Sa statusom Ready to Submit, [prema Appleu](https://developer.apple.com/help/app-store-connect/reference/app-build-statuses), build može ići internim testerima, proći beta reviziju za vanjske ili otići na App Store reviziju. Polje `groups` u profilu dodaje ga u tvoje interne grupe. Sve ostalo je u [TestFlightu za testiranje aplikacije](https://devoria.fr/hr/blog/testflight-testiranje-iphone-aplikacije).

## Slanje nije predaja na reviziju

[Expo to piše](https://docs.expo.dev/submit/introduction/): TestFlight build se ne objavljuje automatski na App Storeu. EAS Submit ne popunjava ni stranicu aplikacije ni snimke zaslona. U App Store Connectu ostaju četiri koraka, opisana u [Appleovoj pomoći o slanju na reviziju](https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/submit-an-app):

1. **Popuni obavezne metapodatke** verzije.
2. **Odaberi build** u odjeljku Build verzije.
3. **Klikni "Add for Review".** Verzija prelazi u Ready for Review, ali još ništa nije otišlo na reviziju.
4. **Klikni "Submit for Review".** Status prelazi u In Review kad revizija počne.

## Česte greške i kako ih ispraviti

| Prikazana greška     | Uzrok                       | Ispravak                  |
| -------------------- | --------------------------- | ------------------------- |
| ITMS-90189           | Broj builda već zauzet      | `autoIncrement`           |
| ITMS-90062 ili 90186 | Verzija već zatvorena       | Povećaj `version`         |
| "Set ascAppId"       | Nema `ascAppId` u CI-ju     | Dodaj `ascAppId`          |
| "API Keys cannot"    | Nijedan ključ nije povezan  | `eas credentials`         |
| ITMS-90683           | Nedostaje purpose string    | `ios.infoPlist`           |
| ITMS-91053           | Nepotpun manifest           | `ios.privacyManifests`    |
| ITMS-90725           | Prestar iOS SDK             | Povećaj Expo SDK          |
| Missing Compliance   | Enkripcija nije prijavljena | `usesNonExemptEncryption` |

Prema Expu, već iskorišten broj builda čest je razlog odbijanja pri slanju: sve je u broju builda i verziji. Tri greške imaju vlastiti vodič: [ITMS-90683 s Expom](https://devoria.fr/hr/blog/itms-90683-missing-purpose-string-expo), [ITMS-91053 s Expom](https://devoria.fr/hr/blog/itms-91053-missing-api-declaration-expo) i ITMS-90725.

Dvije poruke pod navodnicima dolaze od EAS-a i ispravljaju se u njegovoj konfiguraciji. Missing Compliance rješavaš i odgovorima na pitanja u App Store Connectu. **Za sve ostale retke ispravak dira binarnu datoteku: napravi novi build, pa ga ponovno pošalji.** Ažuriranje na daljinu ne mijenja ni Info.plist, ni manifest, ni brojeve.

## Pošalji svoju prvu aplikaciju bez lutanja

Naredba je samo jedan korak. [iOS Kit](https://devoria.fr/hr/kits/ios) kreće od početnog koda mojih aplikacija, uključujući pretplate, i vodi te kroz četiri koraka do App Storea, tvojim tempom.

Ako pripremaš svoje prvo izdanje, [napravi besplatnu dijagnostiku](https://devoria.fr/hr/diagnostic): reći će ti što te stvarno koči i poslati ti moju checklistu 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) pokriva svaki korak.

## Česta pitanja

### Kako objaviti Expo aplikaciju na App Store?

Pokreni produkcijski build s EAS Buildom, pa ga pošalji s `eas submit --platform ios`. Nakon Appleove obrade pojavljuje se u TestFlightu. U App Store Connectu zatim popuni stranicu aplikacije, odaberi taj build u verziji, pa klikni "Add for Review" i "Submit for Review".

### Šalje li EAS Submit moju aplikaciju na Appleovu reviziju?

Ne. EAS Submit šalje binarnu datoteku u App Store Connect, a build stiže u TestFlight. Slanje na reviziju radiš ručno u App Store Connectu, kad popuniš stranicu aplikacije i odabereš build.

### Gdje naći ascAppId svoje aplikacije?

U App Store Connectu otvori aplikaciju, pa App Information. To je polje Apple ID, pod General Information. To je broj, nemoj ga brkati sa svojim bundle identifierom.

### Treba li mi Apple ID za eas submit?

Pri prvom pokretanju naredba ga traži. Poslije, s `ascAppId` u profilu i App Store Connect API ključem, može raditi bez interakcije, čak i u kontinuiranoj integraciji. API ključ je Expova zadana i preporučena metoda.

### Koliko treba da se build pojavi u TestFlightu?

Expo obično spominje 10 do 15 minuta obrade kod Applea, koji ti na kraju šalje e-mail. Ako build ostane u statusu Missing Compliance, odgovori na pitanja o enkripciji, pa je prijavi u konfiguraciji za sljedeće buildove.


## Tvoj projekt

[Apple Review Kit](https://devoria.fr/hr/kits/review-apple): Checklista za App Store review koju koristim, moja ispravljena odbijanja, bilješke za testera i dva Claude Code skilla koji pregledavaju tvoju aplikaciju. 29 €.

[iOS Kit](https://devoria.fr/hr/kits/ios): Napravi svoju iPhone aplikaciju s Claude Codeom: početni kod mojih aplikacija, skillovi koji provjeravaju njegov rad te Apple Review Kit, App Store Screenshots Kit i ASO Kit. 129,99 €.
