16

私のアプリでは、Core Data Database とオーディオ ファイルを保存する必要があるため、それらをデコードして Documents ディレクトリに配置しました。それらがバックアップされないようにするために、最初にアプリを起動したときに、次のように Don't BackUp フラグを立てます。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
 [self addSkipBackupAttributeToItemAtURL:[self applicationDocumentsDirectory]];
}
    - (NSURL *)applicationDocumentsDirectory
{
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}
- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
  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
    return [URL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:nil];
  }
}

しかし、それはうまくいかないようです - 私はまだ拒否されます:

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

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

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

もう1つの問題は、それを確認できないことです-アプリが表示されません

設定 > iCloud > ストレージとバックアップ > ストレージの管理

多分問題は私がここで考えていない5.0だけですか?

4

1 に答える 1

9

問題は iOS 5.0 にあります。この iOS では、バックアップ禁止フラグを設定しないでください。バックアップ禁止フラグは iOS 5.0.1 で導入されました。私たちのアプリでも同様の問題に直面しましたが、何度か拒否されました。異なる iOS を処理するための回避策 iOS < 5.0、iOS 5.0、および iOS > 5.0 をサポートする必要がありました

Appleに連絡した後、iOSごとに異なるパスを使用する以外に解決策は見つかりませんでした

次のような関数がありました。

+ (NSString*) savePath
{
    NSString *os5 = @"5.0";

    NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
    NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];

    if ([currSysVer compare:os5 options:NSNumericSearch] == NSOrderedAscending) //lower than 4
    {
        return path;
    }
    else if ([currSysVer compare:os5 options:NSNumericSearch] == NSOrderedDescending) //5.0.1 and above
    {        
        return path;
    }
    else // IOS 5
    {
        path = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Caches"];
        return path;
    }

    return nil;
}

この機能を使用し、現在も使用しています。

続きを読む

iOS 5.0

iOS 5.0 のバックアップからデータを除外することはできません。アプリが iOS 5.0 をサポートする必要がある場合は、データがバックアップされないように、アプリ データをキャッシュに保存する必要があります。iOS は必要に応じてキャッシュ ディレクトリからファイルを削除するため、アプリのデータ ファイルが削除された場合、アプリは正常に機能を低下させる必要があります。

http://developer.apple.com/library/ios/#qa/qa1719/_index.html

于 2012-06-05T06:51:15.650 に答える