TakéVerzování aplikace, Číslo verze, Version number, VersioningZákladní

Definice

Verze aplikace je identifikátor konkrétního vydaného stavu softwaru, obvykle číslo typu 2.4.1, které odlišuje jedno vydání od druhého. Slouží k tomu, aby uživatel, obchod s aplikacemi i podpora poznali, jakou sadu funkcí a oprav má daný build, a aby šlo bezpečně řešit kompatibilitu a návrat k předchozímu vydání.

Kategorie: Softwarový vývojAktualizováno

Než se na to spolehnete: Zdroj developer.android.com není na povoleném seznamu domén (povoleno je developers.google.com), server ho pravděpodobně zahodí; případně nahradit odkazem na developers.google.com. Detaily postupu při stažení vadné verze z App Store a Google Play se v čase mění, formulace v FAQ je proto obecná.

Co číslo verze vlastně sděluje

Verze aplikace je smlouva mezi tím, kdo software vydává, a tím, kdo ho používá nebo na něj navazuje. Nejrozšířenější konvencí je sémantické verzování ve tvaru MAJOR.MINOR.PATCH: zvýšení první složky ohlašuje změnu, která rozbije stávající použití, druhá složka přidává funkce zpětně kompatibilně a třetí opravuje chyby. Existují i jiné systémy, například kalendářní verzování (2025.4), kde číslo nese informaci o době vydání, ne o povaze změn.

Dvě čísla u mobilních aplikací

Mobilní platformy rozlišují verzi pro uživatele a verzi pro obchod. Android má versionName (text, který vidí člověk) a versionCode (celé číslo, které musí u každého nahraného buildu růst). iOS má obdobně CFBundleShortVersionString a CFBundleVersion. Google Play ani App Store nepřijmou build se stejným nebo nižším interním číslem, i kdyby se uživatelská verze nezměnila. Právě proto se interní číslo často generuje automaticky z čísla buildu v CI/CD pipeline.

Proč na verzi závisí kompatibilita

Aplikace málokdy žije sama. Mobilní klient mluví s API, které se vyvíjí vlastním tempem, a v terénu jsou současně staré i nové instalace. Verze proto slouží jako rozhodovací klíč: server může odmítnout klienta pod určitou hranicí, poslat mu výzvu k aktualizaci nebo mu vrátit starší tvar odpovědi. Stejnou roli hraje verze u knihoven, kde balíčkovací nástroje podle rozsahů verzí řeší, které vydání se nainstaluje.

Vydání versus build

Vydání je to, co dostane uživatel, build je jedna konkrétní kompilace zdrojového kódu. Z jednoho vydání může vzniknout deset buildů, než projde testy. Praxe je taková, že vydání identifikuje sémantická verze, kdežto build doplňuje hash commitu nebo pořadové číslo, aby šlo dohledat přesný stav repozitáře.

Kanály vydání

Kromě samotného čísla se používají předvydání označená příponou, například 3.0.0-beta.2. Podle konvence platí, že předvydání je nižší než finální 3.0.0, takže nástroje ho samy nenabídnou uživatelům stabilního kanálu.

Kde se verze v projektu drží

Zdroj pravdy by měl být jeden. Typicky jde o package.json, soubor s projektovým nastavením nebo git tag, a všechna ostatní místa (aplikační manifest, patička webu, hlavička odesílaná do API) se z něj odvozují při sestavení. Ruční přepisování verze na třech místech vede k tomu, že hlášení chyby od uživatele odkazuje na verzi, která nikdy neexistovala.

Vazba na provoz a podporu

Verze je nejlevnější diagnostický údaj, jaký lze mít. Když crash reporting, logy i chybová hlášení nesou přesnou verzi a hash buildu, zúží se hledání příčiny z celého kódu na jeden konkrétní rozdíl mezi dvěma vydáními. Zároveň verze určuje, kam se lze vrátit: rollback na předchozí známé dobré vydání je bez spolehlivého značení jen odhad.

Příklady z praxe

  1. Nucená aktualizace mobilního klienta

    Backend změní tvar odpovědi u plateb a starší klienti by na ní spadli. Server proto podle hlavičky s verzí klienta rozhodne, zda pustí požadavek dál, nebo vrátí odpověď, po které aplikace zobrazí obrazovku s výzvou k aktualizaci. Hranice se drží v konfiguraci, aby se dala měnit bez nasazení nové verze serveru.

    // Express middleware: minimální podporovaná verze klienta
    const MIN = [2, 4, 0];
    
    app.use((req, res, next) => {
      const v = (req.get('X-App-Version') || '0.0.0')
        .split('.').map(Number);
      const tooOld = v[0] < MIN[0]
        || (v[0] === MIN[0] && v[1] < MIN[1]);
      if (tooOld) {
        return res.status(426).json({ code: 'UPGRADE_REQUIRED' });
      }
      next();
    });
  2. Odvození verze pro Android z jednoho zdroje

    Tým drží verzi jen v package.json a build ji dopočítá. versionName se převezme beze změny, versionCode se složí z čísla běhu pipeline, takže při každém nahrání do Google Play roste. Odpadá tím situace, kdy vývojář zapomene číslo zvýšit a obchod build odmítne až po dvaceti minutách nahrávání.

    def appVersion = new groovy.json.JsonSlurper()
        .parse(file("../package.json")).version
    
    android {
        defaultConfig {
            versionName appVersion
            versionCode (System.getenv("BUILD_NUMBER") ?: "1").toInteger()
        }
    }

Časté omyly

MýtusVerze 1.0 znamená, že produkt je hotový a stabilní.
Ve skutečnostiČíslo 1.0 říká jen to, že vydavatel začal považovat rozhraní za veřejné a bude u něj sledovat zpětnou kompatibilitu. O kvalitě, počtu chyb ani vyzrálosti produktu nevypovídá nic.
MýtusKdyž se změní jen pár řádků, stačí zvýšit poslední číslo.
Ve skutečnostiRozhoduje dopad změny, ne její velikost. Jednořádková úprava, která přejmenuje pole v odpovědi API, je rozbíjející změna a patří do hlavní složky verze, zatímco tisíc řádků refaktoringu bez změny chování může být klidně patch.
MýtusUživatelská verze v obchodě a interní číslo buildu jsou totéž.
Ve skutečnostiGoogle Play i App Store pracují se dvěma údaji: čitelný název verze a interní číslo, které musí monotónně růst. Stejný uživatelský název verze lze nahrát vícekrát, ale jen s novým interním číslem.

Časté dotazy

Jak často by se měla verze aplikace zvyšovat?
Verze aplikace se mění při každém vydání, které se dostane mimo vývojový tým. U mobilních aplikací to bývá jednou za jeden až čtyři týdny, u webových služeb s průběžným nasazováním klidně několikrát denně. Rozumné pravidlo zní, že každý build nahraný do obchodu nebo na produkci má vlastní jednoznačné označení. Frekvence sama o sobě není cíl: důležité je, aby se každé vydání dalo zpětně identifikovat, dohledat v repozitáři a v případě problému vrátit zpět na předchozí známé funkční vydání.
Kdo v týmu rozhoduje o zvýšení hlavního čísla verze?
Rozhodnutí o zvýšení hlavního čísla verze má typicky technický vlastník daného rozhraní, tedy tech lead nebo architekt, ve spolupráci s produktem. Kritérium je technické: existuje změna, po které přestane fungovat dosavadní použití API, formát dat nebo integrace partnera? Marketing občas tlačí na verzi 2.0 kvůli komunikaci velkého redesignu, což je legitimní u aplikace pro koncové uživatele, ale u knihovny nebo veřejného API to mate závislé týmy. U veřejných rozhraní by měl mít poslední slovo technický posudek dopadu.
Co dělat, když už je verze aplikace nahraná v obchodě a obsahuje chybu?
Nahranou verzi aplikace v obchodě obvykle nelze opravit na místě. Postup je zastavit rozšiřování postupného vydávání, pokud běží, a připravit opravné vydání se zvýšenou poslední složkou verze. U Google Play lze u postupného vydávání zastavit distribuci a znovu propagovat předchozí vydání, u App Store se používá odstranění verze z prodeje a rychlé schválení opravy. Serverovou část problému lze často zmírnit okamžitě, například vypnutím dotčené funkce přes feature flag, než se oprava dostane k uživatelům.
Musí mít verze aplikace tři čísla?
Verze aplikace nemusí mít tři čísla, tři složky vyžaduje jen sémantické verzování. V praxi se používá i kalendářní verzování ve tvaru rok.měsíc nebo rok.číslo vydání, jednoduché pořadové číslo buildu, případně kombinace obojího. Volba schématu závisí na tom, co má číslo sdělovat: u knihovny, na kterou navazují jiné týmy, nese hlavní hodnotu informace o zpětné kompatibilitě, u aplikace pro koncové uživatele spíš informace o stáří vydání. Podstatné je držet zvolené schéma konzistentně a zdokumentovat ho.

Zdroje

  1. Software versioning(otevře se v novém okně)Wikipedia
  2. Git - Tagging(otevře se v novém okně)Git

Související pojmy

Potřebujete to vyřešit v praxi?

Poradíme, jak na to ve vašem projektu

Vysvětlit pojem je jedna věc, navrhnout kolem něj funkční řešení druhá. Ozvěte se a probereme, co dává smysl u vás.