App Thinning — co to je, z jakých komponentů se skládá a jak funguje

Autor: IT Sectr Publikováno: 2026-04-17 Doba čtení: 10 min

App Thinning je technologie Apple, která zmenšuje velikost instalované aplikace doručováním pouze těch zdrojů, které jsou nezbytné pro konkrétní zařízení uživatele. Podle Apple Developer Documentation, 2026 zahrnuje App Thinning tři mechanismy: Slicing, Bitcode a On-Demand Resources. Podívejme se na každou komponentu a její vliv na velikost distribuce.

Hlavní body

  • App Thinning — proces optimalizace velikosti iOS aplikace na straně App Store a zařízení
  • Slicing rozděluje binární soubor na varianty pro různé architektury procesoru a rozlišení obrazovek
  • Bitcode — mezireprezentace programu, kterou App Store překompiluje pro konkrétní zařízení
  • On-Demand Resources umožňují uvolnění zdrojů po použití, čímž uvolňují místo na zařízení
  • Velikost stahování se může snížit o 30-50% v závislosti na sadě zdrojů aplikace

Co je App Thinning

App Thinning je komplexní technologie optimalizace distribuce iOS aplikací, kterou Apple zavedl spolu s iOS 9 (září 2015). Cílem App Thinning je minimalizovat velikost aplikace, kterou uživatel stahuje do svého zařízení, aniž by se měnil zdrojový kód a funkčnost. Technologie funguje na třech úrovních: ve fázi sestavení (kompilace), na straně App Store (doručení) a na zařízení (správa zdrojů).

Před příchodem App Thinning vývojáři zahrnovali do binárního souboru zdroje pro všechna možná zařízení — obrázky @2x a @3x, 32bitový a 64bitový kód, Metal shadery pro různé GPU. To vedlo k nafouknutí velikosti aplikace: uživatel iPhonu 6 Plus s Retina HD displejem dostával vektorové zdroje pro iPad Pro, které nebyly nikdy použity. Apple tento problém vyřešil přesunem části práce na sestavení na servery App Store.

Podle výzkumu Apple (WWDC 2015, Relace 412) se typická aplikace s podporou více architektur a rozlišení může po aplikování App Thinning zmenšit o 30-50%. Pro hry s velkým množstvím vysoce detailních textur může úspora dosáhnout 70-80%. Apple technologii nadále vylepšuje: v iOS 17 byla přidána optimalizace pro ARM64e a zlepšena práce s On-Demand Resources pro aplikace používající Swift Package Manager.

Problém, který App Thinning řeší

Velikost mobilních aplikací neustále roste. Podle údajů Sensor Tower (2025) se průměrná velikost iOS aplikace za posledních 5 let zvýšila o 45%. Pro uživatele s omezeným datovým tarifem nebo pomalým internetem záleží na každém megabajtu. App Thinning řeší tento problém bez účasti vývojáře — stačí zapnout podporu v nastavení projektu a nahrát build do App Store Connect.

Jak funguje App Thinning

Proces App Thinning začíná po nahrání archivu aplikace do App Store Connect. App Store analyzuje binární soubor a rozděluje ho na segmenty podle architektur (armv7, arm64, arm64e), rozlišení obrazovek (iPhone, iPad) a verzí iOS. Pro každou kombinaci se vytváří samostatná varianta. Když uživatel klikne na „Stáhnout“, App Store určí model zařízení, verzi iOS a typ připojení (Wi-Fi / mobilní síť) a odešle pouze odpovídající variantu.

Pro uživatele je proces transparentní — není na výběr „lehká verze“ ani dialog s nastavením. App Store automaticky vybírá nejvhodnější variantu na základě metadat zařízení, která jsou serveru předána při požadavku na stažení. Pokud zařízení používá Wi-Fi, App Store může odeslat variantu s kvalitnějšími zdroji (např. ProRes video pro iPhone 16 Pro). Při stahování přes mobilní síť se používá minimální možná sada.

