Slicing — App Thinning mexanizmidir, burada App Store avtomatik olaraq ikili faylın bir neçə variantını yaradır, hər biri yalnız müəyyən bir cihaz modeli üçün resursları ehtiva edir. Apple Developer Documentation, 2026-ya görə, Slicing dəstəklənməyən konfiqurasiyalar üçün resursları paylamadan çıxarır, quraşdırma ölçüsünü azaldır. İş prinsipini, kəsmə variantlarını və nəticələrin yoxlanılmasını nəzərdən keçirək.
Əsas məqamlar
Slicing — App Store tərəfində tətbiqin ikili faylının variantlarını (dilimlər) yaratmağa cavabdeh olan App Thinning komponentidir. Tərtibatçı bütün dəstəklənən konfiqurasiyalar üçün kod və resursları ehtiva edən universal ikili faylı (fat binary) yüklədikdə, App Store onu təhlil edir və bir neçə dilim yaradır: ayrıca A17 prosessoru olan iPhone üçün, ayrıca M4 ilə iPad üçün, ayrıca Apple Watch üçün. Hər bir dilim yalnız müəyyən arxitektura və ayırdetmə kombinasiyası üçün lazım olan kod parçalarını və resursları ehtiva edir.
iOS 9-dan əvvəl tərtibatçılar əl ilə müxtəlif cihazlar üçün ayrıca ikili fayllar yaradırdılar və ya hər şeyi birdən ehtiva edən universal fat binary çatdırırdılar. Slicing bu prosesi tamamilə avtomatlaşdırdı: tərtibatçı Xcode-da bir layihə hazırlayır, App Store Connect-ə bir arxiv yükləyir və Slicing server tərəfdə optimal sayda variant yaradır. İstifadəçi kəsmə prosesini heç vaxt görmür — o, cihazı üçün optimallaşdırılmış hazır .app alır.
Slicing yalnız kod və şəkillərə deyil, həm də Metal şeyderlərinə tətbiq edilir. Apple GPU öz təlimat dəstindən (Metal Shading Language) istifadə edir ki, bu da PowerVR və ya ARM Mali təlimatlarından fərqlənir. Slicing dilimə yalnız hədəf cihazın GPU ailəsi üçün şeyderləri daxil edir. Bu, xüsusilə fərdi şeyderləri olan oyunlar üçün vacibdir — məsələn, yüksək detallı post-emal effektləri yalnız güclü GPU-su olan cihazlar (iPad Pro M4, iPhone 16 Pro Max) üçün tərtib edilir.
Xcode kompilyatoru bir neçə arxitektura ilə (armv7, arm64, arm64e) fat binary yaradır, lakin resursları silmir — bütün ayırdetmələr üçün bütün şəkillər .app daxilində qalır. Slicing daha da irəli gedir: Asset Catalogs, Metal şeyderləri və Swift kitabxanalarını təhlil edir, hər bir dilimdən konkret məqsəd üçün lazım olmayanı çıxarır. Məsələn, iPhone SE dilimindən @3x qrafikası daxil olmur, iPad Air dilimindən isə iPhone-a xas kontrollerlər (əgər onlar ayrıca resurslara çıxarılıbsa) daxil olmur.
Slicing prosesi build-in App Store Connect-ə yüklənməsindən sonra başlayır və üç mərhələdən ibarətdir: analiz, kəsmə və paketləmə. Analiz mərhələsində App Store serveri ikili faylı parçalayır, ondan dəstəklənən arxitekturalar, cihazlar, ekran ayırdetmələri və iOS versiyaları haqqında məlumat çıxarır. App Store bütün kommersiya Apple modellərinin onların texniki xüsusiyyətlərinə uyğunlaşdırılmasını istifadə edir — Cihaz Məlumat Bazası (Device Database) hər iOS buraxılışı ilə yenilənir.
Kəsmə mərhələsində server hər unikal kombinasiya üçün ikili faylın ayrıca nüsxələrini yaradır. Bunun üçün App Store Asset Catalogs-dan konkret teqləri (idiom, subtype, scale) olan şəkilləri çıxarır, yalnız hədəf cihaza uyğun olanları seçir və yeni resurs paketi yığır. Swift standart kitabxanası da kəsilməyə məruz qalır — ondan konkret tətbiq tərəfindən istifadə olunmayan simvollar və metodlar silinir (dead code stripping).
Paketləmə mərhələsində hər bir dilim ayrıca paylama paketinə yerləşdirilir və metadata ilə əlaqələndirilir — bu dilimin nəzərdə tutulduğu cihaz modellərinin siyahısı. App Store istifadəçi tətbiqi yüklədikdə cihaz modeli, iOS versiyası və əlaqə növünə görə uyğun dilimi seçir. Dəqiq uyğunluq olmadıqda, server xüsusiyyətlərinə görə ən yaxın dilimi istifadə edir. Apple bütün variantları CloudKit CDN şəbəkəsində saxlayır.
Slicing — App Thinning-in üç mexanizmindən biridir, lakin yükləmə ölçüsünün azaldılmasına ən böyük töhfəni verir. Bitcode maşın kodunun optimallaşdırılmasına cavabdehdir, On-Demand Resources — cihazda resursların idarə edilməsinə, Slicing isə — paylama mərhələsində artıq resursların silinməsinə cavabdehdir. Slicing olmadan ilk iki mexanizm işləyir, lakin istifadəçilər bütün cihazlar üçün resurslar alırlar ki, bu da ölçüsü Asset Catalogs sayından asılı olaraq 20-40% artırır.
Slicing və Bitcode arasındakı fərq tətbiq nöqtəsindədir: Slicing resurslar səviyyəsində (şəkillər, şeyderlər, NIB faylları), Bitcode — maşın kodu səviyyəsində işləyir. Slicing kodu arxitekturalara görə bölür (arm64 vs arm64e), Bitcode Apple-a kodu yeni arxitekturalar üçün yenidən tərtib etməyə imkan verir. Bitcode + Slicing birlikdə maksimal optimallaşdırma verir: Bitcode konkret arxitektura üçün kod yaradır, Slicing isə bu arxitektura üçün artıq resursları silir.
On-Demand Resources ilə əlaqə — Slicing və ODR kəsişmir. Slicing hansı resursların ümumiyyətlə cihaza paylamaya daxil olacağını, ODR isə bu resursların nə vaxt yüklənəcəyini və boşaldılacağını idarə edir. Tərtibatçı resursu ODR teqi ilə qeyd edə bilər və Slicing onu cihaza uyğun olduqda dilimə daxil edəcək. Apple minimal quraşdırma ölçüsü üçün hər üç mexanizmin eyni vaxtda istifadəsini tövsiyə edir.
| Mexanizm | Optimizasiya obyekti | Nə vaxt tətbiq edilir | Ölçüyə təsir |
|---|---|---|---|
| Slicing | Resurslar (şəkillər, şeyderlər) | App Store tərəfində | ~30% artıq resursu silir |
| Bitcode | Maşın kodu | İstifadəçi yüklədikdə | Kodun arxitektura üzrə optimallaşdırılması |
| ODR | Cihazda resurslar | Quraşdırmadan sonra | İlkin ölçüsü 40-60% azaldır |
Slicing bir neçə ölçü üzrə ayrıca dilimlər yaradır: prosessor arxitekturası, ekran ölçüsü (ayırdetmə), iOS versiyası və GPU ailəsi (Metal üçün). Arxitektura CPU təlimat dəstini müəyyən edir: arm64 — əsas 64-bitlik dəst (iPhone 5s — iPhone X), arm64e — Pointer Authentication və PAC dəstəyi ilə genişləndirilmiş dəst (iPhone XS və daha yeniləri, A12X+ ilə iPad Pro). Arm64e üçün dilim arm64 cihazlarında mövcud olmayan yaddaş qoruma təlimatları olan kodu ehtiva edir.
Ekran ayırdetməsi — Slicing-in ikinci əsas ölçüsüdür. Apple @1x (iPhone 3GS), @2x (iPhone 4 — iPhone SE 3), @3x (iPhone 6 Plus və daha yeniləri) miqyaslarından və iPad üçün spesifik olanlardan (2x və 3x əlavə metrikalarla) istifadə edir. Slicing dilimə yalnız hədəf cihaza uyğun miqyasda olan şəkilləri daxil edir. Xcode-da Asset Catalogs-un düzgün təşkili ilə bu, resurs dəstlərini əl ilə idarə etmək ehtiyacını aradan qaldırır — şəkili kataloqa əlavə etmək, dəstəklənən cihaz növlərini göstərmək kifayətdir.
GPU ailəsi — Metal tətbiqləri üçün kritik olan üçüncü ölçüdür. Apple GPU-ları nəsillər üzrə təsnif edir: Apple GPU family 1 (A7), family 2 (A8), ... family 8 (M4). Metal şeyderləri hər bir ailə üçün ayrıca tərtib edilir, çünki Metal Shading Language təlimat dəsti hər GPU nəsli ilə genişlənir. Slicing dilimə yalnız hədəf cihazın GPU ailəsi üçün şeyderləri daxil edir ki, bu da renderinq üçün Metal istifadə edən oyunların və tətbiqlərin ölçüsünü əhəmiyyətli dərəcədə azaldır.
CPU arxitekturası dilim ölçüsünə birbaşa təsir edir: arm64e kodu əlavə Pointer Authentication (PAC) və Signed Return Address təlimatlarını ehtiva edir ki, bu da ikili faylı arm64 ilə müqayisədə 5-10% artırır. Lakin bu artım Slicing-in arm64e kodunu yalnız A12+ prosessorlu cihazlar üçün dilimlərə daxil etməsi ilə kompensasiya olunur. iPhone SE (üçüncü nəsil) A15 Bionic ilə Slicing bu çipin imkanları üçün optimallaşdırılmış ayrıca dilim yaradır.
Xcode-da Slicing konfiqurasiyası minimaldır — əsas konfiqurasiya Asset Catalogs və Build Settings vasitəsilə həyata keçirilir. Asset Catalog cihaz növlərinə görə (Any, iPhone, iPad, Apple Watch, Apple TV) təşkil edilmiş resursları miqyas və göstərmə rejiminin düzgün göstərilməsi ilə ehtiva etməlidir. Xcode avtomatik olaraq yalnız Deployment Target parametrlərində göstərilən hədəf cihazlara uyğun resursları kompilasiyaya daxil edir.
Xcode-da Slicing-in əsas parametri — Build Setting App Thinning. Mövcud dəyərlər:
Targeted Device Families General → Deployment Info bölməsində tətbiqin hansı cihaz növləri üçün yığıldığını müəyyən edir (iPhone / iPad / Universal). Slicing kəsmə zamanı bu parametrə əsaslanır — tətbiq yalnız iPhone-ı dəstəkləyirsə, iPad üçün dilim yaradılmır. Deployment Target (minimum iOS versiyası) da Slicing-ə təsir edir: köhnə iOS versiyaları üçün armv7 dilimləri tələb oluna bilər ki, bunlar iOS 13+ üçün lazım deyil. Apple ən son stabil iOS versiyasını Deployment Target olaraq təyin etməyi tövsiyə edir — bu, dilimlərin sayını və ikili faylın ölçüsünü azaldır.
Maksimum Slicing effektivliyi üçün Asset Catalogs hər bir resurs üçün spesifik teqlərdən istifadə etməlidir. Xcode Attributes Inspector-da şəkillər üçün təqdim edir: Width Class (Any, Compact, Regular), Height Class (Any, Compact, Regular), Gamut (sRGB, Display P3), Memory (Any, Low, High), Graphics (Any, Low, High). Bu teqləri birləşdirərək, tərtibatçı hər bir şəklin hansı dilimlərə daxil olacağını idarə edir. Məsələn, Regular Width + Regular Height teqi olan iPad şəkli yalnız landscape oriyentasiyasında iPad dilimlərinə daxil olacaq.
# Müəyyən cihaz üçün dilimin ixracı
xcodebuild -exportArchive \
-archivePath "App.xcarchive" \
-exportPath "sliced/" \
-exportOptionsPlist "export.plist" \
-thinning "iPhone17,2" # iPhone 16 Pro Max
Xcodebuild -thinning parametri və model identifikatoru ilə yalnız bu model üçün dilim yaradır. Identifikatorların siyahısını Apple Device Database-də tapmaq olar (format: iPhone17,2 — iPhone 16 Pro Max, iPad14,1 — iPad Pro 11 M4). Bu metod App Store Connect-ə göndərməzdən əvvəl dilim ölçüsünü yoxlamaq üçün faydalıdır. CI/CD bu əmri avtomatik yoxlama üçün istifadə edə bilər — dilim ölçüsü limiti keçərsə (məsələn, mobil yükləmə üçün 100 MB), pipeline xəbərdarlıq göstərir.
Arxiv App Store Connect-ə yükləndikdən sonra Apple dilim ölçüləri haqqında ətraflı statistika təqdim edir. App Store Connect → Activity → build seçin → App Thinning — hər bir cihaz kateqoriyası üçün Estimated App Store Size göstərir: iPhone, iPad, Apple Watch, tvOS. Ölçülər iOS versiyaları və prosessor növləri üzrə bölünür. Əgər hansısa dilim gözlənilən ölçüdən artıqdırsa, App Store Connect onu sarı xəbərdarlıqla qeyd edir.
Xcode Organizer vasitəsilə yerli yoxlama: arxivləşdirmədən sonra Window → Organizer açın, arxivi seçin və App Thinning Profiles düyməsini klikləyin. Xcode layihənin cari konfiqurasiyası əsasında hər bir mümkün dilim üçün ölçüləri göstərəcək. Həmçinin konkret Slicing profili ilə IPA yaratmaq üçün Export seçimi mövcuddur. Xcode hər bir dilimə hansı resursların daxil olduğu haqqında məlumatı olan .app-thinning.plist faylı yaradır.
CI/CD-də Slicing yoxlamasını avtomatlaşdırmaq üçün xcodebuild -thinning istifadə edin və yaradılmış .app fayllarının ölçüsünü təhlil edin. Apple Xcode Command Line Tools vasitəsilə quraşdırılan app-size əmr satırı alətini təqdim edir, o ətraflı hesabat verir: kod ölçüsü, kateqoriyalar üzrə resurs ölçüsü (şəkillər, şeyderlər, NIB), Swift kitabxanalarının ölçüsü. Asset Catalogs optimallaşdırmasından əvvəl və sonra dilim ölçülərinin müqayisəsi yanlış konfiqurasiya səbəbindən Slicing-də iştirak etməyən resursları müəyyən etməyə kömək edir.
# Dilim ölçüsünün analizi
app-size -m "sliced/App.app" \
--format json
App-size resurs kateqoriyaları üzrə bölgü ilə JSON hesabatı çıxarır. Slicing düzgün konfiqurasiya edilibsə, „images” bölməsində yalnız bir miqyas dəsti (@2x və ya @3x) olacaq, bütün variantlar yox. Asset Catalogs konfiqurasiya xətası bütün miqyasların (@1x, @2x, @3x) dilimdə mövcud olması ilə özünü göstərir — bu o deməkdir ki, Xcode bu şəkillər üçün hədəf cihazı müəyyən edə bilməyib və Slicing işləməyib.
Tez-tez verilən suallar
Bəli, TestFlight da Slicing-i dəstəkləyir. Test istifadəçisi tətbiqi TestFlight vasitəsilə yüklədikdə, Apple serveri test istifadəçisinin cihazı üçün optimallaşdırılmış dilim çatdırır. App Store Connect Enterprise və Ad Hoc yığınları istisna olmaqla, TestFlight daxil olmaqla bütün paylamalar üçün Slicing-i avtomatik idarə edir.
Bəli, Asset Catalogs-da hər bir şəkil üçün müəyyən cihaz növlərinin bayraqlarını silmək olar. Xcode Attributes Inspector-da resursun hansı Idiom (iPhone, iPad, Apple Watch, Mac) və miqyaslar üçün daxil edilməli olduğunu göstərməyə imkan verir. Resurs bütün cihazlara lazımdırsa, istənilən miqyasla Universal istifadə edin.
Fərdi freymvorklar (.framework) da Slicing-də iştirak edir, əgər onlar XCFramework kimi (bir neçə arxitektura ilə) yığılıbsa. App Store dilimə yalnız hədəf cihaza uyğun olan freymvork arxitekturasını daxil edir. Statik kitabxanalar (.a) Slicing-ə məruz qalmır — onlar ikili fayla tam şəkildə daxil edilir.
Xcode Organizer estimated size — Apple serverlərində faktiki kəsmə nəzərə alınmadan proqnozlaşdırılan ölçü göstərir. App Store Connect Slicing-dən sonra real ölçü göstərir ki, bu da təxmin ediləndən 10-15% kiçik ola bilər, çünki server yerli olaraq mövcud olmayan əlavə optimallaşdırmalar (LZFSE, Zstandard sıxılma alqoritmləri) tətbiq edir.
Bəli, Slicing SwiftUI ilə tam uyğundur. Asset Catalogs SwiftUI tərəfindən Image, Color, SymbolImage tipləri vasitəsilə istifadə olunur. Slicing vektor və raster şəkillərə, SF Symbols simvollarına və Metal şeyderlərinə interfeysin qurulmasında SwiftUI və ya UIKit istifadə olunmasından asılı olmayaraq tətbiq edilir.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun