バンドル地獄

いまさらながら、iOSアプリケーションプログラミングガイドを読んでいます。
http://developer.apple.com/jp/devcenter/ios/library/documentation/iPhoneAppProgrammingGuide.pdf


ファイルを保存する時に、Documentsに保存するのが良いのか?どこが良いのかで迷ったからです。


読み始めると、サンドボックスについて解説がありました。
アプリが最初にデバイスにインストールされるとき、システムがアプリのホームディレクトリを作成し、
サンドボックスのセキュリティ権限を設定すると、
そして、ホームディレクトリのパスは次の形式をとりますよと、
/ApplicationRoot/ApplicationID/
なるほど。

そしてiOSアプリケーションの各ディレクトリについてはこのように書いてありました。
/AppName.app

アプリ自体を含むバンドルのディレクトリです。
このディレクトリには何も書き込まないで下さい。
ここに書き込むと、署名が変化するから、アプリを起動することができなくなります。
このディレクトリはiOS2.1以降ではiTunesのバックアップなし
ただし、AppStoreから購入したアプリの最初の同期はiTuensに実行されると、、
ちゃんと書き込むなって書いてありますね。



/Documents

ユーザー文書や、アプリのデータを保存するのにはここを使います。
iTunesのバックアップ有り
ファイル共有もできますよと、なるほど




/Library/

このディレクトリはユーザーのデータファイル用には使用しないで下さい。
iTunesのバックアップ有り



/Library/Preference

アプリケーション固有の環境設定ファイルを保存する。
NSUserDefaults等で、、
iTunesのバックアップ有り




/Library/Caches

アプリを次に起動するまでの間、
アプリの更新中に残しておきたいアプリ固有のサポートファイルを書き込む。
iOS2.2以降ではiTunesのバックアップなし。


/tmp

アプリを次回起動するまで、保持する必要のない一時的なファイルを
書き込むのに使用する。
システムが古いファイルをこのディレクトリから削除する場合も、、
iOS2.1以降ではiTunesのバックアップなし。


保存はいるけど、バックアップはいらないという大きいデータや、
良く変更がかかるデータはCachesにいれておきましょう。
大きいデータをDocumentsにいれておくと、同期の度にバックアップをとるので時間がかかるからです。

もうちょっと公式文書をしっかり読みます。

PS:tmpやCachesディレクトリに書き込めないという事態に陥った、
と思っていましたが、iOS5で試したり、iOS4.3で試したりしていたので、
iOS5iOS4で別々の場所にデータが保存されているだけでした、、くやしい。。