Slicing: mi ez, működési elv és kapcsolat az App Thinninggel

Szerző: IT Sectr Megjelenés: 2026-04-17 Olvasási idő: 11 perc

Slicing — az App Thinning egyik mechanizmusa, amelyben az App Store automatikusan több változatot hoz létre a bináris fájlból, mindegyik csak egy adott eszközmodell erőforrásait tartalmazza. A Apple Developer Documentation, 2026 szerint a Slicing kizárja a terjesztésből a nem támogatott konfigurációk erőforrásait, csökkentve a telepítés méretét. Tekintsük át a működési elvet, a vágási változatokat és az eredmények ellenőrzését.

Főbb pontok

  • Slicing — az alkalmazás bináris fájljának felosztása változatokra különböző architektúrák, felbontások és iOS verziók számára
  • App Store csak a felhasználó eszközének megfelelő erőforrásokat szállítja
  • Asset Catalogs — a fejlesztő fő eszköze a Slicingben részt vevő erőforrások kezelésére
  • GPU családok (Apple GPU, PowerVR, Mali) szintén figyelembe vannak véve a Metal shaderek vágásánál
  • Ellenőrzés az Xcode Organizer és App Store Connect Build Metrics segítségével történik

Mi az a Slicing

Slicing — az App Thinning komponense, amely felelős az alkalmazás bináris fájljának változatai (szeletei) létrehozásáért az App Store oldalán. Amikor a fejlesztő feltölt egy univerzális bináris fájlt (fat binary), amely az összes támogatott konfiguráció kódját és erőforrásait tartalmazza, az App Store elemzi azt és több szeletet generál: külön az A17 processzoros iPhone számára, külön az M4-es iPad számára, külön az Apple Watch számára. Minden szelet csak azokat a kódtöredékeket és erőforrásokat tartalmazza, amelyek szükségesek az adott architektúra és felbontás kombinációjához.

Az iOS 9 előtt a fejlesztők manuálisan hoztak létre külön bináris fájlokat különböző eszközökhöz, vagy egy univerzális fat binary-t szállítottak, amely mindent egyszerre tartalmazott. Slicing teljesen automatizálta ezt a folyamatot: a fejlesztő egy projektet készít az Xcode-ban, egy archívumot tölt fel az App Store Connectbe, és a Slicing a szerver oldalon létrehozza az optimális számú változatot. A felhasználó soha nem látja a vágási folyamatot — egy kész, az eszközére optimalizált .app-ot kap.

A Slicing nem csak a kódra és képekre alkalmazható, hanem a Metal shaderekre is. Az Apple GPU a saját utasításkészletét (Metal Shading Language) használja, amely eltér a PowerVR vagy ARM Mali utasításaitól. A Slicing csak a cél-eszköz GPU családjához tartozó shadereket foglalja bele a szeletbe. Ez különösen fontos az egyedi shaderekkel rendelkező játékoknál — például a részletes utófeldolgozási effektek csak az erős GPU-val rendelkező eszközökhöz (iPad Pro M4, iPhone 16 Pro Max) vannak lefordítva.

A Slicing és a szokásos architektúra szerinti fordítás közötti különbség

Az Xcode fordító fat binary-t hoz létre több architektúrával (armv7, arm64, arm64e), de nem távolítja el az erőforrásokat — az összes kép az összes felbontáshoz a .app-on belül marad. Slicing tovább megy: elemzi az Asset Catalogs-t, a Metal shadereket és a Swift könyvtárakat, eltávolítva minden szeletből azt, ami nem szükséges egy adott célhoz. Például az iPhone SE szeletéből nem kerül be a @3x grafika, az iPad Air szeletéből pedig az iPhone-specifikus vezérlők (ha külön erőforrásokba vannak kiszervezve).

Hogyan működik a Slicing

