Bitcode — adalah representasi perantara program pada tahap kompilasi aplikasi iOS. Berbeda dengan kode mesin, Bitcode tidak terikat pada arsitektur prosesor tertentu. Menurut Apple Developer Documentation, App Store dapat mengkompilasi ulang Bitcode untuk arsitektur target, yang meningkatkan kinerja dan mengurangi ukuran file instalasi. Pengembang mengirim Bitcode ke App Store, dan toko itu sendiri menghasilkan file biner yang dioptimalkan untuk setiap jenis perangkat.
Poin utama
Bitcode merupakan representasi perantara program (Intermediate Representation, IR) yang dihasilkan oleh infrastruktur kompiler LLVM. Apple memperkenalkan dukungan Bitcode mulai Xcode 7 dan iOS 9 sebagai persyaratan wajib untuk aplikasi watchOS dan opsional untuk iOS dan tvOS. Mulai Xcode 14, kewajiban tersebut dihapus untuk semua platform kecuali watchOS.
Konsep representasi kode perantara telah ada sejak tahun 2000-an dalam kerangka proyek LLVM, yang didirikan oleh Chris Lattner di University of Illinois. Apple mengadaptasi LLVM untuk Xcode pada tahun 2011, dan pada tahun 2015 memperkenalkan Bitcode sebagai cara untuk memperbarui aplikasi tanpa mengirim ulang ke App Store. Teknologi ini diumumkan di WWDC 2015 dalam sesi “What’s New in Xcode”.
Kode mesin — adalah instruksi biner untuk prosesor tertentu: arm64, armv7 atau x86_64. Bitcode disimpan dalam format yang tidak tergantung pada perangkat keras, memungkinkan App Store menghasilkan file biner yang dioptimalkan untuk berbagai arsitektur dari satu representasi sumber. Ini adalah perbedaan utama yang menentukan semua keunggulan teknologi.
| Karakteristik | Bitcode | Kode mesin |
|---|---|---|
| Ketergantungan pada arsitektur | Tidak tergantung | Terikat pada CPU |
| Ukuran file biner | Ringkas | Lebih besar |
| Kemungkinan rekompilasi | Ada | Tidak ada |
| Dukungan App Store | Dikompilasi ulang | Digunakan apa adanya |
| Debugging | Terbatas | Dukungan penuh |
Bitcode bukan file yang dapat dijalankan. Ini adalah LLVM IR dalam format biner yang dikirim pengembang ke App Store bersama dengan metadata proyek. Toko aplikasi memulai proses rekompilasi, menyesuaikan kode untuk setiap platform target dan versi sistem operasi.
Proses pembuatan Bitcode dimulai dengan frontend kompiler, yang mengubah kode sumber Swift atau Objective-C menjadi LLVM IR. Pada tahap linking, Xcode mengemas IR ke dalam file format .bc (Bitcode), yang kemudian dikirim ke App Store bersama dengan arsip .xcarchive. App Store, pada gilirannya, memulai proses rekompilasi di sisinya.
Infrastruktur LLVM terdiri dari tiga bagian: frontend (Clang untuk C/ObjC, Swift Frontend untuk Swift), pengoptimal Middle-End dan backend (generator kode mesin). Bitcode — adalah hasil dari dua tahap pertama tanpa beralih ke pembuatan instruksi assembly. Middle-End melakukan optimasi yang tidak tergantung platform: penghapusan kode mati, inlining dan folding konstanta.
// Contoh kode sumber Swift
func calculateSum(a: Int, b: Int) -> Int {
return a + b
}
// LLVM IR setelah kompilasi (disederhanakan)
; define i32 @calculateSum(i32 %a, i32 %b)
; %result = add i32 %a, %b
; ret i32 %result
Setelah menghasilkan IR, kompiler melakukan serangkaian optimasi pada tingkat representasi: penghapusan kode mati, inlining fungsi dan folding konstanta. Optimasi ini tidak tergantung pada arsitektur dan disimpan dalam Bitcode. Saat rekompilasi di App Store, optimasi yang tergantung arsitektur ditambahkan, seperti pengaturan ulang instruksi untuk prosesor tertentu.
App Store Connect menerima arsip dengan Bitcode dan memulai infrastruktur kompilasinya sendiri. Sistem menentukan arsitektur target perangkat pengguna dan menghasilkan kode mesin, mengoptimalkannya lebih lanjut untuk karakteristik spesifik prosesor. Untuk arm64e (prosesor A12+ dan seri M) diterapkan optimasi keamanan tambahan.
Proses ini disebut App Thinning — teknologi yang memungkinkan pengiriman hanya sumber daya dan kode yang diperlukan untuk arsitektur perangkat. Pengguna iPhone dengan prosesor A17 Pro menerima file biner yang dioptimalkan untuk arm64e, tanpa instruksi yang tidak perlu untuk arsitektur yang sudah usang. Ini memperpendek waktu muat dan menghemat ruang di perangkat.
Bitcode memberikan beberapa keuntungan utama bagi pengembang aplikasi iOS. Yang utama — optimasi otomatis untuk prosesor Apple baru tanpa menerbitkan ulang pembaruan di App Store. Ini sangat relevan saat beralih ke arsitektur baru, seperti transisi dari armv7 ke arm64.
Ketika Apple merilis prosesor dengan arsitektur baru, aplikasi yang dikirim dengan Bitcode secara otomatis dikompilasi ulang untuknya. Pengembang tidak perlu membangun ulang proyek dan menerbitkan pembaruan — App Store melakukannya di sisinya saat pertama kali diunduh oleh pengguna. Ini sangat penting untuk aplikasi berumur panjang yang didukung selama bertahun-tahun.
App Thinning dalam kombinasi dengan Bitcode memungkinkan pengurangan ukuran aplikasi yang diinstal sebesar 15–40%. App Store hanya menghasilkan instruksi mesin yang diperlukan untuk perangkat tertentu, mengecualikan kode untuk arsitektur lain dan variasi untuk berbagai versi iOS. Dalam praktiknya, ini berarti pengguna dengan iPhone baru menerima file biner yang ringkas.
Menurut data Apple WWDC 2015 Session 102, penggunaan Bitcode dan App Thinning dapat mengurangi ukuran aplikasi yang diunduh rata-rata sebesar 25% dibandingkan dengan file biner universal yang berisi semua arsitektur. Untuk aplikasi berukuran 100 MB, penghematan bisa mencapai 40 MB di perangkat pengguna.
Konfigurasi Bitcode dilakukan dalam konfigurasi build Xcode. Parameter Enable Bitcode berada di pengaturan Build Settings dan secara default diaktifkan untuk proyek baru, tetapi pengembang dapat menonaktifkannya untuk debugging atau saat menggunakan pustaka pihak ketiga tanpa dukungan Bitcode.
// Build Settings -> Apple Clang - Code Generation
// Enable Bitcode = YES
// Atau melalui Info.plist untuk target individu
@property (nonatomic, assign) BOOL enableBitcode;
- (void)configureBuildSettings {
// Memeriksa status Bitcode dalam konfigurasi
if (self.enableBitcode) {
NSLog(@"Bitcode is enabled for this target");
} else {
NSLog(@"Bitcode is disabled");
}
}
Untuk memeriksa apakah arsip berisi Bitcode, buka file .xcarchive melalui Xcode Organizer atau jalankan perintah otool -l di Terminal. Keberadaan seksi __LLVM dalam file biner mengonfirmasi bahwa Bitcode diaktifkan dan dikemas dengan benar. Jika seksi tidak ada — Bitcode tidak dihasilkan saat build.
# Memeriksa keberadaan Bitcode dalam arsip
otool -l YourApp.app/YourApp | grep __LLVM
# Hasil: jika ada seksi __LLVM — Bitcode ada
# Jika hasil kosong — Bitcode tidak diaktifkan atau tidak dihasilkan
# Juga dapat diperiksa melalui perintah size
size -m -l YourApp.app/YourApp | grep __LLVM
Saat menggunakan pustaka pihak ketiga melalui CocoaPods atau SPM, pastikan semua dependensi dibangun dengan Bitcode. Jika setidaknya satu pustaka tidak mendukung Bitcode, Xcode akan menghasilkan kesalahan linking pada tahap pengarsipan. Untuk CocoaPods, periksa flag bitcode_enabled di podspec atau gunakan use_frameworks! dengan enable_bitcode.
Bitcode bukan solusi universal untuk semua jenis proyek iOS. Teknologi ini memiliki keterbatasan yang harus dipertimbangkan pengembang sebelum mengaktifkan opsi dalam konfigurasi build. Memahami keterbatasan ini membantu menghindari masalah pada tahap pengarsipan dan publikasi.
Tidak semua pustaka pihak ketiga disertakan dengan dukungan Bitcode. Jika pustaka didistribusikan hanya sebagai file biner yang dikompilasi tanpa Bitcode, proyek dengan opsi yang diaktifkan tidak akan dibangun. Dalam kasus ini, pengembang harus menonaktifkan Bitcode atau meminta versi dengan Bitcode dari pemasok. Ini sangat relevan untuk pustaka lama yang tidak lagi diperbarui.
Laporan crash dari aplikasi yang dibangun dengan Bitcode memerlukan pemrosesan tambahan. Simbol (dSYM) untuk kode yang dikompilasi ulang dihasilkan oleh App Store dan tersedia untuk diunduh melalui Xcode Organizer. Tanpa mengunduh file dSYM yang sesuai, tumpukan panggilan dalam laporan crash tidak akan terbaca, yang mempersulit diagnosis masalah.
Mulai iOS 17 dan Xcode 15, Apple tidak mewajibkan pengaktifan Bitcode untuk publikasi di App Store. Namun, untuk aplikasi watchOS, Bitcode tetap menjadi persyaratan wajib yang ditetapkan pada tingkat aturan App Store Connect. Pengembang disarankan untuk mengaktifkan Bitcode untuk proyek baru, jika semua dependensi mendukungnya.
Pertanyaan yang sering diajukan
Untuk aplikasi iOS dan tvOS Bitcode tidak wajib mulai Xcode 14. Untuk watchOS dukungan Bitcode tetap wajib. Apple merekomendasikan mengaktifkan Bitcode untuk proyek baru, tetapi tidak memblokir publikasi tanpanya.
Bitcode memungkinkan App Store menerapkan App Thinning — pembuatan kode mesin hanya untuk arsitektur perangkat pengguna. Ini mengurangi ukuran file biner yang diunduh sebesar 15–40% tergantung pada jumlah arsitektur yang didukung dalam proyek.
Ya, file dSYM diperlukan untuk simbolisasi laporan crash dari file biner yang dikompilasi ulang. App Store menyediakan kemungkinan untuk mengunduh dSYM melalui Xcode Organizer setelah memproses arsip. Tanpa mereka, tumpukan panggilan di Crashlytics dan konsol hanya akan berisi alamat memori.
SPM mendukung Bitcode jika dependensi didistribusikan dalam kode sumber, bukan sebagai file biner. Dependensi biner melalui SPM harus menyediakan versi dengan Bitcode, jika tidak proyek dengan opsi yang diaktifkan tidak akan dikompilasi.
Bitcode — adalah representasi perantara LLVM IR yang tidak tergantung perangkat keras dan tidak dapat dijalankan langsung oleh prosesor. Kode mesin berisi instruksi siap pakai untuk arsitektur tertentu (arm64, x86_64) dan dijalankan tanpa kompilasi tambahan.
Kesimpulan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga