Just a Computer Graphics Studio & My Life

由於送審被退,才知道某些檔案不能備份到iCloud,畢竟iCloud目前只有5GB,只有像使用者產生的資料可以備份之外,若檔案可以在網路上再次下載,就不用特地又備份到iCloud!

file backup to icloud

我把檔案儲存在Private Documents中~

我不想要備份Private Documents中的所有檔案~這時候我可以設定movie、music、night light這三個資料夾不要備份到iCloud,因為裡頭會放上GB的影片檔。

既然是Apple的領地,就要遵從它的規矩,於是看到官方文件所陳述的四個項目⋯⋯

Storing Your App’s Data Efficiently

To ensure that backups are as efficient as possible, store your app’s data according to the following guidelines:

  1. Only documents and other data that is user-generated, or that cannot otherwise be recreated by your application, should be stored in the <Application_Home>/Documents directory and will be automatically backed up by iCloud.
  2. Data that can be downloaded again or regenerated should be stored in the <Application_Home>/Library/Caches directory. Examples of files you should put in the Caches directory include database cache files and downloadable content, such as that used by magazine, newspaper, and map applications.
  3. Data that is used only temporarily should be stored in the <Application_Home>/tmp directory. Although these files are not backed up to iCloud, remember to delete those files when you are done with them so that they do not continue to consume space on the user’s device.
  4. Use the “do not back up" attribute for specifying files that should remain on device, even in low storage situations. Use this attribute with data that can be recreated but needs to persist even in low storage situations for proper functioning of your app or because customers expect it to be available during offline use. This attribute works on marked files regardless of what directory they are in, including the Documents directory. These files will not be purged and will not be included in the user’s iCloud or iTunes backup. Because these files do use on-device storage space, your app is responsible for monitoring and purging these files periodically.

我稍微翻譯如下:

  1. <Application_Home>/Documents 裡面只能放使用者產生的東西。
  2. 如果有想要放什麼東西在資料夾裡面,可能是為了能夠讓app能夠在沒網路的狀況下也能夠使用,就必須把這些東西放到 <Application_Home>/Library/Caches這裡面,像是雜誌、新聞、地圖等應用。
  3. 放在<Application_Home>/tmp 裡面的東西呢,用完就要去把它刪掉,不能留著佔使用者的空間。
  4. 有些檔案使用者放到documents裡面去,也可以把這些東西設定為不要備份到iCloud上去,如此能讓使用者節省iCloud空間。

在此總結一下:

  • <Application_Home>/Documents:會備份到iCloud
  • <Application_Home>/Library/Caches:會備份到iCloud
  • <Application_Home>/tmp:不會備份到iCloud

接著只要使用這個方法,將檔案所在的URL傳遞進去,就可以設定該檔案不要被備份到iCloud上囉~

- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
    NSError *error = nil;
    //設定這個URL指向的資料為不備份到iCloud
    BOOL success = [URL setResourceValue: [NSNumber numberWithBool: YES] forKey: NSURLIsExcludedFromBackupKey error: &error];
    return success;
}

這裡要注意轉URL的方式,有可能會失敗⋯⋯我是在模擬上測試路徑,輸入指令:

po NSHomeDirectory()

會得到String:

/Users/happyman/Library/Application Support/iPhone Simulator/7.1-64/Applications/CA2DF70C-08B1-45C0-85A2-02E3C29BCBB4

此時要使用fileURLWithPath轉URL,而不是URLWithString喔!

  • [NSURL fileURLWithPath:fileURL]
  • [NSURL URLWithString:fileURL]

接下來如何確認我所設定的檔案沒有被備份到iCloud?我到系統的「設定」,觀察「一般」>「用量」,會看到我這App含檔案有多大,接著到系統的「設定」,觀察「iCloud」>「儲存與備份」>「管理儲存空間」,找尋我這App,它就會告訴我備份到iCloud有多少。

icloud2

觀察「一般」>「用量」

icloud1

觀察「iCloud」>「儲存與備份」>「管理儲存空間」,此為「沒有」設定不要備份的樣子。

icloud3

觀察「iCloud」>「儲存與備份」>「管理儲存空間」,此為「有」設定不要備份的樣子。

是不是很有效呢?

參考:iOS Data Storage Guidelines如何不讓資料備份到iCloud如何確認資料沒有備份到iCloud上

Advertisements

發表留言

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

標籤雲

%d 位部落客按了讚: