Bitcode: มันคืออะไร ไบต์โค้ดระดับกลางและการคอมไพล์

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-04-17 เวลาอ่าน: 9 นาที

Bitcode — คือการแสดงผลโปรแกรมระดับกลางในขั้นตอนการคอมไพล์แอปพลิเคชัน iOS ซึ่งแตกต่างจากโค้ดเครื่อง Bitcode ไม่ได้ผูกติดกับสถาปัตยกรรมโปรเซสเซอร์เฉพาะ จากข้อมูลของ Apple Developer Documentation, App Store สามารถคอมไพล์ Bitcode ใหม่ภายใต้สถาปัตยกรรมเป้าหมาย ซึ่งช่วยเพิ่มประสิทธิภาพและลดขนาดไฟล์ติดตั้ง นักพัฒนาส่ง Bitcode ไปยัง App Store และร้านค้าจะสร้างไฟล์ไบนารีที่ปรับแต่งให้เหมาะสมสำหรับอุปกรณ์แต่ละประเภท

หัวข้อสำคัญ

  • Bitcode — ไบต์โค้ดระดับกลางของ LLVM ที่สร้างขึ้นในขั้นตอนการคอมไพล์โปรเจกต์ iOS
  • App Store คอมไพล์ Bitcode ใหม่ภายใต้โปรเซสเซอร์ของอุปกรณ์ผู้ใช้
  • การเพิ่มประสิทธิภาพ ขนาดของไฟล์ไบนารีเกิดขึ้นได้จากคำสั่งที่ขึ้นอยู่กับฮาร์ดแวร์
  • การเปิดใช้งาน Bitcode ทำได้ในการตั้งค่า Xcode ผ่านแฟลก Enable Bitcode
  • ข้อจำกัด — Bitcode รองรับเฉพาะ iOS และ tvOS เท่านั้น ไม่รองรับ macOS

Bitcode ในการพัฒนา iOS คืออะไร

Bitcode คือการแสดงผลโปรแกรมระดับกลาง (Intermediate Representation, IR) ที่สร้างขึ้นโดยโครงสร้างพื้นฐานของคอมไพเลอร์ LLVM Apple นำการสนับสนุน Bitcode มาใช้ตั้งแต่ Xcode 7 และ iOS 9 โดยเป็นข้อกำหนดจำเป็นสำหรับแอปพลิเคชัน watchOS และเป็นตัวเลือกสำหรับ iOS และ tvOS ตั้งแต่ Xcode 14 ความจำเป็นได้ถูกยกเลิกสำหรับทุกแพลตฟอร์มยกเว้น watchOS

ประวัติของ Bitcode

แนวคิดการแสดงโค้ดระดับกลางมีมาตั้งแต่ทศวรรษ 2000 ภายใต้โครงการ LLVM ที่ก่อตั้งโดย Chris Lattner ที่มหาวิทยาลัยอิลลินอยส์ Apple ได้ปรับใช้ LLVM สำหรับ Xcode ในปี 2011 และในปี 2015 ได้เผยแพร่ Bitcode เป็นวิธีการอัปเดตแอปพลิเคชันโดยไม่ต้องส่งไปยัง App Store ใหม่ เทคโนโลยีได้ประกาศใน WWDC 2015 ในเซสชัน «What's New in Xcode»

ความแตกต่างระหว่าง Bitcode กับโค้ดเครื่อง

โค้ดเครื่อง — คือคำสั่งไบนารีสำหรับโปรเซสเซอร์เฉพาะ: arm64, armv7 หรือ x86_64 Bitcode ถูกเก็บในรูปแบบที่ไม่ขึ้นกับฮาร์ดแวร์ ทำให้ App Store Converts สามารถสร้างไฟล์ไบนารีที่เพิ่มประสิทธิภาพสำหรับสถาปัตยกรรมที่แตกต่างกันจากการแสดงผลต้นฉบับเดียวกัน นี่คือข้อแตกต่างสำคัญที่กำหนดข้อดีทั้งหมดของเทคโนโลยี

ลักษณะBitcodeโค้ดเครื่อง
การพึ่งพาสถาปัตยกรรมไม่ขึ้นอยู่ผูกติดกับ CPU
ขนาดไฟล์ไบนารีกะทัดรัดมากกว่า
ความสามารถในการรีคอมไพล์มีไม่มี
การสนับสนุน App Storeรีคอมไพล์ได้ใช้ตามสภาพ
การดีบักจำกัดรองรับเต็มที่

