西海岸より

つらつらざつざつと

iPhone上の各種パスを取得するコード

  • documentsディレクトリのパス
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0];
  • tmpディレクトリのパス
NSString *tmpPath = NSTemporaryDirectory();
  • アプリのリソースパス(.appファイルの中のルートパス)
    • その1
NSString *appRootPath = [[NSBundlemainBundle] bundlePath];

もし、テストするコード内に上記のコードが含まれている場合、
UnitTestを実行するexeのパスを取得してしまい、書き込み権限が無かったりなどで
うまくテストできなかったりする。
なので、個人的には以下の方法で取得するようにしてます。

    • その2
NSString *appRootPath2 = [[NSBundlebundleForClass:[selfclass]] bundlePath];

これだと、実行クラスが含まれるバイナリが配置されてるパスを返してくれます。