Xcode 中 bitcode 的作用

本文详细介绍了Xcode中EnableBitcode配置的作用,以及BITCODE_GENERATION_MODE和CLANG_BITCODE_GENERATION_MODE等编译选项如何影响代码优化。在Archive时,开启Bitcode并不会触发额外的优化,但允许Apple在特定条件下进行进一步处理。同时,区分了marker和bitcode两种模式在编译和链接阶段的不同影响。
开启 Enable Bitcode 配置后,不会触发额外的代码优化
  • 根据官方文档,在 Build Settings 页面开启 Enable Bitcode (ENABLE_BITCODE) 选项后,会在 Archive 时,在支持的平台和架构上生成 bitcode 代码

注意:只有通过 Archive 模式导出并提交到 App Store 时,才可能被苹果进行进一步的代码优化。

BITCODE_GENERATION_MODE
  • BITCODE_GENERATION_MODE 是 Xcode 定义的一个枚举值。
  • 它存在两种可能值:marker 和 bitcode。
  • marker 代表编译的二进制文件只包含 size 等于 1 的 marker进行占位。
  • bitcode 代表编译的二进制文件包含真正的 bitcode 信息
{
    Name = "BITCODE_GENERATION_MODE";
    Type = enum;
    Values = (
        "marker",
        "bitcode",
    );
    DefaultValue = marker;
}

CLANG_BITCODE_GENERATION_MODE
  • CLANG_BITCODE_GENERATION_MODE 是 Xcode 的隐藏配置项。
  • 该配置项只在开启 ENABLE_BITCODE 配置,并且编译目标的架构属于 arm64, arm64e, armv7, armv7s, armv7k 之一时才会生效。
  • 当开发者开启 Enable Bitcode (ENABLE_BITCODE) 选项后,会在 Archive 时,传入编译参数 -fembed-bitcode。
  • 其它情况下,会传入编译参数 -fembed-bitcode-marker。
// Generate bitcode options - not visible in the build settings.
{
    Name = "CLANG_BITCODE_GENERATION_MODE";
    Type = Enumeration;
    Values = (
        none,
        marker,
        bitcode,
    );
    DefaultValue = "$(BITCODE_GENERATION_MODE)";
    Architectures = ( arm64, arm64e, armv7, armv7s, armv7k );
    Condition = "$(ENABLE_BITCODE) == YES";
    CommandLineArgs = {
        marker = (
            "-fembed-bitcode-marker",
        );
        bitcode = (
            "-fembed-bitcode",
        );
    }
}
LD_BITCODE_GENERATION_MODE
  • 与 CLANG_BITCODE_GENERATION_MODE 类似,唯一的区别是两个配置分别影响 编译 和 链接 两个阶段.
// Bitcode options
{
    Name = "LD_BITCODE_GENERATION_MODE";
    Type = Enumeration;
    Values = (
        marker,
        bitcode,
    );
    DefaultValue = "$(BITCODE_GENERATION_MODE)";
    Architectures = (
        arm64e,
        arm64,
        armv7,
        armv7s,
        armv7k,
    );
    Condition = "$(ENABLE_BITCODE) == YES";
    CommandLineArgs = {
        marker = (
            "-fembed-bitcode-marker",
        );
        bitcode = (
            "-fembed-bitcode",
        );
    };
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值