App Store Connect build number: versió i número de build
Per Mehdi Azizi
Publicat el , 8 min
La versió és el número que veuen els teus clients; el build number identifica cada enviament. La parella ha de ser única: amb Expo, EAS el puja per tu.
El build number d'App Store Connect és el número de build: la clau CFBundleVersion, que identifica cada enviament. La versió, CFBundleShortVersionString, és el número que els teus clients veuen a l'App Store. Apple exigeix que la parella de versió i número de build sigui única: un número de build només serveix una vegada per a una mateixa versió.
Amb Expo, la versió la fixes tu i EAS pot incrementar el número de build a cada build de producció. Aquesta guia explica els dos números, les regles d'Apple, els errors ITMS-90062 i ITMS-90189, i què has de comprovar quan el teu build no apareix.
Publico les meves apps iOS amb Expo i EAS, entre elles Solys, TradaZen i Nolera. La configuració que veuràs més avall és la dels seus fitxers eas.json.
Versió i número de build: quina diferència hi ha?
Dues claus de l'Info.plist identifiquen la teva app. La documentació d'Apple sobre CFBundleShortVersionString la descriu com la versió visible per a l'usuari: tres enters separats per punts, com 10.14.1. La de CFBundleVersion parla de la versió del build: d'un a tres enters, només amb xifres i punts.
| Element | Clau iOS | Qui la veu | Camp Expo |
|---|---|---|---|
| Versió | CFBundleShortVersionString | Els teus clients | version |
| Número de build | CFBundleVersion | Tu i Apple | ios.buildNumber |
Exemple fictici: per a la versió 1.4.0, envies els builds 12, 13 i 14 durant les proves i després en tries un per a la revisió. L'ajuda d'App Store Connect ho resumeix: la versió vincula el build a la seva fitxa, i el número de build l'identifica a tot arreu dins del sistema.
Les regles d'increment d'Apple
- La parella ha de ser única. Segons la documentació de Xcode Cloud, App Store Connect exigeix una combinació única de versió i número de build. Per tant, una app d'iPhone pot tornar a començar per 1 en una versió nova. Una app de Mac, no: el seu número sempre ha de pujar.
- Una versió aprovada queda tancada. Un cop Apple ha validat la versió 1.4.0, ja no hi pots afegir cap build. La següent ha de portar un número més alt.
- Cada número es compara com un enter. 1.10 va després de 1.9, perquè 10 és més gran que 9. Una versió 1.9 enviada després d'una 1.20 aprovada serà rebutjada.
El meu consell: mantén un número de build enter que sempre pugi, sense tornar-lo a 1. Tornar a 1 està permès a l'iPhone, però un número únic durant tota la vida de l'app evita confondre dos builds a TestFlight. És el que veig a les meves apps en mode remot: el comptador continua d'una versió a l'altra.
Gestionar versió i build amb Expo i EAS
La pàgina d'Expo sobre les versions, actualitzada el 25 de setembre de 2026, separa els rols. La versió (version a app.json) és cosa teva: la canvies quan prepares un llançament nou. El número de build (ios.buildNumber) el pots deixar en mans d'EAS. De fet, Expo esmenta l'oblit d'incrementar-lo com una causa habitual de rebuig a l'enviament.
Tot es configura a eas.json:
{
"cli": {
"appVersionSource": "remote"
},
"build": {
"production": {
"autoIncrement": true
}
}
}
"remote": els servidors d'EAS guarden el número de build. És el comportament recomanat des d'EAS CLI 12. El comptador parteix del valor de la teva configuració, o d'1, i a partir d'aquíios.buildNumbers'ignora."local": mana la teva configuració. AmbautoIncrement, EAS modificaios.buildNumberal teu fitxer, i has de fer commit d'aquest canvi a cada build.autoIncrement: la referència d'eas.json acceptatrueo"buildNumber"per al build, i"version"per pujar l'última xifra de la versió. En mode remot, Expo precisa que"version"no és compatible.
En el meu cas, TradaZen i Nolera estan en remote. Solys s'ha quedat en local: el seu número de build viu a app.json i cada build de producció el fa pujar dins del fitxer. Tots dos funcionen, però el mode remot elimina el risc d'un commit oblidat.
Dues comandes completen el sistema. eas build:version:set inicialitza el comptador remot: hi poses l'últim número enviat a Apple. eas build:version:sync copia els valors remots al teu projecte, útil si algun dia compiles amb Xcode. Amb EAS Update, el mode remot no funciona amb la política nativeVersion: Expo recomana appVersion.
ITMS-90062: la versió ja està aprovada
El missatge s'assembla a això (números ficticis):
ERROR ITMS-90062: This bundle is invalid. The value for key
CFBundleShortVersionString [1.4.0] in the Info.plist file must
contain a higher version than that of the previously approved
version [1.4.0].
Apple ja ha aprovat la versió 1.4.0: ja no hi pots afegir cap build. Puja la versió a app.json, per exemple a 1.4.1, i torna a llançar un build. Canviar només el número de build no n'hi ha prou.
Si l'error torna tot i que version està actualitzada, busca un camp ios.version. Segons la referència de la configuració d'Expo, té prioritat sobre version per a iOS. El mateix remei serveix per a l'error germà ITMS-90186, "Invalid Pre-Release Train", que indica una versió tancada a builds nous.
ITMS-90189: Redundant Binary Upload
Aquí el que falla és el número de build:
ERROR ITMS-90189: Redundant Binary Upload. You've already uploaded
a build with build number '12' for version number '1.4.0'.
La parella 1.4.0 (12) ja existeix a Apple. Amb Expo, hi ha quatre causes habituals:
- El perfil que fas servir no té
autoIncrement. Si crees un perfil a part per a TestFlight, com el de Nolera, torna-hi a posar l'opció. - El comptador remot va endarrerit. Vas passar a
remotedesprés d'enviaments manuals: executaeas build:version:setamb l'últim número que coneix Apple. - T'has oblidat el commit en mode local. El build següent torna a partir del número antic.
- Tornes a enviar el mateix binari. Amb
eas submit, tria el build nou, no l'antic.
La solució sempre és la mateixa: un build nou amb un número més alt.
"No builds available": el teu build no apareix
El build s'ha enviat, però la teva fitxa no te'l proposa. Comprova-ho en aquest ordre.
- Encara s'està processant. Apple processa cada build abans de mostrar-lo i t'envia un correu quan acaba. Expo parla en general de 10 a 15 minuts. Segons Apple, si porta més de 24 hores en processament, has d'obrir un tiquet a Feedback Assistant.
- Espera la teva declaració de xifratge. És l'estat Missing Compliance, detallat més avall.
- La versió no coincideix. Un build 1.4.1 no s'encaixa sota una fitxa preparada com a 1.5.0 a App Store Connect. Alinea-les.
- Mentrestant ha sortit una versió. Segons l'ajuda sobre l'elecció del build, llavors la llista només mostra els builds enviats des d'aquell llançament.
- És el tester qui no el veu. A l'app TestFlight, "no builds available" sovint vol dir que el build no és a cap grup, que espera la revisió beta o que ha caducat. Tens els detalls a TestFlight per provar la teva app d'iPhone.
Els estats que has de conèixer
Aquests són els estats que expliquen més sovint un build absent, segons la llista d'Apple. Processing i Failed no hi surten: són els estats d'enviament descrits a el seguiment dels builds.
| Estat | Què vol dir | Com ho corregeixes |
|---|---|---|
| Processing | Apple processa el build | Esperar el correu |
| Failed | Error en el processament | Llegir l'error, reenviar |
| Missing Compliance | Xifratge no declarat | Respondre o Info.plist |
| Invalid Binary | Enviament no conforme | Corregir, build nou |
| Expired | S'han superat els 90 dies | Build nou |
| Ready to Submit | Llest per a prova o revisió | Afegir-lo a un grup |
Declarar el xifratge d'una vegada per totes
Sense la clau ITSAppUsesNonExemptEncryption, Apple et fa les preguntes de conformitat a cada versió nova. Amb Expo, el camp es diu ios.config.usesNonExemptEncryption:
{
"expo": {
"ios": {
"config": {
"usesNonExemptEncryption": false
}
}
}
}
false vol dir: sense xifratge, o només amb xifratge exempt. Apple precisa que el xifratge integrat al sistema, com les connexions HTTPS, en general està exempt, i que la resposta també cobreix les teves biblioteques. Les meves tres apps declaren false. Posa false només si és cert per a la teva app: la declaració et compromet.
Es pot canviar el número d'un build ja enviat?
No. El número està inscrit al binari signat: per corregir-lo, cal un build nou.
El que sí que pots canviar és el build vinculat a la teva versió. Apple només permet un build per versió, però el pots substituir tantes vegades com vulguis fins que l'enviïs a revisió:
- Obre la versió a App Store Connect, secció Build.
- Passa el cursor per sobre del build actual i fes clic al botó d'eliminar, el signe menys.
- Fes clic al botó d'afegir, el signe més, tria el build correcte i desa.
Treure un build d'una versió no l'esborra del teu compte. Si la versió ja és en revisió, retira primer l'enviament: la revisió tornarà a començar de zero.
Abans del teu proper enviament
El número de build només és un dels controls de l'enviament. La imatge de build pot provocar ITMS-90725, i la signatura té les seves pròpies trampes, detallades a certificat de desenvolupador iOS i provisioning profile. Tens la cadena completa, del build a TestFlight, a publicar una app iOS sense Mac, i els terminis de revisió a termini de validació de l'App Store. Tots els passos estan reunits a la pàgina publicar una aplicació a l'App Store.
Si estàs preparant el teu primer llançament, fes el diagnòstic gratuït: et diu què bloqueja el teu projecte i t'envia la meva checklist antirebuig d'Apple. Per construir l'app, connectar les subscripcions i publicar-la, l'iOS & Android Kit segueix el recorregut en quatre etapes amb el codi de partida de les meves apps, al teu ritme.
Preguntes freqüents
Quina diferència hi ha entre la versió i el build number a App Store Connect?
La versió és el número públic del teu llançament, com 1.4.0. El build number identifica un binari concret enviat a Apple per a aquesta versió. Pots enviar diversos builds per a una mateixa versió, cadascun amb el seu número.
Cal canviar el número de build a cada enviament?
Sí, per a una mateixa versió. Apple rebutja un segon enviament amb la mateixa parella de versió i número de build: és l'error ITMS-90189. Amb EAS, autoIncrement se n'encarrega a cada build de producció.
El número de build ha de tornar a 1 a cada versió?
No és obligatori. A l'iPhone, Apple accepta un número més baix per a una versió nova, perquè només la parella ha de ser única. Un comptador que sempre puja és més fàcil de seguir.
Com es canvia el build number a App Store Connect?
No pots modificar el número d'un build ja enviat. En canvi, sí que pots substituir el build vinculat a la teva versió, des de la secció Build de la fitxa, mentre no sigui en revisió. Per tenir un número nou, torna a fer un build.
Per què el meu build no apareix a App Store Connect?
Normalment, encara s'està processant o espera la teva declaració de xifratge. Comprova també que la seva versió coincideix amb la de la teva fitxa. Si porta més de 24 hores en processament, Apple demana que obris un tiquet.

