2016-09-14 45 views
26

我想在Xcode 8下啓動測試,並且一開始就失敗。我的錯誤是:測試在xcode 8下停止工作TEST_HOST錯誤

無法確定MyProjectTest的TEST_HOST包標識符: 「/用戶/ jakubmazur /庫/開發商/ Xcode中/ DerivedData/MyProject的-ejeepybggxvekxajlyngopeahiex /編譯/中間體/代碼覆蓋率/產品/測試,iphonesimulator/MyProject.app「

任何想法這裏有什麼問題?我試圖清理項目 - 什麼都沒有。 在我的目標PackagingBuild Settings中,我更改Product Bundle Identifier取決於我的模式中的配置。它可能與此有關,但不確定。

- 編輯

OK圖如何縮小問題。當我更改方案中的設置使用生成配置Debug而不是Testing似乎工作,但我需要單獨配置進行測試。

+0

你嘗試刪除在'/用戶/ jakubmazur /庫/開發商/ Xcode中/ DerivedData'一切嗎? –

+0

是的,這是我的第一步 - 沒有工作 – Kuba

+0

您是否嘗試重新創建您的'測試'計劃?這並不好玩,但它應該有所幫助。 –

回答

8

好吧,算出來。命名包有一個問題。不幸的是,Xcode有一些問題。我爲不同的配置使用了不同的模塊名稱。所以去Project - >Build Settings - >Product Module Name在沒有空格的同名的所有配置中更改名稱。

+0

我在項目級定義了一個Product Module Name,它由我的應用程序/ TEST_HOST繼承並被測試目標覆蓋。我刪除了項目中定義的「產品模塊名稱」,並在應用程序和測試目標上設置了該字段,然後再次開始工作。 – jbelkins

+0

@Kuba即使在Xcode 9 beta 4中,這也解決了我的問題...謝謝:) – nacho4d

-2

這是Xcode中的一個錯誤。見http://www.openradar.me/28095069

+0

不,這不是在這裏的情況。我嘗試在9.3 – Kuba

+0

上運行此鏈接似乎沒有引用@Kuba描述的TEST_HOST錯誤。 – rob

2

測試目標>>構建設置>>測試>>測試主機您可以看到應該用於測試的.app文件。

對我來說**。app文件名稱錯誤。我用**/Build/Intermediates/CodeCoverage/Products/Debug-iphonesimulator/**。app(檢查該目錄下存在的.app文件)替換它。

+1

我剛剛刪除了'Test Host',它對我的​​測試目標起作用,它工作正常。我爲框架做了這件事,我不確定這是否會改變事情。 – Alex

28

出於某種原因,下圖中的「主機應用程序」設置對我來說是個問題。選擇適當的目標解決這個問題。

這結束了修改我xcodeproj以下值:

  • BUNDLE_LOADER = 「$(TEST_HOST)」;
  • TEST_HOST =「$(BUILT_PRODUCTS_DIR)/myappname.app/myappname」;
9

還有一種情況可能會遇到。如果主目標(例如Debug,Staging,Production)需要不同的產品名稱 - 並嘗試使用Xcode Host Application選擇器,則它將向TEST_HOST編譯設置寫入不正確的值。

雖然您看到的錯誤消息是關於調試配置中的包標識符,但Xcode實際上抱怨版本配置中的TEST_HOST。

我通過手動改變TEST_HOST構建設置固定它。例如,如果您有產品名稱在Release配置設置爲AppDebug在調試和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 
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應該抱怨。
  • 現在將測試主機設置爲應用程序。
  • 現在測試應該貫穿始終。 (直到你運行一個乾淨的,那麼你將不得不重新做這些步驟..)

我知道,這很麻煩。但這是迄今爲止唯一的解決方案。

0

我發現的是,測試不會運行,除非你已經建立並運行相同的目標,你正在測試的設備/ SIM上運行測試。

例如,如果我針對目標Production運行測試,那麼在運行測試之前,我必須在device/sim上構建並運行目標Production。如果我沒有那樣做,它會給我同樣的錯誤。

0

我遇到了這個錯誤很多,最終發現它是由Debug和Release版本配置之間不同的PRODUCT_NAME引起的。

我們這樣做是爲了讓Debug版本在安裝在手機上時具有不同的應用名稱(以及不同的捆綁ID,因此我們可以將它們與App Store版本並排安裝)。

我們恢復了該更改,併爲構建配置添加了新的APP_DISPLAY_NAME設置,各種構建類型之間有所不同,並將Info.plist更改爲使用$(APP_DISPLAY_NAME)而不是$(PRODUCT_NAME)。

這樣做之後,進入項目中的測試目標非常重要,並確保General中的'主機應用程序'設置實際上已設置爲您的應用程序。

-2

退出Xcode並刪除DerivedData文件夾在固定的問題對我來說。

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

讓你感到羞恥,蘋果!

-1

去的Xcode Preferences - >location>派生數據高級 - >選擇生成位置Unique