iOS Data Storage Guidelines 和 "do not back up"文件屬性
iOS Data Storage Guidelines 和 "do not back up"文件屬性
iOS 5有了iCloud后,Apple更新了數(shù)據(jù)存儲(chǔ)指導(dǎo)方針,以適應(yīng)于iCloud存儲(chǔ),同時(shí)增加了“不要備份”文件屬性,可以指定文件不備份和上傳到iCloud
摘錄如下,供大家參考:
iOS 數(shù)據(jù)存儲(chǔ)指導(dǎo)方針
iCloud包括了備份,會(huì)通過Wi-Fi每天自動(dòng)備份用戶iOS設(shè)備。app的home目錄下的所有東西都會(huì)被備份,除了應(yīng)用Bundle本身、緩存目錄和temp目錄。已購買的音樂、應(yīng)用、書籍、Camera Roll、設(shè)備設(shè)置、主屏幕、App組織、消息、鈴聲也都會(huì)被備份。由于備份通過無線進(jìn)行,并且為每個(gè)用戶存儲(chǔ)在iCloud中,應(yīng)用需最小化自己存儲(chǔ)的數(shù)據(jù)數(shù)量。大文件會(huì)延長備份時(shí)間,并且消耗用戶的可用iCloud空間。
為了確保備份盡可能快速高效,應(yīng)用存儲(chǔ)數(shù)據(jù)需要遵循以下指導(dǎo)方針:
1. 只有那些用戶生成的文檔或其它數(shù)據(jù),或者應(yīng)用不能重新創(chuàng)建的數(shù)據(jù),才應(yīng)該存儲(chǔ)在<Application_Home>/Documents目錄下,并且會(huì)被自動(dòng)備份到iCloud。
2. 可以重新下載或生成的數(shù)據(jù),應(yīng)該存儲(chǔ)在<Application_Home>/Library/Caches目錄。例如數(shù)據(jù)庫緩存文件、可下載文件(雜志、報(bào)紙、地圖應(yīng)用使用的數(shù)據(jù))等都屬于這一類。
3. 臨時(shí)使用的數(shù)據(jù)應(yīng)該存放在<Application_Home>/tmp目錄。盡管這些文件不會(huì)被iCloud備份,應(yīng)用在使用完之后需要記得刪除這些文件,這樣才不會(huì)繼續(xù)占用用戶設(shè)備的空間。
4. 使用"不要備份"屬性來指定那些需要保留在設(shè)備中的文件(即使是低存儲(chǔ)空間情況下)。那些能夠重新生成,但在低存儲(chǔ)空間時(shí)仍需保留,對(duì)應(yīng)用正常運(yùn)行有影響,或者用戶希望文件在離線時(shí)可用的文件,需要使用這個(gè)屬性。無論哪個(gè)目錄下的文件(包括Documents目錄),都可以使用這個(gè)屬性。這些文件不會(huì)被刪除,也不會(huì)包含在用戶的iCloud或iTunes備份中。由于這些文件一直占用著用戶設(shè)備的存儲(chǔ)空間,應(yīng)用有責(zé)任定期監(jiān)控和刪除這些文件。
iOS 5.0.1開始支持"do not back up"文件屬性,允許開發(fā)者明確地指定哪些文件應(yīng)該被備份,哪些是本地緩存可以自動(dòng)刪除,哪些文件不需要備份但不能刪除。此外,對(duì)目錄設(shè)置這個(gè)屬性,會(huì)阻止備份該目錄和目錄中的所有內(nèi)容。
注意"do not back up"屬性只能用于iOS 5.0.1以后版本。之前版本的應(yīng)用需要存儲(chǔ)數(shù)據(jù)到<Application_Home>/Library/Caches目錄才能避免被備份。由于老的系統(tǒng)忽略這個(gè)屬性,你需要確保應(yīng)用在所有iOS版本中,都遵循上面的iOS Data Storage Guidelines。
數(shù)據(jù)處理分類
com.apple.MobileBackup文件屬性就是iOS 5.0.1引入的"do not back up"特性,用于指定文件或目錄不需要備份(不管在文件系統(tǒng)的什么位置)。通過使用這個(gè)新的文件屬性,并且將文件存放在指定的目錄下,文件可以分為以下四種數(shù)據(jù)類型:s.
關(guān)鍵數(shù)據(jù)
這些是用戶創(chuàng)建的數(shù)據(jù),或其它不能重新生成的數(shù)據(jù)。應(yīng)該存放在<Application_Home>/Documents目錄下,并且不應(yīng)該標(biāo)記為"do not backup"屬性。關(guān)鍵數(shù)據(jù)在低存儲(chǔ)空間時(shí)也會(huì)保留,而且會(huì)被iCloud或iTunes備份。
緩存數(shù)據(jù)
可以重新下載或生成的數(shù)據(jù),而且沒有這些數(shù)據(jù)也不會(huì)妨礙用戶離線使用應(yīng)用的功能。緩存數(shù)據(jù)應(yīng)該保存在<Application_Home>/Library/Caches目錄下。緩存數(shù)據(jù)在設(shè)備低存儲(chǔ)空間時(shí)可能會(huì)被刪除,iTunes或iCloud不會(huì)對(duì)其進(jìn)行備份。
臨時(shí)數(shù)據(jù)
應(yīng)用需要寫到本地存儲(chǔ),內(nèi)部使用的臨時(shí)數(shù)據(jù),但不需要長期保留使用。臨時(shí)數(shù)據(jù)應(yīng)該保存在<Application_Home>/tmp目錄。系統(tǒng)可能會(huì)清空該目錄下的數(shù)據(jù),iTunes或iCloud也不會(huì)對(duì)其進(jìn)行備份。應(yīng)用在不需要使用這些數(shù)據(jù)時(shí),應(yīng)該盡快地刪除臨時(shí)數(shù)據(jù),以避免浪費(fèi)用戶的存儲(chǔ)空間。
離線數(shù)據(jù)
可以下載,或重新創(chuàng)建,但用戶希望在離線時(shí)也能訪問這些數(shù)據(jù)。離線數(shù)據(jù)應(yīng)該存放在<Application_Home>/Documents目錄或<Application_Home>/Library/Private Documents目錄,并標(biāo)記為"do not backup"屬性。這兩個(gè)位置的數(shù)據(jù)在低存儲(chǔ)空間時(shí)都會(huì)保留,而"do not backup"屬性會(huì)阻止iTunes或iCloud備份。應(yīng)用不再需要離線數(shù)據(jù)文件時(shí),應(yīng)該盡快刪除,以避免浪費(fèi)用戶的存儲(chǔ)空間。ce.
設(shè)置Do Not Backup擴(kuò)展屬性
注意:"do not backup"擴(kuò)展屬性可以添加到任何文件或目錄,在舊版本的系統(tǒng)中也能夠設(shè)置。但舊系統(tǒng)仍然會(huì)備份這些文件,一旦設(shè)備更新到iOS 5.0.1,這些文件會(huì)被重新正確地配置。
使用下面方法來設(shè)置"do not back up"擴(kuò)展屬性。當(dāng)你創(chuàng)建不需要備份的文件或目錄時(shí),向文件寫入數(shù)據(jù),然后調(diào)用下面方法,并傳遞一個(gè)文件URL。
設(shè)置擴(kuò)展屬性
#include <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;
}