A Slicing folyamat a build App Store Connectbe történő feltöltése után indul el, és három szakaszból áll: elemzés, vágás és csomagolás. Az elemzés szakaszban az App Store szerver szétszedi a bináris fájlt, kinyeri belőle a támogatott architektúrákra, eszközökre, képernyőfelbontásokra és iOS verziókra vonatkozó információkat. Az App Store az összes kereskedelmi Apple modell műszaki specifikációkra való leképezését használja — az eszközadatbázis (Device Database) minden iOS kiadással frissül.

A vágás szakaszban a szerver külön másolatokat hoz létre a bináris fájlból minden egyedi kombinációhoz. Ehhez az App Store kinyeri az Asset Catalogs-ból a meghatározott címkékkel (idiom, subtype, scale) rendelkező képeket, kiválasztja csak azokat, amelyek megfelelnek a cél-eszköznek, és összeállít egy új erőforráscsomagot. A Swift szabványkönyvtár szintén vágás alá esik — az adott alkalmazás által nem használt szimbólumok és metódusok eltávolításra kerülnek belőle (dead code stripping).

A csomagolás szakaszban minden szelet egy külön terjesztési csomagba kerül és metaadatokhoz kapcsolódik — azon eszközmodellek listájához, amelyeknek ez a szelet szánt. App Store az alkalmazás letöltésekor a felhasználó által kiválasztja a megfelelő szeletet az eszközmodell, iOS verzió és kapcsolat típusa alapján. Ha nincs pontos egyezés, a szerver a specifikációkhoz legközelebbi szeletet használja. Az Apple az összes változatot a CloudKit CDN hálózatban tárolja a gyors világméretű szállításhoz.

Slicing az App Thinning kontextusában

A Slicing — az App Thinning három mechanizmusának egyike, de a legnagyobb mértékben járul hozzá a letöltési méret csökkentéséhez. Bitcode a gépi kód optimalizálásáért felelős, On-Demand Resources — az eszközön lévő erőforrások kezeléséért, a Slicing pedig — a felesleges erőforrások eltávolításáért a terjesztési szakaszban. Slicing nélkül az első két mechanizmus működik, de a felhasználók az összes eszköz erőforrásait megkapják, ami 20-40%-kal növeli a méretet az Asset Catalogs számától függően.

A különbség a Slicing és a Bitcode között az alkalmazási pontban van: a Slicing erőforrás szinten (képek, shaderek, NIB fájlok) működik, a Bitcode — gépi kód szinten. A Slicing a kódot architektúrák szerint osztja fel (arm64 vs arm64e), a Bitcode lehetővé teszi az Apple számára a kód újrafordítását új architektúrákhoz. Bitcode + Slicing együtt maximális optimalizálást nyújtanak: a Bitcode kódot generál egy adott architektúrához, a Slicing pedig eltávolítja a felesleges erőforrásokat ehhez az architektúrához.

Kapcsolat az On-Demand Resources szal — a Slicing és az ODR nem fedik egymást. A Slicing dönti el, hogy mely erőforrások kerülnek egyáltalán az eszközre történő terjesztésbe, az ODR pedig kezeli, hogy ezek az erőforrások mikor töltődnek be és ürülnek ki. A fejlesztő megjelölhet egy erőforrást ODR címkével, és a Slicing belefoglalja a szeletbe, ha az megfelel az eszköznek. Apple azt javasolja, hogy mindhárom mechanizmust egyszerre használjuk a minimális telepítési méret érdekében.

MechanizmusOptimalizálás tárgyaMikor alkalmazzákHatás a méretre
SlicingErőforrások (képek, shaderek)Az App Store oldalán~30% felesleges erőforrást távolít el
BitcodeGépi kódA felhasználó letöltésekorKód optimalizálása architektúrához
ODRErőforrások az eszközönTelepítés után40-60%-kal csökkenti a kezdeti méretet

Slicing változatok különböző eszközökhöz

