# App Store Connect build number: verzija in številka builda

> Verzija je številka, ki jo vidijo tvoje stranke, build number pa označuje vsako oddajo. Par mora biti edinstven: z Expo EAS build poveča namesto tebe.

Izvirna stran: [App Store Connect build number: verzija in številka builda](https://devoria.fr/sl/blog/app-store-connect-build-number-verzija-stevilka-builda)
Avtor: [Mehdi Azizi](https://devoria.fr/sl/mehdi-azizi)
Objava: 2026-11-04
Zadnja revizija vsebine: 2026-11-04


Build number v App Store Connect je številka builda: ključ `CFBundleVersion`, ki označuje vsako oddajo. Verzija, `CFBundleShortVersionString`, je številka, ki jo tvoje stranke vidijo v App Storu. **Apple zahteva, da je par verzije in številke builda edinstven: ena številka builda se pri isti verziji lahko uporabi samo enkrat.**

Z Expo verzijo določiš sam, EAS pa lahko številko builda poveča ob vsakem produkcijskem buildu. Ta vodnik razloži obe številki, Applova pravila, napaki ITMS-90062 in ITMS-90189 ter kaj preveriti, ko se tvoj build ne prikaže.

Svoje iOS aplikacije, med njimi Solys, TradaZen in Nolera, objavljam z Expo in EAS. Nastavitve spodaj so iz njihovih datotek `eas.json`.

## Verzija in številka builda: kakšna je razlika?

Tvojo aplikacijo označujeta dva ključa v Info.plist. [Applova dokumentacija o CFBundleShortVersionString](https://developer.apple.com/documentation/bundleresources/information-property-list/cfbundleshortversionstring) ga opisuje kot verzijo, ki jo vidi uporabnik: tri cela števila, ločena s pikami, na primer 10.14.1. [Dokumentacija o CFBundleVersion](https://developer.apple.com/documentation/bundleresources/information-property-list/cfbundleversion) govori o verziji builda: eno do tri cela števila, samo s številkami in pikami.

| Element         | Ključ iOS                  | Kdo ga vidi   | Polje v Expo      |
| --------------- | -------------------------- | ------------- | ----------------- |
| Verzija         | CFBundleShortVersionString | Tvoje stranke | `version`         |
| Številka builda | CFBundleVersion            | Ti in Apple   | `ios.buildNumber` |

Izmišljen primer: za verzijo 1.4.0 med testiranjem pošlješ builde 12, 13 in 14, nato enega izbereš za pregled. [Pomoč za App Store Connect](https://developer.apple.com/help/app-store-connect/manage-builds/upload-builds) to povzame tako: verzija build poveže z njegovo stranjo, številka builda pa ga označuje povsod v sistemu.

## Applova pravila za povečevanje

1. **Par mora biti edinstven.** Po [dokumentaciji Xcode Cloud](https://developer.apple.com/documentation/xcode/setting-the-next-build-number-for-xcode-cloud-builds) App Store Connect zahteva edinstveno kombinacijo verzije in številke builda. Aplikacija za iPhone lahko torej pri novi verziji začne znova pri 1. Aplikacija za Mac ne: njena številka mora vedno rasti.
2. **Odobrena verzija je zaprta.** Ko Apple odobri verzijo 1.4.0, ji ne moreš več dodati builda. Naslednja mora imeti višjo številko.
3. **Vsako število se primerja kot celo število.** 1.10 pride za 1.9, ker je 10 večje od 9. Verzija 1.9, poslana po odobreni 1.20, bo zavrnjena.

Moj nasvet: **imej celoštevilsko številko builda, ki vedno raste in je nikoli ne ponastaviš na 1.** Začeti znova pri 1 je na iPhonu dovoljeno, a ena edinstvena številka skozi celo življenje aplikacije prepreči, da bi v TestFlightu zamenjal dva builda. To vidim pri svojih aplikacijah v oddaljenem načinu: števec teče naprej iz verzije v verzijo.

## Upravljanje verzije in builda z Expo in EAS

[Expova stran o verzijah](https://docs.expo.dev/build-reference/app-versions/), posodobljena 25. septembra 2026, loči vloge. Verzija (`version` v app.json) ostane tvoja: spremeniš jo, ko pripravljaš novo izdajo. Številko builda (`ios.buildNumber`) lahko prepustiš EAS. Expo pozabljeno povečanje celo navaja kot pogost razlog za zavrnitev ob oddaji.

Vse nastaviš v eas.json:

```json
{
  "cli": {
    "appVersionSource": "remote"
  },
  "build": {
    "production": {
      "autoIncrement": true
    }
  }
}
```

- **`"remote"`**: številko builda hranijo strežniki EAS. To je priporočeno vedenje od EAS CLI 12 naprej. Števec začne pri vrednosti iz tvoje konfiguracije ali pri 1, nato se `ios.buildNumber` ignorira.
- **`"local"`**: velja tvoja konfiguracija. Z `autoIncrement` EAS spremeni `ios.buildNumber` v tvoji datoteki, to spremembo pa moraš commitati ob vsakem buildu.
- **`autoIncrement`**: [referenca eas.json](https://docs.expo.dev/eas/json/) za build sprejme `true` ali `"buildNumber"`, za povečanje zadnje številke verzije pa `"version"`. Expo poudarja, da v oddaljenem načinu `"version"` ni podprt.

Pri meni sta TradaZen in Nolera na `remote`. Solys je ostala na `local`: njena številka builda živi v app.json in vsak produkcijski build jo v datoteki poveča. **Oba načina delujeta, a oddaljeni odpravi tveganje pozabljenega commita.**

Sistem dopolnjujeta dva ukaza. `eas build:version:set` inicializira oddaljeni števec: vnesi zadnjo številko, poslano Applu. `eas build:version:sync` prepiše oddaljene vrednosti v tvoj projekt, kar pride prav, če boš kdaj buildal z Xcode. Z EAS Update oddaljeni način ne deluje s politiko `nativeVersion`: Expo priporoča `appVersion`.

## ITMS-90062: verzija je že odobrena

Sporočilo je videti takole (številke so izmišljene):

```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 verzijo 1.4.0 že odobril: vanjo ne moreš več dodati builda. **Povečaj verzijo v app.json, na primer na 1.4.1, in znova poženi build.** Samo sprememba številke builda ni dovolj.

Če se napaka ponavlja, čeprav je `version` posodobljen, poišči polje `ios.version`. Po [referenci konfiguracije Expo](https://docs.expo.dev/versions/latest/config/app/) ima za iOS prednost pred `version`. Enako rešiš sorodno napako ITMS-90186, „Invalid Pre-Release Train“, ki opozarja na verzijo, zaprto za nove builde.

## ITMS-90189: Redundant Binary Upload

Tu se zatakne pri številki 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) pri Applu že obstaja. Z Expo se ponavljajo štirje vzroki:

- **Uporabljeni profil nima `autoIncrement`.** Če ustvariš ločen profil za TestFlight, kot pri Noleri, mu možnost dodaj.
- **Oddaljeni števec zaostaja.** Na `remote` si prešel po ročnih oddajah: poženi `eas build:version:set` z zadnjo številko, ki jo pozna Apple.
- **V lokalnem načinu si pozabil commit.** Naslednji build začne pri stari številki.
- **Pošiljaš isti binarni paket.** Pri `eas submit` izberi novi build, ne starega.

**Popravek je vedno isti: nov build z višjo številko.**

## „No builds available“: tvoj build se ne prikaže

Build je odšel, a tvoja stran ga ne ponudi. Preveri po tem vrstnem redu.

1. **Še se obdeluje.** Apple vsak build obdela, preden ga prikaže, in ti ob koncu pošlje e-pošto. [Expo](https://docs.expo.dev/submit/ios/) navaja običajno 10 do 15 minut. [Po Applu](https://developer.apple.com/help/app-store-connect/manage-builds/view-builds-and-metadata) moraš po več kot 24 urah obdelave odpreti zahtevek v Feedback Assistant.
2. **Čaka na tvojo izjavo o šifriranju.** To je status Missing Compliance, podrobneje opisan spodaj.
3. **Verzija se ne ujema.** Build 1.4.1 se v App Store Connect ne uvrsti pod stran, pripravljeno za 1.5.0. Uskladi obe.
4. **Vmes je izšla nova verzija.** Po [pomoči o izbiri builda](https://developer.apple.com/help/app-store-connect/manage-builds/choose-a-build-to-submit) seznam takrat pokaže samo builde, poslane po tej izdaji.
5. **Ne vidi ga tester.** V aplikaciji TestFlight „no builds available“ pogosto pomeni, da build ni v nobeni skupini, čaka na beta pregled ali je potekel. Podrobnosti so v [TestFlight za testiranje tvoje aplikacije za iPhone](https://devoria.fr/sl/blog/testflight-testiranje-aplikacije-iphone).

### Statusi, ki jih moraš poznati

Statusi, ki najpogosteje pojasnijo manjkajoči build, po [Applovem seznamu](https://developer.apple.com/help/app-store-connect/reference/app-build-statuses). Processing in Failed tam nista: to sta statusa oddaje, opisana v [spremljanju buildov](https://developer.apple.com/help/app-store-connect/manage-builds/view-builds-and-metadata).

| Status             | Kaj pomeni                  | Tvoj popravek           |
| ------------------ | --------------------------- | ----------------------- |
| Processing         | Apple obdeluje build        | Počakaj na e-pošto      |
| Failed             | Napaka pri obdelavi         | Preberi napako, pošlji  |
| Missing Compliance | Šifriranje ni prijavljeno   | Odgovori ali Info.plist |
| Invalid Binary     | Neskladna oddaja            | Popravi, nov build      |
| Expired            | Preteklo je 90 dni          | Nov build               |
| Ready to Submit    | Pripravljen za test/pregled | Dodaj ga v skupino      |

### Šifriranje prijavi enkrat za vselej

Brez ključa `ITSAppUsesNonExemptEncryption` ti [Apple](https://developer.apple.com/documentation/bundleresources/information-property-list/itsappusesnonexemptencryption) vprašanja o skladnosti zastavi pri vsaki novi verziji. V Expo se polje imenuje `ios.config.usesNonExemptEncryption`:

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

`false` pomeni: brez šifriranja ali samo z izvzetim šifriranjem. [Apple pojasnjuje](https://developer.apple.com/documentation/security/complying-with-encryption-export-regulations), da je šifriranje, vgrajeno v sistem, na primer povezave HTTPS, praviloma izvzeto in da odgovor velja tudi za tvoje knjižnice. Vse tri moje aplikacije prijavljajo `false`. **`false` nastavi samo, če to za tvojo aplikacijo res drži: izjava te zavezuje.**

## Ali lahko spremeniš številko že poslanega builda?

Ne. Številka je zapisana v podpisanem binarnem paketu: za popravek potrebuješ nov build.

Spremeniš lahko build, povezan s tvojo verzijo. Apple dovoli en build na verzijo, a [zamenjaš ga lahko kolikorkrat želiš](https://developer.apple.com/help/app-store-connect/manage-builds/choose-a-build-to-submit), dokler ga ne pošlješ v pregled:

1. Odpri verzijo v App Store Connect, razdelek Build.
2. Z miško pojdi nad trenutni build in klikni gumb za odstranitev, znak minus.
3. Klikni gumb za dodajanje, znak plus, izberi pravi build in shrani.

Odstranitev builda iz verzije ga ne izbriše iz tvojega računa. Če je verzija že v pregledu, [najprej umakni oddajo](https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/remove-a-submission-from-review): pregled se bo začel znova.

## Pred naslednjo oddajo

Številka builda je le eno od preverjanj ob oddaji. Slika builda lahko sproži [ITMS-90725](https://devoria.fr/sl/blog/itms-90725-sdk-version-issue-expo), podpisovanje pa ima svoje pasti, opisane v [certifikat za razvijalce iOS in provisioning profile](https://devoria.fr/sl/blog/certifikat-razvijalca-ios-provisioning-profile-expo). Celotna veriga od builda do TestFlighta je v [objava aplikacije iOS brez Maca](https://devoria.fr/sl/blog/objava-ios-aplikacije-brez-maca-expo-eas), časi pregleda pa v [koliko traja odobritev v App Storu](https://devoria.fr/sl/blog/cas-pregleda-app-store-odobritev). Vsi koraki so zbrani na strani [objava aplikacije v App Storu](https://devoria.fr/sl/expertise/objava-aplikacije-v-app-store).

Če pripravljaš svojo prvo izdajo, [naredi brezplačno diagnostiko](https://devoria.fr/sl/diagnostic): pove ti, kaj v tvojem projektu blokira, in ti pošlje moj seznam za preprečevanje Applovih zavrnitev. Za izdelavo aplikacije, priklop naročnin in objavo te [iOS & Android Kit](https://devoria.fr/sl/kits/ios) vodi skozi pot v štirih korakih z začetno kodo mojih aplikacij, v tvojem tempu.

## Pogosta vprašanja

### Kakšna je razlika med verzijo in build numberjem v App Store Connect?

Verzija je javna številka tvoje izdaje, na primer 1.4.0. Build number označuje točno določen binarni paket, poslan Applu za to verzijo. Za isto verzijo lahko pošlješ več buildov, vsakega s svojo številko.

### Ali moram številko builda spremeniti ob vsaki oddaji?

Da, pri isti verziji. Apple zavrne drugo oddajo z enakim parom verzije in številke builda, to je napaka ITMS-90189. Z EAS za to ob vsakem produkcijskem buildu poskrbi `autoIncrement`.

### Ali mora številka builda pri vsaki verziji začeti znova pri 1?

Ni obvezno. Na iPhonu Apple za novo verzijo sprejme nižjo številko, ker mora biti edinstven samo par. Števec, ki vedno raste, je preprosteje spremljati.

### Kako spremenim build number v App Store Connect?

Številke že poslanega builda ne moreš spremeniti. Lahko pa zamenjaš build, pripet tvoji verziji, v razdelku Build na strani, dokler ta ni v pregledu. Za novo številko naredi nov build.

### Zakaj se moj build ne prikaže v App Store Connect?

Najpogosteje se še obdeluje ali čaka na tvojo izjavo o šifriranju. Preveri tudi, ali se njegova verzija ujema z verzijo na tvoji strani. Po več kot 24 urah obdelave Apple zahteva, da odpreš zahtevek.


## Tvoj projekt

[Review Kit](https://devoria.fr/sl/kits/app-review): Moj kontrolni seznam za pregled v App Store, moje popravljene zavrnitve Applea, seznam za Google Play in trije skilli za Claude Code. 49 €.

[iOS & Android Kit](https://devoria.fr/sl/kits/ios): Ustvari svojo aplikacijo za iPhone in Android s Claude Code: začetna koda mojih aplikacij, pot do trgovin in vsi kompleti. 99 €.

[Diagnoza: kaj te loči od tvoje aplikacije za iPhone](https://devoria.fr/sl/diagnostic): 7 vprašanj, 60 sekund: izveš, kaj te zares ovira pri objavi aplikacije za iPhone, dobiš pot v 4 korakih in komplet, ki ti ustreza.