Druhá úroveň optimalizace — Bitcode. Při zapnuté možnosti ENABLE_BITCODE Xcode nekompiluje aplikaci do strojového kódu, ale do mezilehlé reprezentace LLVM. App Store překompiluje Bitcode pro konkrétní architekturu procesoru uživatele, což Applu umožňuje aplikovat optimalizace kompilátoru pro nové generace čipů (A17, M4) bez aktualizace aplikace vývojářem. Bitcode je povinný pro watchOS a tvOS, ale volitelný pro iOS.

Komponenty App Thinning: Slicing, Bitcode, ODR

App Thinning se skládá ze tří nezávislých mechanismů, z nichž každý je zodpovědný za svůj aspekt optimalizace. Slicing (krájení) rozděluje binární soubor na varianty podle architektury a rozlišení obrazovky. Vývojář konfiguruje Slicing přes Asset Catalogs — Xcode automaticky zahrnuje do výřezu pouze ty zdroje, které odpovídají cílovému zařízení. Například iPhone SE (třetí generace) obdrží pouze obrázky @2x a kód arm64, zatímco iPad Pro M4 — obrázky @3x a kód arm64e.

Bitcode je LLVM IR (Intermediate Representation) — strojově nezávislá reprezentace programu. Při zapnutí Bitcode Xcode negeneruje konečný strojový kód, ale ukládá mezilehlou reprezentaci. App Store Connect při nahrání buildu obdrží Bitcode a překompiluje ho pro architektury všech podporovaných zařízení. Bitcode umožňuje Applu aplikovat optimalizace nedostupné ve fázi kompilace u vývojáře — například použití nových instrukcí procesoru (SME, SVE) na čipech M4.

On-Demand Resources (ODR) — třetí mechanismus, který umožňuje uvolnění zdrojů aplikace po použití. Vývojář označuje zdroje (úrovně hry, obrázky pro onboarding, videa) ODR značkami. iOS načítá označené zdroje na vyžádání na pozadí a uvolňuje je při nedostatku paměti nebo po použití. ODR jsou zvláště účinné pro hry s velkým množstvím obsahu — první úrovně lze dodat v rámci aplikace a zbývající načítat postupem hry.

Kdy zvolit jednotlivé komponenty

Výběr mechanismů App Thinning závisí na typu aplikace a její cílové skupině. Slicing se doporučuje vždy zapnout — nevyžaduje další akce vývojáře kromě správné organizace Asset Catalogs a poskytuje stabilní snížení velikosti o 20-30%. Bitcode stojí za to zapnout, pokud aplikace používá vlastní Metal shadery nebo plánuje podporovat nové architektury Apple bez překompilování. ODR je opodstatněný pro aplikace s velkým objemem obsahu — hry, fotoeditory, streamovací aplikace.

Pro typickou obchodní aplikaci (datové kanály, formuláře, REST API) postačí Slicing a minimální konfigurace ODR pro obrázky onboardingu. Hry s 3D grafikou těží ze všech tří mechanismů: Slicing odstraňuje zbytečné shadery, Bitcode optimalizuje vykreslování pro GPU a ODR uvolňuje dokončené úrovně. Podle Apple (WWDC 2024) kombinace všech tří mechanismů snižuje počáteční velikost instalace v průměru o 45-55% ve srovnání s univerzálním binárním souborem.

MechanismusCo děláKde fungujeVyžaduje akci vývojáře
SlicingOdstraňuje zdroje pro jiná zařízeníApp Store + zařízeníAsset Catalogs
BitcodePřekompilování pro architekturuApp StoreENABLE_BITCODE=YES
ODRNačítání zdrojů na vyžádáníZařízeníODR značky v projektu

Nastavení App Thinning v Xcode

Pro zapnutí App Thinning v projektu Xcode je třeba provést několik kroků. Slicing se konfiguruje přes App Thinning v nastavení sestavení: Build Settings → App Thinning. K dispozici jsou tři hodnoty: None (bez optimalizace), Automatic (výchozí automatická konfigurace) a Manual s výběrem konkrétních variant pro testování. Apple doporučuje Automatic pro většinu projektů.

