iOS開発:アプリケーション再申請
以前に申請していたアプリだが、見事にリジェクトされてしまった。予想通りだけど、少し凹む・・。
リジェクトの理由は、iOS Data Storage Guidelinesに従っていないためだった。
これの内容を見ていくと、「iCloudバックアップされるディレクトリには、ユーザが作成したデータを置く。再ダウンロード可能なデータなどは、別のディレクトリに置きなさい」とのこと。つまり、「何でも、iCloudバックアップさせないように!」という意味。
以下のサイトが参考になった。
- App Storeの審査経過報告[iCloud対応] – スマホ事業室Web出張所~エンジニアのアウトプット~
- Data Storage Guidelineに従ったオフラインデータの保存と確認方法 – kakin.infoサポート
- アプリケーションディレクトリの構造とアクセス方法 – プログラミングノート
- Cocoaの日々: [Info] 特定のファイルを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」ステータスになった。また、リジェクトになる気がするなぁ・・。