Bitcode – là biểu diễn trung gian (Intermediate Representation - IR) của mã nguồn sau khi biên dịch. Mã này không thể chạy trực tiếp trên thiết bị hay cài đặt được. Khi upload app lên App Store, app được upload dưới dạng Bitcode. Apple sau đó dùng LLVM biên dịch Bitcode thành binary máy cho từng kiến trúc (arm64 cho device, x86_64 cho simulator) và từng phiên bản iOS.
ENABLE_BITCODE trong Build Settings
- YES (Mặc định Xcode mới): Compiler tạo Bitcode (IR) thay vì binary máy. App upload lên App Store chứa Bitcode. Apple biên dịch lại (re-compile) cho từng thiết bị/iOS version – tối ưu kích thước, bảo mật, tương thích tương lai.
- NO: Compiler tạo binary máy trực tiếp. App chạy được ngay trên thiết bị/test nhưng không thể upload lên App Store (từ Xcode 14+/App Store Connect yêu cầu Bitcode cho một số trường hợp).
Tại sao cần Bitcode?
- App Thinning: App Store tạo binary riêng cho từng loại thiết bị (App Slicing) – user tải ít dung lượng hơn.
- Tối ưu hóa tương lai: Apple có thể recompile với compiler mới, tối ưu hơn mà không cần dev submit lại.
- Bảo mật: Khó reverse-engineer hơn binary thô.
Khi nào đặt ENABLE_BITCODE = NO?
- Dùng thư viện third-party chưa hỗ trợ Bitcode (cũ, pre-built framework không có bitcode).
- Build time quá chậm (Bitcode compile chậm hơn).
- Debug trên thiết bị cần symbol mapping chính xác (Bitcode làm phức tạp debug).
Lưu ý: Từ Xcode 14 / iOS 16, Apple đã bỏ yêu cầu Bitcode cho submission App Store. Tuy nhiên, bật Bitcode vẫn khuyến khích để tận dụng App Thinning.