2

アプリの起動時に、リソース フォルダーから iOS デバイスのドキュメント ディレクトリにライブラリがコピーされます。これは初回起動時の 1 回限りのプロセスであり、二度と触れることはありません。Apple は今日、私のアプリを次のように拒否しました。

お客様のアプリは iOS データ ストレージ ガイドラインに準拠していないことが判明しました。これは、App Store レビュー ガイドラインに準拠していません。

iOS データ ストレージ ガイドラインでは、ユーザーがアプリを使用して作成したコンテンツ (ドキュメント、新しいファイル、編集など) のみを iCloud でバックアップする必要があることを示しています。

アプリで使用される一時ファイルは、/tmp ディレクトリにのみ保存する必要があります。ユーザーがアプリを終了するときに、この場所に保存されているファイルを削除することを忘れないでください。

再作成できるが、アプリが適切に機能するために保持する必要があるデータ、または顧客がオフラインで使用できることを期待しているデータは、「バックアップしない」属性でマークする必要があります。NSURL オブジェクトの場合、属性を追加して、NSURLIsExcludedFromBackupKey対応するファイルがバックアップされないようにします。CFURLRefオブジェクトの場合は、対応する属性を使用してくださいkCFURLIsExcludedFromBackupKey


バックアップしない属性を設定する方法や、それが必要かどうかがわかりません。私のコードに基づいてこれがどのように行われるか教えてもらえますか?

-(void) progress
{
 NSFileManager *fileManager = [NSFileManager defaultManager];
 NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentPath = ([documentPaths count] > 0) ? [documentPaths objectAtIndex:0] : nil;
NSString *dataPath = [documentPath stringByAppendingPathComponent:pathWeSet];

if (![fileManager fileExistsAtPath:dataPath]) {
NSString *bundlePath = [[NSBundle mainBundle] bundlePath];
NSString *dataPath = [bundlePath stringByAppendingPathComponent:pathWeSet];
timer = [NSTimer timerWithTimeInterval:0.4 target:self selector:@selector(updateProgressView) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
[timer fire];
if (dataPath) {
  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    [fileManager copyItemAtPath:dataPath toPath:dataPath error:nil];
  });
  }
 }
}

ありがとう

4

1 に答える 1

3

Apple はファイル システム プログラミング ガイドを発行しており、これを読んで従う必要があります。あなたのライブラリは、ユーザーが見てはいけないアプリの内部の詳細のようです。したがって、Documents ディレクトリには配置しないでください。Library または Library/Caches ディレクトリの使用を検討してください。

于 2013-09-24T03:19:57.857 に答える