测试在xcode 8 TEST_HOST错误

时间:2016-09-14 14:27:03

标签: ios xcode xcode8

我想在Xcode 8下开始测试,但一开始就失败了。我的错误是:

  

无法确定MyProjectTest的TEST_HOST的包标识符:   “/Users/jakubmazur/Library/Developer/Xcode/DerivedData/MyProject-ejeepybggxvekxajlyngopeahiex/Build/Intermediates/CodeCoverage/Products/Testing-iphonesimulator/MyProject.app”

知道这里有什么问题吗?我试着清理项目 - 没什么。 在Build Settings中我的目标Packaging中,我更改产品包标识符取决于我的架构中的配置。它可能与此有关,但不确定。

- 编辑

好的,如何缩小问题范围。当我更改方案中的设置以使用构建配置Debug而不是Testing似乎可行时,但我需要单独的配置进行测试。

12 个答案:

答案 0 :(得分:48)

出于某种原因,下图中的“主机应用程序”设置对我来说是个问题。选择合适的目标可以解决这个问题。

最终修改了我的xcodeproj中的以下值:

  • BUNDLE_LOADER =“$(TEST_HOST)”;
  • TEST_HOST =“$(BUILT_PRODUCTS_DIR)/myappname.app/myappname”;

答案 1 :(得分:13)

您可能会遇到另外一个案例。如果您需要主目标的不同产品名称(例如Debug,Staging,Production) - 并尝试使用Xcode Host Application选择器,它将向TEST_HOST构建设置写入不正确的值。

虽然您看到的错误消息是关于Debug配置中的包标识符,但Xcode实际上在 Release 配置中抱怨TEST_HOST。

我通过手动更改TEST_HOST构建设置来修复它。例如,如果主要目标上的ProductName设置为Debug中的AppDebug和Release配置中的AppRelease,则 TEST_HOST 应该如下:

Xcode设置的内容:

$(BUILT_PRODUCTS_DIR)/AppDebug.app/AppDebug

您需要设置的内容:

Debug configuration: $(BUILT_PRODUCTS_DIR)/AppDebug.app/AppDebug
Release configuration: $(BUILT_PRODUCTS_DIR)/AppRelease.app/AppRelease

答案 2 :(得分:8)

好的弄清楚。命名包有问题。不幸的是,Xcode存在一些问题。我正在为不同的配置使用不同的模块名称。所以转到Project - > Build Settings - > Product Module Name更改同名的所有配置中的名称,不含空格。

答案 3 :(得分:8)

我的项目有很多目标,因此我必须将测试目标的主机应用程序设置为“无”。 (Xcode 9.2)

enter image description here

答案 4 :(得分:4)

似乎Xcode8中存在多个可能导致此问题的错误。但是我找到了Xcode试图找到Intermediates/CodeCoverage/文件夹中的TEST_HOST应用程序的解决方案。 (我使用模块名称等尝试了所有其他解决方案,但它对我不起作用。)

问题本身似乎是Xcode在运行测试之前甚至没有尝试构建应用程序。 然而一旦Xcode能够在启动测试时 重建的文件夹中找到TEST_HOST。这就是我们如何找到解决方法的方法。

两种可能的解决方案:

如果您 没有代码覆盖率 转到单元测试目标的构建设置并将Enable Code Coverage Support设置为 停用构建方案的测试设置中的代码覆盖率。 (编辑方案,选择左侧的测试)。如果您想运行单元测试并仍然收到TEST_HOST错误消息,请尝试构建( CMD + B )或运行您的应用程序。然后,您可以运行您的测试没有该错误。瞧。

如果您需要代码覆盖率: 您可以按照某种解决方法来填充Intermediates/CodeCoverage/..文件夹。一旦应用程序在里面,Xcode将重建单元测试,但你需要填充一次。你就是这样做的:

  • 在应用和单元测试目标中,为“启用代码覆盖率支持”选择
  • 然后在单元测试目标的“常规”选项卡中将测试主机应用程序设置为“无”
  • 取消选中“允许测试主机API”
  • 尝试开始单元测试。 Xcode现在至少会尝试构建。如果Xcode出现构建错误(根据我的经验,有时Xcode会抱怨Cocoapods),请尝试再次构建。
  • 在单元测试目标
  • 中重新检查“允许测试主机API”
  • 尝试再次运行测试,如上所述。 Xcode应该抱怨。
  • 现在将测试主机设置为应用程序。
  • 现在测试应该完成。 (直到你运行干净,然后你将不得不重新执行这些步骤..)

我知道,这很麻烦。但到目前为止,这是解决问题的唯一方法。

答案 5 :(得分:3)

测试目标>>下构建设置>>测试>>测试主机,您可以看到应该用于测试的.app文件。

对我来说 **。app 文件名错误。我用 ** / Build / Intermediates / CodeCoverage / Products / Debug-iphonesimulator / **。app 替换它(检查此目录下的.app文件)。

答案 6 :(得分:1)

我经常遇到这个错误,并最终发现它是由调试和发布版本配置之间的不同PRODUCT_NAME造成的。

我们这样做是为了使Debug版本在手机上安装时具有不同的应用程序名称(以及不同的软件包ID,以便我们可以与App Store版本并排安装)。

我们还原了该更改,并在构建配置中添加了新的APP_DISPLAY_NAME设置,在构建类型之间进行了更改,并将Info.plist更改为使用$(APP_DISPLAY_NAME)而不是$(PRODUCT_NAME)。

在这样做之后,进入项目中的测试目标并确保“主机应用程序”是非常重要的。 “常规”中的设置实际上已设置为您的应用程序。

答案 7 :(得分:0)

我发现除非您在正在测试的设备/ SIM上运行与测试相同的目标,否则测试将无法运行。

例如,如果我针对目标生产运行测试,那么在运行测试之前,我必须在设备/ sim上构建并运行目标Production。如果我不这样做,它会给我同样的错误。

答案 8 :(得分:0)

我也有一个包含多个方案的项目,每个方案都使用单独的配置(调试,AdHoc等)和单独的产品名称来构建应用程序(MyApp,MyApp_Dev,MyApp_Staging等)。

值得庆幸的是,它们都具有相同的模块名称,因此无论活动方案如何,我的单元测试源文件都可以简单地使用@testable import MyApp

要克服该错误,我只需要确保对于要测试的应用目标的每个方案,以下两个匹配:

  1. 该构建配置(例如“调试”)的应用目标构建设置>产品名称
  2. 测试目标构建设置>测试主机,用于相同的构建配置($(BUILT_PRODUCTS_DIR)...之后的部分)

例如,如果#1是:

MyApp-Debug

,那么#2必须是:

$(BUILT_PRODUCTS_DIR)/MyApp-Debug.app/MyApp-Debug

就我而言,我的方案是构建AdHoc配置,其产品名称以-DEV(开发)后缀结尾,但是测试目标正在寻找一个主机名为-STG(分段)后缀结尾。

答案 9 :(得分:-1)

转到xcode Preferences - > location>派生数据推进 - >选择构建位置Unique

答案 10 :(得分:-2)

这是Xcode中的一个错误。请参阅http://www.openradar.me/28095069

答案 11 :(得分:-3)

退出Xcode并删除DerivedData文件夹,解决了我的问题。

$ sudo rm -Rf Library/Developer/Xcode/DerivedData

羞辱你,Apple!