框架是在没有完整位码的情况下构建的 - 框架位码已启用

Posted

技术标签:

【中文标题】框架是在没有完整位码的情况下构建的 - 框架位码已启用【英文标题】:Framework was built without full bitcode - Framework bitcode already enabled 【发布时间】:2018-12-06 10:51:08 【问题描述】:

在归档我的应用时收到此错误。使用的框架是我自己的。所以我交叉检查了。框架中的位码已启用。不知道为什么我会遇到这个问题。这些是我框架中的构建设置:

我关注了this link,但没有成功。尝试在框架的项目(不是目标,而是项目,因为在链接中推荐)设置中设置-fembed-bitcode

【问题讨论】:

【参考方案1】:

Bitcode 是应用程序的抽象编码,可用于在给定一组指令的情况下以不同方式重新编译它。您可以通过运行来确认您的二进制文件是否与位码兼容:

otool -l (my .o or .a file) | grep __LLVM.

当您正常构建时,Xcode 会将构建标志 -fembed-bitcode-marker 添加到任何 clang 调用中。

要添加-fembed-bitcode:选择项目构建设置-> 其他C 标志,将调试设置为-fembed-bitcode-marker 并将发布设置为-fembed-bitcode,这将使用位码构建您的库。

BITCODE_GENERATION_MODE

如果您在用户定义的设置中设置BITCODE_GENERATION_MODE=bitcode,即使在构建阶段,文件也将使用标志-fembed-bitcode 进行编译。

而且,如果您设置BITCODE_GENERATION_MODE=marker,文件将使用标志-fembed-bitcode-marker 编译,独立于操作阶段。

因此,如果您想为每个操作(构建和存档)启用位码,更好的方法是使用 BITCODE_GENERATION_MODE 设置,您可以手动或通过脚本来实现。

手动

在 Build Settings 上,单击顶部的 + 号以添加名为 BITCODE_GENERATION_MODE 的用户定义的构建设置,并将 Debug 设置为 marker,将 Release 设置为 bitcode

Edit schema as Release 然后链接 library.a 文件并获取构建路径获取库表单 Release 文件夹

脚本

xcodebuild BITCODE_GENERATION_MODE=bitcode OTHER_CFLAGS="-fembed-bitcode" -target "$PROJECT_NAME" ONLY_ACTIVE_ARCH=NO -configuration $CONFIGURATION -sdk iphoneos BUILD_DIR="$BUILD_DIR" BUILD_ROOT="$BUILD_ROOT " 干净的构建

【讨论】:

不工作...也许你可以评论我的帖子?将不胜感激。 ***.com/questions/54082111/… @JhonnyTawk,我赞成你的答案,因为你基本上是在说这个答案所说的:***.com/a/38830497/9669133 ...你的只是有点难以阅读,但谢谢。它为我指明了正确的方向【参考方案2】:

尝试设置 跳过安装Enable Bitcode 在框架构建设置中Yes

【讨论】:

@ViktorVostrikov 你如何导出你的框架?你使用 Build->Archive 吗? 不,我没有使用存档 尝试使用 Build->Archive 导出框架,然后将构建产品导出到某个文件夹 @VitaliyGozhenko 我尝试通过构建产品归档和导出我的框架到某个文件夹,但导出的产品文件夹为空【参考方案3】:

如果你执行以下命令

Enable Bitcode' 设置为 'YES' 添加 Flags' 添加 'BITCODE_GENERATION_MODE' 并设置值 'bitcode' 跳过安装到是

直到

扑干净 flutter build ios

所以在你改变构建设置后你需要运行flutter build

【讨论】:

【参考方案4】:

添加到您的项目(无目标),并为每个项目添加到您的项目中(例如:Pods),在 Build Settings 中添加一个“用户定义”:

BITCODE_GENERATION_MODE 调试 = 标记 发布 = 位码

【讨论】:

【参考方案5】:

Build Settings -> User-Defined -> 添加设置BITCODE_GENERATION_MODE,然后设置值:bitcode

【讨论】:

【参考方案6】:

项目设置 -> 选择框架目标 -> 构建设置

其他 C 标志

中添加-fembed-bitcode

单击 + 按钮 -> 添加用户定义的设置

键:BITCODE_GENERATION_MODE,值:位码

Build Active Architectures Only 在构建设置中设置为是。

【讨论】:

【参考方案7】:

就我而言,我有一个统一项目,我想将其导出到 ios 库以与另一个项目集成。所以我需要存档它-> Xcode 显示“库是在没有完整位码的情况下构建的”

我对这种情况的解决方案是:

目标 -> 框架需要存档 -> 构建设置 -> 启用位码 = 否

enter image description here

希望对你有帮助

【讨论】:

【参考方案8】:

对于下一个灵魂,并按照 OP 中的描述启用了所有功能,但仍然无法使用它归档应用程序,这对我有用:

    按照 OP 中的说明设置所有内容。 存档产品 将其导出到您自己的文件系统 找到导出的 mySadLittleFramework.xcarchive 右键单击文件,选择显示包内容 产品 -> 库 -> 框架将包含 mySadLittleFramework.framework 文件 将该文件拖放/复制到某处。 将该文件作为框架添加到您的应用项目中。 归档应用。

【讨论】:

Product下没有Library文件夹 如果 Release 配置的 Skip Install 设置为 True,Product 下不会有 Library/Frameworks

以上是关于框架是在没有完整位码的情况下构建的 - 框架位码已启用的主要内容,如果未能解决你的问题,请参考以下文章

使用 xcodebuild 打包 ipa 的位码错误

由于框架,无法生成位码包

是否可以使用位码创建通用 iOS 框架?

在 Xcode 中运行时,IBM MobileFirst 7.1 混合应用程序构建失败

无法在启用 Bitcode 的情况下构建 Webrtc

彻底解决乱码问题(附一):简体中文编码中区位码国标码内码外码字形码的区别及关系