testing在xcode 8 TEST_HOST错误下停止工作

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

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

任何想法这里有什么问题? 我试图清理项目 – 什么都没有。 在我的目标中的Build Settings Packaging我更改产品包标识符取决于我的架构中的configuration。 这可能与此有关,但不确定。

– 编辑

好的数字如何缩小这个问题。 当我改变scheme设置使用生成configurationDebug而不是Testing似乎工作,但我需要单独的configuration进行testing。

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

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

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

好,搞清楚了。 命名包有一个问题。 不幸的是,Xcode有一些问题。 我为不同的configuration使用了不同的模块名称。 所以进入Project – > Build Settings – > Product Module Name更改名称在所有configuration中没有空格的同名。

还有一种情况可能会遇到。 如果主目标(例如Debug,Staging,Production)需要不同的产品名称 – 并尝试使用Xcode Host Applicationselect器,则会向TEST_HOST构build设置写入不正确的值。

而你看到的错误信息是关于debuggingconfiguration中的包标识符,Xcode实际上抱怨发布configuration中的TEST_HOST。

我通过手动更改TEST_HOST构build设置来修复它。 例如,如果主目标上的ProductName设置为“Debug”中的AppDebug并且“发布”configuration中设置了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 

看来Xcode8中有一些错误会导致这个问题。 不过,我发现一个解决scheme的情况下,Xcode试图findIntermediates/CodeCoverage/文件夹中的TEST_HOST应用程序。 (我尝试了所有其他解决scheme与模块名称等,它不适合我)。

问题本身似乎是,Xcode甚至没有尝试在运行testing之前构build应用程序。 但是,一旦Xcode能够在文件夹中findTEST_HOST, 它将在启动testing时重新生成。 这就是我们如何find解决办法的方法。

两种可能的解决方

如果您不需要代码覆盖范围:请转到您的unit testing目标的“ 生成设置” ,并将“ Enable Code Coverage Support 设置为“ 否”, 停用构build模式testing设置中的代码覆盖率。 (编辑scheme,在左边selecttesting )。 如果你想运行你的unit testing,并仍然得到TEST_HOST错误信息,请尝试构build( CMD + B )或运行你的应用程序。 然后你可以运行你的testing没有这个错误。 瞧。

如果您需要代码覆盖范围:您可以按照特定的解决方法来填充Intermediates/CodeCoverage/..文件夹。 一旦应用程序在里面Xcode将会重build为unit testing,但它需要填充一次。 这是你如何做到的:

  • 在应用程序和unit testing目标中,select“启用代码覆盖支持”
  • 然后在unit testing目标的“常规”选项卡中将testing主机应用程序设置为“无”
  • 取消选中“允许testing主机API”
  • 尝试开始unit testing。 Xcode现在至less会尝试构build。 如果Xcode提供了一个构build错误(有时Xcode在我的经验抱怨Cocoapods),尝试再次build设。
  • 再次检查unit testing目标中的“允许testing主机API”
  • 如上所述再次运行testing。 Xcode应该抱怨。
  • 现在将testing主机设置为应用程序。
  • 现在testing应该贯穿始终。 (直到你运行一个干净的,那么你将不得不重新做这些步骤..)

我知道,这很麻烦。 但这是迄今为止唯一的解决scheme。

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

对于我**。应用程序文件名是错误的。 我用** / Build / Intermediates / CodeCoverage / Products / Debug-iphonesimulator / **。appreplace它(检查该目录下的.app文件)。

我发现,只有在你正在testing的device / sim上build立并运行相同的testing目标,testing才能运行。

例如,如果我针对目标Production运行testing,那么在运行testing之前,我必须在device / sim上构build并运行目标Production。 如果我不这样做,它会给我同样的错误。

我遇到了这个错误很多,最终发现它是由Debug和Release版本configuration之间的不同PRODUCT_NAME引起的。

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

我们恢复了该更改,并为构buildconfiguration添加了一个新的APP_DISPLAY_NAME设置,在构buildtypes之间有所不同,并将Info.plist更改为使用$(APP_DISPLAY_NAME)而不是$(PRODUCT_NAME)。

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

转到xcode Preferences – > location >派生数据高级 – >select构build位置Unique

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

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

可惜你,苹果!

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