Предотвратить резервное копирование в 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. если нет, то, пожалуйста, предложите правильный способ сделать это. Благодарю вас
2 ответа
Может кто-нибудь сказать мне, что этот код будет работать для всех версий IOS.
Нет, это не так. В Техническом примечании, в котором вводится флаг "не делать резервную копию", Apple четко заявляет,
Новый атрибут "не выполнять резервное копирование" будет использоваться только в iOS 5.0.1 или более поздней версии.
Они также говорят вам, что вам нужно сделать для старых версий iOS:
На iOS 5.0 и более ранних версиях приложения должны будут хранить свои данные в
<Application_Home>/Library/Caches
чтобы избежать его резервного копирования. Поскольку этот атрибут игнорируется в старых системах, вам необходимо убедиться, что ваше приложение соответствует рекомендациям по хранению данных iOS во всех версиях iOS, которые поддерживает ваше приложение.
Вы можете использовать этот код для 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;
}