Slicing: co to je, princip fungování a souvislost s App Thinning

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

Slicing — je mechanismus App Thinning, při kterém App Store automaticky vytváří několik variant binárního souboru, každá obsahuje zdroje pouze pro konkrétní model zařízení. Podle Apple Developer Documentation, 2026 Slicing vylučuje z distribuce zdroje pro nepodporované konfigurace a zmenšuje velikost instalace. Rozebereme princip fungování, varianty řezání a kontrolu výsledků.

Hlavní body

  • Slicing — rozdělení binárního souboru aplikace na varianty pro různé architektury, rozlišení a verze iOS
  • App Store doručuje uživateli pouze zdroje odpovídající jeho zařízení
  • Asset Catalogs — hlavní nástroj vývojáře pro správu zdrojů účastnících se Slicing
  • GPU rodiny (Apple GPU, PowerVR, Mali) jsou také brány v úvahu při řezání Metal shaderů
  • Kontrola výřezů se provádí přes Xcode Organizer a App Store Connect Build Metrics

Co je Slicing

Slicing — je komponenta App Thinning odpovědná za vytváření variant (výřezů) binárního souboru aplikace na straně App Store. Když vývojář nahraje univerzální binární soubor (fat binary) obsahující kód a zdroje pro všechny podporované konfigurace, App Store jej analyzuje a vygeneruje několik výřezů: zvlášť pro iPhone s procesorem A17, zvlášť pro iPad s M4, zvlášť pro Apple Watch. Každý výřez obsahuje pouze ty fragmenty kódu a zdroje, které jsou potřebné pro tuto konkrétní kombinaci architektury a rozlišení.

Před iOS 9 vývojáři ručně vytvářeli samostatné binární soubory pro různá zařízení nebo dodávali univerzální fat binary obsahující vše najednou. Slicing tento proces zcela automatizoval: vývojář připraví jeden projekt v Xcode, nahraje jeden archiv do App Store Connect a Slicing na straně serveru vytvoří optimální počet variant. Uživatel nikdy nevidí proces řezání — dostává hotový .app optimalizovaný pro své zařízení.

Slicing se aplikuje nejen na kód a obrázky, ale také na Metal shadery. Apple GPU používá vlastní sadu instrukcí (Metal Shading Language), která se liší od instrukcí PowerVR nebo ARM Mali. Slicing zahrnuje do výřezu pouze shadery pro GPU rodinu cílového zařízení. To je zvláště důležité pro hry s vlastními shadery — například vysoce detailní efekty post-procesingu jsou kompilovány pouze pro zařízení s výkonným GPU (iPad Pro M4, iPhone 16 Pro Max).

Rozdíl mezi Slicing a běžnou kompilací pro architekturu

Kompilátor Xcode vytváří fat binary s několika architekturami (armv7, arm64, arm64e), ale neodstraňuje zdroje — všechny obrázky pro všechna rozlišení zůstávají uvnitř .app. Slicing jde dále: analyzuje Asset Catalogs, Metal shadery a Swift knihovny, odstraňuje z každého výřezu to, co není potřeba pro konkrétní účel. Například z výřezu pro iPhone SE nevstupuje grafika @3x a z výřezu pro iPad Air — iPhone-specifické ovladače (pokud jsou vyčleněny do samostatných zdrojů).

Jak funguje Slicing

Proces Slicing se spouští po nahrání buildu do App Store Connect a sestává ze tří fází: analýza, řezání a balení. Ve fázi analýzy server App Store rozebírá binární soubor, extrahuje z něj informace o podporovaných architekturách, zařízeních, rozlišeních obrazovek a verzích iOS. App Store používá mapování všech komerčních modelů Apple na jejich technické specifikace — databáze zařízení (Device Database) se aktualizuje s každým vydáním iOS.

Ve fázi řezání server vytváří samostatné kopie binárního souboru pro každou unikátní kombinaci. K tomu App Store extrahuje z Asset Catalogs obrázky s konkrétními tagy (idiom, subtype, scale), vybírá pouze ty, které odpovídají cílovému zařízení, a sestavuje nový balík zdrojů. Standardní knihovna Swift také podléhá řezání — odstraňují se z ní symboly a metody nepoužívané konkrétní aplikací (dead code stripping).