Bitcode ไม่ใช่ไฟล์ที่สามารถทำงานได้ มันคือ LLVM IR ในรูปแบบไบนารีที่นักพัฒนาส่งไปยัง App Store พร้อมกับเมตาดาต้าของโปรเจกต์ ร้านค้าแอปพลิเคชันจะเริ่มกระบวนการรีคอมไพล์ ปรับโค้ดให้เหมาะกับแต่ละแพลตฟอร์มเป้าหมายและเวอร์ชันของระบบปฏิบัติการ

Bitcode ทำงานอย่างไรในการคอมไพล์ iOS

กระบวนการสร้าง Bitcode เริ่มต้นด้วยฟรอนท์เอนด์ของคอมไพเลอร์ ซึ่งแปลงซอร์สโค้ด Swift หรือ Objective-C เป็น LLVM IR ในขั้นตอนการลิงก์ Xcode จะบรรจุ IR เป็นไฟล์รูปแบบ .bc (Bitcode) ซึ่งจะถูกส่งไปยัง App Store พร้อมกับไฟล์เก็บถาวร .xcarchive App Store จะเริ่มกระบวนการรีคอมไพล์ในฝ่ายของตน

ขั้นตอน LLVM และการสร้างโค้ดระดับกลาง

โครงสร้างพื้นฐาน LLVM ประกอบด้วยสามส่วน: ฟรอนท์เอนด์ (Clang สำหรับ C/ObjC, Swift Frontend สำหรับ Swift), ตัวปรับแต่ง Middle-End และแบ็คเอนด์ (ตัวสร้างโค้ดเครื่อง) Bitcode คือผลลัพธ์ของสองขั้นตอนแรกโดยไม่ต้องเข้าสู่การสร้างคำสั่งแอสเซมบลี Middle-End ทำการปรับแต่งที่ไม่ขึ้นกับแพลตฟอร์ม: การลบโค้ดที่ตายแล้ว การอินไลน์และการรวมค่าคงที่

swift
// ตัวอย่างซอร์สโค้ด Swift
func calculateSum(a: Int, b: Int) -> Int {
    return a + b
}

// LLVM IR หลังการคอมไพล์ (โดยย่อ)
; define i32 @calculateSum(i32 %a, i32 %b)
; %result = add i32 %a, %b
; ret i32 %result

หลังจากการสร้าง IR คอมไพเลอร์จะดำเนินการชุดต่างๆ ของการปรับแต่งในระดับการแสดงผล: การลบโค้ดที่ตายแล้ว การอินไลน์ฟังก์ชันและการรวมค่าคงที่ การปรับแต่งเหล่านี้ไม่ขึ้นกับสถาปัตยกรรมและจะถูกเก็บไว้ใน Bitcode เมื่อรีคอมไพล์ใน App Store จะเพิ่มการปรับแต่งที่ขึ้นกับสถาปัตยกรรม เช่น การเรียงคำสั่งใหม่สำหรับโปรเซสเซอร์เฉพาะ

การรีคอมไพล์ใน App Store

App Store Connect รับไฟล์เก็บถาวรที่มี Bitcode และเริ่มโครงสร้างพื้นฐานการคอมไพล์ของตัวเอง ระบบจะระบุสถาปัตยกรรมเป้าหมายของอุปกรณ์ผู้ใช้และสร้างโค้ดเครื่อง โดยปรับแต่งเพิ่มเติมตามคุณสมบัติเฉพาะของโปรเซสเซอร์ สำหรับ arm64e (โปรเซสเซอร์ A12+ และ M-series) จะใช้การปรับแต่งความปลอดภัยเพิ่มเติม

กระบวนการนี้เรียกว่า App Thinning — เทคโนโลยีที่ช่วยให้ส่งไปยังอุปกรณ์เฉพาะทรัพยากรและโค้ดที่จำเป็นสำหรับสถาปัตยกรรมของมันเท่านั้น ผู้ใช้ iPhone ที่มีโปรเซสเซอร์ A17 Pro จะได้รับไฟล์ไบนารีที่ปรับแต่งให้เหมาะกับ arm64e โดยไม่มีคำสั่งที่ไม่จำเป็นสำหรับสถาปัตยกรรมที่ล้าสมัย ซึ่งช่วยลดเวลาโหลดและประหยัดพื้นที่บนอุปกรณ์

ข้อดีของการใช้ Bitcode

