Xcode 8 单元测试错误:无法确定 TEST_HOST 的包标识符

Posted

技术标签:

【中文标题】Xcode 8 单元测试错误:无法确定 TEST_HOST 的包标识符【英文标题】:Xcode 8 Unit Test Error: Could Not Determine Bundle Identifier for TEST_HOST 【发布时间】:2017-02-14 20:59:42 【问题描述】:

我有一个 Xcode 项目,它似乎不想在运行单元测试时尝试将其用作应用程序主机之前编译我的主应用程序目标以生成产品。在 Xcode 中,我尝试使用 ⌘ + U 运行单元测试。

我立即得到一个对话框,其中指出: Could not determine bundle identifier for [app name] TEST_HOST

(将[应用名称]替换为真实应用名称)

此对话框还包括我的本地派生数据产品目录的路径: "/Users/***/Library/Developer/Xcode/DerivedData/Lowes-aymgdtrbrarmcidtkxoqxeafmxmj/Build/Products/Debug-iphonesimulator/[app name]"

我设置了单元测试,其 TEST_HOST 设置指向 $(BUILT_PRODUCTS_DIR)/[app name].app/[app name]。单元测试目标对主应用程序目标具有目标依赖性。 BUNDLE_LOADER 设置设置为$(TEST_HOST)。如果我首先通过点击⌘ + B 编译主应用程序目标,则会创建正确的目录结构和应用程序,然后点击⌘ + U 引导并正确运行单元测试。如果我清理并重试,它会立即失败。我以前从未遇到过这个问题,它似乎是在应用程序转换为 Swift 3 之后出现的。这可能与问题有任何关系,也可能没有,不太确定。

我在这里阅读了几个答案并尝试了很多建议,但他们似乎没有与我相同的根本问题。对于大多数人来说,似乎将主机应用程序设置为 None 并返回到主要目标可以解决问题。对我来说不是这样。

Tests stop working under xcode 8 TEST_HOST error Could not determine bundle identifier for xxxTest TEST_HOST

我尝试了全新的结帐,将应用程序和测试目标重新转换为 Swift 3,以及标准的清理/清理构建文件夹/擦除派生数据。这些似乎都没有任何效果。

有没有其他人遇到过这个问题并想出了解决方案?

【问题讨论】:

在转换之前尝试检查一个版本,清理项目和派生数据,确保它正在构建,再次转换,清理项目和派生数据,构建。 是的,作为故障排除的一部分,我已经执行了所有这些步骤。现在看来 Xcode 只是拒绝先构建应用目标。 也许用您的新发现的详细信息更新您的问题。我不明白您评论中的问题“似乎 Xcode 只是拒绝首先构建应用程序目标”。它不会在转换之前构建提交? 当我正在构建和运行时,它构建得很好。但是当我尝试运行测试时,它并没有首先构建应用程序目标。 我遇到了同样的问题 【参考方案1】:

我找到了解决办法。它可能不适用于所有场景,但它修复了我的问题。在 Info 选项卡上的主项目设置中,有一个选项可以选择在启动命令行构建时运行的配置。我的设置为发布。将其翻转到 Debug 解决了我的问题。

【讨论】:

另一种可能的解决方案是在发布配置中设置“Bundle Loader”。 这为我解决了问题。此外,当我将其改回 Release 时,它​​继续工作。 @DanielLahyani 我认为您的解决方案是正确的,但您能解释一下原因吗?非常感谢【参考方案2】:

从您的测试目标的Build Settings 中完全删除Test Host 将解决此问题

【讨论】:

我尝试了这一步,对我遇到的这个问题没有影响。 可能是因为“测试主机”实际上设置为$(BUNDLE_LOADER)(这是我认为的默认值),如果您删除“Bundle Loader”的值,这可能会起作用。 【参考方案3】:

似乎在Release配置中设置“Bundle Loader”可以解决问题。

我无法完全理解为什么,但对我来说,这个错误总是出现在我们从命令行执行构建的 CI 系统中。在项目设置中,我们设置了“使用 Release 进行命令行构建”。因此,我认为即使我们通过命令行参数将构建配置设置为调试,xcodebuild 也忽略了配置参数并且部分使用了“发布”设置。这可能是xcodebuild 系统的一个错误(我想它值得一试),如果有人能找到更好的解释来解释为什么这解决了我很想听的错误。

希望这会有所帮助。

【讨论】:

【参考方案4】:

我的问题是 Build Settings 中的 Info.plist File 设置不存在。将设置更新到正确的 plist 文件解决了这个问题。

【讨论】:

【参考方案5】:

Xcode 9.2、Swift 4

在我的例子中,我之前在 Info.plist 中添加的 “URL 类型”,然后再次从 Info.plist 中删除,在 INFO 选项卡中留下了痕迹 该目标。所以我不得不再次手动删除它。

不允许从 Info 选项卡中删除 URL 类型,因此请返回 Info.plist 文件并再次删除它

【讨论】:

【参考方案6】:

XCode 9.4.1,斯威夫特 4

这次清理派生数据、退出 Xcode、重新启动 Xcode 对我有用。

【讨论】:

以上是关于Xcode 8 单元测试错误:无法确定 TEST_HOST 的包标识符的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Google Test 在 C++ 中成功设置单元测试

由于 otest 错误,无法从命令行运行 Xcode 单元测试

SwiftUI Xcode项目新增单元测试(Unit Test)后预览(Preview)崩溃的解决

SwiftUI Xcode项目新增单元测试(Unit Test)后预览(Preview)崩溃的解决

删除 XCode 8 中的单元测试

在 Xcode 中运行 iOS 单元测试时引用 _main 的链接器错误