A Slicing külön szeleteket hoz létre több dimenzió mentén: processzorarchitektúra, képernyőméret (felbontás), iOS verzió és GPU család (Metal esetén). Architektúra meghatározza a CPU utasításkészletét: arm64 — alap 64 bites készlet (iPhone 5s — iPhone X), arm64e — kiterjesztett készlet Pointer Authentication és PAC támogatással (iPhone XS és újabb, A12X+ -szal rendelkező iPad Pro). Az arm64e szelet olyan memóriavédelmi utasításokkal rendelkező kódot tartalmaz, amelyek arm64 eszközökön nem elérhetők.

Képernyő felbontása — a Slicing második kulcsfontosságú dimenziója. Az Apple @1x (iPhone 3GS), @2x (iPhone 4 — iPhone SE 3), @3x (iPhone 6 Plus és újabb) skálákat, valamint iPad-specifikus (2x és 3x további metrikákkal) skálákat használ. A Slicing csak a cél-eszköznek megfelelő skálájú képeket foglalja a szeletbe. Az Asset Catalogs helyes szervezésével az Xcode-ban ez kiküszöböli az erőforráskészletek manuális kezelésének szükségességét — elegendő a képet hozzáadni a katalógushoz, megadva a támogatott eszköztípusokat.

GPU család — a harmadik dimenzió, kritikus a Metal alkalmazások számára. Az Apple a GPU-kat generációk szerint osztályozza: Apple GPU family 1 (A7), family 2 (A8), ... family 8 (M4). A Metal shaderek minden családhoz külön vannak lefordítva, mivel a Metal Shading Language utasításkészlete minden GPU generációval bővül. A Slicing csak a cél-eszköz GPU családjához tartozó shadereket foglalja a szeletbe, ami jelentősen csökkenti a Metal-t rendereléshez használó játékok és alkalmazások méretét.

Az architektúra hatása a szelet méretére

CPU architektúra közvetlenül befolyásolja a szelet méretét: az arm64e kód további Pointer Authentication (PAC) és Signed Return Address utasításokat tartalmaz, amelyek 5-10%-kal növelik a bináris fájlt az arm64-hez képest. Ezt a növekedést azonban kompenzálja, hogy a Slicing az arm64e kódot csak az A12+ processzorral rendelkező eszközök szeleteibe foglalja bele. Az iPhone SE (harmadik generáció) A15 Bionic-kal a Slicing egy külön, a chip képességeihez optimalizált szeletet hoz létre.

Slicing konfigurálása az Xcode-ban

A Slicing konfigurálása az Xcode-ban minimális — a fő konfiguráció az Asset Catalogs és Build Settings segítségével történik. Asset Catalog tartalmazza az eszköztípusok (Any, iPhone, iPad, Apple Watch, Apple TV) szerint szervezett erőforrásokat a skála és megjelenítési mód helyes megadásával. Az Xcode automatikusan csak azokat az erőforrásokat foglalja a fordításba, amelyek megfelelnek a Deployment Target beállításokban megadott céleszközöknek.

A Slicing kulcsbeállítása az Xcode-ban — Build Setting App Thinning. Elérhető értékek:

  • None — Slicing kikapcsolva, az alkalmazás universal fat binary-ként kerül szállításra
  • Automatic — Xcode bekapcsolja a Slicing-et alapértelmezett beállításokkal
  • Manual — a fejlesztő kiválaszt konkrét kombinációkat a Slicing számára
Az App Store-ban való közzétételhez használja az Automatic-ot. A Manual mód hasznos az egyes szeletek teszteléséhez egy helyi eszközön.

Targeted Device Families a General → Deployment Info részben határozza meg, hogy az alkalmazás milyen eszköztípusokhoz készül (iPhone / iPad / Universal). A Slicing erre a paraméterre támaszkodik a vágáskor — ha az alkalmazás csak iPhone-t támogat, az iPadhez tartozó szelet nem jön létre. Deployment Target (minimális iOS verzió) szintén hatással van a Slicing-re: a régi iOS verziókhoz armv7 szeletekre lehet szükség, amelyek iOS 13+ esetén nem szükségesek. Az Apple azt javasolja, hogy a Deployment Target-ot a legújabb stabil iOS verzióra állítsa — ez csökkenti a szeletek számát és a bináris fájl méretét.

