Build number App Store Connect: versione e numero di build
Di Mehdi Azizi
Pubblicato il , 8 min
La versione è il numero che vedono i tuoi clienti, il build number identifica ogni invio. La coppia deve essere unica: con Expo, EAS incrementa il build per te.
Il build number di App Store Connect è il numero di build: la chiave CFBundleVersion, che identifica ogni invio. La versione, CFBundleShortVersionString, è il numero che i tuoi clienti vedono sull'App Store. Apple richiede che la coppia versione e numero di build sia unica: un numero di build si usa una sola volta per la stessa versione.
Con Expo, la versione la imposti tu ed EAS può incrementare il numero di build a ogni build di produzione. Questa guida spiega i due numeri, le regole di Apple, gli errori ITMS-90062 e ITMS-90189, e cosa controllare quando il tuo build non compare.
Pubblico le mie app iOS con Expo ed EAS, tra cui Solys, TradaZen e Nolera. Le impostazioni che vedi più sotto sono quelle dei loro file eas.json.
Versione e numero di build: che differenza c'è?
Due chiavi dell'Info.plist identificano la tua app. La documentazione di Apple su CFBundleShortVersionString la descrive come la versione visibile all'utente: tre interi separati da punti, come 10.14.1. Quella su CFBundleVersion parla della versione del build: da uno a tre interi, solo cifre e punti.
| Elemento | Chiave iOS | Chi la vede | Campo Expo |
|---|---|---|---|
| Versione | CFBundleShortVersionString | I tuoi clienti | version |
| Numero di build | CFBundleVersion | Tu e Apple | ios.buildNumber |
Esempio fittizio: per la versione 1.4.0 invii i build 12, 13 e 14 durante i test, poi ne scegli uno per la revisione. L'aiuto di App Store Connect lo riassume così: la versione collega il build alla sua scheda, il numero di build lo identifica ovunque nel sistema.
Le regole di incremento di Apple
- La coppia deve essere unica. Secondo la documentazione di Xcode Cloud, App Store Connect richiede una combinazione unica di versione e numero di build. Un'app iPhone può quindi ripartire da 1 per una nuova versione. Un'app Mac no: il suo numero deve sempre salire.
- Una versione approvata è chiusa. Una volta che Apple ha approvato la versione 1.4.0, non puoi più aggiungerle build. La successiva deve avere un numero più alto.
- Ogni numero si confronta come un intero. 1.10 viene dopo 1.9, perché 10 è maggiore di 9. Una versione 1.9 inviata dopo una 1.20 approvata verrà rifiutata.
Il mio consiglio: tieni un numero di build intero che sale sempre, senza riportarlo a 1. Ripartire da 1 è consentito su iPhone, ma un numero unico per tutta la vita dell'app evita di confondere due build in TestFlight. È quello che vedo sulle mie app in modalità remota: il contatore continua da una versione all'altra.
Gestire versione e build con Expo ed EAS
La pagina di Expo sulle versioni, aggiornata il 25 settembre 2026, separa i ruoli. La versione (version in app.json) resta a te: la cambi quando prepari una nuova release. Il numero di build (ios.buildNumber) puoi affidarlo a EAS. Expo cita tra l'altro la dimenticanza dell'incremento come una causa frequente di rifiuto all'invio.
Si configura tutto in eas.json:
{
"cli": {
"appVersionSource": "remote"
},
"build": {
"production": {
"autoIncrement": true
}
}
}
"remote": i server di EAS conservano il numero di build. È il comportamento consigliato da EAS CLI 12. Il contatore parte dal valore della tua configurazione, o da 1, e poiios.buildNumberviene ignorato."local": fa fede la tua configurazione. ConautoIncrement, EAS modificaios.buildNumbernel tuo file, e devi fare commit di questa modifica a ogni build.autoIncrement: il riferimento di eas.json accettatrueo"buildNumber"per il build, e"version"per incrementare l'ultima cifra della versione. In modalità remota, Expo precisa che"version"non è supportato.
Nel mio caso, TradaZen e Nolera sono in remote. Solys è rimasta in local: il suo numero di build vive in app.json e ogni build di produzione lo fa salire nel file. Funzionano entrambe, ma la modalità remota elimina il rischio di un commit dimenticato.
Due comandi completano il quadro. eas build:version:set inizializza il contatore remoto: inserisci l'ultimo numero inviato ad Apple. eas build:version:sync copia i valori remoti nel tuo progetto, utile se un giorno compili con Xcode. Con EAS Update, la modalità remota non funziona con la policy nativeVersion: Expo consiglia appVersion.
ITMS-90062: la versione è già approvata
Il messaggio è simile a questo (numeri fittizi):
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 ha già approvato la versione 1.4.0: non puoi più aggiungerle build. Alza la versione in app.json, per esempio a 1.4.1, poi rilancia un build. Cambiare solo il numero di build non basta.
Se l'errore torna anche con version aggiornato, cerca un campo ios.version. Secondo il riferimento della configurazione Expo, ha la precedenza su version per iOS. Stesso rimedio per l'errore cugino ITMS-90186, "Invalid Pre-Release Train", che segnala una versione chiusa a nuovi build.
ITMS-90189: Redundant Binary Upload
Qui il problema è il numero di build:
ERROR ITMS-90189: Redundant Binary Upload. You've already uploaded
a build with build number '12' for version number '1.4.0'.
La coppia 1.4.0 (12) esiste già da Apple. Con Expo, le cause ricorrenti sono quattro:
- Il profilo usato non ha
autoIncrement. Se crei un profilo separato per TestFlight, come quello di Nolera, rimettici l'opzione. - Il contatore remoto è indietro. Sei passato a
remotedopo degli invii manuali: lanciaeas build:version:setcon l'ultimo numero noto ad Apple. - Hai dimenticato il commit in modalità locale. Il build successivo riparte dal vecchio numero.
- Stai reinviando lo stesso binario. Con
eas submit, scegli il nuovo build, non quello vecchio.
La soluzione è sempre la stessa: un nuovo build con un numero più alto.
"No builds available": il tuo build non compare
Il build è partito, ma la tua scheda non lo propone. Controlla in quest'ordine.
- È ancora in elaborazione. Apple elabora ogni build prima di mostrarlo e ti manda un'e-mail alla fine. Expo parla in genere di 10-15 minuti. Secondo Apple, oltre le 24 ore in elaborazione bisogna aprire un ticket su Feedback Assistant.
- Aspetta la tua dichiarazione sulla crittografia. È lo stato Missing Compliance, spiegato più sotto.
- La versione non corrisponde. Un build 1.4.1 non finisce sotto una scheda preparata come 1.5.0 in App Store Connect. Allinea le due.
- Nel frattempo è uscita una versione. Secondo l'aiuto sulla scelta del build, l'elenco mostra allora solo i build inviati dopo quella release.
- È il tester a non vederlo. Nell'app TestFlight, "no builds available" spesso significa che il build non è in nessun gruppo, aspetta la revisione beta o è scaduto. I dettagli sono in TestFlight per testare la tua app iPhone.
Gli stati da conoscere
Gli stati che spiegano più spesso un build mancante, secondo l'elenco di Apple. Processing e Failed non ci sono: sono gli stati di invio descritti nel monitoraggio dei build.
| Stato | Cosa significa | Come risolvere |
|---|---|---|
| Processing | Apple sta elaborando il build | Aspettare l'e-mail |
| Failed | Errore in elaborazione | Leggere l'errore, reinviare |
| Missing Compliance | Crittografia non dichiarata | Rispondere o Info.plist |
| Invalid Binary | Invio non conforme | Correggere, nuovo build |
| Expired | Superati i 90 giorni | Nuovo build |
| Ready to Submit | Pronto per test o revisione | Aggiungerlo a un gruppo |
Dichiarare la crittografia una volta per tutte
Senza la chiave ITSAppUsesNonExemptEncryption, Apple ti fa le domande di conformità a ogni nuova versione. Con Expo, il campo si chiama ios.config.usesNonExemptEncryption:
{
"expo": {
"ios": {
"config": {
"usesNonExemptEncryption": false
}
}
}
}
false significa: nessuna crittografia, o solo crittografia esente. Apple precisa che la crittografia integrata nel sistema, come le connessioni HTTPS, è in genere esente, e che la risposta copre anche le tue librerie. Le mie tre app dichiarano false. Metti false solo se è vero per la tua app: la dichiarazione ti impegna.
Si può cambiare il numero di un build già inviato?
No. Il numero è scritto nel binario firmato: per correggerlo serve un nuovo build.
Quello che puoi cambiare è il build collegato alla tua versione. Apple consente un solo build per versione, ma puoi sostituirlo tutte le volte che vuoi fino all'invio in revisione:
- Apri la versione in App Store Connect, sezione Build.
- Passa sopra il build attuale e clicca sul pulsante di rimozione, il segno meno.
- Clicca sul pulsante di aggiunta, il segno più, scegli il build giusto, poi salva.
Togliere un build da una versione non lo elimina dal tuo account. Se la versione è già in revisione, ritira prima l'invio: la revisione ripartirà da zero.
Prima del tuo prossimo invio
Il numero di build è solo uno dei controlli all'invio. L'immagine di build può far scattare ITMS-90725, e la firma ha le sue trappole, spiegate in certificato sviluppatore iOS e provisioning profile. La catena completa, dal build a TestFlight, è in pubblicare un'app iOS senza Mac, e i tempi di revisione in tempi di approvazione App Store. Tutti i passaggi sono riuniti nella pagina pubblicare un'app sull'App Store.
Se stai preparando la tua prima release, fai il diagnostic gratuito: ti dice cosa blocca il tuo progetto e ti manda la mia checklist anti-rifiuto Apple. Per costruire l'app, collegare gli abbonamenti e pubblicarla, l'iOS & Android Kit segue il percorso in quattro tappe con lo Starter Code delle mie app, al tuo ritmo.
Domande frequenti
Che differenza c'è tra versione e build number su App Store Connect?
La versione è il numero pubblico della tua release, come 1.4.0. Il build number identifica un binario preciso inviato ad Apple per quella versione. Puoi inviare più build per la stessa versione, ognuno con il suo numero.
Bisogna cambiare il numero di build a ogni invio?
Sì, per la stessa versione. Apple rifiuta un secondo invio con la stessa coppia versione e numero di build: è l'errore ITMS-90189. Con EAS, autoIncrement se ne occupa a ogni build di produzione.
Il numero di build deve ripartire da 1 a ogni versione?
Non è obbligatorio. Su iPhone, Apple accetta un numero più basso per una nuova versione, perché deve essere unica solo la coppia. Un contatore che sale sempre resta più semplice da seguire.
Come si cambia il build number in App Store Connect?
Non puoi modificare il numero di un build già inviato. Puoi invece sostituire il build collegato alla tua versione, dalla sezione Build della scheda, finché non è in revisione. Per un nuovo numero, rifai un build.
Perché il mio build non compare in App Store Connect?
Il più delle volte è ancora in elaborazione o aspetta la tua dichiarazione sulla crittografia. Controlla anche che la sua versione corrisponda a quella della tua scheda. Oltre le 24 ore in elaborazione, Apple chiede di aprire un ticket.

