iOS 5.0.1 で、"do not back up" というファイル属性が追加されました。
この属性はどういう時に使うのでしょうか。
Technical Q&A QA1719
http://developer.apple.com/library/ios/#qa/qa1719/_index.html
How do I prevent files from being backed up to iCloud and iTunes?
再生成や再ダウンロードが可能なデータは、バックアップ対象にならないCachesディレクトリに入れておけという指針、これはiOS 5より前からずっと言われている事で特に代わりありません。
iOS 5で新しくなったのは、ディスク不足の時にCachesディレクトリが消されるようになったという点。iOS 4以前では、CachesディレクトリはOSリストアの時にしか消えませんでした。
ディスクをわざと一杯にしてみると、
- バックグラウンドのアプリを全部殺す
- 殺したアプリのCachesディレクトリをクリアする
という処理が走りました。他にも何らかのタイミングで消される可能性があります。
元々Cachesはバックアップ対象では無いのでいつデータが無くなっても大丈夫なように対処しておく必要がありますが、iOS 5ではそれが発生する可能性が高くなったという事です。
電子書籍ダウンロードのような物を考えてみましょう。ガイドラインに従うと、サーバにあって再ダウンロード出来るという事で、データはCachesに入れておく事になるでしょう。しかし、ディスクの空きが少ない場合Cachesに保存したデータは読もうと思った時には消えている可能性があります。
QA1719 に記載されている、Offline Data は、このような状況を避けるための方法。
- "Caches"以外の場所にディレクトリを作成し、ディスク不足時に削除されないようにする
- "do not backup"属性を付けてバックアップ対象から外す
の合わせ技で、iOS 4以前のCachesディレクトリと同じ挙動をするオフラインデータ用ディレクトリを作成する事が出来ます。
注意点。"do not backup"属性はバックアップするな、というフラグであり、ディスク不足の時に消さないで下さい、というフラグではありません。Cachesは常にディスク不足時の削除対象になります。
iOS 5.0には"do not backup"属性が無いので、iOS 4以前のCachesディレクトリと同じ挙動をさせる事は不可能です。