iOSのファイル構造
アプリ内にはデベロッパーやiOSがデータを読み書きできるディレクトリがある。例えば以下のようなもの。
- /Documents
- アプリ固有のファイルを保存
- アプリを消すまでiTunesでバックアップされる
- /Library/Preferences
- アプリ固有の環境設定ファイルを保存
- バックアップされるが、デベロッパーは直接いじっちゃダメらしい
- /Library/Caches
- アプリ固有のサポートファイルを保存
- バックアップされないし、アプリがアクティブ時でも削除される可能性がある
- /tmp
- 一時ファイルを保存
- バックアップされないが、アプリがアクティブ時は保持される
一番使うのはDocumentsディレクトリで、アクセスにはpathを作って読み書きする。
pathが毎回変わる!?
そのpathなのだが、実機で確認したところ、Xcodeから起動するごとに絶対pathの途中のディレクトリ名が変更されていることがわかった。
具体的には、以下の赤の部分が大きく変わっている。
/var/mobile/Containers/Data/Application/42F81D0D-EDC1-4BB3-AC03-BBE7D6DC8C79/Documents/ファイル名
/var/mobile/Containers/Data/Application/2E9C5905-1A89-40BA-B727-3DDD8AE13BC5/Documents/ファイル名
なぜこうなってるのかわからないが、iOS8からの仕様らしい。
対処法
対処法だが、NSSearchPathForDirectoriesInDomains という関数があるので、それを使ってやれば起動ごとに変化するpathを得ることができる。(返り値は配列なので、index 0を参照すること)
もちろんディレクトリ内のファイルにもアクセスできる。
let path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first ?? ""
NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
0 件のコメント:
コメントを投稿