EAS Submit iOS: objava aplikacije Expo v App Store
Avtor: Mehdi Azizi
Objavljeno , 8 min
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.
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, ki sem jo preveril 25. oktobra 2026. Če nimaš Maca, je celotna pot opisana v objavi iOS aplikacije brez Maca. 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.
- Bundle identifier v
ios.bundleIdentifier. Po referenci Expo konfiguracije si ga izmisliš sam, a mora biti v App Storu edinstven. - Nameščen EAS CLI, nato
eas logins 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č 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 eas submit ustvari vnos, ko pošlješ svoj prvi build. Po referenci za 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 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 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 profilproduction, 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č 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. Predvsem pa shrani datoteko .p8: prenesti jo lahko samo enkrat, 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.
{
"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"
}
}
}
}
appVersionSourceinautoIncrement: strežniki EAS hranijo številko builda in jo povečajo ob vsakem produkcijskem buildu. Expo ta oddaljeni način priporoča 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. Mapokeysdodaj 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
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 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 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. 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:
{
"expo": {
"ios": {
"config": {
"usesNonExemptEncryption": false
}
}
}
}
Po Applu 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 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.
Pošiljanje ni oddaja v pregled
Expo to jasno piše: 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:
- Izpolni obvezne metapodatke različice.
- Izberi build v razdelku Build različice.
- Klikni »Add for Review«. Različica preide v Ready for Review, a v pregled še ni nič odšlo.
- 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, ITMS-91053 z Expom 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 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: 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 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.