# Build number v App Store Connect: verzia a číslo buildu

> Verzia je číslo, ktoré vidia tvoji zákazníci, build number označuje každé nahratie. Dvojica musí byť unikátna: s Expo ti build zvýši EAS.

Pôvodná stránka: [Build number v App Store Connect: verzia a číslo buildu](https://devoria.fr/sk/blog/app-store-connect-build-number-verzia-cislo-buildu)
Autor: [Mehdi Azizi](https://devoria.fr/sk/mehdi-azizi)
Zverejnenie: 2026-11-04
Posledná revízia obsahu: 2026-11-04


Build number v App Store Connect je číslo buildu: kľúč `CFBundleVersion`, ktorý označuje každé nahratie. Verzia, `CFBundleShortVersionString`, je číslo, ktoré tvoji zákazníci vidia v App Store. **Apple vyžaduje, aby bola dvojica verzia a číslo buildu unikátna: jedno číslo buildu sa pre tú istú verziu dá použiť iba raz.**

S Expo si verziu nastavuješ sám a EAS môže číslo buildu zvýšiť pri každom produkčnom builde. Tento návod vysvetľuje obe čísla, pravidlá Apple, chyby ITMS-90062 a ITMS-90189 a čo skontrolovať, keď sa tvoj build nezobrazuje.

Svoje iOS appky publikujem cez Expo a EAS, napríklad Solys, TradaZen a Nolera. Nastavenia nižšie sú z ich súborov `eas.json`.

## Verzia a číslo buildu: aký je rozdiel?

Tvoju appku identifikujú dva kľúče v Info.plist. [Dokumentácia Apple k CFBundleShortVersionString](https://developer.apple.com/documentation/bundleresources/information-property-list/cfbundleshortversionstring) ju opisuje ako verziu viditeľnú pre používateľa: tri celé čísla oddelené bodkami, napríklad 10.14.1. [Dokumentácia k CFBundleVersion](https://developer.apple.com/documentation/bundleresources/information-property-list/cfbundleversion) hovorí o verzii buildu: jedno až tri celé čísla, iba číslice a bodky.

| Prvok        | Kľúč iOS                   | Kto ho vidí     | Pole v Expo       |
| ------------ | -------------------------- | --------------- | ----------------- |
| Verzia       | CFBundleShortVersionString | Tvoji zákazníci | `version`         |
| Číslo buildu | CFBundleVersion            | Ty a Apple      | `ios.buildNumber` |

Vymyslený príklad: pre verziu 1.4.0 počas testovania nahráš buildy 12, 13 a 14 a potom jeden z nich vyberieš na review. [Pomocník App Store Connect](https://developer.apple.com/help/app-store-connect/manage-builds/upload-builds) to zhŕňa takto: verzia priraďuje build k jeho záznamu, číslo buildu ho identifikuje všade v systéme.

## Pravidlá Apple pre zvyšovanie čísel

1. **Dvojica musí byť unikátna.** Podľa [dokumentácie Xcode Cloud](https://developer.apple.com/documentation/xcode/setting-the-next-build-number-for-xcode-cloud-builds) App Store Connect vyžaduje unikátnu kombináciu verzie a čísla buildu. Appka pre iPhone teda môže pri novej verzii začať znova od 1. Appka pre Mac nie: jej číslo musí vždy rásť.
2. **Schválená verzia je uzavretá.** Keď Apple schváli verziu 1.4.0, už k nej nemôžeš pridať build. Ďalšia musí mať vyššie číslo.
3. **Každé číslo sa porovnáva ako celé číslo.** 1.10 je po 1.9, pretože 10 je väčšie ako 9. Verzia 1.9 nahratá po schválenej 1.20 bude zamietnutá.

Moja rada: **drž celé číslo buildu, ktoré vždy rastie, a nevracaj ho na 1.** Na iPhone je reset na 1 povolený, ale jedno unikátne číslo počas celého života appky ti zabráni pomýliť si dva buildy v TestFlight. Presne to vidím na svojich appkách v remote režime: počítadlo pokračuje z verzie na verziu.

## Verzia a build s Expo a EAS

[Stránka Expo o verziách](https://docs.expo.dev/build-reference/app-versions/), aktualizovaná 25. septembra 2026, rozdeľuje úlohy. Verzia (`version` v app.json) zostáva na tebe: meníš ju, keď pripravuješ nové vydanie. Číslo buildu (`ios.buildNumber`) môžeš zveriť EAS. Expo mimochodom uvádza zabudnuté zvýšenie ako častú príčinu odmietnutia pri nahrávaní.

Všetko sa nastavuje v eas.json:

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

- **`"remote"`**: číslo buildu uchovávajú servery EAS. Od EAS CLI 12 je to odporúčané správanie. Počítadlo začne od hodnoty v tvojej konfigurácii alebo od 1 a potom sa `ios.buildNumber` ignoruje.
- **`"local"`**: rozhoduje tvoja konfigurácia. S `autoIncrement` EAS upraví `ios.buildNumber` v tvojom súbore a túto zmenu musíš pri každom builde commitnúť.
- **`autoIncrement`**: [referencia eas.json](https://docs.expo.dev/eas/json/) prijíma `true` alebo `"buildNumber"` pre build a `"version"` na zvýšenie poslednej číslice verzie. Expo upresňuje, že v remote režime `"version"` podporované nie je.

U mňa sú TradaZen a Nolera v `remote`. Solys zostala v `local`: jej číslo buildu je v app.json a každý produkčný build ho v súbore zvýši. **Fungujú oba režimy, ale remote odstraňuje riziko zabudnutého commitu.**

Celé to dopĺňajú dva príkazy. `eas build:version:set` inicializuje vzdialené počítadlo: zadaj posledné číslo, ktoré si poslal Apple. `eas build:version:sync` skopíruje vzdialené hodnoty do tvojho projektu, čo sa hodí, ak budeš niekedy kompilovať v Xcode. S EAS Update remote režim nefunguje s politikou `nativeVersion`: Expo odporúča `appVersion`.

## ITMS-90062: verzia je už schválená

Správa vyzerá takto (vymyslené čísla):

```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 už verziu 1.4.0 schválil: nemôžeš k nej pridať ďalší build. **Zvýš verziu v app.json, napríklad na 1.4.1, a spusti build znova.** Zmeniť iba číslo buildu nestačí.

Ak sa chyba vracia, hoci je `version` aktuálna, hľadaj pole `ios.version`. Podľa [referencie konfigurácie Expo](https://docs.expo.dev/versions/latest/config/app/) má pre iOS prednosť pred `version`. Rovnaké riešenie platí pre príbuznú chybu ITMS-90186, „Invalid Pre-Release Train“, ktorá hlási verziu uzavretú pre nové buildy.

## ITMS-90189: Redundant Binary Upload

Tu zlyháva číslo buildu:

```text
ERROR ITMS-90189: Redundant Binary Upload. You've already uploaded
a build with build number '12' for version number '1.4.0'.
```

Dvojica 1.4.0 (12) už u Apple existuje. S Expo sa opakujú štyri príčiny:

- **Použitý profil nemá `autoIncrement`.** Ak si vytváraš samostatný profil pre TestFlight, ako pri Nolere, pridaj doň túto voľbu.
- **Vzdialené počítadlo zaostáva.** Na `remote` si prešiel po ručných nahratiach: spusti `eas build:version:set` s posledným číslom, ktoré pozná Apple.
- **V lokálnom režime sa zabudol commit.** Ďalší build začne zo starého čísla.
- **Posielaš ten istý binárny súbor.** Pri `eas submit` vyber nový build, nie starý.

**Oprava je vždy rovnaká: nový build s vyšším číslom.**

## „No builds available“: tvoj build sa nezobrazuje

Build odišiel, ale tvoj záznam ho neponúka. Skontroluj v tomto poradí.

1. **Ešte sa spracúva.** Apple každý build pred zobrazením spracuje a na konci ti pošle e-mail. [Expo](https://docs.expo.dev/submit/ios/) uvádza zvyčajne 10 až 15 minút. [Podľa Apple](https://developer.apple.com/help/app-store-connect/manage-builds/view-builds-and-metadata) treba po viac ako 24 hodinách spracovania otvoriť tiket vo Feedback Assistant.
2. **Čaká na tvoje vyhlásenie o šifrovaní.** Je to stav Missing Compliance, podrobne nižšie.
3. **Verzia nesedí.** Build vo verzii 1.4.1 sa nezaradí pod záznam pripravený ako 1.5.0 v App Store Connect. Zosúlaď ich.
4. **Medzitým vyšla nová verzia.** Podľa [pomocníka k výberu buildu](https://developer.apple.com/help/app-store-connect/manage-builds/choose-a-build-to-submit) zoznam potom ukazuje iba buildy nahraté od tohto vydania.
5. **Nevidí ho tester.** V appke TestFlight „no builds available“ často znamená, že build nie je v žiadnej skupine, čaká na beta review alebo vypršal. Podrobnosti nájdeš v článku [TestFlight na testovanie appky pre iPhone](https://devoria.fr/sk/blog/testflight-otestovat-iphone-aplikaciu).

### Stavy, ktoré treba poznať

Stavy, ktoré najčastejšie vysvetľujú chýbajúci build, podľa [zoznamu Apple](https://developer.apple.com/help/app-store-connect/reference/app-build-statuses). Processing a Failed v ňom nie sú: sú to stavy nahrávania opísané v [sledovaní buildov](https://developer.apple.com/help/app-store-connect/manage-builds/view-builds-and-metadata).

| Stav               | Čo znamená                      | Tvoja oprava                 |
| ------------------ | ------------------------------- | ---------------------------- |
| Processing         | Apple spracúva build            | Počkať na e-mail             |
| Failed             | Chyba pri spracovaní            | Prečítať chybu, poslať znova |
| Missing Compliance | Šifrovanie nie je deklarované   | Odpovedať alebo Info.plist   |
| Invalid Binary     | Nahratie nespĺňa požiadavky     | Opraviť, nový build          |
| Expired            | Prekročených 90 dní             | Nový build                   |
| Ready to Submit    | Pripravený na test alebo review | Pridať ho do skupiny         |

### Deklaruj šifrovanie raz a navždy

Bez kľúča `ITSAppUsesNonExemptEncryption` ti [Apple](https://developer.apple.com/documentation/bundleresources/information-property-list/itsappusesnonexemptencryption) kladie otázky o súlade pri každej novej verzii. V Expo sa pole volá `ios.config.usesNonExemptEncryption`:

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

`false` znamená: žiadne šifrovanie alebo iba šifrovanie, na ktoré sa vzťahuje výnimka. [Apple upresňuje](https://developer.apple.com/documentation/security/complying-with-encryption-export-regulations), že šifrovanie zabudované v systéme, napríklad HTTPS spojenia, je zvyčajne vyňaté a že odpoveď pokrýva aj tvoje knižnice. Všetky tri moje appky deklarujú `false`. **`false` nastav iba vtedy, ak to pre tvoju appku naozaj platí: za vyhlásenie zodpovedáš.**

## Dá sa zmeniť číslo už nahratého buildu?

Nie. Číslo je zapísané v podpísanom binárnom súbore: na opravu potrebuješ nový build.

Zmeniť môžeš build priradený k tvojej verzii. Apple povoľuje jeden build na verziu, ale [môžeš ho nahradiť toľkokrát, koľko chceš](https://developer.apple.com/help/app-store-connect/manage-builds/choose-a-build-to-submit), až kým ju nepošleš na review:

1. Otvor verziu v App Store Connect, sekcia Build.
2. Prejdi myšou nad aktuálny build a klikni na tlačidlo odstránenia, znamienko mínus.
3. Klikni na tlačidlo pridania, znamienko plus, vyber správny build a ulož.

Odobratie buildu z verzie ho z tvojho účtu nevymaže. Ak je verzia už v review, [najprv stiahni odoslanie](https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/remove-a-submission-from-review): review potom začne odznova.

## Pred ďalším nahratím

Číslo buildu je len jedna z kontrol pri nahrávaní. Image buildu môže spustiť [ITMS-90725](https://devoria.fr/sk/blog/itms-90725-sdk-version-issue-expo) a podpisovanie má vlastné pasce, opísané v článku [iOS vývojársky certifikát a provisioning profile](https://devoria.fr/sk/blog/ios-certifikat-vyvojara-provisioning-profile-expo). Celý reťazec od buildu po TestFlight nájdeš v článku [publikovanie iOS appky bez Macu](https://devoria.fr/sk/blog/publikovanie-ios-aplikacie-bez-macu-expo-eas) a lehoty review v článku [ako dlho trvá schválenie v App Store](https://devoria.fr/sk/blog/ako-dlho-trva-schvalenie-app-store). Všetky kroky sú pokope na stránke [publikovanie aplikácie v App Store](https://devoria.fr/sk/expertise/zverejnit-aplikaciu-v-app-store).

Ak pripravuješ svoje prvé vydanie, [sprav si bezplatnú diagnostiku](https://devoria.fr/sk/diagnostic): povie ti, čo v tvojom projekte blokuje, a pošle ti môj checklist proti zamietnutiu od Apple. Na postavenie appky, napojenie predplatného a publikovanie ťa [iOS & Android Kit](https://devoria.fr/sk/kits/ios) prevedie štyrmi krokmi so štartovacím kódom mojich appiek, vlastným tempom.

## Často kladené otázky

### Aký je rozdiel medzi verziou a build number v App Store Connect?

Verzia je verejné číslo tvojho vydania, napríklad 1.4.0. Build number označuje konkrétny binárny súbor poslaný Apple pre túto verziu. Pre jednu verziu môžeš poslať viac buildov, každý s vlastným číslom.

### Treba meniť číslo buildu pri každom nahratí?

Áno, pre tú istú verziu. Apple odmietne druhé nahratie s rovnakou dvojicou verzia a číslo buildu, to je chyba ITMS-90189. S EAS sa o to pri každom produkčnom builde postará `autoIncrement`.

### Musí číslo buildu začínať pri každej verzii od 1?

Nie je to povinné. Na iPhone Apple pri novej verzii prijme aj nižšie číslo, lebo unikátna musí byť iba dvojica. Počítadlo, ktoré vždy rastie, sa však sleduje jednoduchšie.

### Ako zmeniť build number v App Store Connect?

Číslo už nahratého buildu zmeniť nemôžeš. Môžeš však nahradiť build priradený k tvojej verzii v sekcii Build záznamu, kým nie je v review. Ak chceš nové číslo, sprav nový build.

### Prečo sa môj build nezobrazuje v App Store Connect?

Najčastejšie sa ešte spracúva alebo čaká na tvoje vyhlásenie o šifrovaní. Skontroluj aj, či jeho verzia sedí s verziou tvojho záznamu. Po viac ako 24 hodinách spracovania Apple žiada otvoriť tiket.


## Tvoj projekt

[Review Kit](https://devoria.fr/sk/kits/app-review): Môj checklist na App Store review, moje opravené zamietnutia od Apple, checklist pre Google Play a tri skilly pre Claude Code. 49 €.

[iOS & Android Kit](https://devoria.fr/sk/kits/ios): Vytvor si appku pre iPhone a Android s Claude Code: štartovací kód mojich appiek, cesta až do obchodov a všetky kity. 99 €.

[Diagnostika: čo ťa delí od tvojej iPhone appky](https://devoria.fr/sk/diagnostic): 7 otázok, 60 sekúnd: zistíš, čo ti naozaj bráni zverejniť tvoju iPhone appku, dostaneš cestu v 4 krokoch a kit, ktorý ti sedí.
