# EAS Submit iOS: ako publikovať Expo appku na App Store

> EAS Submit pošle tvoj iOS build do App Store Connect, kde sa objaví v TestFlighte. Na review ho však odošleš ručne v App Store Connect.

Pôvodná stránka: [EAS Submit iOS: ako publikovať Expo appku na App Store](https://devoria.fr/sk/blog/eas-submit-ios-publikovat-expo-appku-app-store)
Autor: [Mehdi Azizi](https://devoria.fr/sk/mehdi-azizi)
Zverejnenie: 2026-10-25
Posledná revízia obsahu: 2026-10-25


`eas submit --platform ios` pošle tvoj iOS build do App Store Connect, kde sa po spracovaní u Apple objaví v TestFlighte. **Príkaz tvoju appku neodošle na review od Apple: výber buildu a odoslanie na review musíš urobiť v App Store Connect.** Ak to chceš automatizovať, potrebuje číslo tvojej karty appky (`ascAppId`) a API kľúč App Store Connect.

Svoje iOS appky, medzi nimi Solys, TradaZen a Nolera, publikujem cez Expo, EAS Build a EAS Submit. Tento návod vychádza z [dokumentácie Expo o odosielaní na iOS](https://docs.expo.dev/submit/ios/), ktorú som prešiel 25. októbra 2026. Ak nemáš Mac, celý postup nájdeš v článku [publikovať iOS appku bez Macu](https://devoria.fr/sk/blog/publikovanie-ios-aplikacie-bez-macu-expo-eas). Tu sa sústredíme len na odoslanie.

## Čo potrebuješ pred prvým príkazom

Expo uvádza tri predpoklady:

- **Platený účet Apple Developer.** Cenu a registráciu nájdeš v článku [vývojársky účet Apple](https://devoria.fr/sk/blog/apple-developer-ucet-cena).
- **Bundle identifier** v `ios.bundleIdentifier`. Podľa [referencie konfigurácie Expo](https://docs.expo.dev/versions/latest/config/app/) si ho vymyslíš sám, ale na App Store musí byť jedinečný.
- **Nainštalované EAS CLI** a potom `eas login` s tvojím Expo účtom.

Potrebuješ aj podpísaný produkčný build. EAS Build ho vyrobí s certifikátom a profilom, ktoré spravuje za teba, ako vysvetľuje článok iOS certifikát a provisioning profile.

### Karta appky v App Store Connect: ty, alebo EAS?

EAS Submit posiela binárku do appky, ktorá musí v App Store Connect existovať.

**Môžeš ju vytvoriť sám.** [Nápoveda Apple](https://developer.apple.com/help/app-store-connect/create-an-app-record/add-a-new-app) popisuje okno New App: platforma, názov, primárny jazyk, bundle identifier, SKU a prístup používateľov. Potrebuješ rolu Account Holder, Admin alebo App Manager.

**EAS ju vie vytvoriť aj pri prvom odoslaní.** Podľa [stránky Expo o TestFlighte](https://docs.expo.dev/submit/testflight/) `eas submit` vytvorí kartu, keď pošleš svoj prvý build. Podľa [referencie eas.json](https://docs.expo.dev/eas/json/) vyplnenie `ascAppId` tento krok preskočí. Názov sa berie z `appName`, inak z `name` v tvojej konfigurácii. Primárny jazyk sa berie z `language`, ktorý má predvolene hodnotu `en-US`. **Ak tvoja appka vychádza najprv vo francúzštine, vyplň `language` ešte pred týmto prvým odoslaním.**

Potom skopíruj číslo karty do `ascAppId`. Expo uvádza, kde ho nájdeš: otvor svoju appku v App Store Connect, potom App Information. Je to pole Apple ID v sekcii General Information. **Je to číslo, nie tvoj bundle identifier.**

## Prečo API kľúč a nie tvoje Apple ID

EAS Submit sa k Apple pripája cez tvoje Apple ID alebo cez API kľúč App Store Connect.

Apple ID naráža na dvojfaktorové overenie, ktoré [Apple vyžaduje](https://developer.apple.com/support/authentication/) od všetkých používateľov App Store Connect: prihlásenie musí potvrdiť človek. Heslo pre aplikáciu, zadané v `EXPO_APPLE_APP_SPECIFIC_PASSWORD`, tento krok obíde, ale [Expo ho považuje za menej bezpečné](https://github.com/expo/fyi/blob/main/apple-app-specific-password.md) než API kľúč, ktorý je jeho predvolenou a odporúčanou metódou. **Kľúč umožňuje overenie bez akejkoľvek interakcie, a teda aj automatizáciu odosielania.**

Získaš ho dvoma spôsobmi:

- **Nechaj ho spravovať EAS.** Spusti `eas credentials --platform ios`, vyber profil `production`, prihlás sa do svojho Apple účtu a potom zvoľ „App Store Connect: Manage your API Key“.
- **Prines si vlastný kľúč.** V App Store Connect: Users and Access, záložka Integrations, App Store Connect API, Team Keys a potom Generate API Key. Potrebuješ účet Admin a [návod Expo](https://github.com/expo/fyi/blob/main/creating-asc-api-key.md) dáva kľúču rolu Admin.

V druhom prípade si zapíš Key ID, ktoré vidíš v zozname aktívnych kľúčov, a Issuer ID [hore na stránke Integrations](https://developer.apple.com/documentation/appstoreconnectapi/generating-tokens-for-api-requests). Hlavne si odlož súbor `.p8`: [stiahnuť ho môžeš len raz](https://developer.apple.com/documentation/appstoreconnectapi/creating-api-keys-for-app-store-connect-api) a Apple si jeho kópiu neuchováva.

> Kľúč s rolou Admin môže podľa Apple vytvárať a mazať používateľov tvojho účtu. Apple žiada, aby si kľúč nikdy neukladal do repozitára s kódom.

## Minimálny súbor eas.json na skopírovanie

Všetky hodnoty sú vymyslené: nahraď ich 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` a `autoIncrement`**: servery EAS uchovávajú číslo buildu a pri každom produkčnom builde ho zvýšia. [Expo odporúča tento vzdialený režim](https://docs.expo.dev/build-reference/app-versions/) od EAS CLI 12.
- **`ascAppId`**: číslo tvojej karty appky. Bez neho neinteraktívny režim zlyhá.
- **`appleTeamId`**: identifikátor tvojho tímu Apple Developer.
- **`ascApiKeyPath`, `ascApiKeyIssuerId`, `ascApiKeyId`**: tvoj API kľúč. Všetky tri polia akceptujú premenné prostredia. Pridaj priečinok `keys` do svojho `.gitignore`.

Pole `appleId` má zmysel len vtedy, ak sa prihlasuješ cez Apple ID. Ak EAS už spravuje tvoj kľúč, odstráň aj tri polia `ascApiKey`. V mojich troch appkách, ktoré som prešiel 25. októbra, obsahuje produkčný profil na odoslanie len `ascAppId`, pri Solys navyše `appleTeamId`: v súbore nie je žiadny kľúč.

## Spusti build a potom odoslanie

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

Bez ďalších možností ťa `eas submit` nechá vybrať build na odoslanie a pri prvom spustení si vypýta tvoje Apple ID. Profil na odoslanie `production` sa použije predvolene, ak existuje. [Referencia EAS CLI](https://docs.expo.dev/eas/cli/) uvádza možnosti, ktoré výber preskočia:

| Možnosť          | Čo robí                         |
| ---------------- | ------------------------------- |
| `--latest`       | Pošle posledný iOS build        |
| `--id`           | Pošle konkrétny EAS build       |
| `--path`         | Pošle lokálny súbor .ipa        |
| `--url`          | Pošle archív z internetu        |
| `--groups`       | Pridá build do internej skupiny |
| `--what-to-test` | Vyplní „What to test“           |

Ak chceš všetko zreťaziť, pridaj k príkazu na build `--auto-submit`. Podľa [stránky Expo o automatickom odosielaní](https://docs.expo.dev/build/automate-submissions/) sa hotový build pošle do EAS Submit s profilom na odoslanie, ktorý sa volá rovnako ako profil buildu. Ak chceš iný: `--auto-submit-with-profile=nazov`. **Build ide do TestFlightu, nie na review.**

V CI pridaj `--non-interactive` a token `EXPO_TOKEN`. Príkaz sa ťa potom nemôže nič spýtať: potrebuje `ascAppId` v profile a API kľúč, buď ten, ktorý EAS priradilo k appke, alebo tvoj vlastný v troch poliach `ascApiKey`.

## Čo sa deje po odoslaní

**1. Apple spracuje build.** Build musí prejsť týmto spracovaním, kým sa objaví v App Store Connect, a [Apple ti na konci pošle e-mail](https://developer.apple.com/help/app-store-connect/manage-builds/upload-builds). Expo hovorí zvyčajne o 10 až 15 minútach, kým ho uvidíš v TestFlighte.

**2. Exportná zhoda.** Stav Missing Compliance znamená, že chýba tvoje vyhlásenie o šifrovaní. App Store Connect kladie tieto otázky pri každej novej verzii, pokiaľ na ne už neodpovedá Info.plist. V Expo sa kľúč volá `ios.config.usesNonExemptEncryption`:

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

Podľa [Apple](https://developer.apple.com/documentation/security/complying-with-encryption-export-regulations) je `false` v poriadku, ak tvoja appka vrátane knižníc nepoužíva žiadne šifrovanie alebo len oslobodené šifrovanie. Systémové šifrovanie, napríklad HTTPS cez URLSession, oslobodené zvyčajne je. **`false` uveď len vtedy, ak to pre tvoju appku naozaj platí: za vyhlásenie zodpovedáš.** Ako každý kľúč v Info.plist si vyžaduje nový build.

**3. TestFlight.** V stave Ready to Submit môže build [podľa Apple](https://developer.apple.com/help/app-store-connect/reference/app-build-statuses) ísť interným testerom, prejsť beta review pre externých testerov alebo ísť na review do App Store. Pole `groups` v profile ho pridá do tvojich interných skupín. Všetko ostatné nájdeš v článku [TestFlight na testovanie appky](https://devoria.fr/sk/blog/testflight-otestovat-iphone-aplikaciu).

## Odoslanie nie je odoslanie na review

[Expo to píše](https://docs.expo.dev/submit/introduction/): build v TestFlighte sa na App Store nepublikuje automaticky. EAS Submit nevyplní ani tvoju kartu appky, ani screenshoty. V App Store Connect ťa čakajú ešte štyri kroky, ktoré popisuje [nápoveda Apple o odoslaní na review](https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/submit-an-app):

1. **Vyplň povinné metadáta** verzie.
2. **Vyber build** v sekcii Build danej verzie.
3. **Klikni na „Add for Review“.** Verzia prejde do stavu Ready for Review, ale na review ešte nič neodišlo.
4. **Klikni na „Submit for Review“.** Keď review začne, stav sa zmení na In Review.

## Časté chyby a ich oprava

| Zobrazená chyba        | Príčina                       | Oprava                    |
| ---------------------- | ----------------------------- | ------------------------- |
| ITMS-90189             | Číslo buildu už je použité    | `autoIncrement`           |
| ITMS-90062 alebo 90186 | Verzia je už uzavretá         | Zvýš `version`            |
| „Set ascAppId“         | Chýba `ascAppId` v CI         | Pridaj `ascAppId`         |
| „API Keys cannot“      | Nie je priradený kľúč         | `eas credentials`         |
| ITMS-90683             | Chýba purpose string          | `ios.infoPlist`           |
| ITMS-91053             | Neúplný manifest              | `ios.privacyManifests`    |
| ITMS-90725             | Príliš staré iOS SDK          | Zvýš Expo SDK             |
| Missing Compliance     | Šifrovanie nie je deklarované | `usesNonExemptEncryption` |

Podľa Expo je už použité číslo buildu častým dôvodom odmietnutia pri odosielaní: všetko nájdeš v článku číslo buildu a verzia. Tri chyby majú vlastný návod: [ITMS-90683 s Expo](https://devoria.fr/sk/blog/itms-90683-missing-purpose-string-expo), [ITMS-91053 s Expo](https://devoria.fr/sk/blog/itms-91053-missing-api-declaration-expo) a ITMS-90725.

Dve správy v úvodzovkách pochádzajú z EAS a opravíš ich v jeho konfigurácii. Missing Compliance vyriešiš aj odpoveďami na otázky v App Store Connect. **Pri všetkých ostatných riadkoch sa oprava týka binárky: urob nový build a pošli ho znova.** Vzdialená aktualizácia nezmení ani Info.plist, ani manifest, ani čísla.

## Pošli svoju prvú appku bez tápania

Príkaz je len jeden krok. [iOS Kit](https://devoria.fr/sk/kits/ios) vychádza zo štartovacieho kódu mojich appiek vrátane predplatných a vedie ťa štyrmi krokmi až na App Store, vlastným tempom.

Ak chystáš svoje prvé vydanie, [urob si bezplatnú diagnostiku](https://devoria.fr/sk/diagnostic): povie ti, čo ťa naozaj brzdí, a pošle ti môj checklist proti zamietnutiu od Apple. Kartu appky, screenshoty a schválenie krok za krokom pokrýva stránka [publikovať aplikáciu na App Store](https://devoria.fr/sk/expertise/zverejnit-aplikaciu-v-app-store).

## Často kladené otázky

### Ako publikovať Expo appku na App Store?

Spusti produkčný build cez EAS Build a potom ho pošli cez `eas submit --platform ios`. Po spracovaní u Apple sa objaví v TestFlighte. V App Store Connect potom vyplň kartu appky, vyber tento build vo verzii a klikni na „Add for Review“ a „Submit for Review“.

### Pošle EAS Submit moju appku na review do Apple?

Nie. EAS Submit pošle binárku do App Store Connect a build sa objaví v TestFlighte. Na review ho odošleš ručne v App Store Connect, keď vyplníš kartu appky a vyberieš build.

### Kde nájdem ascAppId svojej appky?

V App Store Connect otvor svoju appku a potom App Information. Je to pole Apple ID v sekcii General Information. Je to číslo, nezamieňaj si ho so svojím bundle identifierom.

### Potrebujem na eas submit Apple ID?

Pri prvom spustení si ho príkaz vypýta. Potom, s `ascAppId` v profile a API kľúčom App Store Connect, môže bežať bez interakcie, aj v CI. API kľúč je predvolená a Expo odporúčaná metóda.

### Ako dlho trvá, kým uvidím build v TestFlighte?

Expo hovorí zvyčajne o 10 až 15 minútach spracovania u Apple, ktorý ti na konci pošle e-mail. Ak build zostane v stave Missing Compliance, odpovedz na otázky o šifrovaní a potom ho deklaruj vo svojej konfigurácii pre ďalšie buildy.


## Tvoj projekt

[Apple Review Kit](https://devoria.fr/sk/kits/review-apple): Checklist na App Store review, ktorý používam, moje opravené zamietnutia od Apple, poznámky pre testera a dva skills pre Claude Code, ktoré skontrolujú tvoju appku. 29 €.

[iOS Kit](https://devoria.fr/sk/kits/ios): Vytvor iPhone appku s Claude Code: štartovací kód mojich appiek, skills, ktoré kontrolujú jeho prácu, a Apple Review Kit, App Store Screenshots Kit a ASO Kit. 129,99 €.
