Предотвратить резервное копирование в iCloud, следующий код правильный? - PullRequest
3 голосов
/ 19 декабря 2011

Я загружаю много аудио и видео файлов и храню их в своем домашнем каталоге. Теперь я хочу "предотвратить резервное копирование в iCloud" поэтому я добавил следующий код для URL каждого моего файла

- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL

{

    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;

}

Может кто-нибудь сказать мне, что этот код будет работать для всех версий IOS. если нет, то, пожалуйста, предложите правильный способ сделать это. Спасибо

Ответы [ 2 ]

7 голосов
/ 19 декабря 2011

Может кто-нибудь сказать мне, будет ли этот код работать для всех версий IOS.

Нет, это не так.В техническом примечании , в котором указан флаг "не выполнять резервное копирование" , Apple четко заявляет, что

Новый атрибут "не выполнять резервное копирование" будет использоваться только в iOS 5.0.1или позже.

Они также говорят вам, что вам нужно сделать для более старых версий iOS:

В iOS 5.0 и более ранних версиях приложения должны будут хранить свои данные в <Application_Home>/Library/Caches, чтобы избежать резервного копирования.Поскольку этот атрибут игнорируется в старых системах, вам необходимо убедиться, что ваше приложение соответствует Руководству по хранению данных iOS во всех версиях iOS, которые поддерживает ваше приложение.

2 голосов
/ 18 июля 2013

Вы можете использовать этот код для iOS 5.1 или более поздней версии

- (BOOL)addSkipBackupAttributeToItemAtPath:(NSString *)filePathString {
    NSURL *fileURL = [NSURL fileURLWithPath:filePathString];

    assert([[NSFileManager defaultManager] fileExistsAtPath: [fileURL path]]);

    NSError *error = nil;

    BOOL success = [fileURL setResourceValue:[NSNumber numberWithBool: YES]
                                  forKey: NSURLIsExcludedFromBackupKey
                                 error: &error];
    return success;
}
...