首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

iOS 防止檔案備份到 iCloud 與 iTunes 完整指南

     編輯:關於C語言

應用場景

應用有一些檔案需要永久儲存在本地以支援離線功能,但這些檔案不包含使用者資料,無需備份。如何防止這些檔案被備份到 iCloud 和 iTunes?

在 iOS 上,應用負責確保只有使用者資料而不包含應用資料被備份。具體步驟在不同 iOS 版本各有不同。關於哪些資料不應該被備份,請參閱《iOS App Programming Guide》中的 App Backup Best Practices 章節。

注意:應用應避免將應用資料和使用者資料混在同一檔案中,這會增加不必要的備份大小,且被視為違反 iOS 資料儲存指南。

iOS 5.1 及更新版本

從 iOS 5.1 開始,應用可以使用 NSURLIsExcludedFromBackupKey 或 kCFURLIsExcludedFromBackupKey 檔案屬性來防止檔案被備份。這些 API 是透過直接設定額外屬性來取代舊的、已棄用的方式。所有運行在 iOS 5.1 的應用都應使用這些 API 防止檔案被備份。

iOS 5.1 上防止檔案被備份的程式碼
 - (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

如果應用必須支援 iOS 5.0.1,可以使用設定「不要備份」的擴充屬性。當建立無需備份的檔案或資料夾時,寫入資料後呼叫此方法,傳入檔案 URL。

以下代碼已被棄用,僅應用於 iOS 5.0.1 及更早版本。在 iOS 5.1 上運行時,應用應使用 NSURL 和 CFURL 鍵來處理。

iOS 5.0.1 設定額外屬性
 #import 
 - (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;
 }

iOS 5.0

無法在 iOS 5.0 上防止資料被備份。如果應用必須支援 iOS 5.0,則需要將應用資料保存在 Caches 目錄中以避免被備份。iOS 會在不需要時刪除 Caches 目錄中的資料,因此如果資料被刪除,應用將需要重新解壓這些資料。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved