EAS Submit iOS: publiser en Expo-app på App Store
Av Mehdi Azizi
Publisert , 8 min
EAS Submit sender iOS-builden din til App Store Connect, der den havner i TestFlight. Innsendingen til gjennomgang gjør du selv i App Store Connect.
eas submit --platform ios sender iOS-builden din til App Store Connect, der den dukker opp i TestFlight etter at Apple har behandlet den. Kommandoen sender ikke appen din til Apples gjennomgang: valg av build og innsending til gjennomgang gjør du fortsatt selv i App Store Connect. For å automatisere det trenger den nummeret på app-oppføringen din (ascAppId) og en App Store Connect API-nøkkel.
Jeg publiserer iOS-appene mine, blant dem Solys, TradaZen og Nolera, med Expo, EAS Build og EAS Submit. Denne guiden følger Expos dokumentasjon om iOS-innsending, gjennomgått 25. oktober 2026. Uten Mac finner du hele løpet i publisere en iOS-app uten Mac. Her fokuserer vi på selve innsendingen.
Dette trenger du før den første kommandoen
Expo lister opp tre forutsetninger:
- En betalt Apple Developer-konto. Pris og registrering finner du i Apple-utviklerkonto.
- En bundle-ID i
ios.bundleIdentifier. Ifølge referansen for Expo-konfigurasjonen finner du på den selv, men den må være unik på App Store. - EAS CLI installert, og deretter
eas loginmed Expo-kontoen din.
Du trenger også en signert produksjonsbuild. EAS Build lager den med sertifikatet og profilen den håndterer for deg, slik iOS-sertifikat og provisioning profile forklarer.
App-oppføringen i App Store Connect: du eller EAS?
EAS Submit sender en binærfil til en app som må finnes i App Store Connect.
Du kan opprette den selv. Apples hjelpesider beskriver New App-vinduet: plattform, navn, primærspråk, bundle-ID, SKU og brukertilgang. Du trenger rollen Account Holder, Admin eller App Manager.
EAS kan også opprette den ved første innsending. Ifølge Expos side om TestFlight oppretter eas submit oppføringen når du sender din første build. Ifølge referansen for eas.json hopper du over dette steget hvis du fyller inn ascAppId. Navnet hentes fra appName, eller ellers fra name i konfigurasjonen din. Primærspråket hentes fra language, som er en-US som standard. Hvis appen din først lanseres på et annet språk, fyll inn language før denne første innsendingen.
Deretter kopierer du nummeret på oppføringen inn i ascAppId. Expo forklarer hvor du finner det: åpne appen din i App Store Connect, og gå til App Information. Det er feltet Apple ID, under General Information. Det er et tall, ikke bundle-ID-en din.
Hvorfor en API-nøkkel i stedet for Apple-ID-en din
EAS Submit kobler seg til Apple med Apple-ID-en din eller med en App Store Connect API-nøkkel.
Apple-ID-en støter på tofaktorautentiseringen, som Apple krever for alle brukere av App Store Connect: en person må bekrefte innloggingen. Et appspesifikt passord, sendt i EXPO_APPLE_APP_SPECIFIC_PASSWORD, unngår dette steget, men Expo mener det er mindre sikkert enn API-nøkkelen, som er standardmetoden og den anbefalte. Nøkkelen lar deg autentisere uten noen interaksjon, og dermed automatisere innsendingen.
To måter å skaffe den på:
- La EAS håndtere den. Kjør
eas credentials --platform ios, velg profilenproduction, logg inn på Apple-kontoen din, og velg «App Store Connect: Manage your API Key». - Ta med din egen nøkkel. I App Store Connect: Users and Access, fanen Integrations, App Store Connect API, Team Keys, og deretter Generate API Key. Du trenger en Admin-konto, og Expos guide gir nøkkelen rollen Admin.
I det andre tilfellet noterer du Key ID, som vises i listen over aktive nøkler, og Issuer ID, øverst på Integrations-siden. Og ta fremfor alt vare på .p8-filen: du kan bare laste den ned én gang, og Apple beholder ingen kopi.
Ifølge Apple kan en Admin-nøkkel opprette og slette brukere på kontoen din. Apple ber deg aldri legge nøkkelen i et kodelager.
Minimal eas.json-fil å kopiere
Alle verdiene er fiktive: bytt dem ut med dine egne.
{
"cli": {
"appVersionSource": "remote"
},
"build": {
"production": {
"autoIncrement": true
}
},
"submit": {
"production": {
"ios": {
"ascAppId": "1234567890",
"appleTeamId": "ABCDE12345",
"ascApiKeyPath": "./keys/AuthKey_XXXXXXXXXX.p8",
"ascApiKeyIssuerId": "din-issuer-id",
"ascApiKeyId": "XXXXXXXXXX"
}
}
}
}
appVersionSourceogautoIncrement: EAS-serverne tar vare på build-nummeret og øker det for hver produksjonsbuild. Expo anbefaler denne eksterne modusen siden EAS CLI 12.ascAppId: nummeret på app-oppføringen din. Uten det feiler ikke-interaktiv modus.appleTeamId: ID-en til Apple Developer-teamet ditt.ascApiKeyPath,ascApiKeyIssuerId,ascApiKeyId: API-nøkkelen din. Alle tre feltene godtar miljøvariabler. Legg til mappenkeysi.gitignore.
Feltet appleId trengs bare hvis du logger inn med Apple-ID-en din. Hvis EAS allerede håndterer nøkkelen din, fjerner du også de tre ascApiKey-feltene. I de tre appene mine, sjekket 25. oktober, inneholder innsendingsprofilen for produksjon bare ascAppId, pluss appleTeamId på Solys: ingen nøkkel i filen.
Kjør builden, og deretter innsendingen
eas build --platform ios --profile production
eas submit --platform ios
Uten andre alternativer lar eas submit deg velge hvilken build som skal sendes, og ved første kjøring spør den om Apple-ID-en din. Innsendingsprofilen production brukes som standard hvis den finnes. Referansen for EAS CLI lister opp alternativene som lar deg slippe valget:
| Alternativ | Hva det gjør |
|---|---|
--latest | Sender den siste iOS-builden |
--id | Sender en bestemt EAS-build |
--path | Sender en lokal .ipa-fil |
--url | Sender et arkiv på nett |
--groups | Legger til i en intern gruppe |
--what-to-test | Fyller ut «What to test» |
For å kjøre alt i ett legger du til --auto-submit i build-kommandoen. Ifølge Expos side om automatisk innsending går den ferdige builden videre til EAS Submit med innsendingsprofilen som har samme navn som build-profilen. For å velge en annen: --auto-submit-with-profile=navn. Builden går til TestFlight, ikke til gjennomgang.
I kontinuerlig integrasjon legger du til --non-interactive og et EXPO_TOKEN-token. Da kan ikke kommandoen spørre deg om noe: den trenger ascAppId i profilen og en API-nøkkel, enten den EAS har koblet til appen eller din egen i de tre ascApiKey-feltene.
Hva som skjer etter innsendingen
1. Apple behandler builden. Den må gjennom denne behandlingen før den dukker opp i App Store Connect, og Apple sender deg en e-post når den er ferdig. Expo snakker vanligvis om 10 til 15 minutter før du ser den i TestFlight.
2. Eksportsamsvar. Statusen Missing Compliance betyr at erklæringen din om kryptering mangler. App Store Connect stiller disse spørsmålene for hver nye versjon, med mindre Info.plist allerede svarer på dem. Med Expo heter nøkkelen ios.config.usesNonExemptEncryption:
{
"expo": {
"ios": {
"config": {
"usesNonExemptEncryption": false
}
}
}
}
Ifølge Apple passer false hvis appen din, inkludert bibliotekene, ikke bruker noen kryptering eller bare unntatt kryptering. Systemets kryptering, som HTTPS via URLSession, er vanligvis unntatt. Oppgi bare false hvis det stemmer for appen din: erklæringen binder deg. Som alle nøkler i Info.plist krever den en ny build.
3. TestFlight. Med statusen Ready to Submit kan builden, ifølge Apple, gå til interne testere, gjennom betagjennomgang for eksterne, eller sendes til App Store-gjennomgang. Feltet groups i profilen legger den til i de interne gruppene dine. Alt det andre står i TestFlight for å teste appen din.
Opplasting er ikke det samme som innsending til gjennomgang
Expo skriver det selv: en TestFlight-build publiseres ikke automatisk på App Store. EAS Submit fyller verken ut app-oppføringen eller skjermbildene dine. Det gjenstår fire steg i App Store Connect, beskrevet i Apples hjelpeside om innsending til gjennomgang:
- Fyll ut de obligatoriske metadataene for versjonen.
- Velg builden i Build-seksjonen for versjonen.
- Klikk «Add for Review». Versjonen får statusen Ready for Review, men ingenting er sendt til gjennomgang ennå.
- Klikk «Submit for Review». Statusen endres til In Review når gjennomgangen starter.
Vanlige feil og hvordan du fikser dem
| Feilmelding | Årsak | Løsning |
|---|---|---|
| ITMS-90189 | Build-nummeret er brukt | autoIncrement |
| ITMS-90062 eller 90186 | Versjonen er allerede lukket | Øk version |
| «Set ascAppId» | ascAppId mangler i CI | Legg til ascAppId |
| «API Keys cannot» | Ingen nøkkel koblet til | eas credentials |
| ITMS-90683 | Mangler formålstekst | ios.infoPlist |
| ITMS-91053 | Ufullstendig manifest | ios.privacyManifests |
| ITMS-90725 | For gammel iOS SDK | Oppgrader Expo SDK |
| Missing Compliance | Kryptering ikke erklært | usesNonExemptEncryption |
Ifølge Expo er et build-nummer som allerede er brukt, en vanlig årsak til at opplastingen avvises: alt står i build-nummer og versjon. Tre feil har sin egen guide: ITMS-90683 med Expo, ITMS-91053 med Expo og ITMS-90725.
De to meldingene i anførselstegn kommer fra EAS og fikses i EAS-konfigurasjonen. Missing Compliance kan også løses ved å svare på spørsmålene i App Store Connect. For alle de andre radene berører løsningen binærfilen: lag en ny build og send den på nytt. En ekstern oppdatering endrer verken Info.plist, manifestet eller numrene.
Send inn din første app uten prøving og feiling
Kommandoen er bare ett steg. iOS Kit bygger på startkoden fra appene mine, abonnementer inkludert, og følger fire steg helt til App Store, i ditt eget tempo.
Hvis du forbereder din første lansering, ta den gratis diagnosen: den forteller deg hva som egentlig stopper deg, og sender deg sjekklisten min mot avvisninger fra Apple. For app-oppføringen, skjermbildene og godkjenningen dekker siden publisere en app på App Store hvert steg.
Ofte stilte spørsmål
Hvordan publiserer jeg en Expo-app på App Store?
Kjør en produksjonsbuild med EAS Build, og send den deretter med eas submit --platform ios. Etter at Apple har behandlet den, dukker den opp i TestFlight. I App Store Connect fyller du så ut app-oppføringen, velger denne builden i versjonen, og klikker «Add for Review» og «Submit for Review».
Sender EAS Submit appen min til gjennomgang hos Apple?
Nei. EAS Submit sender binærfilen til App Store Connect, og builden havner i TestFlight. Innsendingen til gjennomgang gjør du manuelt i App Store Connect, når app-oppføringen er utfylt og builden er valgt.
Hvor finner jeg ascAppId for appen min?
I App Store Connect åpner du appen din og går til App Information. Det er feltet Apple ID, under General Information. Det er et tall, og må ikke forveksles med bundle-ID-en din.
Trenger jeg en Apple-ID for å bruke eas submit?
Ved første kjøring spør kommandoen om den. Etterpå, med ascAppId i profilen og en App Store Connect API-nøkkel, kan den kjøre uten interaksjon, også i kontinuerlig integrasjon. API-nøkkelen er standardmetoden og den Expo anbefaler.
Hvor lang tid tar det før jeg ser builden i TestFlight?
Expo snakker vanligvis om 10 til 15 minutters behandling hos Apple, som sender deg en e-post når den er ferdig. Hvis builden blir stående med statusen Missing Compliance, svarer du på spørsmålene om kryptering, og erklærer det deretter i konfigurasjonen din for de neste buildene.