Ve fázi balení je každý výřez umístěn do samostatného distribučního balíčku a spojen s metadaty — seznam modelů zařízení, pro které je tento výřez určen. App Store při stahování aplikace uživatelem vybírá vhodný výřez podle modelu zařízení, verze iOS a typu připojení. Pokud neexistuje přesná shoda, server použije nejbližší výřez podle specifikací. Apple ukládá všechny varianty v síti CDN CloudKit pro rychlé doručení po celém světě.

Slicing v kontextu App Thinning

Slicing — je jedním ze tří mechanismů App Thinning, ale přináší největší příspěvek ke snížení velikosti stahování. Bitcode je odpovědný za optimalizaci strojového kódu, On-Demand Resources — za správu zdrojů na zařízení a Slicing — za odstranění nadbytečných zdrojů ve fázi distribuce. Bez Slicing první dva mechanismy fungují, ale uživatelé dostávají zdroje pro všechna zařízení, což zvětšuje velikost o 20-40% v závislosti na počtu Asset Catalogs.

Rozdíl mezi Slicing a Bitcode je v bodě aplikace: Slicing pracuje na úrovni zdrojů (obrázky, shadery, NIB soubory), Bitcode — na úrovni strojového kódu. Slicing dělí kód podle architektur (arm64 vs arm64e), Bitcode umožňuje Apple překompilovat kód pro nové architektury. Bitcode + Slicing dohromady poskytují maximální optimalizaci: Bitcode generuje kód pro konkrétní architekturu a Slicing odstraňuje nadbytečné zdroje pro tuto architekturu.

Vztah s On-Demand Resources — Slicing a ODR se nepřekrývají. Slicing rozhoduje, které zdroje vůbec vstoupí do distribuce na zařízení, a ODR řídí, kdy se tyto zdroje načtou a uvolní. Vývojář může označit zdroj tagem ODR a Slicing jej zahrne do výřezu, pokud odpovídá zařízení. Apple doporučuje používat všechny tři mechanismy současně pro minimální velikost instalace.

MechanismusObjekt optimalizaceKdy se aplikujeEfekt na velikost
SlicingZdroje (obrázky, shadery)Na straně App StoreOdstraňuje ~30% nadbytečných zdrojů
BitcodeStrojový kódPři stahování uživatelemOptimalizace kódu pro architekturu
ODRZdroje na zařízeníPo instalaciSnižuje počáteční velikost o 40-60%

Varianty Slicing pro různá zařízení

Slicing vytváří samostatné výřezy podle několika dimenzí: architektura procesoru, velikost obrazovky (rozlišení), verze iOS a rodina GPU (pro Metal). Architektura určuje sadu instrukcí CPU: arm64 — základní 64bitová sada (iPhone 5s — iPhone X), arm64e — rozšířená sada s podporou Pointer Authentication a PAC (iPhone XS a novější, iPad Pro s A12X+). Výřez pro arm64e obsahuje kód s instrukcemi ochrany paměti nedostupnými na zařízeních arm64.

Rozlišení obrazovky — druhá klíčová dimenze Slicing. Apple používá měřítka @1x (iPhone 3GS), @2x (iPhone 4 — iPhone SE 3), @3x (iPhone 6 Plus a novější) a specifické pro iPad (2x a 3x s dodatečnými metrikami). Slicing zahrnuje do výřezu pouze obrázky s měřítkem odpovídajícím cílovému zařízení. Při správné organizaci Asset Catalogs v Xcode to eliminuje potřebu ruční správy sad zdrojů — stačí přidat obrázek do katalogu s uvedením podporovaných typů zařízení.

Rodina GPU — třetí dimenze, kritická pro Metal aplikace. Apple používá klasifikaci GPU podle generací: Apple GPU family 1 (A7), family 2 (A8), ... family 8 (M4). Metal shadery jsou kompilovány pro každou rodinu zvlášť, protože sada instrukcí Metal Shading Language se rozšiřuje s každou generací GPU. Slicing zahrnuje do výřezu pouze shadery pro GPU rodinu cílového zařízení, což výrazně snižuje velikost her a aplikací používajících Metal pro vykreslování.

Vliv architektury na velikost výřezu

