Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NSHomeDirectory in iPhone unit test

When using NSHomeDirectory() inside a unit test I get:

/Users/hgpc/Library/Application Support/iPhone Simulator/5.0

I expected the actual home directory of the current application. Something like:

/Users/hgpc/Library/Application Support/iPhone Simulator/5.0/Applications/6D1091C6-02AE-4803-A7DF-D623D0F89579

What am I doing wrong?

like image 267
hpique Avatar asked Dec 04 '11 21:12

hpique


2 Answers

To solve this, set the value of Bundle Loader within your Unit Test target build settings to:

$(BUILT_PRODUCTS_DIR)/MyAppName.app/MyAppName

and also your Test Host to:

$(BUNDLE_LOADER)

you should then find NSHomeDirectory() returns the right value.

like image 68
Andrew Ebling Avatar answered Sep 28 '22 18:09

Andrew Ebling


Unfortunately, while in a unit-test (or logic test) - you're not really "in your app" (i.e. its sandbox). That's why stuff like NSDocumentDirectory or [NSBundle mainBundle] will not work.

If it works for you, I'd just go ahead and create a "Documents" folder in

/Users/hgpc/Library/Application Support/iPhone Simulator/5.0

You might want to do this in your test's setUp, that way you can delete it in tearDown.

If that doesn't work because your tests depend on stuff already being in your app's NSDocumentDirectory, you might want to re-think your test a little, as they should all be self-contained (i.e. install all resources from your bundle in setUp)

You could also use NSLibraryDirectory instead of NSDocumentDirectory, depending on what it is that you want to test.

like image 23
Christian O. Andersson Avatar answered Sep 28 '22 18:09

Christian O. Andersson