Bitcode, bir iOS uygulamasının derleme aşamasında programın bir ara temsilidir. Makine kodunun aksine, Bitcode belirli bir işlemci mimarisine bağlı değildir. Apple Developer Documentation'a göre, App Store hedef mimari için Bitcode'u yeniden derleyerek performansı artırabilir ve kurulum dosyası boyutunu küçültebilir. Geliştirici Bitcode'u App Store'a gönderir ve mağaza, her cihaz türü için optimize edilmiş bir ikili dosya oluşturur.
Anahtar Noktalar
Bitcode, LLVM derleyici altyapısı tarafından oluşturulan bir programın ara temsilidir (Intermediate Representation, IR). Apple, Xcode 7 ve iOS 9'dan itibaren watchOS uygulamaları için zorunlu, iOS ve tvOS için isteğe bağlı olarak Bitcode desteğini başlattı. Xcode 14'ten itibaren, watchOS dışındaki tüm platformlar için bu gereklilik kaldırıldı.
Ara kod temsili kavramı, 2000'li yıllardan beri Illinois Üniversitesi'nde Chris Lattner tarafından kurulan LLVM projesinin bir parçası olarak var olmuştur. Apple, 2011'de LLVM'yi Xcode için uyarladı ve 2015'te Bitcode'u App Store'a yeniden göndermeden uygulamaları güncellemenin bir yolu olarak tanıttı. Teknoloji, WWDC 2015'te “What's New in Xcode” oturumunda duyuruldu.
Makine kodu, belirli bir işlemci için ikili talimatlardan oluşur: arm64, armv7 veya x86_64. Bitcode, donanımdan bağımsız bir biçimde depolanır ve App Store'un tek bir kaynak temsilinden farklı mimariler için optimize edilmiş ikili dosyalar oluşturmasına olanak tanır. Bu temel fark, teknolojinin tüm avantajlarını belirler.
| Özellik | Bitcode | Makine Kodu |
|---|---|---|
| Mimari bağımlılığı | Bağımsız | İşlemciye bağlı |
| İkili dosya boyutu | Kompakt | Daha büyük |
| Yeniden derleme yeteneği | Evet | Hayır |
| App Store desteği | Yeniden derlenir | Olduğu gibi kullanılır |
| Hata ayıklama | Sınırlı | Tam destek |
Bitcode yürütülebilir bir dosya değildir. Geliştiricinin proje meta verileriyle birlikte App Store'a gönderdiği ikili biçimdeki LLVM IR'dir. Uygulama mağazası yeniden derleme sürecini çalıştırarak kodu her hedef platform ve işletim sistemi sürümü için uyarlar.
Bitcode oluşturma süreci, Swift veya Objective-C kaynak kodunu LLVM IR'ye dönüştüren derleyici ön ucu ile başlar. Bağlama aşamasında, Xcode IR'yi .bc (Bitcode) biçimindeki dosyalara paketler ve bunlar daha sonra .xcarchive ile birlikte App Store'a gönderilir. App Store da kendi tarafında yeniden derleme sürecini çalıştırır.
LLVM altyapısı üç bölümden oluşur: ön uç (C/ObjC için Clang, Swift için Swift Frontend), Middle-End iyileştirici ve arka uç (makine kodu oluşturucu). Bitcode, montaj talimatı oluşturmaya geçmeden ilk iki aşamanın sonucudur. Middle-End, platformdan bağımsız iyileştirmeler gerçekleştirir: ölü kod kaldırma, içselleştirme ve sabit katlama.
// Swift kaynak kodu örneği
func calculateSum(a: Int, b: Int) -> Int {
return a + b
}
// Derleme sonrası LLVM IR (basitleştirilmiş)
; define i32 @calculateSum(i32 %a, i32 %b)
; %result = add i32 %a, %b
; ret i32 %result
IR oluşturulduktan sonra derleyici, temsil düzeyinde bir dizi iyileştirme gerçekleştirir: ölü kod kaldırma, işlev içselleştirme ve sabit katlama. Bu iyileştirmeler mimariden bağımsızdır ve Bitcode'da korunur. App Store'da yeniden derleme sırasında, belirli bir işlemci için talimat yeniden sıralama gibi mimariye bağlı iyileştirmeler eklenir.
App Store Connect, Bitcode ile arşivi alır ve kendi derleme altyapısını çalıştırır. Sistem, kullanıcının cihazının hedef mimarisini belirler ve makine kodu oluşturarak belirli işlemci özelliklerine göre daha da optimize eder. arm64e (A12+ ve M serisi işlemciler) için ek güvenlik iyileştirmeleri uygulanır.
Bu sürece App Thinning denir — bir cihaza yalnızca mimarisi için gerekli kaynakları ve kodu ileten bir teknoloji. A17 Pro işlemcili bir iPhone kullanıcısı, eski mimariler için gereksiz talimatlar olmadan arm64e için optimize edilmiş bir ikili dosya alır. Bu, indirme süresini azaltır ve cihazda yer tasarrufu sağlar.
Bitcode, iOS uygulama geliştiricileri için birkaç önemli avantaj sunar. Bunlardan en önemlisi, App Store'a bir güncelleme göndermeye gerek kalmadan yeni Apple işlemcileri için otomatik optimizasyondur. Bu, özellikle armv7'den arm64'e geçiş gibi yeni mimarilere geçiş yaparken önemlidir.
Apple yeni bir mimariye sahip bir işlemci yayınladığında, Bitcode ile gönderilen uygulamalar otomatik olarak bunun için yeniden derlenir. Geliştiricinin projeyi yeniden oluşturması ve bir güncelleme yayınlaması gerekmez — App Store, kullanıcı ilk indirdiğinde bunu kendi tarafında yapar. Bu, yıllarca bakımı yapılan uzun ömürlü uygulamalar için özellikle önemlidir.
App Thinning, Bitcode ile birleştiğinde yüklenen uygulama boyutunu %15–40 oranında azaltabilir. App Store, yalnızca belirli bir cihaz için gerekli makine talimatlarını oluşturur ve diğer mimariler ile farklı iOS sürümleri için kodu ortadan kaldırır. Pratikte bu, yeni iPhone'lu bir kullanıcının kompakt bir ikili dosya alması anlamına gelir.
Apple WWDC 2015 Session 102'ye göre, Bitcode ve App Thinning kullanımı, tüm mimarileri içeren evrensel bir ikili dosyaya kıyasla indirilen uygulama boyutunu ortalama %25 azaltabilir. 100 MB'lık bir uygulama için, kullanıcının cihazında 40 MB'a kadar tasarruf sağlanabilir.
Bitcode yapılandırması, Xcode'un derleme ayarlarında yapılır. Enable Bitcode parametresi Build Settings'te bulunur ve yeni projeler için varsayılan olarak etkindir, ancak geliştiriciler hata ayıklama veya Bitcode desteği olmayan üçüncü taraf kitaplıkları kullanırken devre dışı bırakabilir.
// Build Settings -> Apple Clang - Code Generation
// Enable Bitcode = YES
// Veya ayrı hedefler için Info.plist aracılığıyla
@property (nonatomic, assign) BOOL enableBitcode;
- (void)configureBuildSettings {
// Yapılandırmada Bitcode durumunu kontrol etme
if (self.enableBitcode) {
NSLog(@"Bitcode is enabled for this target");
} else {
NSLog(@"Bitcode is disabled");
}
}
Arşivde Bitcode olup olmadığını kontrol etmek için, Xcode Organizer üzerinden .xcarchive dosyasını açın veya Terminal'de otool -l komutunu çalıştırın. İkili dosyada bir __LLVM bölümünün bulunması, Bitcode'un etkinleştirildiğini ve doğru şekilde paketlendiğini onaylar. Bölüm yoksa, derleme sırasında Bitcode oluşturulmamıştır.
# Arşivde Bitcode varlığını kontrol etme
otool -l YourApp.app/YourApp | grep __LLVM
# Çıktı: __LLVM bölümü varsa — Bitcode mevcut
# Çıktı boşsa — Bitcode etkin değil veya oluşturulmamış
# Ayrıca size komutunu kullanarak da kontrol edebilirsiniz
size -m -l YourApp.app/YourApp | grep __LLVM
CocoaPods veya SPM aracılığıyla üçüncü taraf kitaplıkları kullanırken, tüm bağımlılıkların Bitcode ile derlendiğinden emin olun. En az bir kitaplık Bitcode'u desteklemiyorsa, Xcode arşivleme sırasında bağlama hatası oluşturacaktır. CocoaPods için, alt spesifikasyonlarda bitcode_enabled bayrağını kontrol edin veya enable_bitcode ile use_frameworks! kullanın.
Bitcode, her tür iOS projesi için evrensel bir çözüm değildir. Teknolojinin, geliştiricinin derleme yapılandırmasında seçeneği etkinleştirmeden önce dikkate alması gereken sınırlamaları vardır. Bu sınırlamaları anlamak, arşivleme ve yayınlama sırasında sorunları önlemeye yardımcı olur.
Tüm üçüncü taraf kitaplıklar Bitcode desteğiyle gelmez. Bir kitaplık yalnızca Bitcode olmadan derlenmiş ikili dosya olarak dağıtılıyorsa, seçenek etkinleştirilmiş proje derlenmez. Bu durumda, geliştirici ya Bitcode'u devre dışı bırakmalı ya da satıcıdan Bitcode destekli bir sürüm talep etmelidir. Bu, özellikle artık güncellenmeyen eski kitaplıklar için geçerlidir.
Bitcode ile derlenmiş uygulamalardan gelen çökme raporları ek işlem gerektirir. Yeniden derlenen kod için semboller (dSYM), App Store tarafından oluşturulur ve Xcode Organizer aracılığıyla indirilebilir. İlgili dSYM dosyaları yüklenmeden, çökme raporlarındaki çağrı yığını okunamaz hale gelir ve sorun teşhisini zorlaştırır.
iOS 17 ve Xcode 15 itibarıyla Apple, App Store'da yayınlama için Bitcode'un zorunlu olarak etkinleştirilmesini gerektirmez. Ancak watchOS uygulamaları için Bitcode, App Store Connect politika düzeyinde zorunlu bir gereklilik olarak kalır. Geliştiricilere, tüm bağımlılıklar destekliyorsa yeni projeler için Bitcode'u etkinleştirmeleri önerilir.
Sıkça Sorulan Sorular
iOS ve tvOS uygulamaları için, Xcode 14'ten itibaren Bitcode zorunlu değildir. watchOS için Bitcode desteği zorunlu olmaya devam etmektedir. Apple, yeni projeler için Bitcode'u etkinleştirmeyi önerir ancak onsuz yayınlamayı engellemez.
Bitcode, App Store'un App Thinning uygulamasına olanak tanır — yalnızca kullanıcının cihaz mimarisi için makine kodu oluşturur. Bu, projede desteklenen mimari sayısına bağlı olarak indirilen ikili dosya boyutunu %15–40 oranında azaltır.
Evet, dSYM dosyaları yeniden derlenmiş ikili dosyalardan çökme raporlarını sembolize etmek için gereklidir. App Store, arşiv işlendikten sonra Xcode Organizer aracılığıyla dSYM indirme olanağı sunar. Bunlar olmadan, Crashlytics ve konsoldaki çağrı yığını yalnızca bellek adreslerini içerecektir.
SPM, bağımlılıklar ikili dosyalar yerine kaynak kodunda dağıtılırsa Bitcode'u destekler. SPM aracılığıyla ikili bağımlılıklar Bitcode içeren bir sürüm sağlamalıdır, aksi takdirde seçenek etkinleştirilmiş proje derlenmez.
Bitcode, donanımdan bağımsız bir ara LLVM IR temsilidir ve bir işlemci tarafından doğrudan yürütülemez. Makine kodu, belirli bir mimari (arm64, x86_64) için hazır talimatlar içerir ve ek derleme olmadan yürütülü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