Xcode 9, Carthage. iTunes Connect Error: "Invalid Bundle - Disallowed LLVM instrumentation"

Xcode 9, Carthage. iTunes Connect Error: "Invalid Bundle - Disallowed LLVM instrumentation"

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

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

然后我转到以下来自 Apple 的电子邮件:

Dear developer,

We have discovered one or more issues with your recent delivery for "KiteSpotter - Kitesurf wind and weather forecast". To process your delivery, the following issues must be corrected:

Invalid Bundle - Disallowed LLVM instrumentation. Do not submit apps with LLVM profiling instrumentation or coverage collection enabled. Turn off LLVM profiling or code coverage, rebuild your app and resubmit the app.

Once these issues have been corrected, you can then redeliver the corrected binary.

Regards,

The App Store team

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

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

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

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

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

这会将代码覆盖率设置为“否”,iTunes 连接不会报错。

使一切正常的顺序如下

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

您现在可以存档并上传到 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

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

  • 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 项目的好心人已经在着手进行更加用户友好的修复,所以一定要检查那里的版本。

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

我也从 Xcode 9.1 得到了同样的错误,尽管我已经将 Carthage 更新到最新版本 https://github.com/Carthage/Carthage/releases 我无法将构建上传到 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!