使用xcodebuild打包IPA时出现Bitcode错误

9
首先,我想说明没有使用bitcode时,一切都运行得很完美。 问题出现在打开应用程序中的“bitcode”标志后。
此外,所有构建都通过CI流程完成(而不是手动在xcode->archive等内部完成)。
该框架是在与应用程序本身分开的流程中构建的(应用程序嵌入已编译的框架)。
当我尝试打包ipa时,会出现以下错误:
❌ ld: bitcode捆绑包无法生成,因为 '.../Framework.framework/Framework'未完全生成bitcode。 所有位码的框架和dylibs必须从Xcode存档或安装构建中生成 armv7体系结构
❌ clang: 错误:链接器命令失败,退出代码为1(使用-v查看调用)
关于框架:
我使用以下命令构建框架:(省略技术细节)
# iphone (arm)
xcodebuild -configuration Release -sdk iphoneos CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO

# iphone (simulator)
xcodebuild -configuration Release -sdk iphonesimulator CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO

然后使用lipo(FAT二进制文件)进行操作。

lipo -create /Release-iphonesimulator/Framework.framework/Framework -output /Universal/Framework.framework/Framework

我已经添加了编译器标志到框架中,以“嵌入位码”

enter image description here

并且我甚至“验证”它是否有位码,根据其他S.O.问题:(Compiling iOS library with bitcode enabled)

此外,检查二进制文件是否包含位码的最简单方法是使用otool和grep:

otool -l binary_name | grep __LLVM

如果它具有位码,则会看到一个或多个segname __LLVM条目,否则输出为空。

otool -arch arm64 -l Frameworks/Framework.framework/Framework  | grep __LL
segname __LLVM
segname __LLVM

我还尝试了添加编译标志的另一种变化方式。
xcodebuild OTHER_CFLAGS="-fembed-bitcode"

我也遇到了相同的错误。


在您提供的链接答案的评论中,用户Mecki指出,在检查otool输出的正确位代码编译时,“__bitcode”比“__LLVM”更好。您或原始发布者(OP)能否检查编译日志,看看是否实际传递了“-fembed-bitcode”标志? - fullofsquirrels
还有一点需要注意:在同样的评论中,用户Jonny指出他只向主目标添加了-fembed-bitcode编译器标志,而没有添加到任何嵌入式框架中,并且取得了成功。 - fullofsquirrels
@fullofsquirrels 感谢您回答这个问题。这是我的通用构建脚本,我正在传递 fembed-bitcode:xcodebuild -project ${NAME}.xcodeproj -scheme ${NAME} -configuration 'Release' -sdk iphoneos enable_bitcode=yes -arch arm64 -arch armv7 -arch armv7s only_active_arch=yes OTHER_CFLAGS='-fembed-bitcode' clean build | tee iphoneos.log | xcpretty xcodebuild -project ${NAME}.xcodeproj -scheme ${NAME} -configuration 'Release' -sdk iphonesimulator10.3 -arch x86_64 -arch i386 only_active_arch=no OTHER_CFLAGS='-fembed-bitcode' clean build | tee iphonesimulator.log | xcpretty - sonoluminescence
xcrun lipo -create -output $DIR/${NAME}.framework/${NAME} Build/Products/Release-iphoneos/${NAME}.framework/${NAME} Build/Products/Release-iphonesimulator/${NAME}.framework/${NAME} - sonoluminescence
@sonoluminescence 你有什么提示可以分享一下吗? - reggian
显示剩余2条评论
1个回答

0
在目标的构建设置中添加BITCODE_GENERATION_MODE=bitcode作为用户定义的设置。

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