导出存档以进行临时分发时无法验证bitcode - 尝试过Xcode 8.3.3和Xcode 9

Vip*_*pin 22 xcode itunesconnect ios bitcode

包含我们框架的应用程序会在导出Ad-hoc分发存档时抱怨缺少bitcode.

我已经阅读了Apple在这方面提供的文档 技术说明TN2432.文件列出的可能的根本原因与我们的情景不同.(我们没有使用汇编指令或格式错误的info.plist文件)

我已经在SO上发布了类似的问题

导出时启用Bitcode时出错(架构armv7找不到符号)

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

iOS 9中的新警告

但提供的解决方案似乎不起作用.

我尝试BITCODE_GENERATION_MODE在用户定义的构建设置中添加标记.我还尝试在框架目标中添加-fembed-bitcode-marker&-fembed-bitcodein Other C标志.

我使用建议的命令检查生成的框架中是否存在bitcode段

otool -l -arch arm64 <framework_name> | grep __LLVM
Run Code Online (Sandbox Code Playgroud)

它显示了2个细分

segname __LLVM

segname __LLVM

但在导出档案时,Xcode仍然抱怨缺少bitcode.

我试图在App Store上传应用程序来验证这个问题是否是由Xcode版本引起的(我试过8.3.3.和9.0),但是我收到了关于iTunes Store中的build import错误的电子邮件.

在处理您的iOS应用程序APP_NAME 1.0(4)时,应用程序细化过程中出现错误,您的应用程序无法细化.如果您的应用包含bitcode,则bitcode处理可能失败.由于这些错误,您的应用版本将无法提交审核或放置在App Store中.有关可能有助于解决此问题的信息,请参阅技术说明2432.

PS:禁用bitcode对我们来说不是一个选项,因为主机应用程序需要支持bitcode.

导出Archieve时出错

Vip*_*pin 66

错误描述让我走错了方向找到解决方案.

此错误与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
Run Code Online (Sandbox Code Playgroud)

致谢:http://ikennd.ac/blog/2015/02/stripping-unwanted-architectures-from-dynamic-libraries-in-xcode/

如果您不知道如何将运行脚本阶段添加到Xcode项目中,因为您可能正在使用Cordova或Ionic构建项目,而您从未接受过有关Xcode的更多教授,请按以下步骤操作:

  • 在Xcode中打开您的项目.
  • 通过单击Xco​​de左侧窗格中最左侧的图标(当您指向它时显示"显示Project Navigator"的图标),确保您在"Project Navigator"中查看项目.
  • 单击导航器窗口顶部的项目,以便将其选为目标
  • 此时,在Xcode窗口的中间部分,您会看到顶部附近出现几个东西.常规,功能,资源标签,信息等.其中之一是Build Phases - 点击它.
  • 单击Xco​​de窗口中间部分左上角附近的+.如果你指的是足够长的时间,它会说Add Add Build Phase.
  • 从单击+时弹出的菜单中选择"新建运行脚本阶段"
  • 单击刚出现的Run Script旁边的箭头.
  • 将上述脚本复制并粘贴到"Shell"一词下面的相应区域.你不应该改变任何其他东西.
  • 像平常一样构建/存档您的项目,只是现在您不会得到那些令人讨厌的"无法验证bitcode"错误.:-)

  • 在Xcode 10中,通过添加此运行脚本,我现在崩溃了,这表明找不到Alamofire:dyld:库未加载:@ rpath / Alamofire.framework / Alamofire引用自:/ var / containers / Bundle / Application / A2C3A261 -242A-4AF0-A900-CC68DA347B67 / myapp.app / myapp原因:找不到图片 (2认同)

Mob*_*Mon 12

我不得不在Build Settings中将Enable Bitcode设置为'NO'

  • 这肯定是一种解决方案,但不是最好的解决方案。您在整个项目中禁用了位码。 (2认同)