Bitcode มอบข้อดีหลักๆ หลายประการสำหรับนักพัฒนาแอปพลิเคชัน iOS ข้อหลักคือการปรับแต่งอัตโนมัติสำหรับโปรเซสเซอร์ใหม่ของ Apple โดยไม่ต้องเผยแพร่อัปเดตใน App Store อีกครั้ง โดยเฉพาะอย่างยิ่งเมื่อเปลี่ยนไปใช้สถาปัตยกรรมใหม่ เช่น การเปลี่ยนจาก armv7 เป็น arm64

การเพิ่มประสิทธิภาพภายใต้สถาปัตยกรรมใหม่

เมื่อ Apple เปลี่ยนไปใช้โปรเซสเซอร์ใหม่ที่มี สถาปัตยกรรม ใหม่ แอปพลิเคชันที่ส่งมาพร้อม Bitcode จะถูกรีคอมไพล์ให้เหมาะกับมันโดยอัตโนมัติ นักพัฒนาไม่ต้องสร้างโปรเจกต์ใหม่และเผยแพร่อัปเดต — App Store ทำสิ่งนี้ในฝ่ายของตนเมื่อผู้ใช้ดาวน์โหลดครั้งแรก ซึ่งสำคัญโดยเฉพาะสำหรับแอปพลิเคชันที่อยู่มานานซึ่งได้รับการสนับสนุนมาหลายปี

การลดขนาดไฟล์ไบนารี

App Thinning ร่วมกับ Bitcode ช่วยลดขนาดแอปพลิเคชันที่ติดตั้งได้ 15–40% App Store สร้างเฉพาะคำสั่งเครื่องที่จำเป็นสำหรับอุปกรณ์เฉพาะ โดยไม่รวมโค้ดสำหรับสถาปัตยกรรมอื่นและรูปแบบสำหรับ iOS เวอร์ชันต่างๆ ในทางปฏิบัติหมายความว่าผู้ใช้ที่มี iPhone ใหม่จะได้รับไฟล์ไบนารีที่กะทัดรัด

ตามข้อมูลจาก Apple WWDC 2015 Session 102 การใช้ Bitcode และ App Thinning สามารถลดขนาดแอปพลิเคชันที่ดาวน์โหลดได้เฉลี่ย 25% เมื่อเทียบกับไฟล์ไบนารีสากลที่มีทุกสถาปัตยกรรม สำหรับแอปพลิเคชันขนาด 100 MB การประหยัดอาจสูงถึง 40 MB บนอุปกรณ์ของผู้ใช้

  • การปรับตัวอัตโนมัติ ภายใต้โปรเซสเซอร์ใหม่โดยไม่ต้องสร้างโปรเจกต์ใหม่โดยนักพัฒนา
  • การลดเวลาโหลด แอปพลิเคชันบนอุปกรณ์ของผู้ใช้
  • การแจกจ่ายที่ง่ายขึ้น — หนึ่งไฟล์เก็บถาวรสำหรับทุกสถาปัตยกรรม หนึ่งชุดเมตาดาต้า
  • ความเข้ากันได้ในอนาคต — แอปพลิเคชันทำงานบนโปรเซสเซอร์ที่ยังไม่ได้เผยแพร่ของ Apple

วิธีการเปิดใช้ Bitcode ในโปรเจกต์ Xcode

การตั้งค่า Bitcode ทำได้ในการกำหนดค่าการสร้างของ Xcode พารามิเตอร์ Enable Bitcode อยู่ในการตั้งค่า Build Settings และเปิดใช้งานโดยค่าเริ่มต้นสำหรับโปรเจกต์ใหม่ แต่นักพัฒนาสามารถปิดใช้งานได้สำหรับการดีบักหรือเมื่อใช้ไลบรารีของบุคคลที่สามที่ไม่รองรับ Bitcode

การตั้งค่าผ่าน Build Settings

objective-c
// Build Settings -> Apple Clang - Code Generation
// เปิดใช้งาน Bitcode = YES

// หรือผ่าน Info.plist สำหรับแต่ละ target
@property (nonatomic, assign) BOOL enableBitcode;
- (void)configureBuildSettings {
    // ตรวจสอบสถานะ Bitcode ในการกำหนดค่า
    if (self.enableBitcode) {
        NSLog(@"เปิดใช้งาน Bitcode สำหรับ target นี้แล้ว");
    } else {
        NSLog(@"ปิดใช้งาน Bitcode");
    }
}

เพื่อตรวจสอบว่าไฟล์เก็บถาวรมี Bitcode หรือไม่ ให้เปิดไฟล์ .xcarchive ผ่าน Xcode Organizer หรือรันคำสั่ง otool -l ใน Terminal การมีส่วน __LLVM ในไฟล์ไบนารียืนยันว่า Bitcode เปิดใช้งานและถูกบรรจุอย่างถูกต้อง ถ้าไม่มีส่วนนี้ — Bitcode ไม่ได้ถูกสร้างในระหว่างการสร้าง

การตรวจสอบผ่าน Terminal

bash
# ตรวจสอบการมีอยู่ของ Bitcode ในไฟล์เก็บถาวร
otool -l YourApp.app/YourApp | grep __LLVM

# ผลลัพธ์: ถ้ามีส่วน __LLVM แสดงว่า Bitcode มีอยู่
# ถ้าผลลัพธ์ว่างเปล่า แสดงว่า Bitcode ไม่ได้เปิดใช้งานหรือไม่ได้ถูกสร้าง

# นอกจากนี้ยังสามารถตรวจสอบได้ผ่านคำสั่ง size
size -m -l YourApp.app/YourApp | grep __LLVM

เมื่อใช้ไลบรารีของบุคคลที่สามผ่าน CocoaPods หรือ SPM ตรวจสอบให้แน่ใจว่า dependencies ทั้งหมดถูกสร้างด้วย Bitcode ถ้ามีไลบรารีอย่างน้อยหนึ่งตัวที่ไม่รองรับ Bitcode Xcode จะสร้างข้อผิดพลาดการลิงก์ในขั้นตอนการสร้างไฟล์เก็บถาวร สำหรับ CocoaPods ให้ตรวจสอบแฟลก bitcode_enabled ใน subspecs หรือใช้ use_frameworks! ร่วมกับ enable_bitcode

ข้อจำกัดและข้อควรระวังของ Bitcode

Bitcode ไม่ใช่โซลูชันสากลสำหรับโปรเจกต์ iOS ทุกประเภท เทคโนโลยีมีข้อจำกัดที่นักพัฒนาควรพิจารณาก่อนเปิดใช้งานตัวเลือกในการกำหนดค่าการสร้าง การทำความเข้าใจข้อจำกัดเหล่านี้ช่วยหลีกเลี่ยงปัญหาในขั้นตอนการสร้างไฟล์เก็บถาวรและการเผยแพร่

ความเข้ากันได้กับไลบรารี

ไม่ใช่ไลบรารีของบุคคลที่สามทั้งหมดที่มาพร้อมกับการสนับสนุน Bitcode ถ้าไลบรารีถูกแจกจ่ายเฉพาะในรูปแบบไฟล์ไบนารีที่คอมไพล์แล้วโดยไม่มี Bitcode โปรเจกต์ที่เปิดใช้งานตัวเลือกนี้จะไม่สามารถสร้างได้ ในกรณีนี้ นักพัฒนาจะต้องปิดใช้งาน Bitcode หรือขอเวอร์ชันที่มี Bitcode จากผู้จัดจำหน่าย โดยเฉพาะอย่างยิ่งสำหรับไลบรารีเก่าที่ไม่ได้รับการอัปเดตอีกต่อไป

การดีบักและรายงานการคราช

รายงานการคราช จากแอปพลิเคชันที่สร้างด้วย Bitcode ต้องการการประมวลผลเพิ่มเติม สัญลักษณ์ (dSYM) สำหรับโค้ดที่รีคอมไพล์แล้วจะถูกสร้างโดย App Store และสามารถดาวน์โหลดได้ผ่าน Xcode Organizer หากไม่มีการอัปโหลดไฟล์ dSYM ที่สอดคล้องกัน สแต็กการเรียกในรายงานข้อขัดข้องจะไม่สามารถอ่านได้ ทำให้การวินิจฉัยปัญหาทำได้ยาก

  • การอัปโหลด dSYM — จำเป็นสำหรับการถอดรหัสบันทึกการคราชจาก App Store หลังการรีคอมไพล์
  • ขนาดไฟล์เก็บถาวร — .xcarchive ที่มี Bitcode ใช้พื้นที่บนดิสก์ของนักพัฒนามากขึ้น
  • เวลาในการสร้าง — การสร้าง Bitcode เพิ่มขั้นตอนการคอมไพล์โปรเจกต์ประมาณ 10–15%
  • macOS — Bitcode ไม่รองรับแอปพลิเคชัน macOS และแอปพลิเคชัน watchOS
  • โปรเจกต์ที่ล้าสมัย — การย้ายโปรเจกต์ขนาดใหญ่อาจต้องอัปเดต dependencies ทั้งหมด

