在iOS上,應用負責確保只有用戶數據而不包含應用數據被備份到iCloud和iTunes上。具體的步驟在不一樣的iOS 版本各有不一樣。因此對不一樣的版本進行區分描述。關於具體哪些數據不該該被備份,參見App Backup Best Practices section of the iOS App Programming Guide。html
注意:應用應該避免將應用數據和用戶數據和在相同的文件中。這樣會增長沒必要要的備份大小而且被認爲是違反iOS的數據存儲指南。ios
從iOS 5.1開始,應用能夠使用NSURLIsExcludedFromBackupKey 或 kCFURLIsExcludedFromBackupKey 文件屬性來防止文件被備份。這些API是經過經過舊的,棄用的方式的直接設置額外屬性。全部運行在iOS5.1的都應該使用這些API包防止文件被備份。app
在iOS5 .1上防止文件被備份ide
- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
assert([[NSFileManager defaultManager] fileExistsAtPath: [URL path]]);
NSError *error = nil;
BOOL success = [URL setResourceValue: [NSNumber numberWithBool: YES]
forKey: NSURLIsExcludedFromBackupKey error: &error];
if(!success){
NSLog(@"Error excluding %@ from backup %@", [URL lastPathComponent], error);
}
return success;
}
若是你的應用必須支持iOS 5.0.1,你能夠使用下面的方式來設置「不要備份」的拓展屬性。當你建立無須備份文件或者文件夾時,將數據寫入文件而後調用這個方法,傳入一個文件URL。ui
下面的這些代碼已經被棄用並只應該使用在iOS5.0.1及更早的版本上。當運行的iOS5.1上時,應用應用使用NSURL和CFURL鍵來進行描述。orm
在iOS 5.0.1上設置額外屬性htm
#import <sys/xattr.h>
- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
assert([[NSFileManager defaultManager] fileExistsAtPath: [URL path]]);
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;
}
沒法在iOS5.0上防止數據被備份。若是你的應用必須支持iOS5.0,然你須要保持你的應用數據在Caches中來避免數據被備份。iOS將會在不須要的時候刪除Caches目錄中的數據。因此若是數據被刪除的話應用將須要從新解壓出這些數據。ip