App Thinning — bu Apple texnologiyasi bo'lib, foydalanuvchining muayyan qurilmasi uchun zarur bo'lgan resurslarni yetkazib berish orqali o'rnatilayotgan ilova hajmini kamaytiradi. Apple Developer Documentation, 2026 ma'lumotlariga ko'ra, App Thinning uchta mexanizmdan iborat: Slicing, Bitcode va On-Demand Resources. Har bir komponent va uning tarqatish hajmiga ta'sirini ko'rib chiqamiz.
Asosiy xulosalar
App Thinning — bu Apple tomonidan iOS 9 bilan birga (sentyabr 2015) joriy qilingan iOS ilovalarini tarqatishning kompleks optimallashtirish texnologiyasi. App Thinningning maqsadi — manba kodi va funksionallikni o'zgartirmasdan, foydalanuvchi o'z qurilmasiga yuklab oladigan ilova hajmini minimallashtirish. Texnologiya uch darajada ishlaydi: qurish bosqichida (kompilyatsiya), App Store tomonida (yetkazib berish) va qurilmada (resurslarni boshqarish).
App Thinning paydo bo'lishidan oldin dasturchilar ikkilik faylga barcha mumkin bo'lgan qurilmalar uchun resurslarni kiritishardi — @2x va @3x tasvirlar, 32-bitli va 64-bitli kod, turli GPU'lar uchun Metal shaderlari. Bu ilova hajmining shishishiga olib keldi: Retina HD ekranli iPhone 6 Plus foydalanuvchisi hech qachon ishlatilmaydigan iPad Pro uchun vektor resurslarini olardi. Apple bu muammoni qurish ishining bir qismini App Store serverlariga o'tkazish orqali hal qildi.
Apple tadqiqotlariga ko'ra (WWDC 2015, 412-sessiya), bir nechta arxitektura va o'lchamlarni qo'llab-quvvatlaydigan odatiy ilova App Thinning qo'llanilgandan keyin 30-50% gacha kamayishi mumkin. Ko'p sonli yuqori detalli teksturali o'yinlar uchun tejash 70-80% gacha yetishi mumkin. Apple texnologiyani takomillashtirishda davom etmoqda: iOS 17 da ARM64e uchun optimallashtirish qo'shildi va Swift Package Manager ishlatadigan ilovalar uchun On-Demand Resources bilan ishlash yaxshilandi.
Mobil ilovalarning hajmi doimiy ravishda oshib bormoqda. Sensor Tower (2025) ma'lumotlariga ko'ra, iOS ilovasining o'rtacha hajmi oxirgi 5 yil ichida 45% ga oshgan. Cheklangan tarif rejasi yoki sekin internetga ega foydalanuvchilar uchun har bir megabayt muhim. App Thinning bu muammoni dasturchi ishtirokisiz hal qiladi — faqat loyiha sozlamalarida qo'llab-quvvatlashni yoqish va build-ni App Store Connect-ga yuklash kifoya.
App Thinning jarayoni ilova arxivining App Store Connect-ga yuklanishidan keyin boshlanadi. App Store ikkilik faylni tahlil qiladi va uni arxitekturalar (armv7, arm64, arm64e), ekran o'lchamlari (iPhone, iPad) va iOS versiyalari bo'yicha segmentlarga ajratadi. Har bir kombinatsiya uchun alohida variant yaratiladi. Foydalanuvchi “Yuklab olish” tugmasini bosganda, App Store qurilma modelini, iOS versiyasini va ulanish turini (Wi-Fi / mobil tarmoq) aniqlaydi va faqat tegishli variantni yuboradi.
Foydalanuvchi uchun jarayon shaffof — “yengil versiya” tanlovi yoki sozlamalar bilan dialog oynasi yo'q. App Store yuklab olish so'rovi paytida serverga uzatiladigan qurilma metama'lumotlari asosida eng mos variantni avtomatik tanlaydi. Agar qurilma Wi-Fi dan foydalansa, App Store yuqori sifatli resurslarga ega variantni yuborishi mumkin (masalan, iPhone 16 Pro uchun ProRes video). Mobil tarmoq orqali yuklab olishda minimal mumkin bo'lgan to'plam ishlatiladi.
Ikkinchi optimallashtirish darajasi — Bitcode. ENABLE_BITCODE opsiyasi yoqilgan holda, Xcode ilovani mashina kodiga emas, balki oraliq LLVM ifodasiga kompilyatsiya qiladi. App Store Bitcode-ni foydalanuvchining protsessor arxitekturasi uchun qayta kompilyatsiya qiladi, bu Apple'ga dasturchi tomonidan ilova yangilanmasdan turib, yangi avlod chiplari (A17, M4) uchun kompilyator optimallashtirishlarini qo'llash imkonini beradi. Bitcode watchOS va tvOS uchun majburiy, ammo iOS uchun ixtiyoriy.
App Thinning uchta mustaqil mexanizmdan iborat bo'lib, ularning har biri optimallashtirishning o'z jihati uchun javobgardir. Slicing (kesish) ikkilik faylni arxitektura va ekran o'lchamiga qarab variantlarga ajratadi. Dasturchi Slicing-ni Asset Catalogs orqali sozlaydi — Xcode avtomatik ravishda kesimga faqat maqsadli qurilmaga mos keladigan resurslarni kiritadi. Masalan, iPhone SE (uchinchi avlod) faqat @2x tasvirlar va arm64 kodini oladi, iPad Pro M4 esa @3x tasvirlar va arm64e kodini oladi.
Bitcode — bu LLVM IR (Intermediate Representation) — mashinadan mustaqil dastur ifodasi. Bitcode yoqilganda, Xcode yakuniy mashina kodini yaratmaydi, balki oraliq ifodani saqlaydi. App Store Connect build yuklanganda Bitcode-ni oladi va uni barcha qo'llab-quvvatlanadigan qurilmalar arxitekturalari uchun qayta kompilyatsiya qiladi. Bitcode Apple'ga dasturchining kompilyatsiya bosqichida mavjud bo'lmagan optimallashtirishlarni qo'llash imkonini beradi — masalan, M4 chiplarida yangi protsessor ko'rsatmalaridan (SME, SVE) foydalanish.
On-Demand Resources (ODR) — uchinchi mexanizm bo'lib, ilova resurslarini foydalanishdan keyin bo'shatish imkonini beradi. Dasturchi resurslarni (o'yin darajalari, onboarding tasvirlari, video) ODR teglari bilan belgilaydi. iOS belgilangan resurslarni talab bo'yicha fonda yuklaydi va xotira yetishmasa yoki foydalanishdan keyin ularni bo'shatadi. ODR ayniqsa ko'p kontentli o'yinlar uchun samarali — birinchi darajalarni ilova tarkibida yetkazish mumkin, qolganlarini esa o'yin davomida yuklab olish mumkin.
App Thinning mexanizmlarini tanlash ilova turiga va uning maqsadli auditoriyasiga bog'liq. Slicing har doim yoqilishi tavsiya etiladi — Asset Catalogs-ni to'g'ri tashkil qilishdan tashqari dasturchidan qo'shimcha harakat talab qilmaydi va barqaror 20-30% hajm qisqarishini beradi. Bitcode, agar ilova maxsus Metal shaderlaridan foydalansa yoki qayta qurmasdan Apple'ning yangi arxitekturalarini qo'llab-quvvatlashni rejalashtirsa, yoqilishi kerak. ODR ko'p kontentli ilovalar uchun asosli — o'yinlar, foto muharrirlari, striming ilovalari.
Oddiy biznes ilovasi uchun (ma'lumot lentalari, formalar, REST API) Slicing va onboarding tasvirlari uchun minimal ODR sozlamalari yetarli. O'yinlar 3D grafika bilan har uch mexanizmdan foyda ko'radi: Slicing keraksiz shaderlarni olib tashlaydi, Bitcode renderlashni GPU uchun optimallashtiradi, ODR esa tugallangan darajalarni bo'shatadi. Apple'ga ko'ra (WWDC 2024), har uch mexanizmning kombinatsiyasi universal ikkilik fayl bilan solishtirganda boshlang'ich o'rnatish hajmini o'rtacha 45-55% ga kamaytiradi.
| Mexanizm | Nima qiladi | Qayerda ishlaydi | Dasturchi harakatini talab qiladi |
|---|---|---|---|
| Slicing | Boshqa qurilmalar uchun resurslarni olib tashlaydi | App Store + qurilma | Asset Catalogs |
| Bitcode | Arxitektura uchun qayta kompilyatsiya | App Store | ENABLE_BITCODE=YES |
| ODR | Resurslarni talab bo'yicha yuklash | Qurilma | Loyihada ODR teglari |
Xcode loyihasida App Thinning-ni yoqish uchun bir necha qadamni bajarish kerak. Slicing qurish sozlamalarida App Thinning orqali sozlanadi: Build Settings → App Thinning. Uchta qiymat mavjud: None (optimallashtirishsiz), Automatic (standart avtomatik sozlash) va Manual (test uchun ma'lum variantlarni tanlash bilan). Apple ko'pchilik loyihalar uchun Automatic-ni tavsiya qiladi.
Asset Catalogs uchun resurslarni to'g'ri tashkil qilish muhim: tasvirlar universal katalogda kenglik/balandlik ko'rsatilgan holda joylashtiriladi, Xcode esa avtomatik ravishda @1x, @2x va @3x variantlarini yaratadi. Xcode qurish paytida faqat loyihada ishlatiladigan o'lchamlarni kiritadi. Metal shaderlari har bir GPU oilasi uchun alohida kompilyatsiya qilinadi — Apple GPU, PowerVR, Mali, bu ham Asset Catalogs orqali boshqariladi.
Bitcode Build Settings da ENABLE_BITCODE = YES bayrog'i bilan yoqiladi. iOS uchun bu bayroq ixtiyoriy (Xcode 14 dan boshlab sukut bo'yicha o'chirilgan), ammo watchOS va tvOS uchun majburiy. Uchinchi tomon kutubxonalaridan foydalanadigan loyihada Bitcode yoqilganda, ularning barchasi ham Bitcode bilan qurilgan bo'lishi kerak, aks holda qurish xato bilan tugaydi. Bitcode kompilyatsiya vaqtini 20-30% ga oshiradi, ammo kelajakdagi arxitekturalar bilan to'liq moslikni ta'minlaydi.
App Store Connect-ga yuklagandan so'ng, kesimlarning o'lchamlarini Activity → Build Metric bo'limida tekshirish mumkin. App Store Connect turli qurilmalar uchun Estimated App Store Size ni ko'rsatadi. Mahalliy tekshirish uchun Xcode mahalliy mashinada kesimlar yaratish uchun -exportArchive bayrog'i va thinning opsiyasi bilan xcodebuild buyrug'ini taqdim etadi. Slicing natijasini arxivlashdan keyin Organizer (Window → Organizer) da ko'rish mumkin — App Thinning Profiles yorlig'i turli qurilmalar uchun o'lchamlarni ko'rsatadi.
# Slicing ni mahalliy tekshirish
xcodebuild -exportArchive \
-archivePath "App.xcarchive" \
-exportPath "export/" \
-exportOptionsPlist "export.plist" \
-thinning "<thin-for-all-variants>"
Xcodebuild -thinning bayrog'i bilan arxitektura, bitlik va GPU kombinatsiyalarining har biri uchun .app fayllarini yaratadi. <thin-for-all-variants> parametri barcha mumkin bo'lgan variantlarni yaratadi — tekshirish uchun foydali. CI quvurlari uchun ma'lum kombinatsiya belgilanadi, masalan iPhone14,4 (iPhone SE 3). Natijadagi .app fayllar app-size utilitasi bilan tahlil qilinishi mumkin.
App Thinningning asosiy afzalligi — yakuniy foydalanuvchi uchun yuklab olish hajmining kamayishi. Apple'ga ko'ra (WWDC 2024), har uch App Thinning mexanizmidan foydalanadigan odatiy ilova mobil tarmoq orqali o'rtacha 40% tezroq yuklanadi va diskda 35% kam joy egallaydi. Bu bevosita o'rnatish konversiyasiga ta'sir qiladi: Sensor Tower ma'lumotlariga ko'ra, ilova hajmining har 10 MB i konversiyani 1% ga kamaytiradi.
Ikkinchi afzallik — Bitcode tufayli kelajakdagi qurilmalar uchun optimallashtirish. Apple dasturchi ishtirokisiz Bitcode ilovalarini yangi arxitekturalar uchun qayta kompilyatsiya qilishi mumkin. Masalan, Intel-dan Apple Silicon (M1) ga o'tishda Bitcode ilovalari qo'shimcha qurishsiz Rosetta 2 orqali macOS da ishlagan. Bitcode-ni yoqmagan dasturchilar ilovalarini arm64 uchun qayta qurishga majbur bo'lishgan.
Uchinchi afzallik — ODR (On-Demand Resources) qurilma xotirasiga yukni kamaytiradi. Asphalt 8: Airborne kabi o'nlab darajali o'yinlar o'yin davomida yangi treklarni yuklash uchun ODR dan foydalanadi. Dasturchi ilova bilan birga yuklanadigan resurslar uchun Initial Install Tags va o'rnatishdan keyin fonda yuklanadigan kontent uchun Prefetch Tags ni belgilashi mumkin. Apple ODR limitlarini nazorat qiladi: so'rov uchun 512 MB gacha va qurilmada umumiy kesh 20 GB gacha.
App Thinning ilovani loyihalashda hisobga olinishi kerak bo'lgan bir necha muhim cheklovlarga ega. Birinchidan, Slicing Enterprise (in-house) yoki Ad Hoc orqali tarqatiladigan ilovalarga qo'llanilmaydi — bu build-lar barcha variantlarni o'z ichiga oladi va App Store dan o'tmaydi. Slicing testi uchun dasturchi Apple serverlari tomonidan Slicing ni qayta ishlaydigan TestFlight dan foydalanishi mumkin.
Ikkinchidan, Bitcode qurish vaqtini va .xcarchive arxiv hajmini taxminan 30-50% ga oshiradi. Hamma uchinchi tomon kutubxonalari Bitcode-ni qo'llab-quvvatlamaydi — agar kamida bitta bog'liqlik Bitcode siz qurilgan bo'lsa, ENABLE_BITCODE bilan loyihani qurish xato bilan tugaydi. Apple Bitcode-ni yoqishdan oldin kutubxonalarning mosligini tekshirishni tavsiya qiladi. Bundan tashqari, Bitcode Swift Package Manager ni to'liq qo'llab-quvvatlamaydi — ba'zi Swift paketlari Bitcode qurilishini buzishi mumkin.
Uchinchidan, On-Demand Resources kontentning darhol mavjudligini kafolatlamaydi — ODR yuklanishi fonda sodir bo'ladi va qurilma past batareya darajasi yoki zaif tarmoq signali rejimida bo'lsa, kechiktirilishi mumkin. Dasturchi NSBundleResourceRequest orqali ODR yuklash holatlarini qayta ishlashni amalga oshirishi va foydalanuvchiga borish ko'rsatkichini ko'rsatishi kerak. ODR yuklanishining muvaffaqiyatsizligi ilova funksionalligini bloklamasligi kerak — graceful fallback zarur.
Tez-tez beriladigan savollar
Yo'q, App Thinning majburiy emas. App Thinningsiz ilova App Store ga barcha resurs variantlarini o'z ichiga olgan yagona universal ikkilik fayl sifatida yuklanadi. Biroq, Apple App Thinning ni yoqishni qat'iy tavsiya qiladi, chunki bu foydalanuvchi tajribasini yaxshilaydi va App Store serverlariga yukni kamaytiradi.
Xcode Organizer arxivlashdan keyin turli qurilmalar uchun Estimated App Store Size ni ko'rsatadi. App Store Connect Activity bo'limida build yuklangandan keyin aniq kesim o'lchamlarini ko'rsatadi. Mahalliy tekshirish uchun -thinning bayrog'i bilan xcodebuild dan foydalaning.
Ha, App Thinning SwiftUI bilan to'liq mos keladi. Slicing SwiftUI Image va Color orqali ishlatadigan Asset Catalogs bilan ishlaydi. Bitcode SwiftUI loyihalarini qo'llab-quvvatlaydi, ammo barcha bog'liqliklar Bitcode bilan qurilgan bo'lishi kerak. ODR framework dan mustaqil ravishda NSBundleResourceRequest orqali boshqariladi.
Slicing ishga tushirish vaqtiga ta'sir qilmaydi — olib tashlangan resurslar yuklanmaydi. Bitcode JIT kompilyatsiyasi tufayli birinchi ishga tushirishda vaqtni biroz oshirishi mumkin. ODR, Initial Install Tags tegi bo'lgan resurslar hali yuklanmagan bo'lsa, ishga tushirish vaqtini oshirishi mumkin. Apple faqat muhim resurslarni Initial Install sifatida belgilashni tavsiya qiladi.
Agar loyiha Bitcode ni talab qilsa, lekin kutubxona uni qo'llab-quvvatlamasa — ikki yo'l bor: kutubxonani loyihadan chiqarib, Bitcode-ga mos alternativ topish yoki Build Settings da ENABLE_BITCODE orqali ma'lum target uchun Bitcode ni o'chirish. Apple iOS uchun Bitcode ni o'chirishga ruxsat beradi, ammo watchOS va tvOS majburiy qo'llab-quvvatlashni talab qiladi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.