ตามสถานะ ณ iOS 17 และ Xcode 15 Apple ไม่ต้องการให้เปิดใช้งาน Bitcode เป็นข้อบังคับสำหรับการเผยแพร่ใน App Store อย่างไรก็ตาม สำหรับแอปพลิเคชัน watchOS Bitcode ยังคงเป็นข้อกำหนดที่กำหนดในระดับกฎของ App Store Connect นักพัฒนาแนะนำให้เปิดใช้งาน Bitcode สำหรับโปรเจกต์ใหม่ ถ้า dependencies ทั้งหมดรองรับ

คำถามที่พบบ่อย

จำเป็นต้องเปิดใช้ Bitcode เพื่อเผยแพร่ใน App Store หรือไม่?

สำหรับแอปพลิเคชัน iOS และ tvOS Bitcode ไม่จำเป็นต้องมีตั้งแต่ Xcode 14 สำหรับ watchOS การสนับสนุน Bitcode ยังคงเป็นข้อบังคับ Apple แนะนำให้เปิดใช้งาน Bitcode สำหรับโปรเจกต์ใหม่ แต่ไม่ได้ปิดกั้นการเผยแพร่หากไม่มี

Bitcode ส่งผลต่อขนาดแอปพลิเคชันใน App Store อย่างไร?

Bitcode ทำให้ App Store สามารถใช้ App Thinning — การสร้างโค้ดเครื่องภายใต้สถาปัตยกรรมของอุปกรณ์ผู้ใช้เท่านั้น ซึ่งช่วยลดขนาดไฟล์ไบนารีที่ดาวน์โหลดลง 15–40% ขึ้นอยู่กับจำนวนสถาปัตยกรรมที่รองรับในโปรเจกต์

จำเป็นต้องอัปโหลดไฟล์ dSYM เมื่อเปิดใช้งาน Bitcode หรือไม่?

ใช่ ไฟล์ dSYM จำเป็นสำหรับการทำสัญลักษณ์รายงานการคราชจากไฟล์ไบนารีที่รีคอมไพล์แล้ว App Store ให้ความสามารถในการดาวน์โหลด dSYM ผ่าน Xcode Organizer หลังจากการประมวลผลไฟล์เก็บถาวร หากไม่มี dSYM สแต็กการเรียกใน Crashlytics และ console จะมีเฉพาะที่อยู่หน่วยความจำ

Swift Package Manager รองรับ Bitcode หรือไม่?

SPM รองรับ Bitcode ถ้า dependencies ถูกแจกจ่ายในซอร์สโค้ดไม่ใช่ในรูปแบบไฟล์ไบนารี Binary dependencies ผ่าน SPM ต้องมีเวอร์ชันที่มี Bitcode มิฉะนั้นโปรเจกต์ที่เปิดใช้งานตัวเลือกนี้จะไม่คอมไพล์

Bitcode แตกต่างจากโค้ดเครื่องทั่วไปอย่างไร?

Bitcode — คือการแสดงผลระดับกลางของ LLVM IR ที่ไม่ขึ้นกับฮาร์ดแวร์ซึ่งไม่สามารถทำงานโดยตรงบนโปรเซสเซอร์ โค้ดเครื่อง มีคำสั่งพร้อมสำหรับสถาปัตยกรรมเฉพาะ (arm64, x86_64) และทำงานโดยไม่ต้องคอมไพล์เพิ่มเติม

สรุป

  • Bitcode — การแสดงผลระดับกลางของ LLVM IR ที่สร้างขึ้นเมื่อคอมไพล์แอปพลิเคชัน iOS ใน Xcode
  • App Store คอมไพล์ Bitcode ใหม่ภายใต้สถาปัตยกรรมของอุปกรณ์ผู้ใช้ โดยใช้ App Thinning
  • ขนาดแอปพลิเคชันที่ดาวน์โหลด ลดลง 15–40% จากการยกเว้นคำสั่งเครื่องที่ไม่จำเป็น
  • โปรเซสเซอร์ใหม่ ของ Apple รองรับโดยอัตโนมัติโดยไม่ต้องเผยแพร่อัปเดตซ้ำโดยนักพัฒนา
  • การเปิดใช้งาน Bitcode กำหนดผ่านแฟลก Enable Bitcode ใน Build Settings ของโปรเจกต์ Xcode
  • ข้อจำกัด รวมถึงความจำเป็นของไฟล์ dSYM สำหรับรายงานการคราชและความเข้ากันได้ของไลบรารีของบุคคลที่สามทั้งหมด
  • คำแนะนำ — เปิดใช้งาน Bitcode สำหรับโปรเจกต์ใหม่ แต่ตรวจสอบการสนับสนุนจาก dependencies ที่ใช้ทั้งหมด

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม