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
。您的构建将是ready
。 Happy
!
【讨论】:
【参考方案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,没有其他错误”的解决方案是什么?