0

私のアプリが機能するには、サーバーからかなりの量のコンテンツをダウンロードする必要があります。

データ ストレージに関する Apple のガイドラインでは、この種の「作業に必要だが、簡単に再取得できる」データは iCloud/iTunes バックアップに含めるべきではないと述べています。

注意が必要なのは、ディレクトリのバックアップを防止するコードが iOS 5.0、5.0.1、および 5.1 で異なることです (参照:このテクニカル ノート)。

私のアプリは現在、展開ターゲットとして iOS 5.0 をサポートしています。

次のさまざまなオプションの間で何をすべきですか:

  • 展開ターゲットを 5.1 に設定します(単純明快ですが、iOS 5.0 および 5.0.1 を使用しているユーザーの割合に関するデータを見つけることができず、上司に問題を紹介するのに抵抗がありません)。
  • Apple が提供する 5.0.1 と 5.1 の両方のコードを実装しますが、いくつかの問題が発生します。
    • デバイスが特定の iOS バージョンを実行しているかどうかを検出する私の通常の方法は、respondsToSelector を使用することです。ターゲットにしている iOS バージョンで導入されたセレクターを使用しますが、iOS 5.1では定数と非ユニバーサル クラスのみが導入されているようです。iOS 5.1 以降を実行していることを確認するにはどうすればよいですか?
    • iOS 5.0 を実行しているデバイスはどうですか? データをキャッシュに保存することは、開発チームとユーザー エクスペリエンスの両方にとって非常に面倒です。

他に推奨するオプションはありますか?

4

3 に答える 3

0

ファイル システムに保存されている各ファイルに対して、「バックアップしない」属性を追加する必要があります。この回答を参照してください: iOS 5.0.1 のフォルダー階層に「バックアップしない」属性を追加します。システムのバージョンを確認するには、 を呼び出すか、や[[UIDevice currentDevice] systemVersion]などのマクロを使用し__IPHONE_5_0ます。幸運を!#if defined()#ifndef

于 2012-10-19T09:29:05.470 に答える
0

オフラインで使用するために画像をダウンロードしているため、画像フォルダーをバックアップしないようにマークしています。ここでは、アップルがその方法について説明します。

#include<sys/xattr.h>

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

- (void)createSkipBackupImagesFolder {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"/images"];

    NSError *error;
    if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath]) {
        [[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:&error];
        NSURL *toURL = [NSURL fileURLWithPath:dataPath];
        [self addSkipBackupAttributeToItemAtURL:toURL];
    }
}

[self createSkipBackupImagesFolder];
于 2015-01-15T06:18:18.463 に答える
-1

データをドキュメントディレクトリではなくキャッシュディレクトリに保存すると、icloud はデータをバックアップしません...

これがicloudバックアップを停止する最良の方法だと思います。

「バックアップしない」属性では、すべてのファイルにこのフラグを設定する必要があります。

NSDocumentDirectory を挿入した NSCachesDirectory を使用します。

于 2012-10-19T09:37:15.750 に答える