Bitcode — iOS ilovasini kompilyatsiya qilish bosqichida dasturning oraliq ko'rinishidir. Mashina kodidan farqli o'laroq, Bitcode protsessorning muayyan arxitekturasiga bog'liq emas. Apple Developer Documentation ma'lumotlariga ko'ra, App Store Bitcode-ni maqsadli arxitektura uchun qayta kompilyatsiya qilishi mumkin, bu esa ish faoliyatini yaxshilaydi va o'rnatish fayli hajmini kamaytiradi. Dasturchi Bitcode-ni App Store-ga yuboradi, do'kon esa har bir qurilma turi uchun optimallashtirilgan ikkilik faylni yaratadi.
Asosiy fikrlar
Bitcode LLVM kompilyator infratuzilmasi tomonidan yaratilgan dasturning oraliq ko'rinishidir (Intermediate Representation, IR). Apple Xcode 7 va iOS 9 dan boshlab Bitcode qo'llab-quvvatlashni watchOS ilovalari uchun majburiy, iOS va tvOS uchun esa ixtiyoriy talab sifatida joriy qildi. Xcode 14 dan boshlab watchOS dan tashqari barcha platformalar uchun majburiyat bekor qilindi.
Oraliq kod ko'rinishi kontseptsiyasi 2000-yillardan boshlab LLVM loyihasi doirasida mavjud bo'lib, unga Illinoys universitetida Kris Lattner asos solgan. Apple 2011 yilda LLVM-ni Xcode uchun moslashtirdi, 2015 yilda esa Bitcode-ni App Store-ga qayta yubormasdan ilovalarni yangilash usuli sifatida taqdim etdi. Texnologiya WWDC 2015 da “What’s New in Xcode” sessiyasida e'lon qilindi.
Mashina kodi — ma'lum protsessor uchun ikkilik ko'rsatmalar: arm64, armv7 yoki x86_64. Bitcode apparatdan mustaqil formatda saqlanadi, bu esa App Store-ga bitta manba ko'rinishidan turli arxitekturalar uchun optimallashtirilgan ikkilik fayllarni yaratishga imkon beradi. Bu texnologiyaning barcha afzalliklarini belgilaydigan asosiy farqdir.
| Xususiyat | Bitcode | Mashina kodi |
|---|---|---|
| Arxitekturaga bog'liqlik | Mustaqil | CPU ga bog'liq |
| Ikkilik fayl hajmi | Yilqam | Kattaroq |
| Qayta kompilyatsiya imkoniyati | Bor | Yo'q |
| App Store qo'llab-quvvatlashi | Qayta kompilyatsiya qilinadi | O'zidek ishlatiladi |
| Disk raskadrovka | Cheklangan | To'liq qo'llab-quvvatlash |
Bitcode bajariladigan fayl emas. Bu dasturchi loyiha metama'lumotlari bilan birga App Store-ga yuboradigan ikkilik formatdagi LLVM IR dir. Ilovalar do'koni qayta kompilyatsiya jarayonini ishga tushiradi va kodni har bir maqsadli platforma va operatsion tizim versiyasiga moslashtiradi.
Bitcode yaratish jarayoni Swift yoki Objective-C manba kodini LLVM IR ga aylantiruvchi kompilyator frontendidan boshlanadi. Bog'lash bosqichida Xcode IR ni .bc (Bitcode) formatidagi fayllarga to'playdi, keyin esa .xcarchive arxivi bilan birga App Store-ga yuboriladi. App Store o'z navbatida o'z tarafida qayta kompilyatsiya jarayonini ishga tushiradi.
LLVM infratuzilmasi uch qismdan iborat: frontend (C/ObjC uchun Clang, Swift uchun Swift Frontend), Middle-End optimallashtiruvchisi va backend (mashina kodi yaratuvchisi). Bitcode — birinchi ikki bosqichning natijasi bo'lib, assembler ko'rsatmalarini yaratishga o'tilmaydi. Middle-End platformadan mustaqil optimallashtirishlarni amalga oshiradi: o'lik kodni olib tashlash, inlining va konstantalarni yig'ish.
// Swift manba kodi namunasi
func calculateSum(a: Int, b: Int) -> Int {
return a + b
}
// Kompilyatsiyadan so'ng LLVM IR (soddalashtirilgan)
; define i32 @calculateSum(i32 %a, i32 %b)
; %result = add i32 %a, %b
; ret i32 %result
IR yaratilgandan so'ng, kompilyator ko'rinish darajasida bir qator optimallashtirishlarni amalga oshiradi: o'lik kodni olib tashlash, funksiyalarni inlining qilish va konstantalarni yig'ish. Bu optimallashtirishlar arxitekturaga bog'liq emas va Bitcode-da saqlanadi. App Store-da qayta kompilyatsiya paytida ma'lum protsessor uchun ko'rsatmalarni qayta tartibga solish kabi arxitekturaga bog'liq optimallashtirishlar qo'shiladi.
App Store Connect Bitcode bilan arxivni qabul qiladi va o'z kompilyatsiya infratuzilmasini ishga tushiradi. Tizim foydalanuvchi qurilmasining maqsadli arxitekturasini aniqlaydi va mashina kodini yaratadi, uni protsessorning muayyan xususiyatlariga qo'shimcha optimallashtiradi. Arm64e (A12+ va M seriyasi protsessorlar) uchun qo'shimcha xavfsizlik optimallashtirishlari qo'llaniladi.
Bu jarayon App Thinning deb ataladi — qurilmaga faqat uning arxitekturasi uchun zarur bo'lgan resurslar va kodni yetkazib berish imkonini beruvchi texnologiya. A17 Pro protsessorli iPhone foydalanuvchisi arm64e uchun optimallashtirilgan, eskirgan arxitekturalar uchun keraksiz ko'rsatmalarsiz ikkilik fayl oladi. Bu yuklash vaqtini qisqartiradi va qurilmada joyni tejaydi.
Bitcode iOS ilovalari dasturchilari uchun bir nechta asosiy afzalliklarni taqdim etadi. Ulardan asosiysi — App Store-da yangilanishni qayta joylashtirmasdan yangi Apple protsessorlari uchun avtomatik optimallashtirish. Bu, ayniqsa, armv7 dan arm64 ga o'tish kabi yangi arxitekturalarga o'tishda dolzarbdir.
Apple yangi arxitektura ga ega protsessorni chiqarganda, Bitcode bilan yuborilgan ilovalar avtomatik ravishda u uchun qayta kompilyatsiya qilinadi. Dasturchi loyihani qayta yig'ib, yangilanishni nashr qilishi shart emas — App Store buni foydalanuvchi birinchi yuklaganda o'z tarafida bajaradi. Bu, ayniqsa, yillar davomida qo'llab-quvvatlanadigan uzoq muddatli ilovalar uchun muhimdir.
App Thinning Bitcode bilan birgalikda o'rnatilgan ilova hajmini 15–40% gacha kamaytirish imkonini beradi. App Store faqat ma'lum qurilmaga kerak bo'lgan mashina ko'rsatmalarini yaratadi, boshqa arxitekturalar uchun kodni va turli iOS versiyalari uchun variantlarni istisno qiladi. Amalda bu yangi iPhone foydalanuvchisi yilqam ikkilik fayl olishini anglatadi.
Apple WWDC 2015 Session 102 ma'lumotlariga ko'ra, Bitcode va App Thinning dan foydalanish barcha arxitekturalarni o'z ichiga olgan universal ikkilik fayl bilan solishtirganda yuklanadigan ilova hajmini o'rtacha 25% ga kamaytirishi mumkin. 100 MB hajmli ilova uchun tejamkorlik foydalanuvchi qurilmasida 40 MB gacha bo'lishi mumkin.
Bitcode sozlash Xcode kompilyatsiya konfiguratsiyasida amalga oshiriladi. Enable Bitcode parametri Build Settings sozlamalarida joylashgan va yangi loyihalar uchun sukut bo'yicha yoqilgan, ammo dasturchilar disk raskadrovka paytida yoki Bitcode qo'llab-quvvatlamaydigan uchinchi tomon kutubxonalaridan foydalanganda uni o'chirib qo'yishlari mumkin.
// Build Settings -> Apple Clang - Code Generation
// Enable Bitcode = YES
// Yoki alohida targetlar uchun Info.plist orqali
@property (nonatomic, assign) BOOL enableBitcode;
- (void)configureBuildSettings {
// Konfiguratsiyada Bitcode holatini tekshirish
if (self.enableBitcode) {
NSLog(@"Bitcode is enabled for this target");
} else {
NSLog(@"Bitcode is disabled");
}
}
Arxivda Bitcode borligini tekshirish uchun .xcarchive faylini Xcode Organizer orqali oching yoki Terminalda otool -l buyrug'ini bajaring. Ikkilik faylda __LLVM bo'limining mavjudligi Bitcode yoqilganligini va to'g'ri paketlanganligini tasdiqlaydi. Agar bo'lim bo'lmasa — Bitcode kompilyatsiya paytida yaratilmagan.
# Arxivda Bitcode mavjudligini tekshirish
otool -l YourApp.app/YourApp | grep __LLVM
# Natija: __LLVM bo'limi bo'lsa — Bitcode mavjud
# Agar natija bo'sh bo'lsa — Bitcode yoqilmagan yoki yaratilmagan
# Shuningdek size buyrug'i orqali tekshirish mumkin
size -m -l YourApp.app/YourApp | grep __LLVM
CocoaPods yoki SPM orqali uchinchi tomon kutubxonalaridan foydalanganda, barcha bog'liqliklar Bitcode bilan yig'ilganligiga ishonch hosil qiling. Agar kamida bitta kutubxona Bitcode-ni qo'llab-quvvatlamasa, Xcode arxivlash bosqichida bog'lash xatosini keltirib chiqaradi. CocoaPods uchun podspec-larda bitcode_enabled bayrog'ini tekshiring yoki enable_bitcode bilan use_frameworks! dan foydalaning.
Bitcode barcha iOS loyiha turlari uchun universal yechim emas. Texnologiya dasturchi kompilyatsiya konfiguratsiyasida parametrni yoqishdan oldin hisobga olishi kerak bo'lgan cheklovlarga ega. Bu cheklovlarni tushunish arxivlash va nashr qilish bosqichida muammolarni oldini olishga yordam beradi.
Barcha uchinchi tomon kutubxonalari Bitcode qo'llab-quvvatlashi bilan ta'minlanmagan. Agar kutubxona faqat Bitcode-siz kompilyatsiya qilingan ikkilik fayl shaklida tarqatilsa, yoqilgan parametr bilan loyiha yig'ilmaydi. Bunday holda dasturchi yo Bitcode-ni o'chirishi yoki yetkazib beruvchidan Bitcode versiyasini so'rashi kerak. Bu, ayniqsa, endi yangilanmaydigan eski kutubxonalar uchun dolzarbdir.
Nosozlik hisobotlari Bitcode bilan yig'ilgan ilovalardan qo'shimcha ishlov berishni talab qiladi. Qayta kompilyatsiya qilingan kod uchun simvollar (dSYM) App Store tomonidan yaratiladi va Xcode Organizer orqali yuklab olish uchun mavjud. Tegishli dSYM fayllari yuklanmasa, nosozlik hisobotlaridagi qo'ng'iroqlar to'plami o'qib bo'lmaydigan bo'ladi, bu muammolarni tashxislashni qiyinlashtiradi.
iOS 17 va Xcode 15 ga ko'ra, Apple App Store-da nashr qilish uchun Bitcode-ni majburiy yoqishni talab qilmaydi. Biroq, watchOS ilovalari uchun Bitcode App Store Connect qoidalari darajasida belgilangan majburiy shart bo'lib qoladi. Dasturchilarga barcha bog'liqliklar uni qo'llab-quvvatlasa, yangi loyihalar uchun Bitcode-ni yoqish tavsiya etiladi.
Tez-tez beriladigan savollar
iOS va tvOS ilovalari uchun Bitcode Xcode 14 dan boshlab majburiy emas. watchOS uchun Bitcode qo'llab-quvvatlashi majburiy bo'lib qoladi. Apple yangi loyihalar uchun Bitcode-ni yoqishni tavsiya qiladi, lekin usiz nashr qilishni bloklamaydi.
Bitcode App Store-ga App Thinning ni qo'llash imkonini beradi — faqat foydalanuvchi qurilmasi arxitekturasi uchun mashina kodini yaratish. Bu yuklanadigan ikkilik fayl hajmini loyihada qo'llab-quvvatlanadigan arxitekturalar soniga qarab 15–40% ga kamaytiradi.
Ha, dSYM fayllari qayta kompilyatsiya qilingan ikkilik fayllardan nosozlik hisobotlarini simvollashtirish uchun zarur. App Store arxivni qayta ishlagandan so'ng Xcode Organizer orqali dSYM yuklab olish imkoniyatini beradi. Ularsiz Crashlytics va konsoldagi qo'ng'iroqlar to'plami faqat manzil xotira manzillarini o'z ichiga oladi.
SPM Bitcode-ni qo'llab-quvvatlaydi, agar bog'liqliklar ikkilik fayllar shaklida emas, balki manba kodida tarqatilsa. SPM orqali ikkilik bog'liqliklar Bitcode bilan versiyani taqdim etishi kerak, aks holda yoqilgan parametr bilan loyiha kompilyatsiya qilinmaydi.
Bitcode — protsessor tomonidan to'g'ridan-to'g'ri bajarilmaydigan apparatdan mustaqil oraliq LLVM IR ko'rinishidir. Mashina kodi ma'lum arxitektura (arm64, x86_64) uchun tayyor ko'rsatmalarni o'z ichiga oladi va qo'shimcha kompilyatsiyasiz bajariladi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.