Project Unknown's Blog

Peojct.Unknownと言う名前で細々とアプリ開発をやってるメンバーのブログです。

XCode6 - XCode7におけるSQLiteとかの場所

XCode7でやり方が変わっているので、追記しています。

久々に更新…ゆう@あんのうんです。

XCode6でSQLiteを扱っており、XCode5の頃と物理ファイルの設置場所が大きく変わって居るのを忘れて、探しまわってしまったので、備忘録として、メモ。

XCode6の場合

SQLite等、XCode6でのリソースの物理ファイルは以下に配置されます。

~/Library/Developer/CoreSimulator/Devices/デバイスID/data/Containers/Data/Application/アプリID/Documents/

んで、覚えるの面倒くさいなーと思ったら、良いツールがありました。

http://simpholders.com

これがあれば、物理ファイルとか覚えなくても、リソースの場所を視覚的に表示してくれるので非常に便利です。


XCode7以降の場合

上記のSimpholdersがXCode6までしか対応しておらず、XCode7(iOS9.0)以降は、現状自分で該当のディレクトリを割り出すしかありません。 ここでは、ディレクトリを割り出す為の方法を何個かご紹介します。

PGMにDocumentRootをログに吐き出す処理を埋め込んでしまう

これば一番てっとり早いです。 AppDelegate等に以下のログを仕込んでしまって確認する方法です

swiftの場合

#if DEBUG
   print("----------------------------------");
   print("[DEBUG]");
   let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
   print(documentsPath)
   print("----------------------------------");
#endif

objective-cの場合

#if DEBUG
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsPath = paths[0];
    NSLog(@"----------------------------------");
    NSLog(@"[DEBUG]");
    NSLog(@"[Document Path] : %@", documentsPath);
    NSLog(@"----------------------------------");
#endif

コマンドラインで見つける場合

cd ~/Library/Developer/CoreSimulator/Devices 
find . -name "hogehoge.sqlite"  # SQLiteのファイル名

早くSimPholderがXCode7以降に対応してくれることを切に願うばかりですね。