框架构建时未启用完整的位码 - 框架位码已经启用。

17

在归档我的应用程序时出现此错误。使用的框架是我自己的。因此我进行了交叉检查。框架中的位码已启用。不确定为什么会出现此问题。这些是我的框架构建设置:

enter image description here

我跟随这个链接但是没有成功。尝试在框架项目(不是目标,因为链接中推荐这样做)设置中设置-fembed-bitcode
8个回答

13

比特码是一个应用程序的抽象编码,可以在给定一组指令的情况下以不同的方式重新编译它。您可以通过运行:

otool -l (我的.o或.a文件) | grep __LLVM 来确认您的二进制文件是否兼容比特码。

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

要添加-fembed-bitcode:选择项目“Build Settings”->“Other C flags”,将Debug设置为-fembed-bitcode-marker,将Release设置为-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

将模式设置为“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}" clean build


无法正常工作...您能否评论我的帖子吗?非常感谢。 https://dev59.com/sbDma4cB1Zd3GeqPEPQq - Viktor Vostrikov
@JhonnyTawk,我给你的回答点了赞,因为你基本上说的是这个答案所说的:https://dev59.com/zlwX5IYBdhLWcg3wnwrd#38830497 ... 你的回答有点难以理解,但还是谢谢。它指引了我正确的方向。 - PhillipJacobs

11
尝试在框架构建设置中将跳过安装设置为,并将启用位码设置为

跳过安装

嵌入位码


@ViktorVostrikov 你是如何导出你的框架的?你使用 Build->Archive 吗? - Vitalii Gozhenko
不,我没有使用存档。 - Viktor Vostrikov
1
尝试使用 Build->Archive 导出框架,然后将构建产品导出到某个文件夹。 - Vitalii Gozhenko
9
我会尝试将我的框架通过“构建产品”存档并导出到某个文件夹,但导出的产品文件夹是空的。 - Siva

3

如果你执行以下命令:

  • 将“Enable Bitcode”设置为“YES”,添加标志
  • 添加标志“BITCODE_GENERATION_MODE”,值为“bitcode”,将“skip install”设置为“yes”

在运行以下命令之前,这些命令不会起作用:

  • flutter clean
  • flutter build ios

因此,在更改构建设置后,需要运行flutter build。


1
在我的情况下,我有一个Unity项目,我想将其导出到iOS库中以与另一个项目集成。因此,我需要存档它 -> Xcode显示“库构建时没有完整的位码”。
我的解决方案是:
  • 目标 -> 框架需要存档 -> 构建设置 -> 启用位码 = NO
希望这有所帮助。

0

将以下内容添加到您的项目中(无需目标),对于每个项目(例如Pods),在构建设置中添加一个“用户定义”:

BITCODE_GENERATION_MODE Debug = 标记 Release = 位码


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

    其他C标志中添加-fembed-bitcode

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

    键:BITCODE_GENERATION_MODE,值:bitcode

  • 在构建设置中将“仅构建活动架构”设置为是。


0

构建设置 -> 用户定义 -> 添加设置 BITCODE_GENERATION_MODE,然后将值设置为: bitcode


-1

对于下一个来访的开发者,如果按照 OP 中所述启用了所有内容,但仍无法使用它归档应用程序,请尝试以下方法:

  1. 按 OP 中所述设置所有内容。
  2. 归档产品
  3. 将其导出到您自己的文件系统
  4. 找到导出的 mySadLittleFramework.xcarchive
  5. 右键单击该文件,选择“显示包内容”
  6. Product->Library->Frameworks 将包含 mySadLittleFramework.framework 文件
  7. 将该文件拖动/复制到其他位置。
  8. 将该文件作为框架添加到您的应用项目中。
  9. 归档应用程序。

1
产品下没有库文件夹。 - Vijay Kharage
如果在 Release 配置中将 Skip Install 设置为 True,则 Product 下面将没有 Library/Frameworks。 - ambientlight

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接