App Thinning — шта је то, од којих компоненти се састоји и како функционише

Аутор: IT Sectr Објављено: 2026-04-17 Време читања: 10 мин

App Thinning је Apple технологија која смањује величину инсталиране апликације испоруком само оних ресурса који су потребни за одређени уређај корисника. Према Apple Developer Documentation, 2026, App Thinning укључује три механизма: Slicing, Bitcode и On-Demand Resources. Размотримо сваку компоненту и њен утицај на величину дистрибуције.

Главни закључци

  • App Thinning — процес оптимизације величине iOS апликације на страни App Store-а и уређаја
  • Slicing дели бинарну датотеку на варијанте за различите архитектуре процесора и резолуције екрана
  • Bitcode — средњи приказ програма који App Store прекомпајлира за одређени уређај
  • On-Demand Resources омогућавају истовар ресурса након употребе, ослобађајући простор на уређају
  • Величина преузимања се може смањити за 30-50% у зависности од скупа ресурса апликације

Шта је App Thinning

App Thinning је комплексна технологија оптимизације дистрибуције iOS апликација, коју је Apple увео заједно са iOS 9 (септембар 2015). Циљ App Thinning-а је минимизирање величине апликације коју корисник преузима на свој уређај, без промене изворног кода и функционалности. Технологија ради на три нивоа: у фази компајлирања, на страни App Store-а (испорука) и на уређају (управљање ресурсима).

Пре појаве App Thinning-а, програмери су у бинарну датотеку укључивали ресурсе за све могуће уређаје — слике @2x и @3x, 32-битни и 64-битни код, Metal сенчере за различите GPU-ове. То је доводило до повећања величине апликације: корисник iPhone-а 6 Plus са Retina HD екраном добијао је векторске ресурсе за iPad Pro који никада нису коришћени. Apple је решио овај проблем преношењем дела посла компајлирања на сервере App Store-а.

Према истраживањима Apple-а (WWDC 2015, Сесија 412), типична апликација са подршком за више архитектура и резолуција може се смањити за 30-50% након примене App Thinning-а. За игре са великим бројем високодетаљних текстура, добит може достићи 70-80%. Apple наставља да унапређује технологију: у iOS 17 додата је оптимизација за ARM64e и побољшан рад са On-Demand Resources за апликације које користе Swift Package Manager.

Проблем који App Thinning решава

Величина мобилних апликација стално расте. Према подацима Sensor Tower (2025), просечна величина iOS апликације порасла је за 45% у последњих 5 година. За кориснике са ограниченим тарифним планом или спорим интернетом, сваки мегабајт је битан. App Thinning решава овај проблем без учешћа програмера — довољно је укључити подршку у подешавањима пројекта и отпремити билд у App Store Connect.

Како функционише App Thinning

Процес App Thinning-а почиње након отпремања архиве апликације у App Store Connect. App Store анализира бинарну датотеку и дели је на сегменте по архитектурама (armv7, arm64, arm64e), резолуцијама екрана (iPhone, iPad) и верзијама iOS-а. За сваку комбинацију креира се посебна варијанта. Када корисник кликне „Преузми", App Store одређује модел уређаја, верзију iOS-а и тип везе (Wi-Fi / мобилна мрежа) и шаље само одговарајућу варијанту.

За корисника процес је транспарентан — нема избора „лаке верзије" или дијалога са подешавањима. App Store аутоматски бира најприкладнију варијанту на основу метаподатака уређаја који се преносе серверу при захтеву за преузимање. Ако уређај користи Wi-Fi, App Store може послати варијанту са ресурсима вишег квалитета (нпр. ProRes видео за iPhone 16 Pro). При преузимању преко мобилне мреже користи се минимално могући скуп.

Други ниво оптимизације — Bitcode. Са укљученом опцијом ENABLE_BITCODE, Xcode компајлира апликацију не у машински код, већ у средњи LLVM приказ. App Store прекомпајлира Bitcode за одређену архитектуру процесора корисника, што омогућава Apple-у да примењује оптимизације компајлера за нове генерације чипова (A17, M4) без ажурирања апликације од стране програмера. Bitcode је обавезан за watchOS и tvOS, али опционалан за iOS.

Компоненте App Thinning-а: Slicing, Bitcode, ODR

App Thinning се састоји од три независна механизма, од којих је сваки одговоран за свој аспект оптимизације. Slicing (сечење) дели бинарну датотеку на варијанте по архитектури и резолуцији екрана. Програмер подешава Slicing кроз Asset Catalogs — Xcode аутоматски укључује у исечак само оне ресурсе који одговарају циљном уређају. На пример, iPhone SE (треће генерације) ће добити само @2x слике и arm64 код, а iPad Pro M4 — @3x слике и arm64e код.

