可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I want to start tests under Xcode 8 and it fail in the beginning. My error is:
Could not determine bundle identifier for MyProjectTest's TEST_HOST: "/Users/jakubmazur/Library/Developer/Xcode/DerivedData/MyProject-ejeepybggxvekxajlyngopeahiex/Build/Intermediates/CodeCoverage/Products/Testing-iphonesimulator/MyProject.app"
Any idea what's wrong here? I try to clean project - nothing. In the Build Settings
in my target in Packaging
i change Product Bundle Identifier depends on configuration in my schema. It can have something to do with that, but not sure.
-- EDIT
Ok figure how to narrow the problem. When i change settings in scheme to use Build Configuration Debug
instead of Testing
seems to work, but I need separate configuration for testing.
回答1:
For some reason the "Host Application" setting in the picture below was the problem for me. Selecting the proper target fixed this.

This ended up modifying the following values in my xcodeproj:
- BUNDLE_LOADER = "$(TEST_HOST)";
- TEST_HOST = "$(BUILT_PRODUCTS_DIR)/myappname.app/myappname";
回答2:
There is one more case you might encounter. If you need different product names for main target(for example Debug, Staging, Production) - and try to use Xcode Host Application selector, it will write incorrect values to TEST_HOST build setting.
And while error message you see is about bundle identifier in Debug configuration, Xcode actually complains about TEST_HOST in Release configuration.
I fixed it by manually changing TEST_HOST build setting. For example, if you have ProductName on main target set to AppDebug in Debug and AppRelease in Release configuration, your TEST_HOST should be following:
What Xcode sets:
$(BUILT_PRODUCTS_DIR)/AppDebug.app/AppDebug
What you need to set:
Debug configuration: $(BUILT_PRODUCTS_DIR)/AppDebug.app/AppDebug Release configuration: $(BUILT_PRODUCTS_DIR)/AppRelease.app/AppRelease
回答3:
Ok figure it out. There is a problem with naming packages. Unfortunatelly there is some issue with Xcode. I was using different Module Names for different Configurations. So go to Project
-> Build Settings
-> Product Module Name
Change name in all configurations for same name without spaces.
回答4:
It seems there are several bugs in Xcode8 that can cause this. However I have found a solution for the case where Xcode tries to find the TEST_HOST app within the Intermediates/CodeCoverage/
folder. (I tried all other solutions with the module names etc and it didn't work for me.)
The issue itself seems to be that Xcode does not even try to build the app before running the tests. However once Xcode is able to find the TEST_HOST in the folder it will rebuild when launching the tests. That's how we can find our way around it.
Two possible solutions:
If you don't have to have code coverage: Go to your unit test target's Build Settings and set Enable Code Coverage Support
to No and deactivate code coverage in your build scheme's test setting. (Edit scheme, select Test on the left). If you want to run your unit tests and still get that TEST_HOST error message, try building (CMD+B) or running your app. Then you can run your tests without that error. Voilá.
If you need code coverage: You can follow a certain workaround to get that Intermediates/CodeCoverage/..
folder filled. Once the app is inside Xcode will rebuild for the unit tests as it should, but you need to get it filled once. This is how you do it:
- In the app and the unit test target select No for "Enable Code Coverage Support"
- Then in the "General" tab of the unit test target set the test host application to "None"
- Uncheck "Allow testing Host API"
- Try to start unit tests. Xcode will now at least try to build. If Xcode gives a build error (sometimes Xcode complains about Cocoapods here in my experience), try building once again.
- Re-check "Allow testing Host API" again in the Unit Test target
- Try running the tests again as above. Xcode should complain.
- Now set the test host to the app.
- Now the tests should run through. (Until you run a clean, then you'll have to re-do these steps..)
I know, it's bothersome. But it's the only solution to the problem so far.
回答5:
Under Test Target >> Build Setting >> Testing >> Test Host you can see the .app file which should be used for testing.
For me **.app file name was wrong. And I replaced it with **/Build/Intermediates/CodeCoverage/Products/Debug-iphonesimulator/**.app (check for the .app file present under this directory).
回答6:
What I have discovered is that the tests will not run unless you have built and run the same target you are running the tests against on the device/sim you are testing on.
For example, if I run the tests against target Production, then I would have to build and run the target Production on the device/sim before I can run the tests. If I did not do that, it will give me the same error.
回答7:
I ran into this error a lot and eventually discovered that it was caused by varying PRODUCT_NAME between Debug and Release build configurations.
We were doing this so that the Debug builds had a different app name when installed on the phone (as well as a different bundle id so we could install them side-by-side with the App Store builds).
We reverted that change and added a new APP_DISPLAY_NAME setting to the build configuration, varied that between build types, and changed the Info.plist to use $(APP_DISPLAY_NAME) instead of $(PRODUCT_NAME).
After doing that, it's important to go into the test target in the project and make sure the 'Host application' setting in General is actually set to your application.
回答8:
go to xcode Preferences
-> location
> Derived Data Advance -> select build location Unique
回答9:
This is a bug in Xcode right now. See http://www.openradar.me/28095069.
回答10:
Quitting Xcode and removing DerivedData folder at fixed the problem for me.
$ sudo rm -Rf Library/Developer/Xcode/DerivedData
Shame on you, Apple!