以前に申請していたアプリだが、見事にリジェクトされてしまった。予想通りだけど、少し凹む・・。

リジェクトの理由は、iOS Data Storage Guidelinesに従っていないためだった。

これの内容を見ていくと、「iCloudバックアップされるディレクトリには、ユーザが作成したデータを置く。再ダウンロード可能なデータなどは、別のディレクトリに置きなさい」とのこと。つまり、「何でも、iCloudバックアップさせないように!」という意味。

以下のサイトが参考になった。

対応する

対応は簡単だった。今まで「[Application_Home]/Documents」に全データを置いていたのだが、データの配置場所を変更することにした。

画像イメージは「[Application_Home]/Library/Caches」に、データベースファイルは「[Application_Home]/Library/Private Documents」に置くことにした。

Caches以下は、ディスク容量が足りなくなると消される可能性があるので、データベースファイルは置けない。そこで別ディレクトリを作成する。注意するのは、このディレクトはiCloudバックアップされてしまうのだ。そこで、no backup属性を付与して、iCloudバックアップさせないように設定する。

no backup属性を付与するためのコードは、Technical Q&A QA1719: Technical Q&A QA1719を参考にした。これを呼び出せば、バックアップされなくなる。

少し悩んだ箇所は、NSString型のファイルパスをNSURLに変換するやりかた。以下のようにすれば問題なく動いた。

[c]

// fileURLWithPathを使う

[DatabaseHelper addSkipBackupAttributeToItemAtURL:[NSURL fileURLWithPath:dbPath];

[/c]

iPhoneシミュレータで起動した後、属性がついていることを確認する。

[bash]

$ cd /Users/ei/Library/Application Support/iPhone Simulator/6.0/Applications/AA98DACC-4167-4A98-A6C5-EFC709CA80D2

$ xattr Library/Private\ Documents/app.db

com.apple.metadata:com_apple_backup_excludeItem

[/bash]

xattrコマンドでファイルの属性を見ると、バックアップ対象外となっている。

再申請

再度、バイナリをアップロードして、「Waiting For Review」ステータスになった。また、リジェクトになる気がするなぁ・・。