iOS库到BitCode

我最近下载了Xcode 7 beta,Xcode抱怨我的一些C库没有被编译到BitCode中。 我如何去告诉Clang生产与iOS兼容的BitCode? 我已经在stackoverflow上看到了类似的答案,但我不知道它们是否适用于为iOS生成BitCode库。

编辑:

我正在使用正确的设置,-fembed-bitcode,但是当我尝试归档时,我得到的错误:ld:warning:忽略文件XXXX / XXXX,文件是不是被链接的体系结构(arm64)。 当我使用-fembed-bitcode-marker,我可以存档,但我得到的错误:完整的位码捆绑无法生成,因为XX / XX只build立了位码标记。 该库必须从启用位码的Xcode存档库中生成。

任何想法出了什么问题? 该库正在编译成功,但它不让我归档。 我创build了一个简单的添加函数,并将其制作成一个库,并得到相同的症状,所以它不是我正在编译的库。

编辑2:你必须使用bitcode构buildarm64和armv7版本,并将它们放在一起。 使用位码不会在归档时消除对胖库的需求。 来源: https : //forums.developer.apple.com/message/25132#25132

在构build静态库时,您必须遵循以下代码生成过程:

-fembed-bitcode 

注意:该命令仅适用于Xcode7 +

关于使用-fembed-bitcode-marker的公认的答案

您应该知道,使用-fembed-bitcode-marker选项的正常编译将生成最小尺寸的embedded位代码段,而不包含任何实际内容。 这是作为一种testing你的构build的位码相关方面而不减慢构build过程的方式完成的。 当您执行存档构build时,将包含实际的位代码内容。

bwilson苹果职员。 https://forums.developer.apple.com/thread/3971#12225


更具体地说:

  • -fembed-bitcode-marker简单地标记存档构build之后二进制位将在二进制位中的位置。
  • -fembed-bitcode实际上是完整的bitcode生成和embedded,所以这是你需要用来build立静态库。
  • Xcode本身使用-fembed-bitcode-marker构build常规构build(如部署到模拟器)
  • Xcode只是用-fembed-bitcode构build,用于存档构build/生产构build(因为这只是苹果公司需要的)。

转到生成设置。 search“自定义编译器标志”。 向其他C标志添加-fembed-bitcode 。 这将确保lib在编译时与bitcode兼容。 我为iOS创build了64位和32位,并将它们合并为一个。 奇迹般有效。

由于你们有查询,下面是设置的截图:设置对于项目目标和SDK目标是相同的。

在这里输入图像描述


bitcode lib不能用于Xcode 6。

如果在将其他C标志添加-fembed-bitcode后仍然有问题,请在“Build Options”下search“Enable Bitcode”并将其设置为No。这将允许您正确存档。

你需要的是带有位码的。 当启用ENABLE_BITCODE时,Xcode使用-fembed-bitcode-marker构build常规构build,使用-fembed-bitcode构build归档。 一个选项简单地“标记”在二进制文件构build之后二进制位将在二进制位中,并强制执行新的位代码规则,而另一个实际上执行完整的位代码生成,这可能较慢,因此在每种构build。

Syo Ikeda处理BITCODE的指南也可以帮助您:

你可以在这里find完整的幻灯片。

如果你正在build立一个静态库并想启用位码,只需要(1)ENABLE_BITCODE = YES可能是不够的。

(2)同样在设置-fembed-bitcode ,下面的错误仍然在Teamcity中生成的多个文件被抛出

 bitcode bundle could not be generated because '/path/fileInYourStaticLib.a(fileInYourStaticLib.o)' was built without full bitcode. All object files and libraries for bitcode must be generated from Xcode Archive or Install build for architecture arm64 

除了上面的步骤(1)和(2)之外,还有很less的提示/要考虑的事情帮助我最终解决问题,

  1. 确保你在'PROJECT'上设置variables'Other C Flags'为'-fembed-bitcode',以及所有'TARGETS'。

  2. 如果有多个项目正在尝试创build静态库,请确保所有项目都启用了"-fembed-bitcode"

  3. On Build Settings, click on the + sign at the top to add a user-defined build setting with the name BITCODE_GENERATION_MODE On Build Settings, click on the + sign at the top to add a user-defined build setting with the name , and set Debug to标记, Release to

  4. 如果上述步骤不起作用,您也可以尝试此选项。 On Build Settings -> Other C flags, set Debug to – 标记位码标记, and Release to – 标记位码

这个博客是非常有帮助https://medium.com/@heitorburger/static-libraries-frameworks-and-bitcode-6d8f784478a9

此外,每次进行上述更改时,请尝试删除DerivedData,清理XCode项目,并可能退出并重新启动XCode