5

7 MB がドキュメント フォルダに保存され、自動的に icloud に送信されるため、アプリが拒否されました。だから私はこの方法でドキュメントフォルダに書き込まれるすべてのファイルをループしました:

- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL {   

   const char* filePath = [[URL path] fileSystemRepresentation];
   const char* attrName = "com.apple.MobileBackup";
   if (&NSURLIsExcludedFromBackupKey == nil) {
   // iOS 5.0.1 and lower
   u_int8_t attrValue = 1;
   int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0);
   return result == 0;
 }
  else {
   // First try and remove the extended attribute if it is present
   int result = getxattr(filePath, attrName, NULL, sizeof(u_int8_t), 0, 0);
   if (result != -1) {
       // The attribute exists, we need to remove it
       int removeResult = removexattr(filePath, attrName, 0);
       if (removeResult == 0) {
           NSLog(@"Removed extended attribute on file %@", URL);
       }
   }

   // Set the new key
   NSError *error = nil;
   [URL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:&error];
   return error == nil;
  }

私のアプリのバージョン 1.1 は、このコードの実装後に承認されました。先週、同じアプリのバージョン 1.2 を送信しようとしました (ファイル管理に変更はなく、ドキュメント フォルダーに保存されているすべてのファイルは addSkipBackupAttributeToItemAtURL メソッドによってループされます)。私のアプリは同じ理由で再び拒否されました。アプリがファイルを完全に復元できないため、ファイルを一時フォルダーまたはキャッシュフォルダーに移動できません (このファイルの 1 つがデータベースであり、データベースを復元すると、ユーザーが挿入したデータが失われます)、これは解決策にはなりません。 . とにかく、コードに問題が見つかりました。これがメソッドの呼び出し方法です。

[self addSkipBackupAttributeToItemAtURL:[NSURL fileURLWithPath:fullPath]];

[NSURL fileURLWithPath:fullPath] デバイスを iOS 5.1 で使用するとエラーが返され、属性を作成できないようです。[NSURL URLWithString:defaultStorePath] で nsurl の初期化を変更すると、5.1 のデバイスは正しく属性を追加するようです。

iOS 5.0.1 ではすべてが反転し、[NSURL URLWithString:defaultStorePath] はエラーを返しますが、[NSURL fileURLWithPath:fullPath] は機能します。

iOS のバージョンを確認して、適切な nsurl の初期化を設定できるかもしれませんが、それでも問題は残ります。拒否の説明で私は読んだ:

特に、起動時および/またはコンテンツのダウンロード時に、アプリが 7 MB を保存することがわかりました。アプリが保存しているデータ量を確認するには:

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

この値を確認しようとすると、正しい nsurl 初期化 (すべての属性が正しく設定されている場合) で 7 mb も表示されます。正しい動作は何ですか?この問題を抱えている人はいますか?Apple が提案するアプリ ストレージ チェックを重要なものにする前に、何か特定の操作を行う必要がありますか?

4

2 に答える 2

0

デバイスからアプリを削除して再インストールするまで、同じ問題が発生しました。また、[設定]->[ストレージとバックアップ]->[ストレージの管理]に移動して、iCloudバックアップから既存のキャッシュデータを削除する必要がありました。

それでうまくいくようだった。また、スキップ属性を追加するための私のコードは少し異なります: この投稿から削除されたコード

- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
   assert([[NSFileManager defaultManager] fileExistsAtPath: [URL path]]);

   if (&NSURLIsExcludedFromBackupKey == nil) { // iOS <= 5.0.1
      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 { // iOS >= 5.1
      NSError *error = nil;
      [URL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:&error];
      return error == nil;
   }


}
于 2012-12-05T06:20:28.620 に答える