NSBundle pathForResource returns nil
Asked Answered
T

2

11

I've been trying to load a simple text file in a unit test for an iOS app.

NSString* resourcePath = [[NSBundle mainBundle] pathForResource: @"stopPointsInCircleData" ofType:@"txt"];
NSString* stopPointData = [NSData dataWithContentsOfFile: resourcePath];

My problem is that pathForResource returns nil.

The file stopPointsInCircleData.txt is located in the directory of the test code and the file is listed correctly under "Copy Bundle Resources" in the "Build Phases" of the test target.

I've tried to relax the search by setting ofType to nil, but thet didn't work either.

Any help is very much apprechiated.

Thundersquall answered 6/2, 2012 at 8:38 Comment(2)
May it will be simpler to set path manually? NSHomeDirectory() will help youProcurator
maybe because it is not txt .. have you checked the file format....it might be something else ..rtf?Nipper
B
28

Your problem is that in a unit test target, -mainBundle doesn't refer to the test target bundle but instead to the bundle of the executable in which the test target is injected. In the case of ios test targets, this is your app bundle; in Mac test targets it may either be the app bundle or the OCUnit runner.

You should look for resources in your test target's bundle. Inside a test class, it's done like this:

NSBundle *myBundle = [NSBundle bundleForClass: [self class]];
Bisset answered 6/2, 2012 at 8:50 Comment(2)
[self class] didn't work for me. I had to substitute [NAME_OF_TEST_CLASS class].Bushido
If you need to put code like this outside the test class, you can use [NSBundle bundleForClass:NSClassFromString(@"MyTestClassName")]Mestas
R
6

There is simple way to achieve that, you can emulate that bundle path:

Just head to

Project -> TestTarget -> Build Settings -> Unit Testing (Test Host) and just insert:

    $(BUILT_PRODUCTS_DIR)/AppName.app

Happy testing.

Republican answered 20/6, 2014 at 15:21 Comment(2)
I believe this answer is way better then the accepted one!Aloysia
What would it be for a framework? I tried $(BUILT_PRODUCTS_DIR)/FrameworkName.framework but got an error: "Could not find test host for ..."Millrace

© 2022 - 2024 — McMap. All rights reserved.