Build number v App Store Connect: verzia a číslo buildu
Autor: Mehdi Azizi
Zverejnené , 8 min
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.
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 ju opisuje ako verziu viditeľnú pre používateľa: tri celé čísla oddelené bodkami, napríklad 10.14.1. Dokumentácia k 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 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
- Dvojica musí byť unikátna. Podľa dokumentácie Xcode Cloud 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ť.
- 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.
- 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, 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:
{
"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 saios.buildNumberignoruje."local": rozhoduje tvoja konfigurácia. SautoIncrementEAS upravíios.buildNumberv tvojom súbore a túto zmenu musíš pri každom builde commitnúť.autoIncrement: referencia eas.json prijímatruealebo"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):
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 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:
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
remotesi prešiel po ručných nahratiach: spustieas build:version:sets 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 submitvyber 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í.
- Ešte sa spracúva. Apple každý build pred zobrazením spracuje a na konci ti pošle e-mail. Expo uvádza zvyčajne 10 až 15 minút. Podľa Apple treba po viac ako 24 hodinách spracovania otvoriť tiket vo Feedback Assistant.
- Čaká na tvoje vyhlásenie o šifrovaní. Je to stav Missing Compliance, podrobne nižšie.
- 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.
- Medzitým vyšla nová verzia. Podľa pomocníka k výberu buildu zoznam potom ukazuje iba buildy nahraté od tohto vydania.
- 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.
Stavy, ktoré treba poznať
Stavy, ktoré najčastejšie vysvetľujú chýbajúci build, podľa zoznamu Apple. Processing a Failed v ňom nie sú: sú to stavy nahrávania opísané v sledovaní buildov.
| 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 kladie otázky o súlade pri každej novej verzii. V Expo sa pole volá ios.config.usesNonExemptEncryption:
{
"expo": {
"ios": {
"config": {
"usesNonExemptEncryption": false
}
}
}
}
false znamená: žiadne šifrovanie alebo iba šifrovanie, na ktoré sa vzťahuje výnimka. Apple upresňuje, ž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š, až kým ju nepošleš na review:
- Otvor verziu v App Store Connect, sekcia Build.
- Prejdi myšou nad aktuálny build a klikni na tlačidlo odstránenia, znamienko mínus.
- 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: 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 a podpisovanie má vlastné pasce, opísané v článku iOS vývojársky certifikát a provisioning profile. Celý reťazec od buildu po TestFlight nájdeš v článku publikovanie iOS appky bez Macu a lehoty review v článku ako dlho trvá schválenie v App Store. Všetky kroky sú pokope na stránke publikovanie aplikácie v App Store.
Ak pripravuješ svoje prvé vydanie, sprav si bezplatnú diagnostiku: 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 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.

