Bitcode: bu nədir, aralıq bayt-kod və kompilyasiya

Müəllif: IT Sectr Dərc olunub: 2026-04-17 Oxuma vaxtı: 9 dəq

Bitcode — iOS tətbiqinin kompilyasiya mərhələsində proqramın aralıq təsviridir. Maşın kodundan fərqli olaraq, Bitcode prosessorun konkret arxitekturasına bağlı deyil. Apple Developer Documentation-ya görə, App Store Bitcode-u hədəf arxitekturaya uyğun yenidən kompilyasiya edə bilir, bu da performansı artırır və quraşdırma faylının ölçüsünü azaldır. Tərtibatçı Bitcode-u App Store-a göndərir, mağaza isə hər bir cihaz növü üçün optimallaşdırılmış ikili fayl yaradır.

Əsas məqamlar

  • Bitcode — iOS layihəsinin kompilyasiya mərhələsində yaradılan aralıq LLVM bayt-kodu
  • App Store Bitcode-u istifadəçi cihazının prosessoru üçün yenidən kompilyasiya edir
  • Optimallaşdırma ikili fayl ölçüsü avadanlıqdan asılı təlimatlar hesabına azalır
  • Aktivləşdirmə Bitcode Xcode parametrlərində Enable Bitcode bayrağı ilə həyata keçirilir
  • Məhdudiyyət — Bitcode yalnız iOS və tvOS üçün dəstəklənir, macOS üçün deyil

iOS development-də Bitcode nədir

Bitcode LLVM kompilyator infrastrukturunun yaratdığı proqramın aralıq təsviridir (Intermediate Representation, IR). Apple Xcode 7 və iOS 9-dan başlayaraq Bitcode dəstəyini watchOS tətbiqləri üçün məcburi, iOS və tvOS üçün isə isteğe bağlı olaraq tətbiq etdi. Xcode 14-dən etibarən watchOS xaric bütün platformalar üçün məcburilik ləğv edildi.

Bitcode-un yaranma tarixi

Aralıq kod təsviri konsepsiyası 2000-ci illərdən LLVM layihəsi çərçivəsində mövcuddur. Layihə İllinoys Universitetində Kris Lattner tərəfindən yaradılmışdır. Apple 2011-ci ildə LLVM-i Xcode üçün uyğunlaşdırdı, 2015-ci ildə isə Bitcode-u App Store-a təkrar göndərmədən tətbiqləri yeniləmə üsulu kimi təqdim etdi. Texnologiya WWDC 2015-də “What’s New in Xcode” sessiyasında elan edildi.

Bitcode-un maşın kodundan fərqi

Maşın kodu — müəyyən prosessor üçün ikili təlimatlar dəstidir: arm64, armv7 və ya x86_64. Bitcode avadanlıqdan asılı olmayan formadda saxlanılır ki, bu da App Store-a bir mənbə təsvirindən müxtəlif arxitekturalar üçün optimallaşdırılmış ikili fayllar yaratmağa imkan verir. Bu, texnologiyanın bütün üstünlüklərini müəyyən edən əsas fərqdir.

XüsusiyyətBitcodeMaşın kodu
Arxitekturadan asılılıqAsılı deyilCPU-ya bağlıdır
İkili fayl ölçüsüYığcamDaha böyük
Yenidən kompilyasiya imkanıVarYoxdur
App Store dəstəyiYenidən kompilyasiya olunurOlduğu kimi istifadə olunur
DebugMəhdudTam dəstək

Bitcode icra olunan fayl deyil. Bu, tərtibatçının layihə metadatanları ilə birlikdə App Store-a göndərdiyi ikili formatda LLVM IR-dir. Tətbiq mağazası hər bir hədəf platforma və əməliyyat sistemi versiyası üçün kodu uyğunlaşdıraraq rekompilyasiya prosesini işə salır.

Bitcode iOS kompilyasiyasında necə işləyir

Bitcode yaradılması prosesi Swift və ya Objective-C mənbə kodunu LLVM IR-ə çevirən kompilyatorun frontendindən başlayır. Linkləmə mərhələsində Xcode IR-i .bc (Bitcode) formatlı fayllara yığır, sonra isə .xcarchive arxivi ilə birlikdə App Store-a göndərilir. App Store öz növbəsində öz tərəfində rekompilyasiya prosesini işə salır.

LLVM mərhələsi və aralıq kodun yaradılması

LLVM infrastrukturu üç hissədən ibarətdir: frontend (C/ObjC üçün Clang, Swift üçün Swift Frontend), Middle-End optimallaşdırıcısı və backend (maşın kodu yaradıcısı). Bitcode — ilk iki mərhələnin nəticəsidir, assembler təlimatlarının yaradılmasına keçilmir. Middle-End platformadan asılı olmayan optimallaşdırmalar həyata keçirir: ölü kodun silinməsi, inlining və sabitlərin yığılması.

swift
// Nümunə Swift mənbə kodu
func calculateSum(a: Int, b: Int) -> Int {
    return a + b
}

// Kompilyasiyadan sonra LLVM IR (sadələşdirilmiş)
; define i32 @calculateSum(i32 %a, i32 %b)
; %result = add i32 %a, %b
; ret i32 %result

IR yaradıldıqdan sonra kompilyator təsvir səviyyəsində bir sıra optimallaşdırmalar həyata keçirir: ölü kodun silinməsi, funksiyaların inliningi və sabitlərin yığılması. Bu optimallaşdırmalar arxitekturadan asılı deyil və Bitcode-da saxlanılır. App Store-da rekompilyasiya zamanı konkret prosessor üçün təlimatların yenidən düzülməsi kimi arxitekturadan asılı optimallaşdırmalar əlavə edilir.

App Store-da rekompilyasiya

App Store Connect Bitcode ilə arxivi qəbul edir və öz kompilyasiya infrastrukturunu işə salır. Sistem istifadəçi cihazının hədəf arxitekturasını müəyyən edir və maşın kodu yaradır, onu prosessorun konkret xüsusiyyətlərinə uyğun optimallaşdırır. Arm64e (A12+ və M seriyası prosessorlar) üçün əlavə təhlükəsizlik optimallaşdırmaları tətbiq olunur.

Bu proses App Thinning adlanır — cihaza yalnız onun arxitekturası üçün lazım olan resursları və kodu çatdırmağa imkan verən texnologiya. A17 Pro prosessoru olan iPhone istifadəçisi arm64e üçün optimallaşdırılmış, köhnəlmiş arxitekturalar üçün lazımsız təlimatlar olmadan ikili fayl alır. Bu, yükləmə müddətini qısaldır və cihazda yerə qənaət edir.

Bitcode istifadəsinin üstünlükləri

Bitcode iOS tətbiqi tərtibatçıları üçün bir neçə əsas üstünlük təmin edir. Əsas odur ki, App Store-da yeniləməni yenidən yerləşdirmədən Apple-ın yeni prosessorları altında avtomatik optimallaşdırmadır. Bu, xüsusilə armv7-dən arm64-ə keçid kimi yeni arxitekturalara keçid zamanı aktualdır.

Yeni arxitekturalar üçün optimallaşdırma

Apple yeni arxitekturaya malik prosessor buraxdıqda, Bitcode ilə göndərilmiş tətbiqlər avtomatik olaraq onun üçün yenidən kompilyasiya olunur. Tərtibatçı layihəni yenidən yığıb yeniləmə dərc etməli deyil — App Store bunu istifadəçi ilk dəfə yüklədikdə öz tərəfində edir. Bu, illərlə dəstəklənən uzunömürlü tətbiqlər üçün xüsusilə vacibdir.

İkili fayl ölçüsünün azaldılması

App Thinning Bitcode ilə birlikdə quraşdırılan tətbiqin ölçüsünü 15–40% azaltmağa imkan verir. App Store yalnız müəyyən cihaza lazım olan maşın təlimatlarını yaradır, digər arxitekturalar üçün kodu və müxtəlif iOS versiyaları üçün variantları istisna edir. Praktikada bu o deməkdir ki, yeni iPhone istifadəçisi yığcam ikili fayl alır.

Apple WWDC 2015 Session 102 məlumatlarına görə, Bitcode və App Thinning istifadəsi bütün arxitekturaları ehtiva edən universal ikili faylla müqayisədə yüklənən tətbiqin ölçüsünü orta hesabla 25% azalda bilər. 100 MB ölçülü tətbiq üçün qənaət istifadəçi cihazında 40 MB-a qədər ola bilər.

  • Avtomatik adaptasiya yeni prosessorlar altında layihənin tərtibatçı tərəfindən yenidən yığılması olmadan
  • Yükləmə vaxtının azaldılması istifadəçi cihazında tətbiqin
  • Distribusiyanın sadələşdirilməsi — bütün arxitekturalar üçün bir arxiv, bir metadata dəsti
  • Gələcək uyğunluq — tətbiq hələ buraxılmamış Apple prosessorlarında işləyir

