Xcode 9,迦太基。 iTunes 连接错误:“无效的捆绑包 - 不允许的 LLVM 检测”

Posted

技术标签:

【中文标题】Xcode 9,迦太基。 iTunes 连接错误:“无效的捆绑包 - 不允许的 LLVM 检测”【英文标题】:Xcode 9, Carthage. iTunes Connect Error: "Invalid Bundle - Disallowed LLVM instrumentation" 【发布时间】:2018-02-19 23:30:50 【问题描述】:

今天我下载了 Xcode 9 并对我的应用程序进行了必要的更改以进行编译。该应用程序正在本地编译和运行,没有任何问题。

我使用 Xcode 9 将其上传到了 App Store。上传成功,没有任何错误。

然后我会从 Apple 发送以下电子邮件:

尊敬的开发者,

我们发现您最近交付的一个或多个问题 “KiteSpotter - 风筝冲浪风和天气预报”。处理您的 交付时,必须纠正以下问题:

无效的捆绑包 - 不允许的 LLVM 检测。不要提交应用程序 启用 LLVM 分析工具或覆盖收集。 关闭 LLVM 分析或代码覆盖,重建您的应用程序并 重新提交应用。

一旦这些问题得到纠正,您就可以重新交付 修正二进制。

问候,

App Store 团队

我关闭了我的目标和可可豆目标的代码覆盖率,这是我能找到的唯一相关设置:

重新提交申请,我得到同样的错误。

在我的项目中,我使用 Carthage,它有超过 15 个依赖项。在寻找解决方案时发现所有项目都需要使用上述设置进行更新。

是否有任何解决方案可以为所有框架自动执行此设置,如果这是导致问题的原因。 有没有其他人遇到过这个问题并解决了它。迦太基框架是造成问题还是其他原因?

【问题讨论】:

这里也有讨论:github.com/Carthage/Carthage/issues/2056 正如github.com/frankschlegel 所说,您可以使用以下命令查找导致此“grep -R”codeCoverageEnabled“Carthage”的框架 【参考方案1】:

即使我已将 Carthage 更新到最新版本 https://github.com/Carthage/Carthage/releases,我也从 Xcode 9.1 中遇到了同样的错误,我未能将构建上传到 iTunes

以这种方式为我工作:-

如果您已将 Xcode 更新到 9.1,那么

更新您从https://github.com/Carthage/Carthage/releases 下载的carthage.pkg

安装.pkg

通过引用您的项目在Terminal 中给出carthage update 命令

然后转到你的项目 Build Settings 找到 Enable Code Coverage Support 将该设置从 Yes 更改为 No

然后存档并上传到AppStore。您的构建将是readyHappy!

【讨论】:

【参考方案2】:

只需将Carthage 更新到0.26.0 或更高版本,然后再次运行carthage update 命令。

【讨论】:

【参考方案3】:

自动将所有依赖项的代码覆盖率设置为 false 的解决方案是在终端上运行以下命令(请转到您的项目目录):

grep -lR "codeCoverageEnabled" --include *.xcscheme --null Carthage | xargs -0 sed -i '' -e 's/codeCoverageEnabled = "YES"/codeCoverageEnabled = "NO"/g'

这会将代码覆盖率设置为 NO 并且 iTunes 连接不会抱怨。

使一切正常的顺序如下

运行carthage update --platform ios --no-use-binaries --no-build。这将更新并下载所有依赖项。 Carthage 开始编译时可以按 ctrl+c 取消。 运行上述命令将代码覆盖率设置为 NO 现在一切就绪,运行carthage build --platform iOS。这将构建代码覆盖率为零的所有内容

您现在可以存档并上传到 iTC。

命令是由https://github.com/gunterhager 给出的,所以归功于他


作为 fastlane 用户的替代方案,将以下内容添加到您的 fastlane 文件中,这将自动执行所有操作:

  desc "Update Carthage"
  lane :update_carthage do
    carthage(
      command: "update",       # One of: build, bootstrap, update, archive. (default: bootstrap)
      use_binaries: false,         # Check out dependency repositories even when prebuilt frameworks exist
      no_build: true,  # When bootstrapping Carthage do not build
      platform: "iOS"  # Define which platform to build for (one of ‘all’, ‘Mac’, ‘iOS’, ‘watchOS’, ‘tvOS‘, or comma-separated values of the formers except for ‘all’)
    )
    sh("grep -lR 'codeCoverageEnabled' --include *.xcscheme --null Carthage | xargs -0 sed -i '' -e 's/codeCoverageEnabled = 'YES'/codeCoverageEnabled = 'NO'/g'")
    carthage(
      command: "build",       # One of: build, bootstrap, update, archive. (default: bootstrap)
      platform: "iOS"  # Define which platform to build for (one of ‘all’, ‘Mac’, ‘iOS’, ‘watchOS’, ‘tvOS‘, or comma-separated values of the formers except for ‘all’)
    )
  end

【讨论】:

如果你没有像我一样安装 GNU 命令行,你可以使用这个:find Carthage -type f -name "*.xcscheme" -print0 | xargs -0 perl -pi -e 's/codeCoverageEnabled = "YES"/codeCoverageEnabled = "NO"/g'【参考方案4】:

作为快速修复,在终端中运行这些命令(确保转到项目的根文件夹):

carthage update --platform iOS --no-use-binaries --no-build 这将更新您的依赖项,但不会构建任何内容。

grep -lR "codeCoverageEnabled" --include *.xcscheme --null Carthage | xargs -0 sed -i '' -e 's/codeCoverageEnabled = "YES"/codeCoverageEnabled = "NO"/g' 这会将代码覆盖率设置为NO

carthage build --platform iOS 这将最终构建所有没有代码覆盖的框架。

现在您可以存档您的项目并将其上传到 iTunes Connect。

Carthage 项目的好心人已经在致力于更用户友好的修复,因此请务必检查那里的版本。

【讨论】:

这几乎重复了@zirinisp 的回答。 对不起,我无法评论@zirinisp 的回答:我是他指的那个人,我想指出您应该使用--no-build 作为carthage update . @GunterHager。我可以看到你是新来的,所以我想热烈欢迎你。在这种情况下,正确的做法是编辑我的答案并改进它或添加评论,我会像我一样改进它。无论如何,您的命令对我帮助很大。 这个答案比接受的答案更容易理解,因为步骤是有序的。

以上是关于Xcode 9,迦太基。 iTunes 连接错误:“无效的捆绑包 - 不允许的 LLVM 检测”的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 10.1上的“错误:无法表达IRGen,没有其他错误”的解决方案是什么?

如何在迦太基上安装旧版本

构建在 iTunes 中不可见与 xcode 8.2 ios 10 连接

Xcode 9 中的 iTunes Store 操作失败

设备不会运行错误 iOS 9 Xcode 7.0

iPod 在 iTunes 中恢复:但现在在 Xcode 中:未连接预置的 iOS 设备