# EAS Submit iOS: jak publikovat Expo app na App Store

> EAS Submit pošle tvůj iOS build do App Store Connect, kde se objeví v TestFlightu. Odeslání ke kontrole ale musíš udělat sám v App Store Connect.

Původní stránka: [EAS Submit iOS: jak publikovat Expo app na App Store](https://devoria.fr/cs/blog/eas-submit-ios-publikovat-expo-app-app-store)
Autor: [Mehdi Azizi](https://devoria.fr/cs/mehdi-azizi)
Publikováno: 2026-10-25
Poslední revize obsahu: 2026-10-25


`eas submit --platform ios` pošle tvůj iOS build do App Store Connect, kde se po zpracování u Applu objeví v TestFlightu. **Příkaz tvou appku neodešle ke kontrole u Applu: výběr buildu a odeslání ke kontrole musíš udělat v App Store Connect.** Aby šlo odesílání automatizovat, potřebuje číslo tvého záznamu aplikace (`ascAppId`) a API klíč App Store Connect.

Své iOS appky, mezi nimi Solys, TradaZen a Nolera, publikuju přes Expo, EAS Build a EAS Submit. Tenhle návod vychází z [dokumentace Expa k odesílání na iOS](https://docs.expo.dev/submit/ios/), kterou jsem znovu prošel 25. října 2026. Pokud nemáš Mac, celý postup najdeš v článku [publikovat iOS appku bez Macu](https://devoria.fr/cs/blog/publikace-ios-aplikace-bez-macu-expo-eas). Tady se soustředíme jen na odeslání.

## Co potřebuješ před prvním příkazem

Expo uvádí tři předpoklady:

- **Placený účet Apple Developer.** Cenu a registraci najdeš v článku [vývojářský účet Apple](https://devoria.fr/cs/blog/apple-developer-ucet-cena).
- **Bundle identifier** v `ios.bundleIdentifier`. Podle [reference konfigurace Expa](https://docs.expo.dev/versions/latest/config/app/) si ho vymyslíš sám, ale musí být na App Storu unikátní.
- **Nainstalované EAS CLI** a pak `eas login` se svým účtem Expo.

Potřebuješ taky podepsaný produkční build. EAS Build ho vyrobí s certifikátem a profilem, které za tebe spravuje, jak vysvětluje článek iOS certifikát a provisioning profile.

### Záznam v App Store Connect: ty, nebo EAS?

EAS Submit posílá binárku do aplikace, která už musí v App Store Connect existovat.

**Můžeš ho vytvořit sám.** [Nápověda Applu](https://developer.apple.com/help/app-store-connect/create-an-app-record/add-a-new-app) popisuje okno New App: platforma, název, primární jazyk, bundle identifier, SKU a přístup uživatelů. Potřebuješ roli Account Holder, Admin nebo App Manager.

**EAS ho taky umí vytvořit při prvním odeslání.** Podle [stránky Expa o TestFlightu](https://docs.expo.dev/submit/testflight/) vytvoří `eas submit` záznam, když posíláš svůj první build. Podle [reference eas.json](https://docs.expo.dev/eas/json/) se tenhle krok přeskočí, když vyplníš `ascAppId`. Název se vezme z `appName`, případně z `name` ve tvé konfiguraci. Primární jazyk se vezme z `language`, výchozí hodnota je `en-US`. **Pokud tvoje appka vychází nejdřív ve francouzštině, vyplň `language` ještě před tímhle prvním odesláním.**

Potom si číslo záznamu zkopíruj do `ascAppId`. Expo říká, kde ho najdeš: otevři svou appku v App Store Connect a pak App Information. Je to pole Apple ID v sekci General Information. **Je to číslo, ne tvůj bundle identifier.**

## Proč API klíč a ne tvoje Apple ID

EAS Submit se k Applu připojuje buď přes tvoje Apple ID, nebo přes API klíč App Store Connect.

Apple ID narazí na dvoufázové ověření, které [Apple vyžaduje](https://developer.apple.com/support/authentication/) od všech uživatelů App Store Connect: přihlášení musí potvrdit člověk. Heslo pro aplikaci, předané v `EXPO_APPLE_APP_SPECIFIC_PASSWORD`, tenhle krok obejde, ale [Expo ho považuje za méně bezpečné](https://github.com/expo/fyi/blob/main/apple-app-specific-password.md) než API klíč, který je jeho výchozí a doporučenou metodou. **Klíč umožňuje ověření bez jakékoli interakce, a tedy i automatizaci odesílání.**

Získat ho můžeš dvěma způsoby:

- **Nech ho spravovat EAS.** Spusť `eas credentials --platform ios`, vyber profil `production`, přihlas se ke svému účtu Apple a pak vyber „App Store Connect: Manage your API Key“.
- **Použij vlastní klíč.** V App Store Connect: Users and Access, záložka Integrations, App Store Connect API, Team Keys a pak Generate API Key. Potřebuješ účet s rolí Admin a [návod Expa](https://github.com/expo/fyi/blob/main/creating-asc-api-key.md) dává klíči roli Admin.

Ve druhém případě si poznamenej Key ID, které vidíš v seznamu aktivních klíčů, a Issuer ID [nahoře na stránce Integrations](https://developer.apple.com/documentation/appstoreconnectapi/generating-tokens-for-api-requests). Hlavně si schovej soubor `.p8`: [stáhnout ho můžeš jen jednou](https://developer.apple.com/documentation/appstoreconnectapi/creating-api-keys-for-app-store-connect-api) a Apple si žádnou kopii neuchovává.

> Klíč s rolí Admin může podle Applu vytvářet a mazat uživatele tvého účtu. Apple žádá, abys klíč nikdy neukládal do repozitáře s kódem.

## Minimální soubor eas.json ke zkopírování

Všechny hodnoty jsou smyšlené: nahraď je svými.

```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 si drží číslo buildu a při každém produkčním buildu ho zvednou. [Expo tenhle vzdálený režim doporučuje](https://docs.expo.dev/build-reference/app-versions/) od EAS CLI 12.
- **`ascAppId`**: číslo tvého záznamu. Bez něj neinteraktivní režim selže.
- **`appleTeamId`**: identifikátor tvého týmu Apple Developer.
- **`ascApiKeyPath`, `ascApiKeyIssuerId`, `ascApiKeyId`**: tvůj API klíč. Všechna tři pole berou i proměnné prostředí. Přidej složku `keys` do svého `.gitignore`.

Pole `appleId` má smysl jen tehdy, když se přihlašuješ přes Apple ID. Pokud tvůj klíč už spravuje EAS, odstraň i ta tři pole `ascApiKey`. U mých tří appek, které jsem prošel 25. října, obsahuje produkční profil pro odesílání jen `ascAppId`, u Solys navíc `appleTeamId`: v souboru není žádný klíč.

## Spuštění buildu a pak odeslání

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

Bez dalších voleb tě `eas submit` nechá vybrat build k odeslání a při prvním spuštění se zeptá na tvoje Apple ID. Pokud existuje profil pro odesílání `production`, použije se automaticky. [Reference EAS CLI](https://docs.expo.dev/eas/cli/) uvádí volby, se kterými výběr odpadne:

| Volba            | Co dělá                        |
| ---------------- | ------------------------------ |
| `--latest`       | Pošle poslední iOS build       |
| `--id`           | Pošle konkrétní EAS build      |
| `--path`         | Pošle lokální soubor .ipa      |
| `--url`          | Pošle archiv z internetu       |
| `--groups`       | Přidá build do interní skupiny |
| `--what-to-test` | Vyplní „What to test“          |

Pokud chceš všechno spustit najednou, přidej k příkazu pro build `--auto-submit`. Podle [stránky Expa o automatickém odesílání](https://docs.expo.dev/build/automate-submissions/) jde hotový build do EAS Submit s profilem pro odesílání, který se jmenuje stejně jako profil buildu. Jiný vybereš takhle: `--auto-submit-with-profile=nazev`. **Build jde do TestFlightu, ne ke kontrole.**

V CI přidej `--non-interactive` a token `EXPO_TOKEN`. Příkaz se tě pak nemůže na nic zeptat: potřebuje `ascAppId` v profilu a API klíč, buď ten, který EAS k appce připojil, nebo tvůj vlastní ve třech polích `ascApiKey`.

## Co se děje po odeslání

**1. Apple build zpracuje.** Build musí tímhle zpracováním projít, než se objeví 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 obvykle mluví o 10 až 15 minutách, než ho uvidíš v TestFlightu.

**2. Exportní shoda.** Stav Missing Compliance znamená, že chybí tvoje prohlášení o šifrování. App Store Connect se na tyhle otázky ptá u každé nové verze, pokud na ně už neodpovídá Info.plist. V Expu se ten klíč jmenuje `ios.config.usesNonExemptEncryption`:

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

Podle [Applu](https://developer.apple.com/documentation/security/complying-with-encryption-export-regulations) je `false` v pořádku, pokud tvoje appka, včetně knihoven, nepoužívá žádné šifrování nebo jen šifrování, které je vyjmuté. Systémové šifrování, třeba HTTPS přes URLSession, vyjmuté obvykle je. **`false` uváděj jen tehdy, když to pro tvou appku opravdu platí: za prohlášení odpovídáš.** Jako každý klíč v Info.plist vyžaduje nový build.

**3. TestFlight.** Ve stavu Ready to Submit může build [podle Applu](https://developer.apple.com/help/app-store-connect/reference/app-build-statuses) jít k interním testerům, projít beta kontrolou pro externí testery, nebo jít ke kontrole pro App Store. Pole `groups` v profilu ho přidá do tvých interních skupin. Všechno ostatní najdeš v článku [TestFlight pro testování appky](https://devoria.fr/cs/blog/testflight-testovani-iphone-aplikace).

## Odeslání buildu není odeslání ke kontrole

[Expo to píše](https://docs.expo.dev/submit/introduction/) jasně: build v TestFlightu se na App Storu automaticky nezveřejní. EAS Submit nevyplní tvůj záznam ani screenshoty. V App Store Connect tě čekají ještě čtyři kroky, popsané v [nápovědě Applu k odeslání ke kontrole](https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/submit-an-app):

1. **Vyplň povinná metadata** dané verze.
2. **Vyber build** v sekci Build dané verze.
3. **Klikni na „Add for Review“.** Verze přejde do stavu Ready for Review, ale ke kontrole ještě nic neodešlo.
4. **Klikni na „Submit for Review“.** Jakmile kontrola začne, stav se změní na In Review.

## Časté chyby a jak je opravit

| Zobrazená chyba       | Příčina                    | Oprava                    |
| --------------------- | -------------------------- | ------------------------- |
| ITMS-90189            | Číslo buildu už je použité | `autoIncrement`           |
| ITMS-90062 nebo 90186 | Verze je už uzavřená       | Zvýšit `version`          |
| „Set ascAppId“        | V CI chybí `ascAppId`      | Přidat `ascAppId`         |
| „API Keys cannot“     | Není připojený žádný klíč  | `eas credentials`         |
| ITMS-90683            | Chybí popis účelu přístupu | `ios.infoPlist`           |
| ITMS-91053            | Neúplný manifest           | `ios.privacyManifests`    |
| ITMS-90725            | Příliš staré iOS SDK       | Zvýšit Expo SDK           |
| Missing Compliance    | Šifrování není deklarované | `usesNonExemptEncryption` |

Podle Expa je už použité číslo buildu častým důvodem odmítnutí při odesílání: všechno najdeš v článku číslo buildu a verze. Tři chyby mají vlastní návod: [ITMS-90683 v Expu](https://devoria.fr/cs/blog/itms-90683-missing-purpose-string-expo), [ITMS-91053 v Expu](https://devoria.fr/cs/blog/itms-91053-missing-api-declaration-expo) a ITMS-90725.

Obě hlášky v uvozovkách pocházejí z EAS a opravíš je v jeho konfiguraci. Missing Compliance vyřešíš i tak, že odpovíš na otázky v App Store Connect. **U všech ostatních řádků se oprava týká binárky: udělej nový build a pošli ho znovu.** Vzdálená aktualizace nezmění Info.plist, manifest ani čísla.

## Pošli svou první appku bez tápání

Příkaz je jen jeden krok. [iOS Kit](https://devoria.fr/cs/kits/ios) vychází ze startovacího kódu mých appek, včetně předplatných, a vede tě čtyřmi kroky až na App Store, svým tempem.

Pokud chystáš své první vydání, [udělej si bezplatnou diagnostiku](https://devoria.fr/cs/diagnostic): řekne ti, co tě doopravdy brzdí, a pošle ti můj checklist proti zamítnutí od Applu. Záznam v obchodě, screenshoty a schválení pokrývá krok za krokem stránka [publikovat aplikaci na App Store](https://devoria.fr/cs/expertise/jak-vydat-aplikaci-v-app-store).

## Časté dotazy

### Jak publikovat Expo appku na App Store?

Spusť produkční build přes EAS Build a pak ho pošli příkazem `eas submit --platform ios`. Po zpracování u Applu se objeví v TestFlightu. V App Store Connect pak vyplň záznam aplikace, vyber tenhle build ve verzi a klikni na „Add for Review“ a „Submit for Review“.

### Posílá EAS Submit moji appku ke kontrole u Applu?

Ne. EAS Submit pošle binárku do App Store Connect a build se objeví v TestFlightu. Odeslání ke kontrole uděláš ručně v App Store Connect, až budeš mít vyplněný záznam a vybraný build.

### Kde najdu ascAppId své appky?

V App Store Connect otevři svou appku a pak App Information. Je to pole Apple ID v sekci General Information. Je to číslo, nepleť si ho se svým bundle identifierem.

### Potřebuju Apple ID, abych mohl používat eas submit?

Při prvním spuštění se tě na něj příkaz zeptá. Potom, s `ascAppId` v profilu a API klíčem App Store Connect, může běžet bez interakce, i v CI. API klíč je výchozí a Expem doporučená metoda.

### Jak dlouho trvá, než uvidím build v TestFlightu?

Expo obvykle mluví o 10 až 15 minutách zpracování u Applu, který ti na konci pošle e-mail. Pokud build zůstane ve stavu Missing Compliance, odpověz na otázky o šifrování a pak ho pro další buildy deklaruj ve své konfiguraci.


## Tvůj projekt

[Apple Review Kit](https://devoria.fr/cs/kits/review-apple): Checklist pro App Store review, který používám, moje opravená zamítnutí od Applu, poznámky pro testera a dva skills pro Claude Code, které zkontrolují tvou aplikaci. 29 €.

[iOS Kit](https://devoria.fr/cs/kits/ios): Vytvoř svou iPhone aplikaci s Claude Code: startovní kód mých aplikací, skills, které kontrolují jeho práci, a Apple Review Kit, App Store Screenshots Kit a ASO Kit. 129,99 €.
