私のアプリは、次の理由でAppleによって拒否されました。
2.23
アプリが、AppStoreレビューガイドラインで要求されているiOSデータストレージガイドラインに準拠していないことがわかりました。
特に、起動時やコンテンツのダウンロード時に、アプリは10.3MBを保存することがわかりました。アプリが保存しているデータの量を確認するには:
- アプリをインストールして起動します
- [設定]>[iCloud]>[ストレージとバックアップ]>[ストレージの管理]に移動します
- 必要に応じて、[すべてのアプリを表示]をタップします
- アプリのストレージを確認してください
iOSデータストレージガイドラインでは、ユーザーがアプリを使用して作成したコンテンツ(ドキュメント、新しいファイル、編集など)のみを/ Documentsディレクトリに保存し、iCloudでバックアップできることを示しています。
私がしていることは、約10 MBのリソースフォルダーにデータベースを配信し、最初の起動時にそのデータベースをライブラリパスにコピーすることです(以下のコードを参照)。デバイス設定内で起動後にアプリの設定を見ると、実際には、ドキュメントとデータフォルダーにこの10MBのデータが含まれていると表示されます。アプリをインストールすると、そのデータベースは不要になるため、removeItemAtPathを使用してコピーを実行するときに、リソースフォルダーからDBを削除しようとしました。しかし、それには許可の問題があるようです。
これは、最初の起動時にデータベースにデータを入力するために使用しているコードです。
// Copy the database from the app resource, if it is not already existing in the library path
- (void) copyDatabaseIfNeeded {
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory , NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
NSString *dbPath = [documentsDir stringByAppendingPathComponent:@"abiliator.sqlite3"];
BOOL success = [fileManager fileExistsAtPath:dbPath];
if(!success) {
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"abiliator.sqlite3"];
success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error];
if (!success) {
NSLog(@"Failed to create writable database file with message '%@'.", error);
}
else {
success = [fileManager removeItemAtPath:defaultDBPath error:&error];
if (!success) {
NSLog(@"Failed to remove the source database file with message '%@'.", error);
}
}
}
}
その問題について何時間も調査した後、私は実際には何も間違ったことをしていないと確信しています。ライブラリパスは、Appleのドキュメントに従って更新可能なファイルを保存する場所です。特に、データをバックアップして非表示にしたい場合、またはユーザーに公開したくない場合。どちらも私のアプリの場合です。データをバックアップしたいのですが、ユーザーにデータベースを見せたくないのです。したがって、ライブラリは完全に正しいようです。私が考えることができるのは、リソースディレクトリ内のデータベースのサイズだけです。私はそれを圧縮することによってそれを減らすことができました。しかし、制限は何ですか?レビューアもドキュメントも、それについて具体的なことを教えてくれませんでした。
では、実際には何が間違っているのでしょうか。また、リソースディレクトリが初期設定用のソースデータベースを保存するのに適切な場所ではない場合、プロジェクトで他にどのディレクトリを使用できますか?
ヒントをありがとう。レネ