Asset Catalog paraméterek a Slicing számára

A maximális Slicing hatékonyság érdekében az Asset Catalogs-nak specifikus címkéket kell használnia minden erőforráshoz. Xcode az Attributes Inspector-ban biztosítja a képekhez: Width Class (Any, Compact, Regular), Height Class (Any, Compact, Regular), Gamut (sRGB, Display P3), Memory (Any, Low, High), Graphics (Any, Low, High). E címkék kombinálásával a fejlesztő szabályozza, hogy az egyes képek mely szeletekbe kerüljenek. Például egy iPad-hez készült kép Regular Width + Regular Height címkével csak az iPad-hez tartozó szeletekbe kerül landscape tájolásban.

bash
# Szelet exportálása adott eszközhöz
xcodebuild -exportArchive \
  -archivePath "App.xcarchive" \
  -exportPath "sliced/" \
  -exportOptionsPlist "export.plist" \
  -thinning "iPhone17,2" # iPhone 16 Pro Max

Xcodebuild a -thinning paraméterrel és modell azonosítóval csak ahhoz a modellhez hoz létre szeletet. Az azonosítók listája megtalálható az Apple Device Database-ben (formátum: iPhone17,2 — iPhone 16 Pro Max, iPad14,1 — iPad Pro 11 M4). Ez a módszer hasznos a szelet méretének ellenőrzéséhez az App Store Connectbe küldés előtt. CI/CD használhatja ezt a parancsot automatikus ellenőrzésre — ha a szelet mérete meghaladja a határértéket (pl. 100 MB mobil letöltés esetén), a pipeline figyelmeztetést ad ki.

Slicing eredményeinek ellenőrzése

Az archívum App Store Connectbe történő feltöltése után az Apple részletes statisztikákat nyújt a szeletek méreteiről. App Store Connect → Activity → válassza ki a build-et → App Thinning — megjeleníti az Estimated App Store Size-t minden eszközkategóriához: iPhone, iPad, Apple Watch, tvOS. A méretek iOS verziók és processzortípusok szerint vannak felosztva. Ha egy szelet meghaladja a várható méretet, az App Store Connect sárga figyelmeztetéssel jelöli.

Helyi ellenőrzés az Xcode Organizer segítségével: archiválás után nyissa meg a Window → Organizer-t, válassza ki az archívumot, és kattintson az App Thinning Profiles gombra. Az Xcode megmutatja a méreteket minden lehetséges szelethez a projekt aktuális konfigurációja alapján. Elérhető az Export opció is egy adott Slicing profillal rendelkező IPA létrehozásához. Xcode létrehozza a .app-thinning.plist fájlt, amely információt tartalmaz arról, hogy mely erőforrások kerültek az egyes szeletekbe.

A Slicing ellenőrzésének automatizálásához CI/CD-ben használja az xcodebuild-et -thinning paraméterrel, és elemezze a létrehozott .app fájlok méretét. Apple biztosítja az app-size parancssori eszközt (az Xcode Command Line Tools-on keresztül telepíthető), amely részletes jelentést ad ki: kód mérete, erőforrások mérete kategóriánként (képek, shaderek, NIB), Swift könyvtárak mérete. Az Asset Catalogs optimalizálása előtti és utáni szeletméretek összehasonlítása segít azonosítani azokat az erőforrásokat, amelyek a helytelen konfiguráció miatt nem vesznek részt a Slicing-ben.

bash
# Szelet méretének elemzése
app-size -m "sliced/App.app" \
  --format json