Bitcode је LLVM IR (Intermediate Representation) — машински независтан приказ програма. При укључивању Bitcode-а, Xcode не генерише коначни машински код, већ чува средњи приказ. App Store Connect при отпремању билда добија Bitcode и прекомпајлира га за архитектуре свих подржаних уређаја. Bitcode омогућава Apple-у да примењује оптимизације недоступне у фази компајлирања код програмера — на пример, коришћење нових инструкција процесора (SME, SVE) на M4 чиповима.

On-Demand Resources (ODR) — трећи механизам који омогућава истовар ресурса апликације након употребе. Програмер означава ресурсе (нивои игре, слике за onboarding, видео) ODR ознакама. iOS учитава означене ресурсе по потреби у позадини и истоварује их при недостатку меморије или након употребе. ODR су посебно ефикасни за игре са великом количином садржаја — први нивои се могу испоручити у саставу апликације, а остали се учитавају како играч напредује.

Када изабрати сваку компоненту

Избор механизама App Thinning-а зависи од типа апликације и њене циљне публике. Slicing се препоручује увек укључити — не захтева додатне радње програмера осим правилне организације Asset Catalogs-а и даје стабилно смањење величине од 20-30%. Bitcode вреди укључити ако апликација користи прилагођене Metal сенчере или планира да подржи нове Apple архитектуре без прекомпајлирања. ODR је оправдан за апликације са великом количином садржаја — игре, фото-едитори, апликације за стриминг.

За типичну пословну апликацију (токови података, форме, REST API) довољни су Slicing и минимално подешавање ODR-а за onboarding слике. Игре са 3D графиком имају користи од сва три механизма: Slicing уклања непотребне сенчере, Bitcode оптимизује рендеровање за GPU, а ODR истоварује завршене нивое. Према Apple-у (WWDC 2024), комбинација сва три механизма смањује почетну величину инсталације у просеку за 45-55% у поређењу са универзалном бинарном датотеком.

МеханизамШта радиГде радиЗахтева радње програмера
SlicingУклања ресурсе за друге уређајеApp Store + уређајAsset Catalogs
BitcodeПрекомпајлирање за архитектуруApp StoreENABLE_BITCODE=YES
ODRУчитавање ресурса по потребиУређајODR ознаке у пројекту

Подешавање App Thinning-а у Xcode-у

Да бисте укључили App Thinning у Xcode пројекту, потребно је извршити неколико корака. Slicing се подешава кроз App Thinning у подешавањима компајлирања: Build Settings → App Thinning. Dostupne su три вредности: None (без оптимизације), Automatic (аутоматско подешавање подразумевано) и Manual са избором одређених варијанти за тестирање. Apple препоручује Automatic за већину пројеката.

За Asset Catalogs важно је правилно организовати ресурсе: слике се постављају у универзални каталог са навођењем ширине/висине, а Xcode аутоматски креира @1x, @2x и @3x варијанте. Xcode при компајлирању укључује само оне резолуције које се користе у пројекту. Metal сенчери се компајлирају одвојено за сваку GPU породицу — Apple GPU, PowerVR, Mali, што се такође управља кроз Asset Catalogs.

Bitcode се укључује флагом ENABLE_BITCODE = YES у Build Settings. За iOS овај флаг је опционалан (подразумевано искључен од Xcode 14), али за watchOS и tvOS је обавезан. При укључивању Bitcode-а у пројекту који користи библиотеке трећих страна, све оне такође морају бити компајлиране са Bitcode-ом, иначе ће компајлирање завршити грешком. Bitcode повећава време компајлирања за 20-30%, али обезбеђује потпуну компатибилност са будућим архитектурама.

Провера резултата App Thinning-а

Након отпремања у App Store Connect, можете проверити величине исечака у секцији Activity → Build Metric. App Store Connect приказује Estimated App Store Size за различите уређаје. За локалну проверу, Xcode пружа команду xcodebuild са флагом -exportArchive и опцијом thinning за креирање исечака на локалној машини. Резултат Slicing-а се може видети у Organizer-у (Window → Organizer) након архивирања — картица App Thinning Profiles приказује величине за различите уређаје.

bash
# Локална провера Slicing-а
xcodebuild -exportArchive \
  -archivePath "App.xcarchive" \
  -exportPath "export/" \
  -exportOptionsPlist "export.plist" \
  -thinning "<thin-for-all-variants>"

Xcodebuild са флагом -thinning креира .app датотеке за сваку комбинацију архитектуре, битности и GPU-а. Параметар <thin-for-all-variants> креира све могуће варијанте — корисно за проверу. За CI pipeline-ове користи се одређена комбинација, на пример iPhone14,4 (iPhone SE 3). Резултујуће .app датотеке могу се анализирати алатком app-size.

Предности и утицај App Thinning-а

Главна предност App Thinning-а је смањење величине преузимања за крајњег корисника. Према Apple-у (WWDC 2024), типична апликација која користи сва три механизма App Thinning-а преузима се у просеку 40% брже преко мобилне мреже и заузима 35% мање простора на диску. To директно утиче на конверзију инсталације: према Sensor Tower-у, сваких 10 MB величине апликације смањује конверзију за 1%.

