我想在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
似乎可行时,但我需要单独的配置进行测试。
答案 0 :(得分:48)
出于某种原因,下图中的“主机应用程序”设置对我来说是个问题。选择合适的目标可以解决这个问题。
最终修改了我的xcodeproj中的以下值:
答案 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)
答案 4 :(得分:4)
似乎Xcode8中存在多个可能导致此问题的错误。但是我找到了Xcode试图找到Intermediates/CodeCoverage/
文件夹中的TEST_HOST应用程序的解决方案。 (我使用模块名称等尝试了所有其他解决方案,但它对我不起作用。)
问题本身似乎是Xcode在运行测试之前甚至没有尝试构建应用程序。 然而一旦Xcode能够在启动测试时 重建的文件夹中找到TEST_HOST。这就是我们如何找到解决方法的方法。
两种可能的解决方案:
如果您 没有代码覆盖率
转到单元测试目标的构建设置并将Enable Code Coverage Support
设置为否 和停用构建方案的测试设置中的代码覆盖率。 (编辑方案,选择左侧的测试)。如果您想运行单元测试并仍然收到TEST_HOST错误消息,请尝试构建( CMD + B )或运行您的应用程序。然后,您可以运行您的测试没有该错误。瞧。
如果您需要代码覆盖率:
您可以按照某种解决方法来填充Intermediates/CodeCoverage/..
文件夹。一旦应用程序在里面,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
。
要克服该错误,我只需要确保对于要测试的应用目标的每个方案,以下两个匹配:
$(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!