【转】Xcode 与 bitcode 的几个小知识点

原文链接:

https://mp.weixin.qq.com/s/l8ZkUdxl4y4e-qKg95G3Bw

开启 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",

);

};

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容