Pro Asset Catalogs je důležitá správná organizace zdrojů: obrázky se umísťují do univerzálního katalogu s uvedením šířky/výšky a Xcode automaticky vytváří varianty @1x, @2x a @3x. Xcode při sestavování zahrnuje pouze rozlišení používaná v projektu. Metal shadery jsou kompilovány zvlášť pro každou rodinu GPU — Apple GPU, PowerVR, Mali, což je také spravováno přes Asset Catalogs.

Bitcode se zapíná příznakem ENABLE_BITCODE = YES v Build Settings. Pro iOS je tento příznak volitelný (ve výchozím nastavení vypnutý od Xcode 14), ale pro watchOS a tvOS je povinný. Při zapnutí Bitcode v projektu využívajícím knihovny třetích stran musí být všechny také sestaveny s Bitcode, jinak sestavení skončí chybou. Bitcode zvyšuje dobu kompilace o 20-30%, ale zajišťuje plnou kompatibilitu s budoucími architekturami.

Kontrola výsledků App Thinning

Po nahrání do App Store Connect můžete zkontrolovat velikosti výřezů v sekci Activity → Build Metric. App Store Connect zobrazuje Estimated App Store Size pro různá zařízení. Pro místní kontrolu Xcode poskytuje příkaz xcodebuild s příznakem -exportArchive a možností thinning pro vytváření výřezů na lokálním počítači. Výsledek Slicing je vidět v Organizer (Window → Organizer) po archivaci — karta App Thinning Profiles zobrazuje velikosti pro různá zařízení.

bash
# Místní kontrola Slicing
xcodebuild -exportArchive \
  -archivePath "App.xcarchive" \
  -exportPath "export/" \
  -exportOptionsPlist "export.plist" \
  -thinning "<thin-for-all-variants>"

Xcodebuild s příznakem -thinning vytváří soubory .app pro každou kombinaci architektury, bitovosti a GPU. Parametr <thin-for-all-variants> vytváří všechny možné varianty — užitečné pro kontrolu. Pro CI pipeline se používá konkrétní kombinace, například iPhone14,4 (iPhone SE 3). Výsledné soubory .app lze analyzovat nástrojem app-size.

Výhody a dopad App Thinning

Hlavní výhodou App Thinning je snížení velikosti stahování pro koncového uživatele. Podle Apple (WWDC 2024) se typická aplikace využívající všechny tři mechanismy App Thinning stahuje v průměru o 40% rychleji přes mobilní síť a zabírá o 35% méně místa na disku. To přímo ovlivňuje konverzi instalace: podle Sensor Tower každých 10 MB velikosti aplikace snižuje konverzi o 1%.

Druhou výhodou je optimalizace pro budoucí zařízení díky Bitcode. Apple může překompilovat Bitcode aplikace pro nové architektury bez účasti vývojáře. Například při přechodu z Intel na Apple Silicon (M1) fungovaly Bitcode aplikace na macOS přes Rosetta 2 bez dodatečné kompilace. Vývojáři, kteří nezapnuli Bitcode, byli nuceni aplikace překompilovat pro arm64.

Třetí výhodou je, že ODR (On-Demand Resources) snižuje zatížení úložiště zařízení. Hry s desítkami úrovní, jako je Asphalt 8: Airborne, používají ODR k načítání nových tratí postupem hry. Vývojář může nastavit Initial Install Tags pro zdroje načítané spolu s aplikací a Prefetch Tags pro obsah načítaný na pozadí po instalaci. Apple kontroluje limity ODR: až 512 MB na požadavek a až 20 GB celkové mezipaměti na zařízení.

Omezení App Thinning

App Thinning má několik důležitých omezení, která je třeba zohlednit při návrhu aplikace. Za prvé, Slicing se nepoužívá u aplikací distribuovaných přes Enterprise (in-house) nebo Ad Hoc — tyto buildy obsahují všechny varianty a neprocházejí App Store. Pro testování Slicing může vývojář použít TestFlight, který také zpracovává Slicing na straně serverů Apple.

Za druhé, Bitcode zvyšuje dobu sestavení a velikost archivu .xcarchive přibližně o 30-50%. Ne všechny knihovny třetích stran podporují Bitcode — pokud je alespoň jedna závislost sestavena bez Bitcode, sestavení projektu s ENABLE_BITCODE skončí chybou. Apple doporučuje před zapnutím Bitcode zkontrolovat kompatibilitu knihoven. Kromě toho Bitcode plně nepodporuje Swift Package Manager — některé Swift balíčky mohou Bitcode sestavení narušit.

Za třetí, On-Demand Resources negarantují okamžitou dostupnost obsahu — načítání ODR probíhá na pozadí a může být zpožděno, pokud je zařízení v režimu nízké baterie nebo slabého síťového signálu. Vývojář musí implementovat zpracování stavů načítání ODR přes NSBundleResourceRequest a zobrazit uživateli indikátor průběhu. Selhání načítání ODR by nemělo blokovat funkčnost aplikace — je nutný graceful fallback.

Často kladené otázky

Je povinné zapnout App Thinning pro publikaci v App Store?

Ne, App Thinning není povinný. Aplikace bez App Thinning bude nahrána do App Store jako jediný univerzální binární soubor obsahující všechny varianty zdrojů. Nicméně Apple důrazně doporučuje zapnout App Thinning, protože zlepšuje uživatelský zážitek a snižuje zatížení serverů App Store.

Jak zkontrolovat velikost aplikace po App Thinning před publikací?

Xcode Organizer po archivaci zobrazuje Estimated App Store Size pro různá zařízení. App Store Connect v sekci Activity zobrazuje přesné velikosti výřezů po nahrání buildu. Pro místní kontrolu použijte xcodebuild s příznakem -thinning.

Podporuje App Thinning SwiftUI?

Ano, App Thinning je plně kompatibilní se SwiftUI. Slicing funguje s Asset Catalogs, které SwiftUI používá přes Image a Color. Bitcode podporuje SwiftUI projekty za předpokladu, že všechny závislosti jsou také sestaveny s Bitcode. ODR je spravováno přes NSBundleResourceRequest nezávisle na frameworku.

Ovlivňuje App Thinning dobu spouštění aplikace?

Slicing neovlivňuje dobu spouštění — odstraněné zdroje se nenačítají. Bitcode může mírně prodloužit dobu spouštění při prvním startu kvůli JIT kompilaci. ODR může prodloužit dobu spouštění, pokud zdroje se značkou Initial Install Tags ještě nebyly načteny. Apple doporučuje označovat pouze kriticky důležité zdroje jako Initial Install.

Co dělat, když knihovna třetí strany nepodporuje Bitcode?

Pokud projekt vyžaduje Bitcode, ale knihovna ho nepodporuje — dvě cesty: odeberte knihovnu z projektu a najděte alternativu kompatibilní s Bitcode, nebo vypněte Bitcode pro konkrétní target přes ENABLE_BITCODE v Build Settings. Apple povoluje vypnutí Bitcode pro iOS, ale watchOS a tvOS vyžadují povinnou podporu.

Shrnutí

  • App Thinning — komplexní technologie Apple pro zmenšování iOS aplikací pomocí Slicing, Bitcode a ODR
  • Slicing rozděluje binární soubor na varianty pro konkrétní architekturu a rozlišení obrazovky
  • Bitcode — reprezentace LLVM, kterou App Store překompiluje pro architekturu zařízení uživatele
  • On-Demand Resources umožňují načítání a uvolňování zdrojů na vyžádání, šetří místo na zařízení
  • Velikost stahování se snižuje o 30-50% při správné konfiguraci všech tří mechanismů
  • Xcode Organizer a App Store Connect poskytují nástroje pro kontrolu velikostí výřezů
  • Enterprise a Ad Hoc buildy neprocházejí Slicing — pouze App Store a TestFlight

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také