EAS Submit iOS: publicar una app Expo a l'App Store
Per Mehdi Azizi
Publicat el , 8 min
EAS Submit envia el teu build iOS a App Store Connect, on arriba a TestFlight. L'enviament a revisió es fa a App Store Connect. El eas.json i els errors habituals.
eas submit --platform ios envia el teu build iOS a App Store Connect, on apareix a TestFlight després que Apple el processi. La comanda no envia la teva app a la revisió d'Apple: triar el build i enviar-lo a revisió es continua fent a App Store Connect. Per automatitzar-ho, necessita el número de la teva fitxa (ascAppId) i una clau API d'App Store Connect.
Publico les meves apps iOS, entre elles Solys, TradaZen i Nolera, amb Expo, EAS Build i EAS Submit. Aquesta guia segueix la documentació d'Expo sobre l'enviament iOS, revisada el 25 d'octubre de 2026. Si no tens Mac, el recorregut complet és a publicar una app iOS sense Mac. Aquí ens centrem en l'enviament.
El que necessites abans de la primera comanda
Expo llista tres requisits:
- Un compte Apple Developer de pagament. El preu i la inscripció són a compte de desenvolupador d'Apple.
- Un identificador de bundle a
ios.bundleIdentifier. Segons la referència de la configuració d'Expo, te l'inventes, però ha de ser únic a l'App Store. - EAS CLI instal·lat, i després
eas loginamb el teu compte d'Expo.
També necessites un build de producció signat. EAS Build el fabrica amb el certificat i el perfil que gestiona per tu, tal com explica certificat i provisioning profile iOS.
La fitxa d'App Store Connect: tu o EAS?
EAS Submit envia un binari a una app que ha d'existir a App Store Connect.
La pots crear tu mateix. L'ajuda d'Apple descriu la finestra New App: plataforma, nom, idioma principal, identificador de bundle, SKU i accés dels usuaris. Cal el rol Account Holder, Admin o App Manager.
EAS també la pot crear al primer enviament. Segons la pàgina d'Expo sobre TestFlight, eas submit crea la fitxa quan envies el teu primer build. Segons la referència d'eas.json, si omples ascAppId et saltes aquest pas. El nom ve d'appName o, si no hi és, del name de la teva configuració. L'idioma principal ve de language, que per defecte és en-US. Si la teva app surt primer en francès, omple language abans d'aquest primer enviament.
Després, copia el número de la fitxa a ascAppId. Expo indica on trobar-lo: obre la teva app a App Store Connect i després App Information. És el camp Apple ID, a General Information. És un número, no el teu identificador de bundle.
Per què una clau API i no el teu identificador d'Apple
EAS Submit es connecta a Apple amb el teu identificador d'Apple o amb una clau API d'App Store Connect.
L'identificador d'Apple topa amb l'autenticació de doble factor, que Apple exigeix a tots els usuaris d'App Store Connect: cal una persona per confirmar l'inici de sessió. La contrasenya d'app, passada a EXPO_APPLE_APP_SPECIFIC_PASSWORD, evita aquest pas, però Expo la considera menys segura que la clau API, el seu mètode per defecte i recomanat. La clau permet autenticar-se sense cap interacció i, per tant, automatitzar l'enviament.
Dues maneres d'obtenir-la:
- Deixa que EAS la gestioni. Executa
eas credentials --platform ios, tria el perfilproduction, connecta't al teu compte d'Apple i tria "App Store Connect: Manage your API Key". - Porta la teva pròpia clau. A App Store Connect: Users and Access, pestanya Integrations, App Store Connect API, Team Keys i després Generate API Key. Cal un compte Admin, i la guia d'Expo dona el rol Admin a la clau.
En el segon cas, apunta el Key ID, que surt a la llista de claus actives, i l'Issuer ID, a dalt de la pàgina Integrations. Sobretot, guarda el fitxer .p8: només el pots descarregar una vegada, i Apple no en guarda cap còpia.
Segons Apple, una clau Admin pot crear i eliminar usuaris del teu compte. Apple demana que no guardis mai la clau en un repositori de codi.
El fitxer eas.json mínim per copiar
Tots els valors són ficticis: substitueix-los pels teus.
{
"cli": {
"appVersionSource": "remote"
},
"build": {
"production": {
"autoIncrement": true
}
},
"submit": {
"production": {
"ios": {
"ascAppId": "1234567890",
"appleTeamId": "ABCDE12345",
"ascApiKeyPath": "./keys/AuthKey_XXXXXXXXXX.p8",
"ascApiKeyIssuerId": "el-teu-issuer-id",
"ascApiKeyId": "XXXXXXXXXX"
}
}
}
}
appVersionSourceiautoIncrement: els servidors d'EAS guarden el número de build i l'apugen a cada build de producció. Expo recomana aquest mode remot des d'EAS CLI 12.ascAppId: el número de la teva fitxa. Sense ell, el mode no interactiu falla.appleTeamId: l'identificador del teu equip d'Apple Developer.ascApiKeyPath,ascApiKeyIssuerId,ascApiKeyId: la teva clau API. Els tres camps accepten variables d'entorn. Afegeix la carpetakeysal teu.gitignore.
El camp appleId només serveix si et connectes amb el teu identificador d'Apple. Si EAS ja gestiona la teva clau, treu també els tres camps ascApiKey. A les meves tres apps, revisades el 25 d'octubre, el perfil d'enviament de producció només conté ascAppId, més appleTeamId a Solys: cap clau al fitxer.
Llançar el build i després l'enviament
eas build --platform ios --profile production
eas submit --platform ios
Sense cap altra opció, eas submit et fa triar el build que vols enviar i, la primera vegada, et demana el teu identificador d'Apple. El perfil d'enviament production s'agafa per defecte si existeix. La referència d'EAS CLI llista les opcions que t'estalvien la tria:
| Opció | Què fa |
|---|---|
--latest | Envia l'últim build iOS |
--id | Envia un build d'EAS concret |
--path | Envia un fitxer .ipa local |
--url | Envia un arxiu en línia |
--groups | L'afegeix a un grup intern |
--what-to-test | Omple "What to test" |
Per encadenar-ho tot, afegeix --auto-submit a la comanda de build. Segons la pàgina d'Expo sobre l'enviament automàtic, el build acabat va a EAS Submit amb el perfil d'enviament que té el mateix nom que el perfil de build. Per triar-ne un altre: --auto-submit-with-profile=nom. El build va a TestFlight, no a la revisió.
En integració contínua, afegeix --non-interactive i un token EXPO_TOKEN. Llavors la comanda no et pot preguntar res: necessita ascAppId al perfil i una clau API, la que EAS ha vinculat a l'app o la teva als tres camps ascApiKey.
Què passa després de l'enviament
1. Apple processa el build. Ha de passar per aquest processament abans d'aparèixer a App Store Connect, i Apple t'envia un correu quan acaba. Expo parla en general de 10 a 15 minuts abans de veure'l a TestFlight.
2. La conformitat d'exportació. L'estat Missing Compliance vol dir que falta la teva declaració sobre el xifratge. App Store Connect fa aquestes preguntes a cada versió nova, tret que l'Info.plist ja hi respongui. Amb Expo, la clau es diu ios.config.usesNonExemptEncryption:
{
"expo": {
"ios": {
"config": {
"usesNonExemptEncryption": false
}
}
}
}
Segons Apple, false és correcte si la teva app, biblioteques incloses, no fa servir cap xifratge o només un xifratge exempt. El xifratge del sistema, com l'HTTPS amb URLSession, normalment ho és. Només declaris false si és cert per a la teva app: la declaració et compromet. Com qualsevol clau de l'Info.plist, requereix un build nou.
3. TestFlight. A l'estat Ready to Submit, segons Apple, el build pot anar als testers interns, passar la revisió beta per als externs o anar a la revisió de l'App Store. El camp groups del perfil l'afegeix als teus grups interns. Tota la resta és a TestFlight per provar la teva app.
L'enviament no és la presentació a revisió
Expo ho diu: un build de TestFlight no es publica automàticament a l'App Store. EAS Submit no omple ni la teva fitxa ni les teves captures. Queden quatre passos a App Store Connect, descrits a l'ajuda d'Apple sobre l'enviament a revisió:
- Omple les metadades obligatòries de la versió.
- Tria el build a la secció Build de la versió.
- Fes clic a "Add for Review". La versió passa a Ready for Review, però encara no s'ha enviat res a revisió.
- Fes clic a "Submit for Review". L'estat passa a In Review quan comença la revisió.
Els errors freqüents i com corregir-los
| Error que surt | Causa | Correcció |
|---|---|---|
| ITMS-90189 | Número de build ja utilitzat | autoIncrement |
| ITMS-90062 o 90186 | Versió ja tancada | Apujar version |
| "Set ascAppId" | Falta ascAppId en CI | Afegir ascAppId |
| "API Keys cannot" | Cap clau vinculada | eas credentials |
| ITMS-90683 | Falta la frase de propòsit | ios.infoPlist |
| ITMS-91053 | Manifest incomplet | ios.privacyManifests |
| ITMS-90725 | SDK d'iOS massa antic | Apujar l'SDK d'Expo |
| Missing Compliance | Xifratge no declarat | usesNonExemptEncryption |
Segons Expo, el número de build ja utilitzat és una causa habitual de rebuig a l'enviament: ho tens tot a número de build i versió. Tres errors tenen la seva pròpia guia: ITMS-90683 amb Expo, ITMS-91053 amb Expo i ITMS-90725.
Els dos missatges entre cometes venen d'EAS i es corregeixen a la seva configuració. Missing Compliance també es resol responent les preguntes a App Store Connect. Per a totes les altres files, la correcció afecta el binari: torna a fer un build i torna'l a enviar. Una actualització remota no canvia ni l'Info.plist, ni el manifest, ni els números.
Envia la teva primera app sense anar a les palpentes
La comanda només és un pas. L'iOS Kit parteix del codi de base de les meves apps, subscripcions incloses, i segueix quatre etapes fins a l'App Store, al teu ritme.
Si prepares el teu primer llançament, fes el teu diagnòstic gratuït: et diu què et bloqueja de veritat i t'envia la meva checklist antirebuig d'Apple. Per a la fitxa, les captures i la validació, la pàgina publicar una aplicació a l'App Store cobreix cada etapa.
Preguntes freqüents
Com es publica una app Expo a l'App Store?
Llança un build de producció amb EAS Build i envia'l amb eas submit --platform ios. Després que Apple el processi, apareix a TestFlight. Després, a App Store Connect, omple la fitxa, tria aquest build a la versió i fes clic a "Add for Review" i "Submit for Review".
EAS Submit envia la meva app a revisió a Apple?
No. EAS Submit envia el binari a App Store Connect, i el build arriba a TestFlight. L'enviament a revisió es fa a mà a App Store Connect, un cop omplerta la fitxa i triat el build.
On trobo l'ascAppId de la meva app?
A App Store Connect, obre la teva app i després App Information. És el camp Apple ID, a General Information. És un número, no el confonguis amb el teu identificador de bundle.
Cal un identificador d'Apple per fer servir eas submit?
La primera vegada, la comanda te'l demana. Després, amb ascAppId al perfil i una clau API d'App Store Connect, pot funcionar sense interacció, fins i tot en integració contínua. La clau API és el mètode per defecte i recomanat per Expo.
Quant de temps cal per veure el build a TestFlight?
Expo parla en general de 10 a 15 minuts de processament a Apple, que t'envia un correu quan acaba. Si el build es queda a l'estat Missing Compliance, respon les preguntes sobre el xifratge i declara-ho a la teva configuració per als builds següents.