EAS Submit iOS: ako publikovať Expo appku na App Store
Autor: Mehdi Azizi
Zverejnené , 8 min
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.
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, ktorú som prešiel 25. októbra 2026. Ak nemáš Mac, celý postup nájdeš v článku publikovať iOS appku bez Macu. 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.
- Bundle identifier v
ios.bundleIdentifier. Podľa referencie konfigurácie Expo si ho vymyslíš sám, ale na App Store musí byť jedinečný. - Nainštalované EAS CLI a potom
eas logins 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 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 eas submit vytvorí kartu, keď pošleš svoj prvý build. Podľa referencie 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 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é 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 profilproduction, 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 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. Hlavne si odlož súbor .p8: stiahnuť ho môžeš len raz 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.
{
"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"
}
}
}
}
appVersionSourceaautoIncrement: servery EAS uchovávajú číslo buildu a pri každom produkčnom builde ho zvýšia. Expo odporúča tento vzdialený režim 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činokkeysdo 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
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 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í 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. 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:
{
"expo": {
"ios": {
"config": {
"usesNonExemptEncryption": false
}
}
}
}
Podľa Apple 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 í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.
Odoslanie nie je odoslanie na review
Expo to píše: 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:
- Vyplň povinné metadáta verzie.
- Vyber build v sekcii Build danej verzie.
- Klikni na „Add for Review“. Verzia prejde do stavu Ready for Review, ale na review ešte nič neodišlo.
- 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, ITMS-91053 s 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 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: 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.
Č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.