Налаштування App Thinning (Slicing, Bitcode, On-Demand Resources) для iOS
Програма важить 180 MB при завантаженні на iPhone 13 mini. На iPad Pro — той же бінарний файл з тими ж ресурсами. Хоча iPad не потребує @2x-ассетів під 390pt екран — він їх отримує разом із всім іншим. App Thinning вирішує саме це: App Store сам збирає варіант програми для конкретного пристрою та відправляє тільки потрібне.
Три складові App Thinning
Slicing
App Store створює окремі варіанти IPA під кожну комбінацію пристрій/OS. iPhone 8 отримує лише @2x-ресурси та ARMv8 slice бінарника. iPad Pro — @3x ресурси та ARM64e.
Вимога до розробника: Asset Catalog. Ресурси поза .xcassets (що лежать просто в папці) не беруть участь у slicing — вони потрапляють у всі варіанти. Перевіряємо: всі зображення повинні бути в Asset Catalog з правильними розмірними слотами (@1x/@2x/@3x) та trait variations (iPhone/iPad/Mac).
Перевірка результату: Xcode → Product → Archive → Distribute → Ad Hoc/Development → Export → App Thinning: All compatible device variants. Після експорту дивимося App Thinning Size Report.txt — таблиця з розмірами для кожного пристрою.
On-Demand Resources (ODR)
Контент, який потребується не завжди — рівні гри, навчання, рідко використовувані фільтри — помічаються тегами та завантажуються за запитом. Зберігаються на серверах Apple, не в самому IPA.
Налаштування: у Xcode Target → Build Phases → Copy Bundle Resources → для ресурсу в Asset Catalog встановлюємо On Demand Resource Tags. У коді:
let request = NSBundleResourceRequest(tags: ["level_5"])
request.conditionallyBeginAccessingResources { available in
if available {
// ресурс вже завантажено
} else {
request.beginAccessingResources { error in
guard error == nil else { return }
// ресурс завантажено, можна використовувати
}
}
}
Обмеження: initial install bundle — до 200 MB, on-demand resources — до 20 GB, одночасно завантажених ODR — до 2 GB. Для ігор з великим контентом це принципово змінює розмір установочного файлу.
Bitcode
Bitcode — проміжне представлення LLVM, яке Apple може перекомпілювати під нові архітектури без повторної публікації розробником. Для iOS-програм з Xcode 14+ Bitcode не потребується та не підтримується — Apple видалила вимогу. Для watchOS та tvOS — до Xcode 14 був обов'язковим.
Якщо програма збирається на старому Xcode (< 14) або підтримує watchOS/tvOS extension — Bitcode включається в Build Settings → ENABLE_BITCODE = YES. Всі сторонні бібліотеки та .framework-файли повинні містити Bitcode. Якщо хоч одна залежність без Bitcode — вся програма втрачає Bitcode capability.
Типові помилки налаштування
- Ресурси додані через
File → Add Filesзамість Asset Catalog — не беруть участь у slicing - ODR-теги призначені файлам, але
NSBundleResourceRequestне викликаєendAccessingResources()— ресурс не звільняється з локального сховища - ODR-тестування не проведено в offline-режимі — на користувачах виявляється, що завантаження контенту не обробляє помилку відсутності мережі
Часові рамки
Налаштування App Thinning для готового проекту — 1–3 дні. Якщо ресурси не в Asset Catalog — додатково 2–5 днів на міграцію залежно від об'єму.