Architektura CPU přímo ovlivňuje velikost výřezu: kód arm64e obsahuje dodatečné instrukce Pointer Authentication (PAC) a Signed Return Address, které zvětšují binární soubor o 5-10% ve srovnání s arm64. Toto zvýšení je však kompenzováno skutečností, že Slicing zahrnuje kód arm64e pouze do výřezů pro zařízení s procesory A12+. Pro iPhone SE (třetí generace) s A15 Bionic vytváří Slicing samostatný výřez optimalizovaný pro možnosti tohoto čipu.

Konfigurace Slicing v Xcode

Konfigurace Slicing v Xcode je minimální — hlavní konfigurace se provádí přes Asset Catalogs a Build Settings. Asset Catalog by měl obsahovat zdroje organizované podle typů zařízení (Any, iPhone, iPad, Apple Watch, Apple TV) se správným uvedením měřítka a režimu zobrazení. Xcode automaticky zahrnuje do kompilace pouze ty zdroje, které odpovídají cílovým zařízením uvedeným v nastavení Deployment Target.

Klíčové nastavení Slicing v Xcode — Build Setting App Thinning. Dostupné hodnoty:

  • None — Slicing je vypnutý, aplikace je dodávána jako universal fat binary
  • Automatic — Xcode zapíná Slicing s výchozím nastavením
  • Manual — vývojář vybírá konkrétní kombinace pro Slicing
Pro publikaci v App Store použijte Automatic. Manuální režim je užitečný pro testování konkrétních výřezů na lokálním zařízení.

Targeted Device Families v General → Deployment Info určuje, pro jaké typy zařízení se aplikace sestavuje (iPhone / iPad / Universal). Slicing se při řezání spoléhá na tento parametr — pokud aplikace podporuje pouze iPhone, výřez pro iPad se nevytváří. Deployment Target (minimální verze iOS) také ovlivňuje Slicing: pro staré verze iOS mohou být vyžadovány výřezy armv7, které nejsou potřeba pro iOS 13+. Apple doporučuje nastavit Deployment Target na nejnovější stabilní verzi iOS — to snižuje počet výřezů a velikost binárního souboru.

Parametry Asset Catalog pro Slicing

Pro maximální účinnost Slicing by Asset Catalogs měly používat specifické tagy pro každý zdroj. Xcode poskytuje v Attributes Inspector pro obrázky: Width Class (Any, Compact, Regular), Height Class (Any, Compact, Regular), Gamut (sRGB, Display P3), Memory (Any, Low, High), Graphics (Any, Low, High). Kombinací těchto tagů vývojář řídí, do kterých výřezů se každý obrázek dostane. Například obrázek pro iPad s tagem Regular Width + Regular Height se dostane pouze do výřezů pro iPad v landscape orientaci.

bash
# Export výřezu pro konkrétní zařízení
xcodebuild -exportArchive \
  -archivePath "App.xcarchive" \
  -exportPath "sliced/" \
  -exportOptionsPlist "export.plist" \
  -thinning "iPhone17,2" # iPhone 16 Pro Max

Xcodebuild s parametrem -thinning a identifikátorem modelu vytváří výřez pouze pro tento model. Seznam identifikátorů lze najít v Apple Device Database (formát: iPhone17,2 — iPhone 16 Pro Max, iPad14,1 — iPad Pro 11 M4). Tato metoda je užitečná pro kontrolu velikosti výřezu před odesláním do App Store Connect. CI/CD může tento příkaz použít pro automatické ověření — pokud velikost výřezu překračuje limit (např. 100 MB pro mobilní stahování), pipeline vydá varování.

Kontrola výsledků Slicing

Po nahrání archivu do App Store Connect poskytuje Apple podrobné statistiky o velikostech výřezů. App Store Connect → Activity → vyberte build → App Thinning — zobrazuje Estimated App Store Size pro každou kategorii zařízení: iPhone, iPad, Apple Watch, tvOS. Velikosti jsou rozděleny podle verzí iOS a typů procesorů. Pokud některý výřez překračuje očekávanou velikost, App Store Connect jej označí žlutým varováním.

Lokální kontrola přes Xcode Organizer: po archivaci otevřete Window → Organizer, vyberte archiv a klikněte na App Thinning Profiles. Xcode zobrazí velikosti pro každý možný výřez na základě aktuální konfigurace projektu. K dispozici je také možnost Export pro vytvoření IPA s konkrétním profilem Slicing. Xcode generuje soubor .app-thinning.plist s informacemi o tom, které zdroje vstoupily do každého výřezu.

Pro automatizaci kontroly Slicing v CI/CD použijte xcodebuild s -thinning a analyzujte velikost vytvořených .app souborů. Apple poskytuje nástroj příkazového řádku app-size (instaluje se přes Xcode Command Line Tools), který vypisuje podrobnou zprávu: velikost kódu, velikost zdrojů podle kategorií (obrázky, shadery, NIB), velikost Swift knihoven. Porovnání velikostí výřezů před a po optimalizaci Asset Catalogs pomáhá identifikovat zdroje, které se neúčastní Slicing kvůli nesprávné konfiguraci.

bash
# Analýza velikosti výřezu
app-size -m "sliced/App.app" \
  --format json

App-size vypisuje JSON zprávu s rozdělením podle kategorií zdrojů. Pokud je Slicing správně nakonfigurován, v sekci „images” bude pouze jedna sada měřítek (@2x nebo @3x), ne všechny varianty. Chyba konfigurace Asset Catalogs se projevuje tím, že všechna měřítka (@1x, @2x, @3x) jsou přítomna ve výřezu — to znamená, že Xcode nedokázal určit cílové zařízení pro tyto obrázky a Slicing nefungoval.

Často kladené otázky

Ovlivňuje Slicing aplikace distribuované přes TestFlight?

Ano, TestFlight také podporuje Slicing. Když tester stahuje aplikaci přes TestFlight, server Apple doručuje výřez optimalizovaný pro zařízení testera. App Store Connect automaticky zpracovává Slicing pro všechny distribuce včetně TestFlight, s výjimkou Enterprise a Ad Hoc sestavení.

Lze vypnout Slicing pro konkrétní zdroj?

Ano, v Asset Catalogs pro každý obrázek lze odškrtnout příznaky pro určité typy zařízení. Xcode umožňuje v Attributes Inspector určit, pro které Idiom (iPhone, iPad, Apple Watch, Mac) a měřítka má být zdroj zahrnut. Pokud zdroj potřebují všechna zařízení, použijte Universal s libovolným měřítkem.

Jak funguje Slicing s vlastními frameworky?

Vlastní frameworky (.framework) se také účastní Slicing, pokud jsou zkompilovány jako XCFramework (s několika architekturami). App Store zahrnuje do výřezu pouze tu architekturu frameworku, která odpovídá cílovému zařízení. Statické knihovny (.a) nepodléhají Slicing — jsou vloženy do binárního souboru celé.

Proč se velikost App Store buildu liší od velikosti v Xcode Organizer?

Xcode Organizer zobrazuje estimated size — odhadovanou velikost bez zohlednění skutečného řezání na serverech Apple. App Store Connect zobrazuje skutečnou velikost po Slicing, která může být o 10-15% menší než odhad, protože server aplikuje dodatečné optimalizace (kompresní algoritmy LZFSE, Zstandard) nedostupné lokálně.

Podporuje Slicing SwiftUI zdroje?

Ano, Slicing je plně kompatibilní se SwiftUI. Asset Catalogs jsou používány SwiftUI prostřednictvím typů Image, Color, SymbolImage. Slicing se aplikuje na vektorové a rastrové obrázky, symboly SF Symbols a Metal shadery bez ohledu na to, zda je pro tvorbu rozhraní použit SwiftUI nebo UIKit.

Shrnutí

  • Slicing — mechanismus řezání binárního souboru na straně App Store odstraňující nadbytečné zdroje pro konkrétní zařízení
  • Tři dimenze řezání: architektura CPU (arm64/arm64e), rozlišení obrazovky (@2x/@3x) a rodina GPU (Metal)
  • Asset Catalogs — hlavní nástroj pro správu zdrojů účastnících se Slicing
  • App Store doručuje pouze zdroje odpovídající modelu zařízení, verzi iOS a typu připojení
  • Xcode Organizer a App Store Connect zobrazují velikosti výřezů pro všechny podporované konfigurace
  • App-size nástroj z Xcode CL Tools umožňuje kontrolu účinnosti Slicing v CI/CD
  • TestFlight také podporuje Slicing, na rozdíl od Enterprise a Ad Hoc distribuce

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é