Build number v App Store Connect: verze a číslo buildu
Autor: Mehdi Azizi
Publikováno , 8 min
Verzi vidí tvoji zákazníci, build number označuje každé nahrání. Jejich dvojice musí být unikátní. S Expem ti EAS číslo buildu zvýší samo.
Build number v App Store Connect je číslo buildu: klíč CFBundleVersion, který označuje každé nahrání. Verze, CFBundleShortVersionString, je číslo, které tvoji zákazníci vidí v App Storu. Apple vyžaduje, aby dvojice verze a čísla buildu byla unikátní: jedno číslo buildu můžeš pro stejnou verzi použít jen jednou.
S Expem si verzi nastavuješ sám a EAS může číslo buildu zvýšit u každého produkčního buildu. Tenhle návod vysvětluje obě čísla, pravidla Applu, chyby ITMS-90062 a ITMS-90189 a co zkontrolovat, když se ti build neobjeví.
Svoje iOS appky vydávám přes Expo a EAS, mimo jiné Solys, TradaZen a Nolera. Nastavení, která uvidíš níže, jsou z jejich souborů eas.json.
Verze a číslo buildu: jaký je rozdíl?
Tvoji appku identifikují dva klíče v Info.plist. Dokumentace Applu k CFBundleShortVersionString ji popisuje jako verzi viditelnou pro uživatele: tři celá čísla oddělená tečkami, třeba 10.14.1. Ta k CFBundleVersion mluví o verzi buildu: jedno až tři celá čísla, jen číslice a tečky.
| Položka | Klíč v iOS | Kdo ji vidí | Pole v Expu |
|---|---|---|---|
| Verze | CFBundleShortVersionString | Tvoji zákazníci | version |
| Číslo buildu | CFBundleVersion | Ty a Apple | ios.buildNumber |
Smyšlený příklad: pro verzi 1.4.0 během testování nahraješ buildy 12, 13 a 14 a pak jeden z nich vybereš pro review. Nápověda App Store Connect to shrnuje takhle: verze build přiřazuje k jeho záznamu, číslo buildu ho identifikuje všude v systému.
Pravidla Applu pro zvyšování čísel
- Dvojice musí být unikátní. Podle dokumentace Xcode Cloud App Store Connect vyžaduje unikátní kombinaci verze a čísla buildu. Appka pro iPhone tedy může u nové verze začít znovu od 1. Appka pro Mac ne: její číslo musí pořád růst.
- Schválená verze je uzavřená. Jakmile Apple schválí verzi 1.4.0, už k ní nemůžeš přidat build. Další musí mít vyšší číslo.
- Každé číslo se porovnává jako celé číslo. 1.10 je až po 1.9, protože 10 je víc než 9. Verze 1.9 nahraná po schválené 1.20 bude zamítnuta.
Moje rada: drž si celočíselné číslo buildu, které pořád roste, a nevracej ho na 1. Začít znovu od 1 je na iPhonu povolené, ale unikátní číslo po celý život appky ti ušetří zmatek se dvěma buildy v TestFlightu. Přesně to vidím u svých appek ve vzdáleném režimu: počítadlo pokračuje z verze na verzi.
Verze a build s Expem a EAS
Stránka Expa o verzích, aktualizovaná 25. září 2026, role odděluje. Verze (version v app.json) zůstává na tobě: měníš ji, když chystáš nové vydání. Číslo buildu (ios.buildNumber) můžeš svěřit EAS. Expo mimochodem uvádí, že zapomenuté zvýšení je častý důvod odmítnutí při nahrávání.
Všechno se nastavuje v eas.json:
{
"cli": {
"appVersionSource": "remote"
},
"build": {
"production": {
"autoIncrement": true
}
}
}
"remote": číslo buildu drží servery EAS. Od EAS CLI 12 je to doporučené chování. Počítadlo začne od hodnoty z tvé konfigurace, nebo od 1, a pak seios.buildNumberignoruje."local": rozhoduje tvoje konfigurace. SautoIncrementEAS upravíios.buildNumberv tvém souboru a tu změnu musíš při každém buildu commitnout.autoIncrement: reference eas.json přijímátruenebo"buildNumber"pro build a"version"pro zvýšení poslední číslice verze. Expo upozorňuje, že ve vzdáleném režimu"version"podporované není.
U mě jsou TradaZen a Nolera v remote. Solys zůstala v local: její číslo buildu žije v app.json a každý produkční build ho v souboru zvýší. Fungují oba režimy, ale vzdálený odstraňuje riziko zapomenutého commitu.
Celé to doplňují dva příkazy. eas build:version:set inicializuje vzdálené počítadlo: zadej poslední číslo, které jsi poslal Applu. eas build:version:sync zkopíruje vzdálené hodnoty do tvého projektu, což se hodí, pokud někdy budeš kompilovat v Xcode. S EAS Update vzdálený režim nefunguje s politikou nativeVersion: Expo doporučuje appVersion.
ITMS-90062: verze už je schválená
Zpráva vypadá zhruba takhle (smyšlená čí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ž verzi 1.4.0 schválil: build k ní přidat nemůžeš. Zvyš verzi v app.json, třeba na 1.4.1, a spusť build znovu. Změnit jen číslo buildu nestačí.
Pokud se chyba vrací, i když je version aktuální, hledej pole ios.version. Podle reference konfigurace Expa má pro iOS přednost před version. Stejné řešení platí pro příbuznou chybu ITMS-90186, „Invalid Pre-Release Train“, která hlásí verzi uzavřenou pro nové buildy.
ITMS-90189: Redundant Binary Upload
Tady se zasekne číslo buildu:
ERROR ITMS-90189: Redundant Binary Upload. You've already uploaded
a build with build number '12' for version number '1.4.0'.
Dvojice 1.4.0 (12) už u Applu existuje. S Expem se opakují čtyři příčiny:
- Použitý profil nemá
autoIncrement. Pokud si vytvoříš samostatný profil pro TestFlight, jako ten u Nolery, přidej do něj tu volbu znovu. - Vzdálené počítadlo je pozadu. Na
remotejsi přešel po ručních nahráních: spusťeas build:version:sets posledním číslem, které Apple zná. - V lokálním režimu jsi zapomněl commit. Další build pak začne ze starého čísla.
- Posíláš znovu stejnou binárku. U
eas submitvyber nový build, ne ten starý.
Oprava je vždycky stejná: nový build s vyšším číslem.
„No builds available“: tvůj build se neobjevuje
Build odešel, ale tvůj záznam ho nenabízí. Zkontroluj v tomhle pořadí.
- Pořád se zpracovává. Apple každý build před zobrazením zpracuje a na konci ti pošle e-mail. Expo obvykle mluví o 10 až 15 minutách. Podle Applu je potřeba po víc než 24 hodinách zpracování otevřít ticket ve Feedback Assistantu.
- Čeká na tvoje prohlášení o šifrování. To je stav Missing Compliance, popsaný níž.
- Verze nesedí. Build ve verzi 1.4.1 se nezařadí pod záznam připravený pro 1.5.0 v App Store Connect. Sjednoť je.
- Mezitím vyšla nějaká verze. Podle nápovědy k výběru buildu seznam pak ukazuje jen buildy nahrané od tohoto vydání.
- Nevidí ho tester. V appce TestFlight „no builds available“ často znamená, že build není v žádné skupině, čeká na beta review nebo vypršel. Podrobnosti najdeš v článku TestFlight pro testování tvé appky pro iPhone.
Stavy, které je dobré znát
Stavy, které nejčastěji vysvětlují chybějící build, podle seznamu Applu. Processing a Failed v něm nejsou: jsou to stavy nahrávání popsané v přehledu buildů.
| Stav | Co znamená | Tvoje oprava |
|---|---|---|
| Processing | Apple build zpracovává | Počkat na e-mail |
| Failed | Chyba při zpracování | Přečíst chybu, poslat znovu |
| Missing Compliance | Šifrování nebylo deklarováno | Odpovědět nebo Info.plist |
| Invalid Binary | Nahrání nesplňuje pravidla | Opravit, nový build |
| Expired | Překročeno 90 dní | Nový build |
| Ready to Submit | Připraven na test nebo review | Přidat do skupiny |
Deklaruj šifrování jednou provždy
Bez klíče ITSAppUsesNonExemptEncryption se tě Apple na otázky ohledně souladu ptá u každé nové verze. V Expu se pole jmenuje ios.config.usesNonExemptEncryption:
{
"expo": {
"ios": {
"config": {
"usesNonExemptEncryption": false
}
}
}
}
false znamená: žádné šifrování, nebo jen šifrování s výjimkou. Apple upřesňuje, že šifrování zabudované v systému, jako připojení přes HTTPS, má obvykle výjimku a že odpověď se týká i tvých knihoven. Všechny tři moje appky deklarují false. false nastav jen tehdy, když to pro tvoji appku platí: za prohlášení odpovídáš.
Dá se změnit číslo už nahraného buildu?
Ne. Číslo je zapsané v podepsané binárce: pro opravu potřebuješ nový build.
Změnit můžeš build přiřazený k tvé verzi. Apple povoluje jen jeden build na verzi, ale můžeš ho vyměnit, kolikrát chceš, dokud ho nepošleš na review:
- Otevři verzi v App Store Connect, sekce Build.
- Najeď myší na aktuální build a klikni na tlačítko odebrání, znaménko minus.
- Klikni na tlačítko přidání, znaménko plus, vyber správný build a ulož.
Odebráním buildu z verze ho ze svého účtu nesmažeš. Pokud už verze je v review, nejdřív stáhni odeslání: review pak začne od nuly.
Před dalším nahráním
Číslo buildu je jen jedna z kontrol při nahrávání. Image buildu může vyvolat ITMS-90725 a podepisování má vlastní pasti, popsané v článku vývojářský certifikát iOS a provisioning profile. Celý řetězec od buildu po TestFlight najdeš v článku vydání iOS appky bez Macu a doby review v článku jak dlouho trvá schválení v App Storu. Všechny kroky jsou pohromadě na stránce jak vydat aplikaci v App Storu.
Pokud chystáš své první vydání, udělej si bezplatnou diagnostiku: řekne ti, co v projektu blokuje, a pošle ti můj checklist proti zamítnutí od Applu. Na stavbu appky, napojení předplatného a vydání tě iOS & Android Kit provede ve čtyřech krocích se Starter Code mých appek, vlastním tempem.
Časté dotazy
Jaký je rozdíl mezi verzí a build number v App Store Connect?
Verze je veřejné číslo tvého vydání, třeba 1.4.0. Build number identifikuje konkrétní binárku nahranou do Applu pro tuhle verzi. Pro jednu verzi můžeš nahrát víc buildů, každý s vlastním číslem.
Musím číslo buildu měnit při každém nahrání?
Ano, u stejné verze. Apple odmítne druhé nahrání se stejnou dvojicí verze a čísla buildu, to je chyba ITMS-90189. S EAS to u každého produkčního buildu vyřeší autoIncrement.
Má číslo buildu u každé verze začínat znovu od 1?
Není to povinné. Na iPhonu Apple u nové verze přijme i nižší číslo, protože unikátní musí být jen dvojice. Počítadlo, které pořád roste, se ale sleduje snáz.
Jak změnit build number v App Store Connect?
Číslo už nahraného buildu změnit nemůžeš. Můžeš ale vyměnit build přiřazený k tvé verzi v sekci Build záznamu, dokud není v review. Pro nové číslo udělej nový build.
Proč se můj build v App Store Connect neobjevuje?
Nejčastěji se ještě zpracovává nebo čeká na tvoje prohlášení o šifrování. Zkontroluj taky, že jeho verze odpovídá verzi tvého záznamu. Po víc než 24 hodinách zpracování Apple žádá otevřít ticket.

