Slicing — bu App Thinning mexanizmi bo'lib, unda App Store avtomatik ravishda ikkilik faylning bir nechta variantlarini yaratadi, ularning har biri faqat ma'lum bir qurilma modeli uchun resurslarni o'z ichiga oladi. Apple Developer Documentation, 2026 ga ko'ra, Slicing qo'llab-quvvatlanmaydigan konfiguratsiyalar uchun resurslarni tarqatishdan chiqarib tashlaydi, o'rnatish hajmini kamaytiradi. Ishlash prinsipini, kesish variantlarini va natijalarni tekshirishni ko'rib chiqamiz.
Asosiy fikrlar
Slicing — App Store tomonida ilovaning ikkilik faylining variantlarini (bo'laklarini) yaratish uchun mas'ul bo'lgan App Thinning komponentidir. Dasturchi barcha qo'llab-quvvatlanadigan konfiguratsiyalar uchun kod va resurslarni o'z ichiga olgan universal ikkilik faylni (fat binary) yuklaganda, App Store uni tahlil qiladi va bir nechta bo'laklarni yaratadi: alohida A17 protsessorli iPhone uchun, alohida M4 bilan iPad uchun, alohida Apple Watch uchun. Har bir bo'lak faqat ma'lum arxitektura va piksellar kombinatsiyasi uchun zarur bo'lgan kod qismlari va resurslarni o'z ichiga oladi.
iOS 9 dan oldin dasturchilar turli qurilmalar uchun qo'lda alohida ikkilik fayllar yaratishgan yoki hamma narsani birdan o'z ichiga olgan universal fat binary yetkazib berishgan. Slicing bu jarayonni to'liq avtomatlashtirdi: dasturchi Xcode da bitta loyiha tayyorlaydi, App Store Connect ga bitta arxiv yuklaydi va Slicing server tomonida optimal miqdordagi variantlarni yaratadi. Foydalanuvchi kesish jarayonini hech qachon ko'rmaydi — u o'z qurilmasi uchun optimallashtirilgan tayyor .app oladi.
Slicing nafaqat kod va tasvirlarga, balki Metal shaderlariga ham qo'llaniladi. Apple GPU o'zining ko'rsatmalar to'plamidan (Metal Shading Language) foydalanadi, bu PowerVR yoki ARM Mali ko'rsatmalaridan farq qiladi. Slicing bo'lakka faqat maqsadli qurilmaning GPU oilasi uchun shaderlarni kiritadi. Bu, ayniqsa, maxsus shaderlarga ega o'yinlar uchun muhim — masalan, yuqori detalli post-ishlov berish effektlari faqat kuchli GPU ga ega qurilmalar (iPad Pro M4, iPhone 16 Pro Max) uchun kompilyatsiya qilinadi.
Xcode kompilyatori bir nechta arxitekturalar (armv7, arm64, arm64e) bilan fat binary yaratadi, lekin resurslarni olib tashlamaydi — barcha piksellar uchun barcha tasvirlar .app ichida qoladi. Slicing yanada uzoqqa boradi: Asset Catalogs, Metal shaderlari va Swift kutubxonalarini tahlil qiladi, har bir bo'lakdan ma'lum maqsad uchun kerak bo'lmagan narsalarni olib tashlaydi. Masalan, iPhone SE bo'lagiga @3x grafika kirmaydi, iPad Air bo'lagidan esa iPhone-ga xos kontrollerlar (agar ular alohida resurslarga ajratilgan bo'lsa) kirmaydi.
Slicing jarayoni build App Store Connect ga yuklangandan so'ng boshlanadi va uch bosqichdan iborat: tahlil, kesish va paketlash. Tahlil bosqichida App Store serveri ikkilik faylni parchalaydi, undan qo'llab-quvvatlanadigan arxitekturalar, qurilmalar, ekran piksellari va iOS versiyalari haqida ma'lumot chiqaradi. App Store barcha tijorat Apple modellarining ularning texnik xususiyatlariga moslashtirilishidan foydalanadi — Qurilmalar Ma'lumotlar Bazasi (Device Database) har bir iOS chiqarilishi bilan yangilanadi.
Kesish bosqichida server har bir noyob kombinatsiya uchun ikkilik faylning alohida nusxalarini yaratadi. Buning uchun App Store Asset Catalogs dan ma'lum teglar (idiom, subtype, scale) bilan tasvirlarni chiqaradi, faqat maqsadli qurilmaga mos keladiganlarini tanlaydi va yangi resurs paketini yig'adi. Swift standart kutubxonasi ham kesishga duchor bo'ladi — undan ma'lum ilova tomonidan foydalanilmaydigan belgilar va metodlar olib tashlanadi (dead code stripping).
Paketlash bosqichida har bir bo'lak alohida tarqatish paketiga joylashtiriladi va metama'lumotlar bilan bog'lanadi — bu bo'lak mo'ljallangan qurilma modellari ro'yxati. App Store foydalanuvchi ilovani yuklaganda qurilma modeli, iOS versiyasi va ulanish turiga qarab mos bo'lakni tanlaydi. Agar aniq mos kelmasa, server xususiyatlariga ko'ra eng yaqin bo'lakdan foydalanadi. Apple barcha variantlarni CloudKit CDN tarmog'ida butun dunyo bo'ylab tez yetkazib berish uchun saqlaydi.
Slicing — App Thinning ning uchta mexanizmidan biri, lekin yuklab olish hajmini kamaytirishga eng katta hissa qo'shadi. Bitcode mashina kodini optimallashtirish uchun javobgar, On-Demand Resources — qurilmadagi resurslarni boshqarish uchun, Slicing esa — tarqatish bosqichida ortiqcha resurslarni olib tashlash uchun javobgar. Slicing bo'lmasa, dastlabki ikki mexanizm ishlaydi, lekin foydalanuvchilar barcha qurilmalar uchun resurslarni oladi, bu esa Asset Catalogs soniga qarab hajmni 20-40% oshiradi.
Slicing va Bitcode o'rtasidagi farq qo'llanish nuqtasida: Slicing resurslar darajasida (tasvirlar, shaderlar, NIB fayllari), Bitcode — mashina kodi darajasida ishlaydi. Slicing kodni arxitekturalar bo'yicha ajratadi (arm64 vs arm64e), Bitcode Apple ga kodni yangi arxitekturalar uchun qayta kompilyatsiya qilish imkonini beradi. Bitcode + Slicing birgalikda maksimal optimallashtirishni beradi: Bitcode ma'lum arxitektura uchun kod yaratadi, Slicing esa bu arxitektura uchun ortiqcha resurslarni olib tashlaydi.
On-Demand Resources bilan munosabat — Slicing va ODR bir-biriga o'xshamaydi. Slicing qaysi resurslar umuman qurilmaga tarqatishga kirishini hal qiladi, ODR esa bu resurslar qachon yuklanishi va bo'shatilishini boshqaradi. Dasturchi resursni ODR tegi bilan belgilashi mumkin va Slicing uni qurilmaga mos kelsa, bo'lakka kiritadi. Apple minimal o'rnatish hajmi uchun barcha uch mexanizmdan bir vaqtda foydalanishni tavsiya qiladi.
| Mexanizm | Optimallashtirish obyekti | Qachon qo'llaniladi | Hajmga ta'siri |
|---|---|---|---|
| Slicing | Resurslar (tasvirlar, shaderlar) | App Store tomonida | ~30% ortiqcha resurslarni olib tashlaydi |
| Bitcode | Mashina kodi | Foydalanuvchi yuklaganda | Kodni arxitektura bo'yicha optimallashtirish |
| ODR | Qurilmadagi resurslar | O'rnatishdan so'ng | Boshlang'ich hajmni 40-60% kamaytiradi |
Slicing bir necha o'lcham bo'yicha alohida bo'laklarni yaratadi: protsessor arxitekturasi, ekran o'lchami (piksellar), iOS versiyasi va GPU oilasi (Metal uchun). Arxitektura CPU ko'rsatmalar to'plamini belgilaydi: arm64 — asosiy 64-bitli to'plam (iPhone 5s — iPhone X), arm64e — Pointer Authentication va PAC qo'llab-quvvatlashi bilan kengaytirilgan to'plam (iPhone XS va undan yangilari, A12X+ bilan iPad Pro). Arm64e uchun bo'lak arm64 qurilmalarida mavjud bo'lmagan xotira himoyasi ko'rsatmalari bilan kodni o'z ichiga oladi.
Ekran piksellari — Slicing ning ikkinchi asosiy o'lchami. Apple @1x (iPhone 3GS), @2x (iPhone 4 — iPhone SE 3), @3x (iPhone 6 Plus va undan yangilari) masshtablaridan va iPad uchun maxsus (2x va 3x qo'shimcha metrikalar bilan) foydalanadi. Slicing bo'lakka faqat maqsadli qurilmaga mos masshtabdagi tasvirlarni kiritadi. Xcode da Asset Catalogs ni to'g'ri tashkil qilish bilan bu resurs to'plamlarini qo'lda boshqarish zaruratini bartaraf qiladi — tasvirni katalogga qo'shish, qo'llab-quvvatlanadigan qurilma turlarini ko'rsatish kifoya.
GPU oilasi — Metal ilovalari uchun muhim bo'lgan uchinchi o'lcham. Apple GPU larni avlodlar bo'yicha tasniflaydi: Apple GPU family 1 (A7), family 2 (A8), ... family 8 (M4). Metal shaderlari har bir oila uchun alohida kompilyatsiya qilinadi, chunki Metal Shading Language ko'rsatmalar to'plami har bir GPU avlodi bilan kengayadi. Slicing bo'lakka faqat maqsadli qurilmaning GPU oilasi uchun shaderlarni kiritadi, bu renderlash uchun Metal dan foydalanadigan o'yinlar va ilovalarning hajmini sezilarli darajada kamaytiradi.
CPU arxitekturasi bo'lak hajmiga bevosita ta'sir qiladi: arm64e kodi qo'shimcha Pointer Authentication (PAC) va Signed Return Address ko'rsatmalarini o'z ichiga oladi, bu ikkilik faylni arm64 ga nisbatan 5-10% oshiradi. Biroq, bu o'sish Slicing arm64e kodini faqat A12+ protsessorli qurilmalar uchun bo'laklarga kiritishi bilan kompensatsiya qilinadi. iPhone SE (uchinchi avlod) A15 Bionic bilan Slicing ushbu chipning imkoniyatlari uchun optimallashtirilgan alohida bo'lak yaratadi.
Xcode da Slicing sozlamalari minimal — asosiy konfiguratsiya Asset Catalogs va Build Settings orqali amalga oshiriladi. Asset Catalog qurilma turlari bo'yicha (Any, iPhone, iPad, Apple Watch, Apple TV) tashkil etilgan resurslarni masshtab va ko'rsatish rejimining to'g'ri ko'rsatilishi bilan o'z ichiga olishi kerak. Xcode avtomatik ravishda faqat Deployment Target sozlamalarida ko'rsatilgan maqsadli qurilmalarga mos keladigan resurslarni kompilyatsiyaga kiritadi.
Xcode da Slicing ning asosiy sozlamasi — Build Setting App Thinning. Mavjud qiymatlar:
Targeted Device Families General → Deployment Info bo'limida ilova qanday qurilma turlari uchun yig'ilishini belgilaydi (iPhone / iPad / Universal). Slicing kesishda ushbu parametrga tayanadi — agar ilova faqat iPhone ni qo'llab-quvvatlasa, iPad uchun bo'lak yaratilmaydi. Deployment Target (minimal iOS versiyasi) ham Slicing ga ta'sir qiladi: eski iOS versiyalari uchun armv7 bo'laklari talab qilinishi mumkin, ular iOS 13+ uchun kerak emas. Apple eng so'nggi barqaror iOS versiyasini Deployment Target qilib belgilashni tavsiya qiladi — bu bo'laklar sonini va ikkilik fayl hajmini kamaytiradi.
Maksimal Slicing samaradorligi uchun Asset Catalogs har bir resurs uchun maxsus teglardan foydalanishi kerak. Xcode Attributes Inspector da tasvirlar uchun taqdim etadi: Width Class (Any, Compact, Regular), Height Class (Any, Compact, Regular), Gamut (sRGB, Display P3), Memory (Any, Low, High), Graphics (Any, Low, High). Ushbu teglarni birlashtirib, dasturchi har bir tasvir qaysi bo'laklarga kirishini boshqaradi. Masalan, Regular Width + Regular Height tegi bilan iPad tasviri faqat landscape yo'nalishidagi iPad bo'laklariga kiradi.
# Muayyan qurilma uchun bo'lakni eksport qilish
xcodebuild -exportArchive \
-archivePath "App.xcarchive" \
-exportPath "sliced/" \
-exportOptionsPlist "export.plist" \
-thinning "iPhone17,2" # iPhone 16 Pro Max
Xcodebuild -thinning parametri va model identifikatori bilan faqat shu model uchun bo'lak yaratadi. Identifikatorlar ro'yxatini Apple Device Database da topish mumkin (format: iPhone17,2 — iPhone 16 Pro Max, iPad14,1 — iPad Pro 11 M4). Bu usul App Store Connect ga yuborishdan oldin bo'lak hajmini tekshirish uchun foydali. CI/CD bu buyruqni avtomatik tekshirish uchun ishlatishi mumkin — bo'lak hajmi limitdan oshsa (masalan, mobil yuklash uchun 100 MB), pipeline ogohlantirish chiqaradi.
Arxiv App Store Connect ga yuklangandan so'ng, Apple bo'lak o'lchamlari haqida batafsil statistika taqdim etadi. App Store Connect → Activity → build ni tanlang → App Thinning — har bir qurilma kategoriyasi uchun Estimated App Store Size ni ko'rsatadi: iPhone, iPad, Apple Watch, tvOS. O'lchamlar iOS versiyalari va protsessor turlari bo'yicha bo'linadi. Agar biror bo'lak kutilgan o'lchamdan oshsa, App Store Connect uni sariq ogohlantirish bilan belgilaydi.
Xcode Organizer orqali mahalliy tekshirish: arxivlashdan so'ng, Window → Organizer ni oching, arxivni tanlang va App Thinning Profiles tugmasini bosing. Xcode loyihaning joriy konfiguratsiyasi asosida har bir mumkin bo'lgan bo'lak uchun o'lchamlarni ko'rsatadi. Shuningdek, ma'lum Slicing profili bilan IPA yaratish uchun Export opsiyasi mavjud. Xcode har bir bo'lakka qaysi resurslar kirganligi haqida ma'lumotga ega .app-thinning.plist faylini yaratadi.
CI/CD da Slicing tekshirishni avtomatlashtirish uchun xcodebuild ni -thinning bilan ishlating va yaratilgan .app fayllarining hajmini tahlil qiling. Apple Xcode Command Line Tools orqali o'rnatiladigan app-size buyruq satri vositasini taqdim etadi, u batafsil hisobotni chiqaradi: kod hajmi, kategoriyalar bo'yicha resurs hajmi (tasvirlar, shaderlar, NIB), Swift kutubxonalarining hajmi. Asset Catalogs optimallashtirishdan oldin va keyin bo'lak o'lchamlarini solishtirish noto'g'ri konfiguratsiya sababli Slicing da ishtirok etmaydigan resurslarni aniqlashga yordam beradi.
# Bo'lak hajmini tahlil qilish
app-size -m "sliced/App.app" \
--format json
App-size resurs kategoriyalari bo'yicha taqsimot bilan JSON hisobotini chiqaradi. Agar Slicing to'g'ri sozlangan bo'lsa, „images” bo'limida faqat bitta masshtab to'plami (@2x yoki @3x) bo'ladi, barcha variantlar emas. Asset Catalogs konfiguratsiya xatosi barcha masshtablarning (@1x, @2x, @3x) bo'lakda mavjud bo'lishi bilan namoyon bo'ladi — bu Xcode ushbu tasvirlar uchun maqsadli qurilmani aniqlay olmaganligini va Slicing ishlamaganligini anglatadi.
Tez-tez beriladigan savollar
Ha, TestFlight ham Slicing ni qo'llab-quvvatlaydi. Sinovchi ilovani TestFlight orqali yuklaganda, Apple serveri sinovchi qurilmasi uchun optimallashtirilgan bo'lakni yetkazib beradi. App Store Connect Enterprise va Ad Hoc yig'ilishlaridan tashqari, TestFlight ni o'z ichiga olgan barcha tarqatishlar uchun Slicing ni avtomatik boshqaradi.
Ha, Asset Catalogs da har bir tasvir uchun ma'lum qurilma turlarining bayroqlarini olib tashlash mumkin. Xcode Attributes Inspector da resurs qaysi Idiom (iPhone, iPad, Apple Watch, Mac) va masshtablar uchun kiritilishi kerakligini ko'rsatishga imkon beradi. Agar resurs barcha qurilmalarga kerak bo'lsa, istalgan masshtab bilan Universal dan foydalaning.
Maxsus freymvorklar (.framework) ham Slicing da ishtirok etadi, agar ular XCFramework (bir nechta arxitektura bilan) yig'ilgan bo'lsa. App Store bo'lakka faqat maqsadli qurilmaga mos keladigan freymvork arxitekturasini kiritadi. Statik kutubxonalar (.a) Slicing ga duchor bo'lmaydi — ular ikkilik faylga to'liq kiritiladi.
Xcode Organizer estimated size — Apple serverlarida haqiqiy kesishni hisobga olmagan holda prognoz qilingan hajmni ko'rsatadi. App Store Connect Slicing dan keyin real hajmni ko'rsatadi, bu taxmin qilinganidan 10-15% kichik bo'lishi mumkin, chunki server mahalliy mavjud bo'lmagan qo'shimcha optimallashtirishlarni (LZFSE, Zstandard siqish algoritmlari) qo'llaydi.
Ha, Slicing SwiftUI bilan to'liq mos keladi. Asset Catalogs SwiftUI tomonidan Image, Color, SymbolImage turlari orqali ishlatiladi. Slicing vektor va rastr tasvirlarga, SF Symbols belgilariga va Metal shaderlariga interfeysni qurishda SwiftUI yoki UIKit ishlatilishidan qat'iy nazar qo'llaniladi.
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.