ipatool 失败并出现异常:Xcode 10.1

ipatool failed with an exception: Xcode 10.1

我正在使用 JWPlayer 开发音乐播放器应用程序。以前我使用的是 iOS_SDK 2.9.1。现在我将 SDK 更新到新版本 iOS_SDK 3.5.1。更新SDK后,无法从XCode导出.ipa文件。我收到一条错误消息 "ipatool 失败并出现异常:

请查看报错信息截图如下

即使我在更新 pods 后也遇到了同样的问题。对我有用的修复方法是在存档时取消选中 Bitcode 选项。

请查看附件图片

如果你想在启用位码的情况下构建它。您可以检查这些步骤:

  1. 删除项目中的所有依赖项并尝试逐个添加它,确定导致构建错误的框架,检查最新的稳定版本或向框架所有者报告以解决问题(应该与位码相关)。

  2. 在构建供他人使用的框架之前,在项目方案测试部分中禁用与代码覆盖率相关的所有内容。

    code coverage disabled

    1. 在我的例子中,框架构建没有错误,但它会在使用我的框架的项目上的 .ipa 存档上生成 ipatool 错误。一直在尝试解决这个问题,发现有一行代码导致 ipatool 失败:
if (@available(iOS 10.0, *)) {

}

更改为此代码为我解决了问题:

if(([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0)) {

}

注意:我正在使用带有调试 SDK 13.2 的 Xcode 11.3.1 和启用位码的构建目标 iOS 9.0

对于您的情况,您需要等待框架本身的修复。

我们遇到了类似的问题,我已经描述过 我只是不想分享我们的调查结果,因为似乎没有人公布他们的结果。

没有bitcode就不用分发了。长话短说,其中包含 LLVM 检测,这会阻止 AppStore 处理。我写了整篇关于 XCode 12 and BigSur issues with XCFramework.

的博客

总而言之,在为分发创建 XCFramework 时,需要执行以下几个必要步骤以确保:

  • 使用存档构建是必须,发布构建是不够的
  • BUILD_LIBRARY_FOR_DISTRIBUTION 必须设置为 YES
  • SKIP_INSTALL 必须设置为 NO
  • GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO 关闭 GCC 工具并将它们从二进制文件中删除
  • CLANG_ENABLE_CODE_COVERAGE = NO 从二进制文件中关闭代码覆盖工具

以上所有内容有助于解决我们的准备和分发问题,如果您碰巧遇到与我们相同的问题,希望能为您节省一些时间。