Xcode layihəsində Bitcode-u necə aktivləşdirmək

Bitcode qurulması Xcode kompilyasiya konfiqurasiyasında həyata keçirilir. Enable Bitcode parametri Build Settings parametrlərində yerləşir və yeni layihələr üçün standart olaraq aktivdir, lakin tərtibatçılar debug zamanı və ya Bitcode dəstəyi olmayan üçüncü tərəf kitabxanalarından istifadə edərkən onu söndürə bilərlər.

Build Settings vasitəsilə qurulma

objective-c
// Build Settings -> Apple Clang - Code Generation
// Enable Bitcode = YES

// Və ya ayrı-ayrı targetlər üçün Info.plist vasitəsilə
@property (nonatomic, assign) BOOL enableBitcode;
- (void)configureBuildSettings {
    // Konfiqurasiyada Bitcode statusunun yoxlanması
    if (self.enableBitcode) {
        NSLog(@"Bitcode is enabled for this target");
    } else {
        NSLog(@"Bitcode is disabled");
    }
}

Arxivin Bitcode ehtiva edib-etmədiyini yoxlamaq üçün .xcarchive faylını Xcode Organizer vasitəsilə açın və ya Terminalda otool -l əmrini icra edin. İkili faylda __LLVM bölməsinin olması Bitcode-un aktiv olduğunu və düzgün paketləndiyini təsdiqləyir. Bölmə yoxdursa — Bitcode kompilyasiya zamanı yaradılmayıb.

Terminal vasitəsilə yoxlama

bash
# Arxivdə Bitcode-un olmasının yoxlanması
otool -l YourApp.app/YourApp | grep __LLVM

# Nəticə: __LLVM bölməsi varsa — Bitcode mövcuddur
# Nəticə boşdursa — Bitcode aktiv deyil və ya yaradılmayıb

# Həmçinin size əmri ilə yoxlamaq olar
size -m -l YourApp.app/YourApp | grep __LLVM

CocoaPods və ya SPM vasitəsilə üçüncü tərəf kitabxanalarından istifadə edərkən bütün asılılıqların Bitcode ilə yığıldığına əmin olun. Ən azı bir kitabxana Bitcode-u dəstəkləmirsə, Xcode arxivləşdirmə mərhələsində linkləmə xətası yaradacaq. CocoaPods üçün podspec-lərdə bitcode_enabled bayrağını yoxlayın və ya enable_bitcode ilə use_frameworks! istifadə edin.

Bitcode-un məhdudiyyətləri və tələləri

Bitcode bütün iOS layihə növləri üçün universal həll deyil. Texnologiyanın məhdudiyyətləri var ki, tərtibatçı kompilyasiya konfiqurasiyasında seçimi aktivləşdirməzdən əvvəl nəzərə almalıdır. Bu məhdudiyyətləri başa düşmək arxivləşdirmə və dərc mərhələsində problemlərin qarşısını almağa kömək edir.

Kitabxanalarla uyğunluq

Bütün üçüncü tərəf kitabxanaları Bitcode dəstəyi ilə təmin edilmir. Əgər kitabxana yalnız Bitcode olmadan kompilyasiya olunmuş ikili fayl şəklində yayılırsa, aktiv seçimi olan layihə yığılmayacaq. Bu halda tərtibatçı ya Bitcode-u söndürməli, ya da təchizatçıdan Bitcode versiyasını tələb etməlidir. Bu, xüsusilə artıq yenilənməyən köhnə kitabxanalar üçün aktualdır.

Debug və qəza hesabatları

Qəza hesabatları Bitcode ilə yığılmış tətbiqlərdən əlavə emal tələb edir. Yenidən kompilyasiya olunmuş kod üçün simvollar (dSYM) App Store tərəfindən yaradılır və Xcode Organizer vasitəsilə yükləmək üçün əlçatandır. Müvafiq dSYM faylları yüklənmədən qəza hesabatlarında çağırış yığını oxunmaz olacaq, bu da problemlərin diaqnostikasını çətinləşdirir.

  • dSYM yükləmə — rekompilyasiyadan sonra App Store-dan qəza jurnallarını deşifrə etmək üçün məcburidir
  • Arxiv ölçüsü — .xcarchive Bitcode ilə tərtibatçının diskində daha çox yer tutur
  • Kompilyasiya vaxtı — Bitcode yaradılması layihənin kompilyasiya mərhələsini təxminən 10–15% uzadır
  • macOS — Bitcode macOS və watchOS tətbiqləri üçün dəstəklənmir
  • Köhnəlmiş layihələr — böyük layihələrin miqrasiyası bütün asılılıqların yenilənməsini tələb edə bilər

iOS 17 və Xcode 15-ə əsasən Apple App Store-da dərc üçün Bitcode-un məcburi aktivləşdirilməsini tələb etmir. Lakin watchOS tətbiqləri üçün Bitcode App Store Connect qaydaları səviyyəsində müəyyən edilmiş məcburi şərt olaraq qalır. Tərtibatçılara bütün asılılıqlar onu dəstəkləyirsə, yeni layihələr üçün Bitcode-u aktivləşdirmək tövsiyə olunur.

Tez-tez verilən suallar

App Store-da dərc etmək üçün Bitcode-u aktivləşdirmək məcburidirmi?

iOS və tvOS tətbiqləri üçün Bitcode Xcode 14-dən etibarən məcburi deyil. watchOS üçün Bitcode dəstəyi məcburi olaraq qalır. Apple yeni layihələr üçün Bitcode-u aktivləşdirməyi tövsiyə edir, lakin onsuz dərci bloklamır.

Bitcode App Store-da tətbiq ölçüsünə necə təsir edir?

Bitcode App Store-a App Thinning tətbiq etməyə imkan verir — yalnız istifadəçi cihazının arxitekturası üçün maşın kodu yaradılması. Bu, yüklənən ikili faylın ölçüsünü layihədə dəstəklənən arxitekturaların sayından asılı olaraq 15–40% azaldır.

Bitcode aktiv olduqda dSYM fayllarını yükləmək lazımdırmı?

Bəli, dSYM faylları yenidən kompilyasiya olunmuş ikili fayllardan qəza hesabatlarını simvolizə etmək üçün vacibdir. App Store arxiv işləndikdən sonra Xcode Organizer vasitəsilə dSYM yükləmək imkanı verir. Onlar olmadan Crashlytics və konsolda çağırış yığını yalnız yaddaş ünvanlarını ehtiva edəcək.

Swift Package Manager Bitcode-u dəstəkləyirmi?

SPM Bitcode-u dəstəkləyir, əgər asılılıqlar ikili fayllar şəklində deyil, mənbə kodunda yayılırsa. SPM vasitəsilə ikili asılılıqlar Bitcode ilə versiya təmin etməlidir, əks halda aktiv seçimi olan layihə kompilyasiya olunmayacaq.

Bitcode adi maşın kodundan nə ilə fərqlənir?

Bitcode — prosessor tərəfindən birbaşa icra oluna bilməyən avadanlıqdan asılı olmayan aralıq LLVM IR təsviridir. Maşın kodu konkret arxitektura (arm64, x86_64) üçün hazır təlimatlar ehtiva edir və əlavə kompilyasiya olmadan icra olunur.

Nəticə

  • Bitcode — Xcode-da iOS tətbiqlərinin kompilyasiyası zamanı yaradılan aralıq LLVM IR təsviri
  • App Store Bitcode-u istifadəçi cihazının arxitekturası üçün yenidən kompilyasiya edir, App Thinning tətbiq edir
  • Yüklənən tətbiqin ölçüsü lazımsız maşın təlimatlarının xaric edilməsi hesabına 15–40% azalır
  • Yeni Apple prosessorları tərtibatçı tərəfindən yeniləmənin yenidən dərci olmadan avtomatik dəstəklənir
  • Bitcode aktivləşdirilməsi Xcode layihəsinin Build Settings-də Enable Bitcode bayrağı vasitəsilə konfiqurasiya olunur
  • Məhdudiyyətlər qəza hesabatları üçün dSYM fayllarının zəruriliyini və bütün üçüncü tərəf kitabxanalarının uyğunluğunu əhatə edir
  • Tövsiyə — bütün istifadə olunan asılılıqların dəstəyini yoxlamaqla yeni layihələr üçün Bitcode-u aktivləşdirmək

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun