首先,我想说明没有使用bitcode时,一切都运行得很完美。 问题出现在打开应用程序中的“bitcode”标志后。
此外,所有构建都通过CI流程完成(而不是手动在xcode->archive等内部完成)。
该框架是在与应用程序本身分开的流程中构建的(应用程序嵌入已编译的框架)。
当我尝试打包ipa时,会出现以下错误:
❌ ld: bitcode捆绑包无法生成,因为 '.../Framework.framework/Framework'未完全生成bitcode。 所有位码的框架和dylibs必须从Xcode存档或安装构建中生成 armv7体系结构
❌ clang: 错误:链接器命令失败,退出代码为1(使用-v查看调用)
关于框架:
我使用以下命令构建框架:(省略技术细节)
我还尝试了添加编译标志的另一种变化方式。
此外,所有构建都通过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
我已经添加了编译器标志到框架中,以“嵌入位码”
并且我甚至“验证”它是否有位码,根据其他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"
我也遇到了相同的错误。
-fembed-bitcode
编译器标志,而没有添加到任何嵌入式框架中,并且取得了成功。 - fullofsquirrelsfembed-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