私の iPhone アプリは最近、以下の理由で拒否されました。
「あなたのアプリは iOS データストレージガイドラインに従っておらず、App Store レビューガイドラインに準拠していないことが判明しました。」
このアプリでは、iOS 5.0.1 以降ではデータベース (sqlite ファイル) を /Documents/ ディレクトリに保存し、iOS 5.0 以下のバージョンでは Library/Cache ディレクトリを使用していました。
サーバーからダウンロードした PDF やアートワーク画像などの他のデータについては、上記と同じアプローチに従いました。iOS 5.0.1以降:これらのデータを/Documents/ディレクトリに保存しましたiOS 5.0以前のバージョン:データをライブラリ/キャッシュ ディレクトリに保存しました。
このアプローチは正しいでしょうか?
Apple のガイドラインによると:重要: 新しい「バックアップしない」属性は、iOS 5.0.1 以降でのみ使用されます。iOS 5.0 以前では、アプリケーションは、データがバックアップされないように、データを /Library/Caches に保存する必要があります。この属性は古いシステムでは無視されるため、アプリケーションがサポートするすべてのバージョンの iOS で、iOS データ ストレージ ガイドラインにアプリケーションが準拠していることを確認する必要があります。
また、iOS 5.0.1 以降に保存されたデータに対する「バックアップしない」属性の割り当てについても非常に混乱しています。どのファイルにこのフラグを割り当てる必要がありますか? データベースに使用できますか?
2 回も拒否されたので、これを解消する必要があります。アプリのデータ保存に関するガイダンスを提供してください。よろしくお願いします。肯定的な回答をお待ちしています。
ベストアンサー1
チェックhttps://developer.apple.com/icloud/documentation/data-storage/
具体的には:
この属性は、再作成可能だが、アプリが適切に機能するためにストレージ容量が少ない状況でも保持する必要があるデータ、またはオフライン使用時にも利用できることを顧客が期待しているデータに使用します。この属性は、マークされたファイルがどのディレクトリにあるかに関係なく、ドキュメント ディレクトリを含むマークされたファイルで機能します。
SQLite dbをキャッシュフォルダに保存し、donotbackupフラグを設定すると、キャッシュクリーンシステムによってファイルが削除されなくなります。
- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
const char* filePath = [[URL path] fileSystemRepresentation];
const char* attrName = "com.apple.MobileBackup";
u_int8_t attrValue = 1;
int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0);
return result == 0;
}
私はアプリでデータベースを使用し、それをキャッシュ フォルダーに保存し (上記のフラグを設定して)、問題なく承認されました。
さらに、ドキュメント ディレクトリのサブフォルダーにデータを保存することもできます。このデータはバックアップされませんが、保持されると思います。