App Store Connect build number: verzija i broj builda
Autor: Mehdi Azizi
Objavljeno , 8 min
Verzija je broj koji vide tvoji kupci, a build number označava svako slanje. Par mora biti jedinstven: s Expom EAS povećava build umjesto tebe.
Build number u App Store Connectu je broj builda: ključ CFBundleVersion, koji označava svako slanje. Verzija, CFBundleShortVersionString, je broj koji tvoji kupci vide na App Storeu. Apple traži da par verzije i broja builda bude jedinstven: jedan broj builda koristi se samo jednom za istu verziju.
S Expom verziju postavljaš sam, a EAS može povećati broj builda pri svakom produkcijskom buildu. Ovaj vodič objašnjava oba broja, Appleova pravila, greške ITMS-90062 i ITMS-90189 te što provjeriti kad se tvoj build ne pojavljuje.
Svoje iOS aplikacije objavljujem s Expom i EAS-om, među njima Solys, TradaZen i Nolera. Postavke prikazane niže su one iz njihovih datoteka eas.json.
Verzija i broj builda: u čemu je razlika?
Dva ključa u Info.plist identificiraju tvoju aplikaciju. Appleova dokumentacija za CFBundleShortVersionString opisuje ga kao verziju vidljivu korisniku: tri cijela broja odvojena točkama, poput 10.14.1. Ona za CFBundleVersion govori o verziji builda: jedan do tri cijela broja, samo znamenke i točke.
| Element | iOS ključ | Tko ga vidi | Expo polje |
|---|---|---|---|
| Verzija | CFBundleShortVersionString | Tvoji kupci | version |
| Broj builda | CFBundleVersion | Ti i Apple | ios.buildNumber |
Izmišljeni primjer: za verziju 1.4.0 tijekom testiranja šalješ buildove 12, 13 i 14, a zatim jedan od njih biraš za reviziju. Pomoć za App Store Connect to sažima ovako: verzija povezuje build s njegovom stranicom aplikacije, a broj builda ga identificira posvuda u sustavu.
Appleova pravila povećanja
- Par mora biti jedinstven. Prema dokumentaciji za Xcode Cloud, App Store Connect traži jedinstvenu kombinaciju verzije i broja builda. Aplikacija za iPhone zato može krenuti ispočetka od 1 za novu verziju. Aplikacija za Mac ne može: njezin broj mora uvijek rasti.
- Odobrena verzija je zatvorena. Kad Apple odobri verziju 1.4.0, više joj ne možeš dodati build. Sljedeća mora imati veći broj.
- Svaki broj uspoređuje se kao cijeli broj. 1.10 dolazi nakon 1.9 jer je 10 veće od 9. Verzija 1.9 poslana nakon odobrene 1.20 bit će odbijena.
Moj savjet: drži cjelobrojni broj builda koji uvijek raste, bez vraćanja na 1. Vraćanje na 1 je na iPhoneu dopušteno, ali jedinstven broj kroz cijeli život aplikacije sprječava da pomiješaš dva builda u TestFlightu. To vidim i na svojim aplikacijama u udaljenom načinu: brojač se nastavlja iz verzije u verziju.
Upravljanje verzijom i buildom s Expom i EAS-om
Expova stranica o verzijama, ažurirana 25. rujna 2026., razdvaja uloge. Verzija (version u app.json) ostaje tvoja: mijenjaš je kad pripremaš novo izdanje. Broj builda (ios.buildNumber) možeš prepustiti EAS-u. Expo usput navodi zaboravljeno povećanje kao čest razlog odbijanja pri slanju.
Sve se podešava u eas.json:
{
"cli": {
"appVersionSource": "remote"
},
"build": {
"production": {
"autoIncrement": true
}
}
}
"remote": EAS-ovi poslužitelji čuvaju broj builda. To je preporučeno ponašanje od EAS CLI 12. Brojač kreće od vrijednosti iz tvoje konfiguracije ili od 1, a nakon toga seios.buildNumberzanemaruje."local": mjerodavna je tvoja konfiguracija. SautoIncrementEAS mijenjaios.buildNumberu tvojoj datoteci i tu promjenu moraš commitati pri svakom buildu.autoIncrement: referenca za eas.json prihvaćatrueili"buildNumber"za build te"version"za povećanje zadnje znamenke verzije. Expo navodi da u udaljenom načinu"version"nije podržan.
Kod mene su TradaZen i Nolera u remote načinu. Solys je ostao u local: broj builda živi u app.json i svaki ga produkcijski build povećava u datoteci. Oba načina rade, ali udaljeni način uklanja rizik od zaboravljenog commita.
Dvije naredbe zaokružuju sustav. eas build:version:set inicijalizira udaljeni brojač: unesi zadnji broj poslan Appleu. eas build:version:sync kopira udaljene vrijednosti u tvoj projekt, što je korisno ako jednog dana buildaš u Xcodeu. S EAS Updateom udaljeni način ne radi s politikom nativeVersion: Expo preporučuje appVersion.
ITMS-90062: verzija je već odobrena
Poruka izgleda ovako (izmišljeni brojevi):
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 je već odobrio verziju 1.4.0: više joj ne možeš dodati build. Povećaj verziju u app.json, primjerice na 1.4.1, pa ponovno pokreni build. Samo promjena broja builda nije dovoljna.
Ako se greška vraća iako je version ažuriran, potraži polje ios.version. Prema referenci Expo konfiguracije, ono za iOS ima prednost pred version. Isti lijek vrijedi i za srodnu grešku ITMS-90186, „Invalid Pre-Release Train”, koja javlja da je verzija zatvorena za nove buildove.
ITMS-90189: Redundant Binary Upload
Ovdje zapinje broj builda:
ERROR ITMS-90189: Redundant Binary Upload. You've already uploaded
a build with build number '12' for version number '1.4.0'.
Par 1.4.0 (12) već postoji kod Applea. S Expom se ponavljaju četiri uzroka:
- Korišteni profil nema
autoIncrement. Ako napraviš zaseban profil za TestFlight, kao onaj za Noleru, vrati u njega tu opciju. - Udaljeni brojač kasni. Prešao si na
remotenakon ručnih slanja: pokrenieas build:version:setsa zadnjim brojem koji Apple zna. - U lokalnom načinu zaboravljen je commit. Sljedeći build kreće od starog broja.
- Ponovno šalješ isti binarni paket. S
eas submitodaberi novi build, ne stari.
Ispravak je uvijek isti: novi build s većim brojem.
„No builds available”: tvoj build se ne pojavljuje
Build je poslan, ali ga tvoja stranica aplikacije ne nudi. Provjeri ovim redom.
- Još se obrađuje. Apple obrađuje svaki build prije prikaza i na kraju ti šalje e-mail. Expo općenito spominje 10 do 15 minuta. Prema Appleu, ako obrada traje dulje od 24 sata, treba otvoriti prijavu u Feedback Assistantu.
- Čeka tvoju izjavu o enkripciji. To je status Missing Compliance, detaljnije opisan niže.
- Verzija se ne podudara. Build 1.4.1 ne svrstava se pod stranicu pripremljenu za 1.5.0 u App Store Connectu. Uskladi ih.
- U međuvremenu je izašla verzija. Prema pomoći o odabiru builda, popis tada prikazuje samo buildove poslane nakon tog izdanja.
- Ne vidi ga tester. U aplikaciji TestFlight „no builds available” često znači da build nije ni u jednoj grupi, čeka beta reviziju ili je istekao. Detalji su u TestFlight za testiranje iPhone aplikacije.
Statusi koje trebaš znati
Statusi koji najčešće objašnjavaju build koji nedostaje, prema Appleovu popisu. Processing i Failed nisu na njemu: to su statusi slanja opisani u praćenju buildova.
| Status | Što znači | Tvoj ispravak |
|---|---|---|
| Processing | Apple obrađuje build | Pričekaj e-mail |
| Failed | Greška pri obradi | Pročitaj grešku, pošalji opet |
| Missing Compliance | Enkripcija nije prijavljena | Odgovori ili Info.plist |
| Invalid Binary | Neispravno slanje | Ispravi, novi build |
| Expired | Prošlo 90 dana | Novi build |
| Ready to Submit | Spreman za test ili reviziju | Dodaj ga u grupu |
Prijavi enkripciju jednom zauvijek
Bez ključa ITSAppUsesNonExemptEncryption Apple ti postavlja pitanja o usklađenosti pri svakoj novoj verziji. U Expu se polje zove ios.config.usesNonExemptEncryption:
{
"expo": {
"ios": {
"config": {
"usesNonExemptEncryption": false
}
}
}
}
false znači: nema enkripcije ili samo izuzeta enkripcija. Apple pojašnjava da je enkripcija ugrađena u sustav, poput HTTPS veza, općenito izuzeta te da odgovor pokriva i tvoje biblioteke. Sve tri moje aplikacije prijavljuju false. Stavi false samo ako to za tvoju aplikaciju stvarno vrijedi: izjava te obvezuje.
Može li se promijeniti broj već poslanog builda?
Ne. Broj je upisan u potpisani binarni paket: za ispravak treba novi build.
Ono što možeš promijeniti je build povezan s tvojom verzijom. Apple dopušta jedan build po verziji, ali možeš ga zamijeniti koliko god puta želiš do slanja na reviziju:
- Otvori verziju u App Store Connectu, odjeljak Build.
- Prijeđi mišem preko trenutnog builda i klikni gumb za uklanjanje, znak minus.
- Klikni gumb za dodavanje, znak plus, odaberi pravi build pa spremi.
Uklanjanje builda iz verzije ne briše ga s tvog računa. Ako je verzija već na reviziji, najprije povuci prijavu: revizija će krenuti ispočetka.
Prije sljedećeg slanja
Broj builda samo je jedna od provjera pri slanju. Build image može izazvati ITMS-90725, a potpisivanje ima vlastite zamke, opisane u iOS developerski certifikat i provisioning profile. Cijeli lanac, od builda do TestFlighta, nalazi se u objavi iOS aplikacije bez Maca, a trajanje revizije u koliko traje odobrenje na App Storeu. Svi koraci skupljeni su na stranici objava aplikacije na App Storeu.
Ako pripremaš svoje prvo izdanje, napravi besplatnu dijagnostiku: reći će ti što koči tvoj projekt i poslati ti moju checklistu protiv Appleovih odbijanja. Za izradu aplikacije, povezivanje pretplata i objavu, iOS & Android Kit vodi te kroz četiri koraka sa Starter Codeom mojih aplikacija, tvojim tempom.
Česta pitanja
Koja je razlika između verzije i build numbera u App Store Connectu?
Verzija je javni broj tvog izdanja, poput 1.4.0. Build number označava točno određeni binarni paket poslan Appleu za tu verziju. Za istu verziju možeš poslati više buildova, svaki sa svojim brojem.
Treba li mijenjati broj builda pri svakom slanju?
Da, za istu verziju. Apple odbija drugo slanje s istim parom verzije i broja builda, to je greška ITMS-90189. S EAS-om se autoIncrement za to brine pri svakom produkcijskom buildu.
Mora li broj builda krenuti od 1 sa svakom verzijom?
Nije obavezno. Na iPhoneu Apple prihvaća manji broj za novu verziju jer samo par mora biti jedinstven. Brojač koji uvijek raste ipak je lakše pratiti.
Kako promijeniti build number u App Store Connectu?
Broj već poslanog builda ne možeš mijenjati. Možeš, međutim, zamijeniti build povezan s tvojom verzijom, u odjeljku Build na stranici aplikacije, dok verzija nije na reviziji. Za novi broj napravi novi build.
Zašto se moj build ne pojavljuje u App Store Connectu?
Najčešće se još obrađuje ili čeka tvoju izjavu o enkripciji. Provjeri i podudara li se njegova verzija s onom na tvojoj stranici aplikacije. Ako obrada traje dulje od 24 sata, Apple traži da otvoriš prijavu.

