2

私のアプリは次の理由で拒否されました:

あなたのアプリは、App Store レビュー ガイドラインで義務付けられている iOS データ ストレージ ガイドラインに準拠していません。

アプリは、起動時に各ユーザーの iCloud スペースに 4.0 MB のデータをバックアップします。ユーザーによって生成または変更されていないすべてのデータに対して、必ず「バックアップしない」属性を設定してください。アプリが保存しているデータ量を確認するには:

  • アプリをインストールして起動する
  • [設定] > [iCloud] > [ストレージとバックアップ] > [ストレージの管理] に移動します
  • 必要に応じて、「すべてのアプリを表示」を選択します
  • アプリのストレージを確認する

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

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

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

私が理解していることから、 /documents フォルダーに保存されているものはすべて iCloud に保存され、このフォルダーにはユーザーによって生成されたデータのみが含まれている必要があります。これで、/documents にあったすべてのファイルをキャッシュ フォルダーに移動しました。ただし、デバイスでアプリをテストすると、まだ約 28kb が iCloud に送信されています (オーガナイザーによると、そのデバイスのアプリ サンドボックスの /documents フォルダーには何もありません)。私のプロジェクトは iCloud をサポートしていないため、ドキュメントに何もない場合に何が送信されているのかわかりません。

iCloudに送信されているものを正確に確認する方法はありますか?

また、私のプロジェクトは現在 iOS 5.0 をターゲットにしています。私が 5.0 で理解していることから、最終的にキャッシュ フォルダーが消去されるのを防ぐ手段は何もありません。>= 5.0.1 のみをサポートする必要がありますか?

4

2 に答える 2

2

これで、/documents にあったすべてのファイルをキャッシュ フォルダーに移動しました。

引用した最後の段落を見逃しましたか? その段落で説明されているように、データを「バックアップしない」とマークすることができます。そのため、ファイルを Documents ディレクトリに残し、適切にマークしてください。

iCloudに送信されているものを正確に確認する方法はありますか?

ブラウザでhttp://developer.icloud.comにアクセスします

于 2012-07-03T17:34:55.280 に答える
1

また、私のプロジェクトは現在 iOS 5.0 をターゲットにしています。私が 5.0 で理解していることから、最終的にキャッシュ フォルダーが消去されるのを防ぐ手段は何もありません。>= 5.0.1 のみをサポートする必要がありますか?

5.0 ではこれを行う方法がないため、OS によってクリーンアップされる可能性のある場所にすべてを保存する必要がありますNSCachesDirectory。最善の策は、5.0、5.0.1、および 5.1 のすべてのケースを処理することだと思います。NSCachesDirectory5.0 およびNSApplicationSupportDirectory5.0.1 と 5.1 に使用します。ごちゃごちゃしていますが、ご指摘のとおり、Apple は 5.0.1 ですぐに新しい属性を追加し、5.1 で再びエクスペリエンスを改善しました。

YMMV.

ただし、デバイスでアプリをテストすると、まだ約 28kb が iCloud に送信されています (オーガナイザーによると、そのデバイスのアプリ サンドボックスの /documents フォルダーには何もありません)。私のプロジェクトは iCloud をサポートしていないため、ドキュメントに何もない場合に何が送信されているのかわかりません。

これは、アプリで iCloud を使用している場合ではなく、ユーザーがデバイスを iCloud にバックアップしている場合に適用されます。余分な 28KB について心配する必要はありません。私たちのアプリでもこれを確認しました。分析パッケージなどのサードパーティ ライブラリや、これらの場所に少量のデータを保存するその他のアイテムのオーバーヘッドである可能性が高いと思います。前述のように、NSUserDefaults もここに格納できます。興味があれば、Xcode オーガナイザーからデータをダウンロードして、何が保存されているかを確認できます。

5.0.1 および 5.1 で do not back up 属性を処理する方法を次に示します。

+ (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL {
    if (&NSURLIsExcludedFromBackupKey == NULL) {
        // Use iOS 5.0.1 mechanism
        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;
    } else {
        // Use NSURLIsExcludedFromBackupKey mechanism, iOS 5.1+
        NSError *error = nil;
        BOOL success = [URL setResourceValue:[NSNumber numberWithBool:YES]
                                  forKey:NSURLIsExcludedFromBackupKey
                                   error:&error];
       //Check your error and take appropriate action
        return success;
    }
}
于 2012-07-03T20:13:22.250 に答える