包含我们框架的应用程序抱怨在导出存档以进行Ad-hoc分发时缺少bitcode。
我已经阅读了Apple在这方面提供的文档 Technical Note TN2432。文件列出的可能的根本原因与我们的情景不同。 (我们没有使用汇编指令或格式错误的info.plist文件)
我在SO
上发布了类似的问题Error while exporting with Bitcode enabled (symbol not found for architecture armv7)
Is it possible to create a universal iOS framework using bitcode?
但提供的解决方案似乎不起作用。
我尝试在用户定义的构建设置中添加BITCODE_GENERATION_MODE
标志。我还尝试添加-fembed-bitcode
- marker& -fembed-bitcode
在框架目标中的其他C标志中。
我使用suggested命令检查我生成的框架中是否存在bitcode段
otool -l -arch arm64 <framework_name> | grep __LLVM
显示2段
segname __LLVM
segname __LLVM
但是在导出档案时,Xcode仍然抱怨缺少bitcode。
我尝试在App Store上传应用以验证此问题是否是由Xcode版本引起的(我尝试过8.3.3。和9.0),但我收到了关于iTunes Store中构建导入错误的电子邮件。
在处理您的iOS应用程序APP_NAME 1.0(4)时,应用程序细化过程中出现错误,您的应用程序无法细化。如果您的应用包含bitcode,则bitcode处理可能失败。由于这些错误,您的应用版本将无法提交审核或放置在App Store中。有关可能有助于解决此问题的信息,请参阅技术说明2432。
PS:禁用bitcode不是我们的选择,因为主机应用需要支持bitcode。
答案 0 :(得分:58)
错误描述让我走错了方向找到解决方案。
此错误与bitcode无关。
当框架包含模拟器切片(i386 x86_64
)
在归档之前删除它们可以解决问题。
使用以下代码添加运行脚本阶段以构建目标阶段有助于消除错误。
APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"
# This script loops through the frameworks embedded in the application and
# removes unused architectures.
find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK
do
FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"
EXTRACTED_ARCHS=()
for ARCH in $ARCHS
do
echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"
lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"
EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")
done
echo "Merging extracted architectures: ${ARCHS}"
lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"
rm "${EXTRACTED_ARCHS[@]}"
echo "Replacing original executable with thinned version"
rm "$FRAMEWORK_EXECUTABLE_PATH"
mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"
done
致谢:http://ikennd.ac/blog/2015/02/stripping-unwanted-architectures-from-dynamic-libraries-in-xcode/
如果您不知道如何将运行脚本阶段添加到您的Xcode项目中,因为您可能正在使用Cordova或Ionic构建项目,而您从未被教过很多关于Xcode的知识,以下是您如何做到这一点:
答案 1 :(得分:8)
我必须将启用Bitcode设置为“否”&#39;在构建设置
答案 2 :(得分:1)
尝试以下方法: