# App Store Connect build number: verzija i broj builda

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

Izvorna stranica: [App Store Connect build number: verzija i broj builda](https://devoria.fr/hr/blog/app-store-connect-build-number-verzija)
Autor: [Mehdi Azizi](https://devoria.fr/hr/mehdi-azizi)
Objavljeno: 2026-11-04
Zadnja revizija sadržaja: 2026-11-04


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](https://developer.apple.com/documentation/bundleresources/information-property-list/cfbundleshortversionstring) opisuje ga kao verziju vidljivu korisniku: tri cijela broja odvojena točkama, poput 10.14.1. [Ona za CFBundleVersion](https://developer.apple.com/documentation/bundleresources/information-property-list/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](https://developer.apple.com/help/app-store-connect/manage-builds/upload-builds) to sažima ovako: verzija povezuje build s njegovom stranicom aplikacije, a broj builda ga identificira posvuda u sustavu.

## Appleova pravila povećanja

1. **Par mora biti jedinstven.** Prema [dokumentaciji za Xcode Cloud](https://developer.apple.com/documentation/xcode/setting-the-next-build-number-for-xcode-cloud-builds), 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.
2. **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.
3. **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](https://docs.expo.dev/build-reference/app-versions/), 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:

```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 se `ios.buildNumber` zanemaruje.
- **`"local"`**: mjerodavna je tvoja konfiguracija. S `autoIncrement` EAS mijenja `ios.buildNumber` u tvojoj datoteci i tu promjenu moraš commitati pri svakom buildu.
- **`autoIncrement`**: [referenca za eas.json](https://docs.expo.dev/eas/json/) prihvaća `true` ili `"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):

```text
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](https://docs.expo.dev/versions/latest/config/app/), 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:

```text
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 `remote` nakon ručnih slanja: pokreni `eas build:version:set` sa 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 submit` odaberi 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.

1. **Još se obrađuje.** Apple obrađuje svaki build prije prikaza i na kraju ti šalje e-mail. [Expo](https://docs.expo.dev/submit/ios/) općenito spominje 10 do 15 minuta. [Prema Appleu](https://developer.apple.com/help/app-store-connect/manage-builds/view-builds-and-metadata), ako obrada traje dulje od 24 sata, treba otvoriti prijavu u Feedback Assistantu.
2. **Čeka tvoju izjavu o enkripciji.** To je status Missing Compliance, detaljnije opisan niže.
3. **Verzija se ne podudara.** Build 1.4.1 ne svrstava se pod stranicu pripremljenu za 1.5.0 u App Store Connectu. Uskladi ih.
4. **U međuvremenu je izašla verzija.** Prema [pomoći o odabiru builda](https://developer.apple.com/help/app-store-connect/manage-builds/choose-a-build-to-submit), popis tada prikazuje samo buildove poslane nakon tog izdanja.
5. **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](https://devoria.fr/hr/blog/testflight-testiranje-iphone-aplikacije).

### Statusi koje trebaš znati

Statusi koji najčešće objašnjavaju build koji nedostaje, prema [Appleovu popisu](https://developer.apple.com/help/app-store-connect/reference/app-build-statuses). Processing i Failed nisu na njemu: to su statusi slanja opisani u [praćenju buildova](https://developer.apple.com/help/app-store-connect/manage-builds/view-builds-and-metadata).

| 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](https://developer.apple.com/documentation/bundleresources/information-property-list/itsappusesnonexemptencryption) ti postavlja pitanja o usklađenosti pri svakoj novoj verziji. U Expu se polje zove `ios.config.usesNonExemptEncryption`:

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

`false` znači: nema enkripcije ili samo izuzeta enkripcija. [Apple pojašnjava](https://developer.apple.com/documentation/security/complying-with-encryption-export-regulations) 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š](https://developer.apple.com/help/app-store-connect/manage-builds/choose-a-build-to-submit) do slanja na reviziju:

1. Otvori verziju u App Store Connectu, odjeljak Build.
2. Prijeđi mišem preko trenutnog builda i klikni gumb za uklanjanje, znak minus.
3. 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](https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/remove-a-submission-from-review): 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](https://devoria.fr/hr/blog/itms-90725-sdk-version-issue-expo), a potpisivanje ima vlastite zamke, opisane u [iOS developerski certifikat i provisioning profile](https://devoria.fr/hr/blog/ios-developerski-certifikat-provisioning-profile-expo). Cijeli lanac, od builda do TestFlighta, nalazi se u [objavi iOS aplikacije bez Maca](https://devoria.fr/hr/blog/objavi-ios-aplikaciju-bez-maca-expo-eas), a trajanje revizije u [koliko traje odobrenje na App Storeu](https://devoria.fr/hr/blog/koliko-traje-app-store-review). Svi koraci skupljeni su na stranici [objava aplikacije na App Storeu](https://devoria.fr/hr/expertise/objava-aplikacije-na-app-store).

Ako pripremaš svoje prvo izdanje, [napravi besplatnu dijagnostiku](https://devoria.fr/hr/diagnostic): 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](https://devoria.fr/hr/kits/ios) 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.


## Tvoj projekt

[Review Kit](https://devoria.fr/hr/kits/app-review): Moja checklista za App Store pregled, moja Appleova odbijanja i kako sam ih ispravio, checklista za Google Play i tri Claude Code skilla. 49 €.

[iOS & Android Kit](https://devoria.fr/hr/kits/ios): Napravi svoju iPhone i Android aplikaciju s Claude Codeom: početni kod mojih aplikacija, put do trgovina i svi kitovi. 99 €.

[Dijagnoza: što te dijeli od tvoje iPhone aplikacije](https://devoria.fr/hr/diagnostic): 7 pitanja, 60 sekundi: saznaj što te stvarno koči da objaviš svoju iPhone aplikaciju, dobij svoj put u 4 koraka i kit koji ti odgovara.
