Slicing, App Store'un otomatik olarak ikili dosyanın birden çok varyantını oluşturduğu ve her birinin yalnızca belirli bir cihaz modeli için kaynaklar içerdiği bir App Thinning mekanizmasıdır. Apple Developer Documentation, 2026'ya göre Slicing, desteklenmeyen yapılandırmalar için kaynakları dağıtımdan çıkararak kurulum boyutunu küçültür. Çalışma prensibini, dilimleme varyantlarını ve sonuç doğrulamayı inceleyelim.
Anahtar Noktalar
Slicing, App Store tarafında uygulama ikili dosyasının varyantlarını (dilimler) oluşturmaktan sorumlu bir App Thinning bileşenidir. Geliştirici, desteklenen tüm yapılandırmalar için kod ve kaynaklar içeren evrensel bir yağlı ikili dosya (fat binary) yüklediğinde, App Store bunu analiz eder ve birden çok dilim oluşturur: A17 işlemcili iPhone için ayrı, M4'lü iPad için ayrı, Apple Watch için ayrı. Her dilim, yalnızca bu belirli mimari ve çözünürlük kombinasyonu için gerekli kod parçalarını ve kaynakları içerir.
iOS 9'dan önce, geliştiriciler farklı cihazlar için manuel olarak ayrı ikili dosyalar oluşturuyor veya her şeyi bir kerede içeren evrensel bir yağlı ikili dosya dağıtıyordu. Slicing bu süreci tamamen otomatikleştirdi: geliştirici Xcode'da bir proje hazırlar, App Store Connect'e bir arşiv yükler ve sunucu tarafındaki Slicing en uygun sayıda varyantı oluşturur. Kullanıcı dilimleme sürecini asla görmez — cihazı için optimize edilmiş hazır bir .app alır.
Slicing yalnızca kod ve görüntülere değil, aynı zamanda Metal gölgelendiricilerine de uygulanır. Apple GPU, PowerVR veya ARM Mali talimatlarından farklı olan kendi talimat kümesini (Metal Shading Language) kullanır. Slicing, dilime yalnızca hedef cihazın GPU ailesi için gölgelendiricileri dahil eder. Bu, özel gölgelendiricilere sahip oyunlar için özellikle önemlidir — örneğin, yüksek kaliteli post-processing efektleri yalnızca güçlü GPU'ya sahip cihazlar (iPad Pro M4, iPhone 16 Pro Max) için derlenir.
Xcode derleyicisi birden çok mimariyle (armv7, arm64, arm64e) yağlı bir ikili dosya oluşturur, ancak kaynakları kaldırmaz — tüm çözünürlükler için tüm görüntüler .app içinde kalır. Slicing daha da ileri gider: Asset Catalogs'u, Metal gölgelendiricilerini ve Swift kitaplıklarını analiz eder, her dilimden belirli hedef için gerekli olmayanı kaldırır. Örneğin, @3x grafikleri iPhone SE dilimine girmez ve iPhone'a özel denetleyiciler (ayrı kaynaklara çıkarılmışsa) iPad Air dilimine girmez.
Slicing süreci, yapının App Store Connect'e yüklenmesinden sonra başlar ve üç aşamadan oluşur: analiz, dilimleme ve paketleme. Analiz aşamasında, App Store sunucusu ikili dosyayı ayrıştırır, desteklenen mimariler, cihazlar, ekran çözünürlükleri ve iOS sürümleri hakkında bilgi çıkarır. App Store, tüm ticari Apple modellerinin teknik özelliklerine eşlenmesini kullanır — Cihaz Veritabanı her iOS sürümüyle güncellenir.
Dilimleme aşamasında, sunucu her benzersiz kombinasyon için ikili dosyanın ayrı kopyalarını oluşturur. Bunu yapmak için App Store, Asset Catalogs'dan belirli etiketlere (idiom, subtype, scale) sahip görüntüleri çıkarır, yalnızca hedef cihazla eşleşenleri seçer ve yeni bir kaynak paketi oluşturur. Swift standart kitaplığı da dilimlemeye tabidir — kullanılmayan semboller ve yöntemler ondan kaldırılır (ölü kod temizleme).
Paketleme aşamasında, her dilim ayrı bir dağıtım paketine yerleştirilir ve meta verilerle — bu dilimin hedeflediği cihaz modellerinin bir listesi — ilişkilendirilir. Kullanıcı uygulamayı indirdiğinde, App Store cihaz modeline, iOS sürümüne ve bağlantı türüne göre uygun dilimi seçer. Tam bir eşleşme yoksa, sunucu özellikler bakımından en yakın dilimi kullanır. Apple tüm varyantları CloudKit CDN ağında dünya çapında hızlı teslimat için saklar.
Slicing, App Thinning'in üç mekanizmasından biridir, ancak indirme boyutunu küçültmeye en çok katkıda bulunanıdır. Bitcode makine kodu optimizasyonundan, On-Demand Resources cihazdaki kaynak yönetiminden ve Slicing dağıtım aşamasında gereksiz kaynakların kaldırılmasından sorumludur. Slicing olmadan, ilk iki mekanizma çalışır, ancak kullanıcılar tüm cihazlar için kaynak alır ve bu da Asset Catalogs sayısına bağlı olarak boyutu %20–40 artırır.
Slicing ve Bitcode arasındaki fark, uygulama noktasındadır: Slicing kaynak düzeyinde (görüntüler, gölgelendiriciler, NIB dosyaları) çalışır, Bitcode makine kodu düzeyinde çalışır. Slicing kodu mimarilere (arm64 vs arm64e) göre ayırır, Bitcode Apple'ın kodu yeni mimariler için yeniden derlemesine olanak tanır. Bitcode + Slicing birlikte maksimum optimizasyon sağlar: Bitcode belirli bir mimari için kod üretir ve Slicing bu mimari için gereksiz kaynakları kaldırır.
On-Demand Resources ile ilişki — Slicing ve ODR örtüşmez. Slicing, hangi kaynakların cihaz dağıtımına ulaşacağını belirlerken, ODR bu kaynakların ne zaman yükleneceğini ve kaldırılacağını yönetir. Geliştirici bir kaynağı ODR etiketiyle işaretleyebilir ve Slicing, cihazla eşleşiyorsa onu dilime dahil eder. Apple minimum kurulum boyutu için üç mekanizmanın aynı anda kullanılmasını önerir.
| Mekanizma | Optimizasyon Nesnesi | Ne Zaman Uygulanır | Boyut Üzerindeki Etkisi |
|---|---|---|---|
| Slicing | Kaynaklar (görüntüler, gölgelendiriciler) | App Store tarafında | ~%30 gereksiz kaynağı kaldırır |
| Bitcode | Makine kodu | Kullanıcı indirdiğinde | Kodu mimari için optimize eder |
| ODR | Cihazdaki kaynaklar | Kurulumdan sonra | Başlangıç boyutunu %40–60 azaltır |
Slicing, birden çok boyuta göre ayrı dilimler oluşturur: işlemci mimarisi, ekran boyutu (çözünürlük), iOS sürümü ve GPU ailesi (Metal için). Mimari CPU talimat kümesini belirler: arm64 — temel 64-bit küme (iPhone 5s — iPhone X), arm64e — Pointer Authentication ve PAC desteğiyle genişletilmiş küme (iPhone XS ve sonrası, A12X+'lı iPad Pro). arm64e için dilim, arm64 cihazlarda bulunmayan bellek koruma talimatlarını içeren kodu içerir.
Ekran çözünürlüğü — Slicing'in ikinci ana boyutudur. Apple @1x (iPhone 3GS), @2x (iPhone 4 — iPhone SE 3), @3x (iPhone 6 Plus ve sonrası) ölçeklerini ve iPad'e özel (ek metriklerle 2x ve 3x) kullanır. Slicing, dilime yalnızca hedef cihazla eşleşen ölçekteki görüntüleri dahil eder. Xcode'da Asset Catalogs'un doğru şekilde düzenlenmesiyle, kaynak kümelerini manuel olarak yönetme ihtiyacı ortadan kalkar — kataloğa bir görüntü ekleyin, desteklenen cihaz türlerini belirtin.
GPU ailesi — Metal uygulamaları için kritik öneme sahip üçüncü boyuttur. Apple GPU'ları nesillere göre sınıflandırır: Apple GPU family 1 (A7), family 2 (A8), ... family 8 (M4). Metal gölgelendiricileri her aile için ayrı ayrı derlenir, çünkü Metal Shading Language talimat kümesi her GPU nesliyle genişler. Slicing, dilime yalnızca hedef cihazın GPU ailesi için gölgelendiricileri dahil ederek, oluşturma için Metal kullanan oyunların ve uygulamaların boyutunu önemli ölçüde azaltır.
CPU mimarisi dilim boyutunu doğrudan etkiler: arm64e kodu, arm64'e kıyasla ikili dosyayı %5–10 artıran ek Pointer Authentication (PAC) ve Signed Return Address talimatları içerir. Ancak bu artış, Slicing'in arm64e kodunu yalnızca A12+ işlemcili cihazların dilimlerine dahil etmesiyle dengelenir. A15 Bionic'li iPhone SE (üçüncü nesil) için Slicing, bu çipin yeteneklerine göre optimize edilmiş ayrı bir dilim oluşturur.
Xcode'da Slicing yapılandırması minimaldir — ana yapılandırma Asset Catalogs ve Build Settings aracılığıyla yapılır. Asset Catalog, cihaz türüne (Any, iPhone, iPad, Apple Watch, Apple TV) göre düzenlenmiş kaynakları içermeli ve ölçek ile görüntüleme modu doğru şekilde belirtilmelidir. Xcode, Deployment Target ayarlarında belirtilen hedef cihazlarla eşleşen kaynakları otomatik olarak yapıya dahil eder.
Xcode'daki ana Slicing ayarı, Build Setting App Thinning'dir. Mevcut değerler:
General → Deployment Info'daki Targeted Device Families, uygulamanın hangi cihaz türleri için derlendiğini belirler (iPhone / iPad / Universal). Slicing, dilimleme sırasında bu parametreye güvenir — uygulama yalnızca iPhone'u destekliyorsa, iPad için dilim oluşturulmaz. Deployment Target (minimum iOS sürümü) de Slicing'i etkiler: eski iOS sürümleri, iOS 13+ için gerekmeyen armv7 dilimleri gerektirebilir. Apple, Deployment Target'ı en son kararlı iOS sürümüne ayarlamanızı önerir — bu, dilim sayısını ve ikili dosya boyutunu azaltır.
Maksimum Slicing verimliliği için, Asset Catalogs her kaynak için belirli etiketler kullanmalıdır. Xcode, Attributes Inspector'da görüntüler için şunları sağlar: Width Class (Any, Compact, Regular), Height Class (Any, Compact, Regular), Gamut (sRGB, Display P3), Memory (Any, Low, High), Graphics (Any, Low, High). Bu etiketleri birleştirerek, geliştirici her görüntünün hangi dilimlerde görüneceğini kontrol eder. Örneğin, Regular Width + Regular Height etiketlerine sahip bir iPad görüntüsü, yalnızca yatay yönlendirmedeki iPad dilimlerinde görünür.
# Belirli bir cihaz için dilimi dışa aktar
xcodebuild -exportArchive \
-archivePath "App.xcarchive" \
-exportPath "sliced/" \
-exportOptionsPlist "export.plist" \
-thinning "iPhone17,2" # iPhone 16 Pro Max
Xcodebuild -thinning parametresi ve model tanımlayıcısıyla yalnızca bu model için bir dilim oluşturur. Tanımlayıcıların listesi Apple Cihaz Veritabanı'nda bulunabilir (biçim: iPhone17,2 — iPhone 16 Pro Max, iPad14,1 — iPad Pro 11 M4). Bu yöntem, App Store Connect'e göndermeden önce dilim boyutunu kontrol etmek için kullanışlıdır. CI/CD otomatik doğrulama için bu komutu kullanabilir — dilim boyutu sınırı aşarsa (rneğin mobil indirme için 100 MB), iş hattı bir uyarı verir.
Arşivi App Store Connect'e yükledikten sonra Apple, dilim boyutları hakkında ayrıntılı istatistikler sağlar. App Store Connect → Activity → yapıyı seཡin → App Thinning — her cihaz kategorisi için Tahmini App Store Boyutunu görüntüler: iPhone, iPad, Apple Watch, tvOS. Boyutlar iOS sürümlerine ve işlemci türlerine göre ayrıştırılır. Herhangi bir dilim beklenen boyutu aşarsa, App Store Connect onu sarı bir uyarıyla işaretler.
Xcode Organizer aracılığıyla yerel doğrulama: arşivlemeden sonra Window → Organizer'ı açın, arşivi seçin ve App Thinning Profiles'a tıklayın. Xcode, mevcut proje yapılandırmasına göre her olası dilim için boyutları gösterecektir. Belirli bir Slicing profiliyle IPA oluşturmak için Export seçeneği de mevcuttur. Xcode, her dilime hangi kaynakların dahil edildiği hakkında bilgi içeren bir .app-thinning.plist dosyası oluşturur.
CI/CD'de Slicing doğrulamasını otomatikleştirmek için, -thinning ile xcodebuild kullanın ve oluşturulan .app dosyalarının boyutunu analiz edin. Apple, ayrıntılı bir rapor çıkaran app-size komut satırı aracını (Xcode Command Line Tools aracılığıyla yüklenir) sağlar: kod boyutu, kategoriye göre kaynak boyutu (görüntüler, gölgelendiriciler, NIB), Swift kitaplık boyutu. Asset Catalog optimizasyonundan önceki ve sonraki dilim boyutlarını karşılaştırmak, yanlış yapılandırma nedeniyle Slicing'e katılmayan kaynakları belirlemeye yardımcı olur.
# Dilim boyutunu analiz et
app-size -m "sliced/App.app" \
--format json
App-size, kaynak kategorilerine göre ayrıştırılmış bir JSON raporu çıkarır. Slicing doğru şekilde yapılandırılmışsa, “images” bölümü tüm varyantları değil, yalnızca bir ölçek kümesi (@2x veya @3x) içerir. Asset Catalog yapılandırma hatası, tüm ölçeklerin (@1x, @2x, @3x) dilimde bulunmasıyla kendini gösterir — bu, Xcode'un bu görüntüler için hedef cihazı belirleyemediği ve Slicing'in çalışmadığı anlamına gelir.
Sıkça Sorulan Sorular
Evet, TestFlight da Slicing'i destekler. Bir test kullanıcısı TestFlight aracılığıyla uygulamayı indirdiğinde, Apple sunucusu test kullanıcısının cihazı için optimize edilmiş bir dilim sunar. App Store Connect, Enterprise ve Ad Hoc yapıları hariç, TestFlight dahil tüm dağıtımlar için Slicing'i otomatik olarak yönetir.
Evet, Asset Catalogs'da her görüntü için belirli cihaz türlerinin işaretleri kaldırılabilir. Xcode, Attributes Inspector'da kaynağın hangi Idiom (iPhone, iPad, Apple Watch, Mac) ve ölçekler için dahil edileceğini belirtmeye olanak tanır. Bir kaynak tüm cihazlar için gerekiyorsa, herhangi bir ölçekte Universal kullanın.
Özel çerçeveler (.framework) de XCFramework (birden çok mimariyle) olarak derlenmişse Slicing'e katılır. App Store, dilime yalnızca hedef cihazla eşleşen çerçeve mimarisini dahil eder. Statik kitaplıklar (.a) Slicing'e tabi değildir — ikili dosyaya tamamen gömülürler.
Xcode Organizer tahmini boyutu (estimated size) gösterir — Apple sunucularındaki gerçek dilimlemeyi dikkate almayan öngörülen bir boyut. App Store Connect, Slicing sonrası gerçek boyutu gösterir ve bu, sunucu yerel olarak bulunmayan ek optimizasyonlar (LZFSE algoritmaları, Zstandard kaynak sıkıştırması) uyguladığı için tahminden %10–15 daha küçük olabilir.
Evet, Slicing SwiftUI ile tamamen uyumludur. Asset Catalogs, SwiftUI tarafından Image, Color ve SymbolImage türleri aracılığıyla kullanılır. Slicing, arayüz oluşturmak için SwiftUI veya UIKit kullanılmasından bağımsız olarak vektör ve raster görüntülere, SF Symbols'e ve Metal gölgelendiricilerine uygulanır.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun