App Thinning, yalnızca kullanıcının belirli cihazı için gerekli kaynakları teslim ederek yüklenen uygulamanın boyutunu azaltan bir Apple teknolojisidir. Apple Developer Documentation, 2026'ya göre App Thinning üç mekanizma içerir: Slicing, Bitcode ve On-Demand Resources. Her bir bileşeni ve dağıtım boyutu üzerindeki etkisini inceleyelim.
Önemli Noktalar
App Thinning — Apple tarafından iOS 9 (Eylül 2015) ile birlikte tanıtılan kapsamlı bir iOS uygulama dağıtım optimizasyonu teknolojisidir. App Thinning'in amacı, kaynak kodunu ve işlevselliği değiştirmeden kullanıcının cihazına indirdiği uygulamanın boyutunu en aza indirmektir. Teknoloji üç düzeyde çalışır: derleme aşamasında, App Store tarafında (dağıtım) ve cihazda (kaynak yönetimi).
App Thinning'den önce geliştiriciler, olası tüm cihazlar için kaynakları (@2x ve @3x görüntüler, 32-bit ve 64-bit kod, farklı GPU'lar için Metal shader'lar) ikili dosyaya dahil ediyordu. Bu, uygulama boyutunun şişmesine yol açıyordu: Retina HD ekranlı iPhone 6 Plus kullanıcısı, hiç kullanılmayan iPad Pro için vektör kaynakları alıyordu. Apple, derleme işinin bir kısmını App Store sunucularına taşıyarak bu sorunu çözdü.
Apple'ın araştırmasına (WWDC 2015, Session 412) göre, birden çok mimariyi ve çözünürlüğü destekleyen tipik bir uygulama, App Thinning uygulandıktan sonra %30-50 oranında küçültülebilir. Çok sayıda yüksek çözünürlüklü dokuya sahip oyunlar için kazanç %70-80'e ulaşabilir. Apple teknolojiyi geliştirmeye devam ediyor: iOS 17'de ARM64e için optimizasyonlar ve Swift Package Manager kullanan uygulamalar için On-Demand Resources ile iyileştirilmiş çalışma eklendi.
Mobil uygulamaların boyutu sürekli artıyor. Sensor Tower (2025)'a göre, iOS uygulamalarının ortalama boyutu son 5 yılda %45 arttı. Sınırlı veri planı veya yavaş interneti olan kullanıcılar için her megabayt önemlidir. App Thinning, geliştiricinin katılımı olmadan bu sorunu çözer — proje ayarlarında desteği etkinleştirin ve derlemeyi App Store Connect'e yükleyin.
App Thinning süreci, uygulama arşivinin App Store Connect'e yüklenmesinden sonra başlar. App Store ikili dosyayı analiz eder ve mimarilere (armv7, arm64, arm64e), ekran çözünürlüklerine (iPhone, iPad) ve iOS sürümlerine göre bölümlere ayırır. Her kombinasyon için ayrı bir varyant oluşturulur. Kullanıcı “İndir” düğmesine tıkladığında, App Store cihaz modelini, iOS sürümünü ve bağlantı türünü (Wi-Fi / mobil ağ) belirler ve yalnızca ilgili varyantı gönderir.
Kullanıcı için süreç şeffaftır — “hafif sürüm” seçeneği veya ayar iletişim kutusu yoktur. App Store, indirme isteği sırasında sunucuya gönderilen cihaz meta verilerine dayanarak en uygun varyantı otomatik olarak seçer. Cihaz Wi-Fi kullanıyorsa, App Store daha yüksek kaliteli kaynaklara (örneğin, iPhone 16 Pro için ProRes video) sahip bir varyant gönderebilir. Mobil ağ üzerinden indirme yapılırken mümkün olan minimum set kullanılır.
İkinci optimizasyon düzeyi — Bitcode'dur. ENABLE_BITCODE seçeneği etkinleştirildiğinde, Xcode uygulamayı makine koduna değil, ara LLVM temsiline derler. App Store, Bitcode'u kullanıcının işlemci mimarisi için yeniden derler ve Apple'ın geliştiricinin uygulamayı güncellemesine gerek kalmadan yeni nesil çipler (A17, M4) için derleyici optimizasyonları uygulamasına olanak tanır. Bitcode, watchOS ve tvOS için zorunludur, ancak iOS için isteğe bağlıdır.
App Thinning, her biri optimizasyonun belirli bir yönünden sorumlu olan üç bağımsız mekanizmadan oluşur. Slicing, ikili dosyayı mimari ve ekran çözünürlüğüne göre varyantlara ayırır. Geliştirici, Slicing'i Asset Catalogs aracılığıyla yapılandırır — Xcode, dilime otomatik olarak yalnızca hedef cihazla eşleşen kaynakları dahil eder. Örneğin, iPhone SE (üçüncü nesil) yalnızca @2x görüntüler ve arm64 kodu alırken, iPad Pro M4 @3x görüntüler ve arm64e kodu alacaktır.
Bitcode — LLVM IR (Intermediate Representation) — programın makineden bağımsız bir temsilidir. Bitcode etkinleştirildiğinde, Xcode nihai makine kodunu oluşturmaz, ara temsili kaydeder. App Store Connect, derlemeyi yüklerken Bitcode'u alır ve desteklenen tüm cihazların mimarileri için yeniden derler. Bitcode, Apple'ın geliştiricinin derleme aşamasında bulunmayan optimizasyonları uygulamasına olanak tanır — örneğin, M4 yongalarında yeni işlemci talimatlarının (SME, SVE) kullanımı.
On-Demand Resources (ODR) — kullanımdan sonra uygulama kaynaklarını boşaltmayı sağlayan üçüncü mekanizmadır. Geliştirici, kaynakları (oyun seviyeleri, onboarding görüntüleri, videolar) ODR etiketleriyle işaretler. iOS, işaretlenmiş kaynakları ihtiyaç duyuldukça arka planda indirir ve bellek yetersizliğinde veya kullanımdan sonra boşaltır. ODR, özellikle büyük miktarda içeriğe sahip oyunlar için etkilidir — ilk seviyeler uygulamayla birlikte verilebilir ve geri kalanı ilerleme kaydedildikçe indirilebilir.
App Thinning mekanizmalarının seçimi, uygulamanın türüne ve hedef kitlesine bağlıdır. Slicing'in her zaman etkinleştirilmesi önerilir — Asset Catalogs'un doğru organizasyonu dışında geliştiriciden ek bir işlem gerektirmez ve boyutta %20-30 oranında istikrarlı bir azalma sağlar. Bitcode, uygulama özel Metal shader'lar kullanıyorsa veya yeniden derleme olmadan yeni Apple mimarilerini desteklemeyi planlıyorsa etkinleştirilmeye değerdir. ODR, büyük hacimli içeriğe sahip uygulamalar için uygundur — oyunlar, fotoğraf düzenleyiciler, akış uygulamaları.
Tipik bir iş uygulaması (veri akışları, formlar, REST API) için Slicing ve onboarding görüntüleri için minimum ODR yapılandırması yeterlidir. 3D grafiklere sahip oyunlar, her üç mekanizmadan da yararlanır: Slicing gereksiz shader'ları kaldırır, Bitcode işlemeyi GPU için optimize eder ve ODR tamamlanan seviyeleri boşaltır. Apple'a (WWDC 2024) göre, her üç mekanizmanın kombinasyonu, evrensel ikili dosyaya kıyasla ilk kurulum boyutunu ortalama %45-55 oranında azaltır.
| Mekanizma | Ne Yapar | Nerede Çalışır | Geliştirici Eylemi Gerektirir |
|---|---|---|---|
| Slicing | Diğer cihazlar için kaynakları kaldırır | App Store + cihaz | Asset Catalogs |
| Bitcode | Mimari için yeniden derleme | App Store | ENABLE_BITCODE=YES |
| ODR | İhtiyaç halinde kaynak indirme | Cihaz | Projede ODR etiketleri |
Bir Xcode projesinde App Thinning'i etkinleştirmek için birkaç adım izlenmelidir. Slicing, derleme ayarlarında App Thinning aracılığıyla yapılandırılır: Build Settings → App Thinning. Üç değer mevcuttur: None (optimizasyon yok), Automatic (varsayılan otomatik ayar) ve Manual (test için belirli varyantların seçimi). Apple çoğu proje için Automatic önerir.
Asset Catalogs için kaynakları doğru şekilde organize etmek önemlidir: görüntüler genişlik/yükseklik belirtilerek evrensel bir kataloğa yerleştirilir ve Xcode otomatik olarak @1x, @2x ve @3x varyantlarını oluşturur. Xcode derleme sırasında yalnızca projede kullanılan çözünürlükleri dahil eder. Metal shader'lar her GPU ailesi için ayrı ayrı derlenir — Apple GPU, PowerVR, Mali — bu da Asset Catalogs aracılığıyla yönetilir.
Bitcode, Build Settings'te ENABLE_BITCODE = YES bayrağıyla etkinleştirilir. iOS için bu bayrak isteğe bağlıdır (Xcode 14'ten itibaren varsayılan olarak kapalı), ancak watchOS ve tvOS için zorunludur. Üçüncü taraf kitaplıklar kullanan bir projede Bitcode etkinleştirildiğinde, tüm kitaplıklar da Bitcode ile derlenmelidir, aksi takdirde derleme başarısız olur. Bitcode, derleme süresini %20-30 artırır, ancak gelecekteki mimarilerle tam uyumluluk sağlar.
App Store Connect'e yüklendikten sonra, dilim boyutları Activity → Build Metric bölümünde kontrol edilebilir. App Store Connect, farklı cihazlar için Tahmini App Store Boyutunu görüntüler. Yerel kontrol için Xcode, yerel makinede dilimler oluşturmak üzere -exportArchive bayrağı ve thinning seçeneğiyle xcodebuild komutunu sağlar. Slicing sonucu, arşivlemeden sonra Organizer'da (Window → Organizer) görülebilir — App Thinning Profiles sekmesi farklı cihazlar için boyutları gösterir.
# Slicing yerel kontrolü
xcodebuild -exportArchive \
-archivePath "App.xcarchive" \
-exportPath "export/" \
-exportOptionsPlist "export.plist" \
-thinning "<thin-for-all-variants>"
Xcodebuild, -thinning bayrağıyla mimari, bit genişliği ve GPU'nun her kombinasyonu için .app dosyaları oluşturur. <thin-for-all-variants> parametresi olası tüm varyantları oluşturur — kontrol için kullanışlıdır. CI hatları için iPhone14,4 (iPhone SE 3) gibi belirli bir kombinasyon belirtin. Ortaya çıkan .app dosyaları app-size yardımcı programıyla analiz edilebilir.
App Thinning'in ana faydası, son kullanıcı için indirme boyutunun azaltılmasıdır. Apple'a (WWDC 2024) göre, her üç App Thinning mekanizmasını kullanan tipik bir uygulama, mobil ağ üzerinden ortalama %40 daha hızlı indirilir ve diskte %35 daha az yer kaplar. Bu, kurulum dönüşümünü doğrudan etkiler: Sensor Tower'a göre, uygulama boyutundaki her 10 MB, dönüşümü %1 azaltır.
İkinci fayda — Bitcode aracılığıyla gelecekteki cihazlar için optimizasyondur. Apple, geliştiricinin katılımı olmadan Bitcode uygulamalarını yeni mimariler için yeniden derleyebilir. Örneğin, Intel'den Apple Silicon'a (M1) geçiş sırasında, Bitcode uygulamaları ek derleme olmadan Rosetta 2 aracılığıyla macOS'ta çalışıyordu. Bitcode'u etkinleştirmeyen geliştiriciler, uygulamalarını arm64 için yeniden derlemek zorunda kaldı.
Üçüncü fayda — ODR (On-Demand Resources) cihaz depolama yükünü azaltır. Asphalt 8: Airborne gibi düzinelerce seviyeye sahip oyunlar, ilerleme kaydedildikçe yeni parkurları indirmek için ODR kullanır. Geliştirici, uygulamayla birlikte indirilen kaynaklar için Initial Install Tags ve kurulumdan sonra arka planda indirilen içerik için Prefetch Tags ayarlayabilir. Apple, ODR sınırlarını kontrol eder: istek başına 512 MB'a kadar ve cihazda toplam 20 GB önbelleğe kadar.
App Thinning'in uygulama tasarlarken dikkate alınması gereken birkaç önemli sınırlaması vardır. Birincisi, Slicing, Enterprise (in-house) veya Ad Hoc aracılığıyla dağıtılan uygulamalar için geçerli değildir — bu derlemeler tüm varyantları içerir ve App Store'dan geçmez. Slicing'i test etmek için geliştirici, Apple sunucularında Slicing'i de işleyen TestFlight'ı kullanabilir.
İkincisi, Bitcode, derleme süresini ve .xcarchive arşiv boyutunu yaklaşık %30-50 artırır. Tüm üçüncü taraf kitaplıklar Bitcode'u desteklemez — en az bir bağımlılık Bitcode olmadan derlenmişse, ENABLE_BITCODE ile proje derlemesi başarısız olur. Apple, Bitcode'u etkinleştirmeden önce kitaplık uyumluluğunu kontrol etmenizi önerir. Ayrıca Bitcode, Swift Package Manager'ı tam olarak desteklemez — bazı Swift paketleri Bitcode derlemesini bozabilir.
Üçüncüsü, On-Demand Resources içeriğin anında kullanılabilirliğini garanti etmez — ODR indirmesi arka planda gerçekleşir ve cihaz düşük pil modunda veya zayıf sinyaldeyse gecikebilir. Geliştirici, NSBundleResourceRequest aracılığıyla ODR indirme durumlarını işlemeli ve kullanıcıya bir ilerleme göstergesi göstermelidir. ODR indirme hatası, uygulama işlevselliğini engellememelidir — bir graceful fallback gereklidir.
Sıkça Sorulan Sorular
Hayır, App Thinning zorunlu değildir. App Thinning olmadan uygulama, tüm kaynak varyantlarını içeren tek bir evrensel ikili dosya olarak App Store'a yüklenir. Ancak Apple, kullanıcı deneyimini iyileştirdiği ve App Store sunucularındaki yükü azalttığı için App Thinning'in etkinleştirilmesini şiddetle tavsiye eder.
Xcode Organizer, arşivlemeden sonra farklı cihazlar için Tahmini App Store Boyutunu gösterir. App Store Connect, Activity bölümünde derleme yüklendikten sonra dilimlerin tam boyutlarını görüntüler. Yerel kontrol için -thinning bayrağıyla xcodebuild kullanın.
Evet, App Thinning SwiftUI ile tamamen uyumludur. Slicing, SwiftUI'nin Image ve Color aracılığıyla kullandığı Asset Catalogs ile çalışır. Bitcode, tüm bağımlılıkların da Bitcode ile derlenmesi koşuluyla SwiftUI projelerini destekler. ODR, framework'ten bağımsız olarak NSBundleResourceRequest aracılığıyla yönetilir.
Slicing başlatma süresini etkilemez — kaldırılan kaynaklar yüklenmez. Bitcode, JIT derlemesi nedeniyle ilk çalıştırmada başlatma süresini biraz artırabilir. ODR, Initial Install Tags kaynakları henüz indirilmemişse başlatma süresini artırabilir. Apple, yalnızca kritik kaynakların Initial Install olarak işaretlenmesini önerir.
Proje Bitcode gerektiriyor ancak kitaplık desteklemiyorsa — iki yol: kitaplığı projeden kaldırın ve Bitcode uyumlu bir alternatif bulun veya Build Settings'te ENABLE_BITCODE aracılığıyla belirli bir hedef için Bitcode'u devre dışı bırakın. Apple, iOS için Bitcode'un devre dışı bırakılmasına izin verir, ancak watchOS ve tvOS zorunlu destek gerektirir.
Ö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