1. 程式人生 > >阻止檔案不被上傳到iCloud

阻止檔案不被上傳到iCloud

}

You can put data in Documents folder but before keep in documents folder create a folder within Documents folder suppose namely temp. Then write the following code to not backup in iCloud.

[[NSFileManager defaultManager] createDirectoryAtPath:temp
                          withIntermediateDirectories:NO
                                           attributes:nil
                                                error:nil];
NSURL *dbURLPath = [NSURL URLWithString:temp];
[self addSkipBackupAttributeToItemAtURL:dbURLPath];
Also implement the method addSkipBackupAttributeToItemAtURL do not forget to include
#include

- (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的檔案分類、存放路徑及檔案屬性

關鍵資料

內容:使用者建立的資料檔案,無法在刪除後自動重新建立,且會

路徑:主目錄/Documents

屬性:不要設定"不備份"

管理:iOS系統即時遇到儲存空間不足的情況下,也不會清除,同時會備份到iTunes或iCloud中  

快取資料

內容:可用於離線環境,可被重複下載重複生成,即時在離線時缺失,應用本身也可以正常執行

路徑:主目錄/Library/Caches

屬性:預設

管理:在儲存空間不足的情況下,會清空, 並且不會被自動備份到iTunes和iCloud中

臨時資料

內容:應用執行時,為完成某個內部操作臨時生成的檔案

路徑:主目錄/tmp

屬性:預設

管理:隨時可能被iOS系統清除,且不會自動備份到iTunes和iCloud,儘量在檔案不再使用時,應用自己情況,避免對使用者裝置空間的浪費 

離線資料

內容:與快取資料類似,可以被重新下載和重建,但是使用者往往希望在離線時資料依然能夠託托地存在著

目錄:主目錄/Documents  或 主目錄/Library/自定義的資料夾

屬性:放於Documents下不需設定,放在自定義資料夾中需設定"不備份" 

管理:與關鍵資料類似,即時在儲存空間不足的情況下也不會清楚,應用自己應該清除已經不再使用的檔案,以免浪費使用者裝置空間

 IOS--阻止檔案被iTunes和iCloud同步,Do <wbr>Not <wbr>Backup屬性

從iOS5.0.1引入的設定不要備份檔案(資料夾也適用)的擴充套件屬性



 2012-03-23 11:28 452人閱讀 評論(0) 收藏 舉報 先閱讀官方說明: 使用方法: #import “sys/xattr.h”

- (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;
}

- (void)addSkipBackupAttributeToPath:(NSString*)path {
u_int8_t b = 1;
setxattr([path fileSystemRepresentation], “com.apple.MobileBackup”, &b, 1, 0, 0);
}

對資料夾的path使用這兩個方法中的任意一個,就可以使該目錄和該目錄包含的所有檔案和資料夾不被icloud和itunes同步了! 對於資料的同步與否的設計規則 詳細看上面的官方說明連結。 注意:setxattr在iOS 5.0.1之前的系統裡不會起作用的,(但是那些系統也沒有iCloud只有iTunes^.^)。經測試發現雖然不會起作用,但呼叫該函式也不會引起空 指標錯誤。  這是一項挺有意思的技術:新系統里加入了原先系統裡沒有的func,在原先的系統裡呼叫,居然沒有nullpoint錯誤。 莫非這函式地址早就存在,預留好了後面把功能掛上? 奇怪了。 另外補充一下,對這個特性的測試要有耐心,因為icloud識別應用程式裡要同步的資料量大小顯示要等幾秒(菊花。。), 參考文件:apple官方文件,