Друга предност — оптимизација за будуће уређаје захваљујући Bitcode-у. Apple може прекомпајлирати Bitcode апликације за нове архитектуре без учешћа програмера. На пример, при преласку са Intel на Apple Silicon (M1), Bitcode апликације су радиле на macOS-у преко Rosetta 2 без додатног компајлирања. Програмери који нису укључили Bitcode били су приморани да прекомпајлирају апликације за arm64.

Трећа предност — ODR (On-Demand Resources) смањује оптерећење на меморију уређаја. Игре са десетинама нивоа, попут Asphalt 8: Airborne, користе ODR за учитавање нових стаза како играч напредује. Програмер може поставити ознаке Initial Install Tags за ресурсе који се учитавају заједно са апликацијом и Prefetch Tags за садржај који се учитава у позадини након инсталације. Apple контролише ODR лимите: до 512 MB по захтеву и до 20 GB укупног кеша на уређају.

Ограничења App Thinning-а

App Thinning има неколико важних ограничења која се морају узети у обзир при пројектовању апликације. Прво, Slicing се не примењује на апликације које се дистрибуирају путем Enterprise (in-house) или Ad Hoc — ови билдови садрже све варијанте и не пролазе кроз App Store. За тестирање Slicing-а, програмер може користити TestFlight, који такође обрађује Slicing на страни Apple сервера.

Друго, Bitcode повећава време компајлирања и величину архиве .xcarchive за приближно 30-50%. Не све библиотеке трећих страна подржавају Bitcode — ако је бар једна зависност компајлирана без Bitcode-а, компајлирање пројекта са ENABLE_BITCODE завршиће грешком. Apple препоручује проверу компатибилности библиотека пре укључивања Bitcode-а. Поред тога, Bitcode не подржава Swift Package Manager у потпуности — неки Swift пакети могу покварити Bitcode компајлирање.

Треће, On-Demand Resources не гарантују тренутну доступност садржаја — ODR учитавање се одвија у позадини и може бити одложено ако је уређај у режиму ниске батерије или слабог сигнала мреже. Програмер мора имплементирати обраду статуса ODR учитавања путем NSBundleResourceRequest-а и приказати кориснику индикатор напретка. Отказ ODR учитавања не би требало да блокира функционалност апликације — неопходан је graceful fallback.

Често постављана питања

Да ли је обавезно укључити App Thinning за објављивање у App Store-у?

Не, App Thinning није обавезан. Апликација без App Thinning-а ће се учитавати у App Store као јединствена универзална бинарна датотека која садржи све варијанте ресурса. Међутим, Apple снажно препоручује укључивање App Thinning-а, јер то побољшава корисничко искуство и смањује оптерећење сервера App Store-а.

Како проверити величину апликације након App Thinning-а пре објављивања?

Xcode Organizer приказује Estimated App Store Size за различите уређаје након архивирања. App Store Connect у секцији Activity приказује тачне величине исечака након отпремања билда. За локалну проверу користите xcodebuild са флагом -thinning.

Да ли App Thinning подржава SwiftUI?

Да, App Thinning је потпуно компатибилан са SwiftUI. Slicing ради са Asset Catalogs-ом, који SwiftUI користи кроз Image и Color. Bitcode подржава SwiftUI пројекте под условом да су све зависности такође компајлиране са Bitcode-ом. ODR се управља путем NSBundleResourceRequest-а независно од framework-а.

Да ли App Thinning утиче на време покретања апликације?

Slicing не утиче на време покретања — уклоњени ресурси се не учитавају. Bitcode може благо повећати време покретања при првом старту због JIT компајлирања. ODR може повећати време покретања ако ресурси са ознаком Initial Install Tags још нису учитани. Apple препоручује означавање само критично важних ресурса као Initial Install.

Шта учинити ако библиотека треће стране не подржава Bitcode?

Ако пројекат захтева Bitcode, али библиотека га не подржава — два пута: искључити библиотеку из пројекта и пронаћи Bitcode-компатибилну алтернативу, или искључити Bitcode за одређени target путем ENABLE_BITCODE у Build Settings-у. Apple дозвољава искључивање Bitcode-а за iOS, али watchOS и tvOS захтевају обавезну подршку.

Резиме

  • App Thinning — комплексна Apple технологија за смањење величине iOS апликација путем Slicing-а, Bitcode-а и ODR-а
  • Slicing дели бинарну датотеку на варијанте за одређену архитектуру и резолуцију екрана
  • Bitcode — LLVM приказ који App Store прекомпајлира за архитектуру уређаја корисника
  • On-Demand Resources омогућавају учитавање и истовар ресурса по потреби, штедећи простор на уређају
  • Величина преузимања се смањује за 30-50% при правилном подешавању сва три механизма
  • Xcode Organizer и App Store Connect пружају алатке за проверу величина исечака
  • Enterprise и Ad Hoc билдови не пролазе Slicing — само App Store и TestFlight

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође