Запретить резервное копирование в iCloud, правильный ли следующий код?

Я загружаю много аудио и видео файлов и сохраняю их в своем домашнем каталоге. Теперь я хочу «предотвратить резервное копирование в 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. в противном случае предложите правильный способ сделать это. Спасибо


person sajwan    schedule 19.12.2011    source источник


Ответы (2)


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

Нет, это не так. В своем техническом примечании, вводящем флаг «не резервировать», Apple четко заявляет, что

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

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

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

person Ole Begemann    schedule 19.12.2011
comment
Кажется, это уловка 22, если у вас есть обновляемая база данных, потому что базы данных, хранящиеся в кеше, не обновляются. - person Jack BeNimble; 01.02.2012
comment
Изменены URL-адреса документации (снова): developer.apple.com/library/ ios / # qa / qa1719 / _index.html - person Nikolai Ruhe; 06.02.2012

Вы можете использовать этот код для 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;
}
person पवन    schedule 18.07.2013
comment
Спасибо! Я пытался понять, как я собирался добавить этот атрибут в файл, а не в URL-адрес. - person doug; 06.03.2014