Bitcode: bu nima, oraliq bayt-kod va kompilyatsiya

Muallif: IT Sectr Nashr etilgan: 2026-04-17 O'qish vaqti: 9 daq

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 — iOS loyihasini kompilyatsiya qilish bosqichida yaratilgan oraliq LLVM bayt-kodi
  • App Store Bitcode-ni foydalanuvchi qurilmasi protsessori uchun qayta kompilyatsiya qiladi
  • Optimallashtirish ikkilik fayl hajmi apparatga bog'liq ko'rsatmalar hisobiga erishiladi
  • Yoqish Bitcode Xcode sozlamalarida Enable Bitcode bayrog'i orqali amalga oshiriladi
  • Cheklov — Bitcode faqat iOS va tvOS uchun qo'llab-quvvatlanadi, macOS uchun emas

iOS dasturlashda Bitcode nima

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.

Bitcode-ning paydo bo'lish tarixi

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.

Bitcode-ning mashina kodidan farqi

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.

XususiyatBitcodeMashina kodi
Arxitekturaga bog'liqlikMustaqilCPU ga bog'liq
Ikkilik fayl hajmiYilqamKattaroq
Qayta kompilyatsiya imkoniyatiBorYo'q
App Store qo'llab-quvvatlashiQayta kompilyatsiya qilinadiO'zidek ishlatiladi
Disk raskadrovkaCheklanganTo'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 iOS kompilyatsiyasida qanday ishlaydi

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 bosqichi va oraliq kod yaratish

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
// 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-da qayta kompilyatsiya

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-dan foydalanishning afzalliklari

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.

Yangi arxitekturalar uchun optimallashtirish

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.

Ikkilik fayl hajmini kamaytirish

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.

  • Avtomatik moslashish dasturchi tomonidan loyihani qayta yig'masdan yangi protsessorlar uchun
  • Yuklash vaqtini qisqartirish foydalanuvchi qurilmasida ilovaning
  • Tarqatishni soddalashtirish — barcha arxitekturalar uchun bitta arxiv, bitta metama'lumotlar to'plami
  • Kelajak muvofiqligi — ilova hali chiqarilmagan Apple protsessorlarida ishlaydi

Xcode loyihasida Bitcode-ni qanday yoqish

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 orqali sozlash

objective-c
// 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.

Terminal orqali tekshirish

bash
# 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-ning cheklovlari va tuzoqlari

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.

Kutubxonalar bilan muvofiqlik

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.

Disk raskadrovka va nosozlik hisobotlari

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.

  • dSYM yuklash — qayta kompilyatsiyadan so'ng App Store-dan nosozlik jurnallarini deshifrlash uchun majburiy
  • Arxiv hajmi — .xcarchive Bitcode bilan dasturchi diskida ko'proq joy egallaydi
  • Kompilyatsiya vaqti — Bitcode yaratish loyihaning kompilyatsiya bosqichini taxminan 10–15% ga uzaytiradi
  • macOS — Bitcode macOS va watchOS ilovalari uchun qo'llab-quvvatlanmaydi
  • Eski loyihalar — katta loyihalarni migratsiya qilish barcha bog'liqliklarni yangilashni talab qilishi mumkin

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

App Store-ga nashr qilish uchun Bitcode-ni yoqish majburiymi?

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-da ilova hajmiga qanday ta'sir qiladi?

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.

Bitcode yoqilganida dSYM fayllarini yuklash kerakmi?

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.

Swift Package Manager Bitcode-ni qo'llab-quvvatlaydimi?

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 oddiy mashina kodidan nimasi bilan farq qiladi?

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

  • Bitcode — Xcode da iOS ilovalarini kompilyatsiya qilishda yaratilgan oraliq LLVM IR ko'rinishi
  • App Store Bitcode-ni foydalanuvchi qurilmasi arxitekturasi uchun qayta kompilyatsiya qiladi, App Thinning ni qo'llab
  • Yuklanadigan ilova hajmi keraksiz mashina ko'rsatmalarini chiqarib tashlash hisobiga 15–40% ga kamayadi
  • Yangi Apple protsessorlari dasturchi tomonidan yangilanishni qayta nashr qilmasdan avtomatik qo'llab-quvvatlanadi
  • Bitcode yoqish Xcode loyihasining Build Settings da Enable Bitcode bayrog'i orqali sozlanadi
  • Cheklovlar nosozlik hisobotlari uchun dSYM fayllari zarurligini va barcha uchinchi tomon kutubxonalarining muvofiqligini o'z ichiga oladi
  • Tavsiya — barcha ishlatilgan bog'liqliklarning qo'llab-quvvatlashini tekshirib, yangi loyihalar uchun Bitcode-ni yoqish

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.

Loyihani muhokama qilish

Shuningdek o'qing