# EAS Submit iOS: objava aplikacije Expo v App Store

> EAS Submit pošlje tvoj iOS build v App Store Connect, kjer se pojavi v TestFlightu. Oddajo v pregled moraš narediti sam v App Store Connect.

Izvirna stran: [EAS Submit iOS: objava aplikacije Expo v App Store](https://devoria.fr/sl/blog/eas-submit-ios-objava-aplikacije-expo-app-store)
Avtor: [Mehdi Azizi](https://devoria.fr/sl/mehdi-azizi)
Objava: 2026-10-25
Zadnja revizija vsebine: 2026-10-25


`eas submit --platform ios` pošlje tvoj iOS build v App Store Connect, kjer se po Applovi obdelavi pojavi v TestFlightu. **Ukaz tvoje aplikacije ne odda v Applov pregled: izbiro builda in oddajo v pregled moraš narediti v App Store Connect.** Za avtomatizacijo potrebuje številko tvojega vnosa aplikacije (`ascAppId`) in API ključ za App Store Connect.

Svoje iOS aplikacije, med njimi Solys, TradaZen in Nolera, objavljam z Expo, EAS Build in EAS Submit. Ta vodič sledi [Expovi dokumentaciji o pošiljanju za iOS](https://docs.expo.dev/submit/ios/), ki sem jo preveril 25. oktobra 2026. Če nimaš Maca, je celotna pot opisana v [objavi iOS aplikacije brez Maca](https://devoria.fr/sl/blog/objava-ios-aplikacije-brez-maca-expo-eas). Tukaj se osredotočimo na pošiljanje.

## Kaj potrebuješ pred prvim ukazom

Expo navaja tri predpogoje:

- **Plačljiv račun Apple Developer.** Ceno in registracijo najdeš v članku [račun Apple Developer](https://devoria.fr/sl/blog/apple-developer-racun-cena).
- **Bundle identifier** v `ios.bundleIdentifier`. Po [referenci Expo konfiguracije](https://docs.expo.dev/versions/latest/config/app/) si ga izmisliš sam, a mora biti v App Storu edinstven.
- **Nameščen EAS CLI**, nato `eas login` s tvojim računom Expo.

Potrebuješ tudi podpisan produkcijski build. EAS Build ga izdela s certifikatom in profilom, ki ju upravlja namesto tebe, kot je razloženo v certifikat in provisioning profile za iOS.

### Vnos v App Store Connect: ti ali EAS?

EAS Submit pošlje binarno datoteko aplikaciji, ki mora v App Store Connect že obstajati.

**Lahko jo ustvariš sam.** [Applova pomoč](https://developer.apple.com/help/app-store-connect/create-an-app-record/add-a-new-app) opisuje okno New App: platforma, ime, primarni jezik, bundle identifier, SKU in dostop uporabnikov. Potrebuješ vlogo Account Holder, Admin ali App Manager.

**EAS jo lahko ustvari tudi ob prvem pošiljanju.** Po [Expovi strani o TestFlightu](https://docs.expo.dev/submit/testflight/) `eas submit` ustvari vnos, ko pošlješ svoj prvi build. Po [referenci za eas.json](https://docs.expo.dev/eas/json/) izpolnjen `ascAppId` ta korak preskoči. Ime pride iz `appName`, sicer iz `name` v tvoji konfiguraciji. Primarni jezik pride iz `language`, ki je privzeto `en-US`. **Če aplikacija najprej izide v francoščini, izpolni `language` pred tem prvim pošiljanjem.**

Nato številko vnosa prepiši v `ascAppId`. Expo pove, kje jo najdeš: odpri aplikacijo v App Store Connect, nato App Information. To je polje Apple ID pod General Information. **To je številka, ne tvoj bundle identifier.**

## Zakaj API ključ namesto Apple ID-ja

EAS Submit se z Applom poveže s tvojim Apple ID-jem ali z API ključem za App Store Connect.

Apple ID se zatakne pri dvostopenjskem preverjanju, ki ga [Apple zahteva](https://developer.apple.com/support/authentication/) od vseh uporabnikov App Store Connect: prijavo mora potrditi človek. Geslo za aplikacijo, podano v `EXPO_APPLE_APP_SPECIFIC_PASSWORD`, ta korak obide, vendar ga [Expo ocenjuje kot manj varnega](https://github.com/expo/fyi/blob/main/apple-app-specific-password.md) od API ključa, ki je njegova privzeta in priporočena metoda. **Ključ omogoča preverjanje brez kakršne koli interakcije, zato lahko pošiljanje avtomatiziraš.**

Do njega prideš na dva načina:

- **Naj ga upravlja EAS.** Zaženi `eas credentials --platform ios`, izberi profil `production`, se prijavi v svoj Apple račun in izberi »App Store Connect: Manage your API Key«.
- **Prinesi svoj ključ.** V App Store Connect: Users and Access, zavihek Integrations, App Store Connect API, Team Keys, nato Generate API Key. Potrebuješ račun Admin, [Expov vodič](https://github.com/expo/fyi/blob/main/creating-asc-api-key.md) pa ključu dodeli vlogo Admin.

V drugem primeru si zapiši Key ID, prikazan na seznamu aktivnih ključev, in Issuer ID, [na vrhu strani Integrations](https://developer.apple.com/documentation/appstoreconnectapi/generating-tokens-for-api-requests). Predvsem pa shrani datoteko `.p8`: [prenesti jo lahko samo enkrat](https://developer.apple.com/documentation/appstoreconnectapi/creating-api-keys-for-app-store-connect-api), Apple pa ne hrani nobene kopije.

> Ključ Admin lahko po Applovih besedah ustvarja in briše uporabnike tvojega računa. Apple svetuje, da ključa nikoli ne shranjuješ v repozitorij kode.

## Minimalna datoteka eas.json za kopiranje

Vse vrednosti so izmišljene: zamenjaj jih s svojimi.

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

- **`appVersionSource` in `autoIncrement`**: strežniki EAS hranijo številko builda in jo povečajo ob vsakem produkcijskem buildu. [Expo ta oddaljeni način priporoča](https://docs.expo.dev/build-reference/app-versions/) od EAS CLI 12 naprej.
- **`ascAppId`**: številka tvojega vnosa. Brez nje neinteraktivni način ne uspe.
- **`appleTeamId`**: identifikator tvoje ekipe Apple Developer.
- **`ascApiKeyPath`, `ascApiKeyIssuerId`, `ascApiKeyId`**: tvoj API ključ. Vsa tri polja sprejemajo okoljske spremenljivke. Mapo `keys` dodaj v `.gitignore`.

Polje `appleId` potrebuješ samo, če se prijavljaš z Apple ID-jem. Če EAS tvoj ključ že upravlja, odstrani tudi tri polja `ascApiKey`. Pri mojih treh aplikacijah, preverjenih 25. oktobra, produkcijski profil za pošiljanje vsebuje samo `ascAppId`, pri Solysu še `appleTeamId`: v datoteki ni nobenega ključa.

## Zaženi build, nato pošiljanje

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

Brez drugih možnosti te `eas submit` vpraša, kateri build naj pošlje, ob prvem zagonu pa še za Apple ID. Profil za pošiljanje `production` se uporabi privzeto, če obstaja. [Referenca EAS CLI](https://docs.expo.dev/eas/cli/) navaja možnosti, ki izbiro preskočijo:

| Možnost          | Kaj naredi                   |
| ---------------- | ---------------------------- |
| `--latest`       | Pošlje zadnji iOS build      |
| `--id`           | Pošlje določen EAS build     |
| `--path`         | Pošlje lokalno datoteko .ipa |
| `--url`          | Pošlje arhiv s spleta        |
| `--groups`       | Doda v interno skupino       |
| `--what-to-test` | Izpolni »What to test«       |

Če želiš vse povezati, ukazu za build dodaj `--auto-submit`. Po [Expovi strani o samodejnem pošiljanju](https://docs.expo.dev/build/automate-submissions/) gre dokončan build v EAS Submit s profilom za pošiljanje, ki ima isto ime kot profil za build. Za drug profil: `--auto-submit-with-profile=ime`. **Build gre v TestFlight, ne v pregled.**

V neprekinjeni integraciji (CI) dodaj `--non-interactive` in žeton `EXPO_TOKEN`. Ukaz te takrat ne more ničesar vprašati: v profilu potrebuje `ascAppId` in API ključ, bodisi tistega, ki ga je EAS povezal z aplikacijo, bodisi tvojega v treh poljih `ascApiKey`.

## Kaj se zgodi po pošiljanju

**1. Apple obdela build.** Build mora skozi to obdelavo, preden se pojavi v App Store Connect, [Apple pa ti na koncu pošlje e-pošto](https://developer.apple.com/help/app-store-connect/manage-builds/upload-builds). Expo navaja, da običajno traja 10 do 15 minut, preden ga vidiš v TestFlightu.

**2. Izvozna skladnost.** Status Missing Compliance pomeni, da manjka tvoja izjava o šifriranju. App Store Connect ta vprašanja zastavi pri vsaki novi različici, razen če nanje že odgovori Info.plist. Pri Expu se ključ imenuje `ios.config.usesNonExemptEncryption`:

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

Po [Applu](https://developer.apple.com/documentation/security/complying-with-encryption-export-regulations) je `false` pravilno, če tvoja aplikacija, vključno s knjižnicami, ne uporablja nobenega šifriranja ali le izvzeto šifriranje. Sistemsko šifriranje, na primer HTTPS prek URLSession, je običajno izvzeto. **`false` navedi samo, če to za tvojo aplikacijo res drži: izjava te zavezuje.** Kot vsak ključ v Info.plist zahteva nov build.

**3. TestFlight.** Pri statusu Ready to Submit lahko build [po Applovih besedah](https://developer.apple.com/help/app-store-connect/reference/app-build-statuses) gre do internih testerjev, skozi beta pregled za zunanje ali v pregled za App Store. Polje `groups` v profilu ga doda v tvoje interne skupine. Vse ostalo je v [TestFlight za testiranje aplikacije](https://devoria.fr/sl/blog/testflight-testiranje-aplikacije-iphone).

## Pošiljanje ni oddaja v pregled

[Expo to jasno piše](https://docs.expo.dev/submit/introduction/): build v TestFlightu se ne objavi samodejno v App Storu. EAS Submit ne izpolni ne tvojega vnosa ne posnetkov zaslona. V App Store Connect ostanejo štirje koraki, opisani v [Applovi pomoči o oddaji v pregled](https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/submit-an-app):

1. **Izpolni obvezne metapodatke** različice.
2. **Izberi build** v razdelku Build različice.
3. **Klikni »Add for Review«.** Različica preide v Ready for Review, a v pregled še ni nič odšlo.
4. **Klikni »Submit for Review«.** Status preide v In Review, ko se pregled začne.

## Pogoste napake in njihova rešitev

| Prikazana napaka     | Vzrok                       | Rešitev                   |
| -------------------- | --------------------------- | ------------------------- |
| ITMS-90189           | Številka builda že zasedena | `autoIncrement`           |
| ITMS-90062 ali 90186 | Različica že zaprta         | Povečaj `version`         |
| »Set ascAppId«       | V CI manjka `ascAppId`      | Dodaj `ascAppId`          |
| »API Keys cannot«    | Noben ključ ni povezan      | `eas credentials`         |
| ITMS-90683           | Manjka opis namena dostopa  | `ios.infoPlist`           |
| ITMS-91053           | Nepopoln manifest           | `ios.privacyManifests`    |
| ITMS-90725           | Prestar iOS SDK             | Posodobi Expo SDK         |
| Missing Compliance   | Šifriranje ni prijavljeno   | `usesNonExemptEncryption` |

Po Expu je že uporabljena številka builda pogost vzrok zavrnitve ob pošiljanju: vse je v številka builda in različica. Tri napake imajo svoj vodič: [ITMS-90683 z Expom](https://devoria.fr/sl/blog/itms-90683-missing-purpose-string-expo), [ITMS-91053 z Expom](https://devoria.fr/sl/blog/itms-91053-missing-api-declaration-expo) in ITMS-90725.

Sporočili v narekovajih prihajata iz EAS in se popravita v njegovi konfiguraciji. Missing Compliance rešiš tudi tako, da odgovoriš na vprašanja v App Store Connect. **Pri vseh ostalih vrsticah popravek zadeva binarno datoteko: naredi nov build in ga ponovno pošlji.** Posodobitev na daljavo ne spremeni ne Info.plist, ne manifesta, ne številk.

## Pošlji svojo prvo aplikacijo brez tipanja v temi

Ukaz je le en korak. [iOS Kit](https://devoria.fr/sl/kits/ios) izhaja iz začetne kode mojih aplikacij, vključno z naročninami, in te v štirih korakih, v tvojem tempu, pripelje do App Stora.

Če pripravljaš svojo prvo objavo, [opravi brezplačno diagnostiko](https://devoria.fr/sl/diagnostic): pove ti, kaj te zares ovira, in ti pošlje moj kontrolni seznam proti Applovim zavrnitvam. Za vnos, posnetke zaslona in odobritev stran [objava aplikacije v App Storu](https://devoria.fr/sl/expertise/objava-aplikacije-v-app-store) pokrije vsak korak.

## Pogosta vprašanja

### Kako objavim aplikacijo Expo v App Storu?

Zaženi produkcijski build z EAS Build, nato ga pošlji z `eas submit --platform ios`. Po Applovi obdelavi se pojavi v TestFlightu. V App Store Connect nato izpolni vnos, v različici izberi ta build ter klikni »Add for Review« in »Submit for Review«.

### Ali EAS Submit pošlje mojo aplikacijo v Applov pregled?

Ne. EAS Submit pošlje binarno datoteko v App Store Connect, build pa se pojavi v TestFlightu. Oddajo v pregled narediš ročno v App Store Connect, ko je vnos izpolnjen in build izbran.

### Kje najdem ascAppId svoje aplikacije?

V App Store Connect odpri aplikacijo, nato App Information. To je polje Apple ID pod General Information. To je številka, ki je ne smeš zamenjati s svojim bundle identifierjem.

### Ali za eas submit potrebujem Apple ID?

Ob prvem zagonu te ukaz vpraša zanj. Pozneje lahko z `ascAppId` v profilu in API ključem za App Store Connect teče brez interakcije, tudi v neprekinjeni integraciji. API ključ je Expova privzeta in priporočena metoda.

### Koliko časa traja, preden vidim build v TestFlightu?

Expo navaja, da Applova obdelava običajno traja 10 do 15 minut, na koncu pa ti Apple pošlje e-pošto. Če build ostane v statusu Missing Compliance, odgovori na vprašanja o šifriranju, nato pa ga za naslednje builde prijavi v svoji konfiguraciji.


## Tvoj projekt

[Apple Review Kit](https://devoria.fr/sl/kits/review-apple): Kontrolni seznam za App Store review, ki ga uporabljam, moje popravljene zavrnitve, opombe za preizkuševalca in dva skilla Claude Code, ki pregledata tvojo aplikacijo. 29 €.

[iOS Kit](https://devoria.fr/sl/kits/ios): Ustvari aplikacijo za iPhone s Claude Code: začetna koda mojih aplikacij, skilli, ki preverjajo njegovo delo, ter Apple Review Kit, App Store Screenshots Kit in ASO Kit. 129,99 €.
