App Thinning is een Apple-technologie die de grootte van de geïnstalleerde app verkleint door alleen de bronnen te leveren die nodig zijn voor het specifieke apparaat van de gebruiker. Volgens Apple Developer Documentation, 2026 omvat App Thinning drie mechanismen: Slicing, Bitcode en On-Demand Resources. Laten we elke component en de invloed ervan op de distributiegrootte bekijken.
Belangrijkste punten
App Thinning is een uitgebreide optimalisatietechnologie voor de distributie van iOS-apps, geïntroduceerd door Apple met iOS 9 (september 2015). Het doel van App Thinning is het minimaliseren van de grootte van de app die de gebruiker op zijn apparaat downloadt, zonder de broncode en functionaliteit te wijzigen. De technologie werkt op drie niveaus: tijdens het bouwen (compilatie), aan de kant van de App Store (levering) en op het apparaat (resourcebeheer).
Vóór de komst van App Thinning voegden ontwikkelaars bronnen voor alle mogelijke apparaten toe aan het binaire bestand — @2x- en @3x-afbeeldingen, 32-bits en 64-bits code, Metal-shaders voor verschillende GPU's. Dit leidde tot een opgeblazen app-grootte: een gebruiker van een iPhone 6 Plus met een Retina HD-scherm kreeg vectorbronnen voor de iPad Pro die nooit werden gebruikt. Apple loste dit probleem op door een deel van het bouwwerk naar de App Store-servers te verplaatsen.
Volgens onderzoek van Apple (WWDC 2015, Sessie 412) kan een typische app met ondersteuning voor meerdere architecturen en resoluties met 30-50% krimpen na toepassing van App Thinning. Voor games met veel zeer gedetailleerde texturen kan de winst oplopen tot 70-80%. Apple blijft de technologie verbeteren: in iOS 17 is optimalisatie voor ARM64e toegevoegd en is de werking met On-Demand Resources voor apps die Swift Package Manager gebruiken verbeterd.
De grootte van mobiele apps neemt voortdurend toe. Volgens gegevens van Sensor Tower (2025) is de gemiddelde grootte van een iOS-app in de afgelopen 5 jaar met 45% gestegen. Voor gebruikers met een beperkt data-abonnement of traag internet telt elke megabyte. App Thinning lost dit probleem op zonder tussenkomst van de ontwikkelaar — het volstaat om ondersteuning in te schakelen in de projectinstellingen en de build te uploaden naar App Store Connect.
Het App Thinning-proces begint na het uploaden van het app-archief naar App Store Connect. App Store analyseert het binaire bestand en splitst het in segmenten op basis van architecturen (armv7, arm64, arm64e), schermresoluties (iPhone, iPad) en iOS-versies. Voor elke combinatie wordt een aparte variant gemaakt. Wanneer de gebruiker op “Download” klikt, bepaalt de App Store het apparaatmodel, de iOS-versie en het verbindingstype (Wi-Fi / mobiel netwerk) en stuurt alleen de betreffende variant.
Voor de gebruiker is het proces transparant — er is geen keuze voor een “lichte versie” of een dialoogvenster met instellingen. App Store selecteert automatisch de meest geschikte variant op basis van de apparaatmetagegevens die bij de downloadaanvraag naar de server worden gestuurd. Als het apparaat Wi-Fi gebruikt, kan de App Store een variant met bronnen van hogere kwaliteit sturen (bijvoorbeeld ProRes-video voor iPhone 16 Pro). Bij downloaden via het mobiele netwerk wordt de minimaal mogelijke set gebruikt.
Het tweede optimalisatieniveau — Bitcode. Met de optie ENABLE_BITCODE ingeschakeld compileert Xcode de app niet naar machinecode, maar naar een tussenliggende LLVM-weergave. De App Store hercompileert Bitcode voor de specifieke processorarchitectuur van de gebruiker, waardoor Apple compileroptimalisaties kan toepassen voor nieuwe generaties chips (A17, M4) zonder dat de ontwikkelaar de app hoeft bij te werken. Bitcode is verplicht voor watchOS en tvOS, maar optioneel voor iOS.
App Thinning bestaat uit drie onafhankelijke mechanismen, die elk verantwoordelijk zijn voor hun eigen aspect van optimalisatie. Slicing splitst het binaire bestand in varianten op basis van architectuur en schermresolutie. De ontwikkelaar configureert Slicing via Asset Catalogs — Xcode neemt automatisch alleen die bronnen op in de slice die overeenkomen met het doelapparaat. Bijvoorbeeld: de iPhone SE (derde generatie) ontvangt alleen @2x-afbeeldingen en arm64-code, terwijl de iPad Pro M4 @3x-afbeeldingen en arm64e-code ontvangt.
Bitcode is LLVM IR (Intermediate Representation) — een machine-onafhankelijke weergave van het programma. Wanneer Bitcode is ingeschakeld, genereert Xcode geen definitieve machinecode, maar slaat het de tussenliggende weergave op. App Store Connect ontvangt bij het uploaden van de build de Bitcode en hercompileert deze voor de architecturen van alle ondersteunde apparaten. Bitcode stelt Apple in staat optimalisaties toe te passen die niet beschikbaar zijn tijdens de compilatie bij de ontwikkelaar — bijvoorbeeld het gebruik van nieuwe processorinstructies (SME, SVE) op M4-chips.
On-Demand Resources (ODR) — het derde mechanisme, waarmee app-bronnen na gebruik kunnen worden verwijderd. De ontwikkelaar markeert bronnen (spelniveaus, onboarding-afbeeldingen, video's) met ODR-tags. iOS laadt de gemarkeerde bronnen op aanvraag op de achtergrond en verwijdert ze bij geheugengebrek of na gebruik. ODR zijn vooral effectief voor games met veel inhoud — de eerste niveaus kunnen in de app worden meegeleverd en de rest worden geladen naarmate de speler vordert.
De keuze van App Thinning-mechanismen hangt af van het type app en de doelgroep. Slicing wordt aanbevolen om altijd in te schakelen — het vereist geen extra acties van de ontwikkelaar behalve een correcte organisatie van Asset Catalogs en geeft een stabiele groottevermindering van 20-30%. Bitcode is de moeite waard om in te schakelen als de app aangepaste Metal-shaders gebruikt of van plan is nieuwe Apple-architecturen te ondersteunen zonder herbouw. ODR is gerechtvaardigd voor apps met een grote hoeveelheid inhoud — games, fotobewerkers, streaming-apps.
Voor een typische zakelijke app (gegevensfeeds, formulieren, REST API) zijn Slicing en minimale ODR-configuratie voor onboarding-afbeeldingen voldoende. Games met 3D-graphics profiteren van alle drie de mechanismen: Slicing verwijdert overbodige shaders, Bitcode optimaliseert rendering voor de GPU en ODR verwijdert voltooide niveaus. Volgens Apple (WWDC 2024) vermindert de combinatie van alle drie de mechanismen de initiële installatiegrootte gemiddeld met 45-55% in vergelijking met een universeel binair bestand.
| Mechanisme | Wat het doet | Waar het werkt | Vereist actie van ontwikkelaar |
|---|---|---|---|
| Slicing | Verwijdert bronnen voor andere apparaten | App Store + apparaat | Asset Catalogs |
| Bitcode | Hercompilatie voor architectuur | App Store | ENABLE_BITCODE=YES |
| ODR | Bronnen op aanvraag laden | Apparaat | ODR-tags in project |
Om App Thinning in een Xcode-project in te schakelen, moeten een aantal stappen worden uitgevoerd. Slicing wordt geconfigureerd via App Thinning in de build-instellingen: Build Settings → App Thinning. Er zijn drie waarden beschikbaar: None (zonder optimalisatie), Automatic (standaard automatische configuratie) en Manual met selectie van specifieke varianten voor testen. Apple beveelt Automatic aan voor de meeste projecten.
Voor Asset Catalogs is een correcte organisatie van bronnen belangrijk: afbeeldingen worden in een universele catalogus geplaatst met opgave van breedte/hoogte, en Xcode maakt automatisch de @1x-, @2x- en @3x-varianten. Xcode neemt tijdens het bouwen alleen de resoluties op die in het project worden gebruikt. Metal-shaders worden apart gecompileerd voor elke GPU-familie — Apple GPU, PowerVR, Mali, wat ook via Asset Catalogs wordt beheerd.
Bitcode wordt ingeschakeld met de vlag ENABLE_BITCODE = YES in Build Settings. Voor iOS is deze vlag optioneel (standaard uitgeschakeld sinds Xcode 14), maar voor watchOS en tvOS is hij verplicht. Bij het inschakelen van Bitcode in een project dat gebruikmaakt van bibliotheken van derden, moeten deze allemaal ook met Bitcode zijn gebouwd, anders mislukt de build. Bitcode verhoogt de compilatietijd met 20-30%, maar zorgt voor volledige compatibiliteit met toekomstige architecturen.
Na uploaden naar App Store Connect kunt u de afmetingen van de slices controleren in het gedeelte Activity → Build Metric. App Store Connect toont de Estimated App Store Size voor verschillende apparaten. Voor lokale controle biedt Xcode het commando xcodebuild met de vlag -exportArchive en de optie thinning om slices op de lokale machine te maken. Het resultaat van Slicing is te zien in de Organizer (Window → Organizer) na archivering — het tabblad App Thinning Profiles toont de afmetingen voor verschillende apparaten.
# Lokale controle van Slicing
xcodebuild -exportArchive \
-archivePath "App.xcarchive" \
-exportPath "export/" \
-exportOptionsPlist "export.plist" \
-thinning "<thin-for-all-variants>"
Xcodebuild met de vlag -thinning maakt .app-bestanden voor elke combinatie van architectuur, bitheid en GPU. De parameter <thin-for-all-variants> maakt alle mogelijke varianten — handig voor controle. Voor CI-pijplijnen wordt een specifieke combinatie gebruikt, bijvoorbeeld iPhone14,4 (iPhone SE 3). De resulterende .app-bestanden kunnen worden geanalyseerd met het hulpprogramma app-size.
Het belangrijkste voordeel van App Thinning is vermindering van de downloadgrootte voor de eindgebruiker. Volgens Apple (WWDC 2024) wordt een typische app die gebruikmaakt van alle drie de App Thinning-mechanismen gemiddeld 40% sneller gedownload via het mobiele netwerk en neemt 35% minder schijfruimte in beslag. Dit heeft direct invloed op de conversie van installaties: volgens Sensor Tower vermindert elke 10 MB aan app-grootte de conversie met 1%.
Het tweede voordeel — optimalisatie voor toekomstige apparaten dankzij Bitcode. Apple kan Bitcode-apps hercompileren voor nieuwe architecturen zonder tussenkomst van de ontwikkelaar. Bijvoorbeeld bij de overgang van Intel naar Apple Silicon (M1) werkten Bitcode-apps op macOS via Rosetta 2 zonder extra compilatie. Ontwikkelaars die Bitcode niet hadden ingeschakeld, werden gedwongen hun apps opnieuw te bouwen voor arm64.
Het derde voordeel — ODR (On-Demand Resources) vermindert de belasting van de apparaatopslag. Games met tientallen niveaus, zoals Asphalt 8: Airborne, gebruiken ODR om nieuwe tracks te laden naarmate de speler vordert. De ontwikkelaar kan Initial Install Tags instellen voor bronnen die samen met de app worden geladen en Prefetch Tags voor inhoud die na installatie op de achtergrond wordt geladen. Apple beheert de ODR-limieten: tot 512 MB per verzoek en tot 20 GB totale cache op het apparaat.
App Thinning heeft een aantal belangrijke beperkingen waarmee rekening moet worden gehouden bij het ontwerpen van de app. Ten eerste wordt Slicing niet toegepast op apps die via Enterprise (in-house) of Ad Hoc worden gedistribueerd — deze builds bevatten alle varianten en gaan niet via de App Store. Voor het testen van Slicing kan de ontwikkelaar TestFlight gebruiken, dat Slicing aan de kant van de Apple-servers verwerkt.
Ten tweede verhoogt Bitcode de bouwtijd en de grootte van het .xcarchive-archief met ongeveer 30-50%. Niet alle bibliotheken van derden ondersteunen Bitcode — als ten minste één afhankelijkheid zonder Bitcode is gebouwd, zal de build van het project met ENABLE_BITCODE mislukken. Apple raadt aan de compatibiliteit van bibliotheken te controleren voordat Bitcode wordt ingeschakeld. Bovendien ondersteunt Bitcode Swift Package Manager niet volledig — sommige Swift-pakketten kunnen de Bitcode-build verstoren.
Ten derde garanderen On-Demand Resources geen onmiddellijke beschikbaarheid van inhoud — het laden van ODR vindt plaats op de achtergrond en kan worden uitgesteld als het apparaat zich in de modus voor lage batterij of zwak netwerksignaal bevindt. De ontwikkelaar moet de verwerking van ODR-laadstatussen implementeren via NSBundleResourceRequest en de gebruiker een voortgangsindicator tonen. Het mislukken van het laden van ODR mag de functionaliteit van de app niet blokkeren — een graceful fallback is noodzakelijk.
Veelgestelde vragen
Nee, App Thinning is niet verplicht. Een app zonder App Thinning wordt in de App Store geladen als één universeel binair bestand dat alle varianten van bronnen bevat. Apple raadt echter ten zeerste aan App Thinning in te schakelen, omdat dit de gebruikerservaring verbetert en de belasting van de App Store-servers vermindert.
Xcode Organizer toont de Estimated App Store Size voor verschillende apparaten na archivering. App Store Connect toont in het gedeelte Activity de exacte slice-afmetingen na het uploaden van de build. Gebruik voor lokale controle xcodebuild met de vlag -thinning.
Ja, App Thinning is volledig compatibel met SwiftUI. Slicing werkt met Asset Catalogs, die door SwiftUI worden gebruikt via Image en Color. Bitcode ondersteunt SwiftUI-projecten op voorwaarde dat alle afhankelijkheden ook met Bitcode zijn gebouwd. ODR wordt beheerd via NSBundleResourceRequest, onafhankelijk van het framework.
Slicing heeft geen invloed op de opstarttijd — verwijderde bronnen worden niet geladen. Bitcode kan de opstarttijd bij de eerste start enigszins verlengen vanwege JIT-compilatie. ODR kan de opstarttijd verlengen als bronnen met de tag Initial Install Tags nog niet zijn geladen. Apple raadt aan alleen kritiek belangrijke bronnen als Initial Install te markeren.
Als het project Bitcode vereist, maar de bibliotheek ondersteunt het niet — zijn er twee wegen: verwijder de bibliotheek uit het project en vind een Bitcode-compatibel alternatief, of schakel Bitcode uit voor een specifieke target via ENABLE_BITCODE in Build Settings. Apple staat het uitschakelen van Bitcode voor iOS toe, maar watchOS en tvOS vereisen verplichte ondersteuning.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook