bitcode是什么?
bitcode是被编译程序的一种中间形式的代码。包含bitcode配置的程序将会在App store上被编译和链接。bitcode允许苹果在后期重新优化程序的二进制文件,而不需要重新提交一个新的版本到App store上。
bitcode选项默认是设置为YES的。
解决Xcode报bitcode错误的方法:
1.让第三方库支持bitCode,
2.将bitcode关闭(Xcode 7以后,bitcode默认是YES)
扩展
为什么苹果默认要求watchOS和tvOS的App要上传bitcode?因为把bitcode上传到它自己的中心服务器后,它可以为目标安装App的设备进行优化二进制,减小安装包的下载大小,当然iOS开发者也可以上传多个版本而不是打包到单个包里,但是这样会占用更多的存储空间。最重要的是允许苹果可以在后台服务器对应用程序进行签名,而不用导出任何密钥到终端开发者那。
上传到服务器的bitcode给苹果带来更好处是:以后新设计了新指令集的新CPU,可以继续从这份bitcode开始编译出新CPU上执行的可执行文件,以供用户下载安装。
但是bitcode给开发者带来的不便之处就是:没用bitcode之前,当应用程序奔溃后,开发者可以根据获取的的奔溃日志,再配上上传到苹果服务器的二进制文件的调试符号表信息,可以还原程序运行过程到奔溃时后调用栈信息,对问题进行定位排查。但是用了bitcode之后,用户安装的二进制不是开发者这边生成的,而是苹果服务器经过优化后生成的,其对应的调试符号信息丢失了,也就无法进行前面说的还原奔溃现场找原因了。目前,watchOS和tvOS应用发布必须上传带bitcode版本的包。iOS应用发布对bitcode的要求是可选的,用户可以在Xcode的项目设置中关闭。相当于在编译的时候加一个标记:embed-bitcode-marker(调试构建) embed-bitcode(打包/真机构建)。这个在clang编译器的参数是-fembed-bitcode,swift编译器的参数是-embed-bitcode。