测试在 xcode 8 TEST_HOST 错误下停止工作
Posted
技术标签:
【中文标题】测试在 xcode 8 TEST_HOST 错误下停止工作【英文标题】:Tests stop working under xcode 8 TEST_HOST error 【发布时间】:2016-09-14 14:27:03 【问题描述】:我想在 Xcode 8 下开始测试,但一开始就失败了。我的错误是:
无法确定 MyProjectTest 的 TEST_HOST 的包标识符: "/Users/jakubmazur/Library/Developer/Xcode/DerivedData/MyProject-ejeepybggxvekxajlyngopeahiex/Build/Intermediates/CodeCoverage/Products/Testing-iphonesimulator/MyProject.app"
知道这里有什么问题吗?我尝试清理项目 - 没有。
在Packaging
我的目标中的Build Settings
中,我更改产品捆绑标识符取决于我的架构中的配置。这可能与此有关,但不确定。
-- 编辑
确定如何缩小问题范围。当我更改方案中的设置以使用构建配置Debug
而不是Testing
似乎可以工作,但我需要单独的配置进行测试。
【问题讨论】:
您是否尝试删除/Users/jakubmazur/Library/Developer/Xcode/DerivedData
下的所有内容?
是的,这是我的第一步 - 没用
您是否尝试重新创建您的Testing
方案?这不好玩,但应该会有所帮助。
是的,正如我在问题中所说,只要它在相同的配置中就可以了,当我更改配置时,我会遇到同样的错误
【参考方案1】:
出于某种原因,下图中的“主机应用程序”设置对我来说是个问题。选择合适的目标解决了这个问题。
这最终修改了我的 xcodeproj 中的以下值:
BUNDLE_LOADER = "$(TEST_HOST)"; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/myappname.app/myappname";【讨论】:
【参考方案2】:您可能还会遇到另一种情况。如果您需要不同的产品名称作为主要目标(例如 Debug、Staging、Production) - 并尝试使用 Xcode 主机应用程序选择器,它将向 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
【讨论】:
美男子!如何使@testable import
泛型?【参考方案3】:
我的项目有很多目标,所以我必须将测试目标的主机应用程序设置为“无”。 (Xcode 9.2)
【讨论】:
这是我的情况 =) 谢谢!【参考方案4】:好吧,弄清楚。命名包有问题。不幸的是,Xcode 存在一些问题。我对不同的配置使用不同的模块名称。所以转到Project
-> Build Settings
-> Product Module Name
将所有配置中的名称更改为相同的名称,不带空格。
【讨论】:
我在项目级别定义了一个Product Module Name
,它被我的应用程序/TEST_HOST
继承并被测试目标覆盖。我删除了项目中定义的Product Module Name
,并在应用程序和测试目标上设置了该字段,然后一切又开始工作了。
@Kuba 即使在 Xcode 9 beta 4 中这也解决了我的问题...谢谢:)
嗨,难道不会把其他应用程序弄得一团糟吗?当我更改我的Product Module Name
时,我的应用程序无法再取消归档某些归档对象,因为发生了变化。【参考方案5】:
我也有一个包含多个方案的项目,每个方案都使用单独的配置(调试、AdHoc 等)和单独的产品名称构建应用程序(MyApp、MyApp_Dev、MyApp_Staging 等)。
谢天谢地,它们都具有相同的模块名称,因此我的单元测试源文件可以简单地使用@testable import MyApp
,而不管活动方案如何。
为了克服这个错误,我只需要确保对于我想要测试的应用目标的每个方案,以下两个匹配:
-
App Target 的 Build Settings > Product Name 用于构建配置(例如“调试”),
Test Target 的Build Settings > Test Host 用于相同的构建配置(
$(BUILT_PRODUCTS_DIR)...
之后的部分)
所以,如果 #1 是(例如):
MyApp-Debug
,那么#2 必须是:
$(BUILT_PRODUCTS_DIR)/MyApp-Debug.app/MyApp-Debug
在我的例子中,我的方案是构建 AdHoc
配置,其产品名称以 -DEV
(开发)后缀结尾,但 测试目标 正在寻找一个以-STG(分期)的后缀。
【讨论】:
【参考方案6】:Xcode8 中似乎有几个错误可能导致此问题。但是,对于 Xcode 尝试在 Intermediates/CodeCoverage/
文件夹中查找 TEST_HOST 应用程序的情况,我找到了解决方案。 (我用模块名称等尝试了所有其他解决方案,但它对我不起作用。)
问题本身似乎是 Xcode 在运行测试之前甚至没有尝试构建应用程序。 然而一旦 Xcode 能够在文件夹中找到 TEST_HOST,它将在启动测试时重建。这样我们才能找到解决方法。
两种可能的解决方案:
如果您没有必须拥有代码覆盖率:
转到您的单元测试目标的构建设置并将Enable Code Coverage Support
设置为否并在构建方案的测试设置中停用代码覆盖率。 (编辑方案,选择左侧的 Test)。如果您想运行单元测试并且仍然收到 TEST_HOST 错误消息,请尝试构建 (CMD+B) 或运行您的应用程序。然后您可以运行测试而不会出现该错误。瞧。
如果您需要代码覆盖率:
您可以按照某种解决方法来填充 Intermediates/CodeCoverage/..
文件夹。一旦应用程序在 Xcode 中,它将按照应有的方式重建单元测试,但您需要填充一次。这就是你的做法:
我知道,这很麻烦。但这是迄今为止解决问题的唯一方法。
【讨论】:
【参考方案7】:在测试目标>>构建设置>>测试>>测试主机你可以看到应该用于测试的.app文件。
对我来说 **.app 文件名错误。我将其替换为 **/Build/Intermediates/CodeCoverage/Products/Debug-iphonesimulator/**.app(检查此目录下的 .app 文件)。
【讨论】:
我刚刚完全删除了Test Host
,它适用于我的测试目标并且它有效。我这样做是为了一个框架,我不确定这是否会改变事情。【参考方案8】:
我经常遇到这个错误,最终发现它是由 Debug 和 Release 构建配置之间的不同 PRODUCT_NAME 引起的。
我们这样做是为了让 Debug 版本在安装在手机上时具有不同的应用名称(以及不同的捆绑包 ID,因此我们可以将它们与 App Store 版本并排安装)。
我们恢复了该更改并将新的 APP_DISPLAY_NAME 设置添加到构建配置中,改变了构建类型之间的设置,并将 Info.plist 更改为使用 $(APP_DISPLAY_NAME) 而不是 $(PRODUCT_NAME)。
完成此操作后,进入项目中的测试目标并确保“常规”中的“主机应用程序”设置实际上已设置为您的应用程序,这一点很重要。
【讨论】:
【参考方案9】:我发现测试不会运行,除非你在你正在测试的设备/sim 上构建并运行你正在运行测试的相同目标。
例如,如果我针对目标 Production 运行测试,那么我必须先在设备/sim 上构建并运行目标 Production,然后才能运行测试。如果我不这样做,它会给我同样的错误。
【讨论】:
【参考方案10】:转到 xcode Preferences
-> location
> Derived Data Advance -> 选择构建位置 Unique
【讨论】:
【参考方案11】:这是目前 Xcode 中的一个错误。见http://www.openradar.me/28095069。
【讨论】:
不,这里不是这样。我尝试在 9.3 上运行 此链接似乎没有引用 @Kuba 描述的 TEST_HOST 错误。【参考方案12】:退出 Xcode 并删除 DerivedData 文件夹为我解决了这个问题。
$ sudo rm -Rf Library/Developer/Xcode/DerivedData
苹果你真丢脸!
【讨论】:
以上是关于测试在 xcode 8 TEST_HOST 错误下停止工作的主要内容,如果未能解决你的问题,请参考以下文章
可以在 IOS 8 (Xcode 6) 模拟器中测试应用内购买吗?