# EAS Submit iOS: publicar una app Expo a l'App Store

> 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.

Pàgina original: [EAS Submit iOS: publicar una app Expo a l'App Store](https://devoria.fr/ca/blog/eas-submit-ios-publicar-app-expo-app-store)
Autor: [Mehdi Azizi](https://devoria.fr/ca/mehdi-azizi)
Publicació: 2026-10-25
Darrera revisió del contingut: 2026-10-25


`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](https://docs.expo.dev/submit/ios/), revisada el 25 d'octubre de 2026. Si no tens Mac, el recorregut complet és a [publicar una app iOS sense Mac](https://devoria.fr/ca/blog/publicar-app-ios-sense-mac-expo-eas). 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](https://devoria.fr/ca/blog/compte-desenvolupador-apple-preu).
- **Un identificador de bundle** a `ios.bundleIdentifier`. Segons [la referència de la configuració d'Expo](https://docs.expo.dev/versions/latest/config/app/), te l'inventes, però ha de ser únic a l'App Store.
- **EAS CLI instal·lat**, i després `eas login` amb 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](https://developer.apple.com/help/app-store-connect/create-an-app-record/add-a-new-app) 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](https://docs.expo.dev/submit/testflight/), `eas submit` crea la fitxa quan envies el teu primer build. Segons [la referència d'eas.json](https://docs.expo.dev/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](https://developer.apple.com/support/authentication/) 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](https://github.com/expo/fyi/blob/main/apple-app-specific-password.md) 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 perfil `production`, 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](https://github.com/expo/fyi/blob/main/creating-asc-api-key.md) 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](https://developer.apple.com/documentation/appstoreconnectapi/generating-tokens-for-api-requests). Sobretot, guarda el fitxer `.p8`: [només el pots descarregar una vegada](https://developer.apple.com/documentation/appstoreconnectapi/creating-api-keys-for-app-store-connect-api), 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.

```json
{
  "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"
      }
    }
  }
}
```

- **`appVersionSource` i `autoIncrement`**: els servidors d'EAS guarden el número de build i l'apugen a cada build de producció. [Expo recomana aquest mode remot](https://docs.expo.dev/build-reference/app-versions/) 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 carpeta `keys` al 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

```bash
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](https://docs.expo.dev/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](https://docs.expo.dev/build/automate-submissions/), 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](https://developer.apple.com/help/app-store-connect/manage-builds/upload-builds) 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`:

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

Segons [Apple](https://developer.apple.com/documentation/security/complying-with-encryption-export-regulations), `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](https://developer.apple.com/help/app-store-connect/reference/app-build-statuses), 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](https://devoria.fr/ca/blog/testflight-provar-app-iphone-abans-enviar).

## L'enviament no és la presentació a revisió

[Expo ho diu](https://docs.expo.dev/submit/introduction/): 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ó](https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/submit-an-app):

1. **Omple les metadades obligatòries** de la versió.
2. **Tria el build** a la secció Build de la versió.
3. **Fes clic a "Add for Review".** La versió passa a Ready for Review, però encara no s'ha enviat res a revisió.
4. **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](https://devoria.fr/ca/blog/itms-90683-missing-purpose-string-expo), [ITMS-91053 amb Expo](https://devoria.fr/ca/blog/itms-91053-missing-api-declaration-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](https://devoria.fr/ca/kits/ios) 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](https://devoria.fr/ca/diagnostic): 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](https://devoria.fr/ca/expertise/publicar-una-aplicacio-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.


## El teu projecte

[Apple Review Kit](https://devoria.fr/ca/kits/review-apple): La checklist de review de l'App Store que faig servir, els meus rebuigs d'Apple corregits, les notes per al revisor i dues skills de Claude Code que revisen la teva app. 29 €.

[iOS Kit](https://devoria.fr/ca/kits/ios): Crea la teva app d'iPhone amb Claude Code: el codi de partida de les meves apps, les skills que revisen la seva feina, i els kits Apple Review, App Store Screenshots i ASO. 129,99 €.