App-size JSON jelentést ad ki az erőforráskategóriák szerinti bontásban. Ha a Slicing helyesen van beállítva, a „images” szakaszban csak egy skálakészlet (@2x vagy @3x) lesz, nem az összes változat. Az Asset Catalogs konfigurációs hibája abban nyilvánul meg, hogy az összes skála (@1x, @2x, @3x) jelen van a szeletben — ez azt jelenti, hogy az Xcode nem tudta meghatározni a céleszközt ezekhez a képekhez, és a Slicing nem működött.

Gyakran ismételt kérdések

Befolyásolja-e a Slicing a TestFlight-on keresztül terjesztett alkalmazásokat?

Igen, a TestFlight szintén támogatja a Slicing-et. Amikor a tesztelő letölti az alkalmazást a TestFlight-on keresztül, az Apple szerver a tesztelő eszközére optimalizált szeletet szállít. App Store Connect automatikusan kezeli a Slicing-et az összes terjesztéshez, beleértve a TestFlight-ot is, kivéve az Enterprise és Ad Hoc build-eket.

Kikapcsolható a Slicing egy adott erőforráshoz?

Igen, az Asset Catalogs-ban minden képnél eltávolíthatók a jelölők bizonyos eszköztípusokhoz. Xcode lehetővé teszi az Attributes Inspector-ban, hogy megadja, mely Idiom (iPhone, iPad, Apple Watch, Mac) és skálák esetén kell az erőforrást belefoglalni. Ha az erőforrás minden eszközhöz szükséges, használja a Universal-t bármilyen skálával.

Hogyan működik a Slicing egyedi keretrendszerekkel?

Az egyedi keretrendszerek (.framework) szintén részt vesznek a Slicing-ben, ha XCFramework-ként (több architektúrával) vannak lefordítva. App Store csak a keretrendszer azon architektúráját foglalja a szeletbe, amely megfelel a céleszköznek. A statikus könyvtárak (.a) nem esnek Slicing alá — teljes egészében beágyazódnak a bináris fájlba.

Miért különbözik az App Store build mérete az Xcode Organizer-ben látható mérettől?

Xcode Organizer az estimated size-t — becsült méretet mutatja anélkül, hogy figyelembe venné a tényleges vágást az Apple szerverein. Az App Store Connect a Slicing utáni valós méretet jeleníti meg, amely 10-15%-kal kisebb lehet a becsültnél, mivel a szerver további optimalizálásokat (LZFSE, Zstandard tömörítési algoritmusok) alkalmaz, amelyek helyben nem elérhetők.

Támogatja a Slicing a SwiftUI erőforrásokat?

Igen, a Slicing teljes mértékben kompatibilis a SwiftUI-val. Asset Catalogs a SwiftUI által az Image, Color, SymbolImage típusokon keresztül használatos. A Slicing vonatkozik a vektoros és raszteres képekre, az SF Symbols szimbólumokra és a Metal shaderekre, függetlenül attól, hogy a felület építéséhez SwiftUI-t vagy UIKit-et használnak.

Összefoglalás

  • Slicing — a bináris fájl vágásának mechanizmusa az App Store oldalán, amely eltávolítja a felesleges erőforrásokat egy adott eszközhöz
  • Három dimenzió vágás: CPU architektúra (arm64/arm64e), képernyő felbontás (@2x/@3x) és GPU család (Metal)
  • Asset Catalogs — a fő eszköz a Slicing-ben részt vevő erőforrások kezelésére
  • App Store csak az eszközmodellnek, iOS verzióknak és kapcsolat típusának megfelelő erőforrásokat szállítja
  • Xcode Organizer és App Store Connect mutatják a szeletméreteket az összes támogatott konfigurációhoz
  • App-size eszköz az Xcode CL Tools-ból lehetővé teszi a Slicing hatékonyságának ellenőrzését CI/CD-ben
  • TestFlight szintén támogatja a Slicing-et, ellentétben az Enterprise és Ad Hoc terjesztéssel

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is