iOS 探討之 設置文件iCloud不同步

闡述

從業務層次來說,每個人都希望給用戶提供更快更好的產品。由此,研發過程中會涉及到緩存這一技術。對於客戶端研發來說,緩存寫入沙盒後需要考慮的不簡單是CRUD,還應包括緩存的安全性,這一點在用戶信息上尤爲突出。緩存安全性一方面可以從數據加密角度處理,另一方面可以從限制數據獲取渠道角度處理。

探討

由於iOS系統自帶iCloud同步功能,沙盒中的文件默認又是開啓iCloud同步能力的,所以從限制獲取渠道角度出發,關閉文件同步能力是必然。理想狀態下,我們希望該文件儘可能只存在當前設備應用沙盒中,不會在其設備間流通,可讀性不高,降低信息曝光的可能性。

1 Code Part

我們首先來看一下Swift中對單一文件是如何限定iCloud同步能力。

通過上述代碼,我們可以看出整塊功能總體上是由URL、URLResourceValues 這兩類對象完成。

1-1 URL.setResourceValues(_:)

官方註釋可以解讀出:

1 此方法只適用於文件系統資源路徑(對於網絡路徑不可用)
2 此方法傳入的新resourceValue會同步它剛剛配置的信息(不包含沒有設置的)
3 對於只讀文件以及resourceValue不支持修改的屬性進行配置,這些動作會被忽視並且也不會被視爲錯誤

1-2 URLResourceValues.isExcludedFromBackup

官方註釋可以解讀出:

1 此屬性僅用於排除備份中不需要的緩存和其它應用程序支持的文件
2 對於用戶文檔來說,有一部分對文檔的操作會將此屬性重置爲false,因此不建議在此類型文件使用

2 延伸

官方註釋可以解讀出:

1 文件系統資源路徑纔有URLResourceValues定義的屬性
2 並非所有文件系統路徑的URLResourceValues 所有屬性值都存在
   (eg. 如果文件位於不支持創建日期的捲上,那麼請求創建日期屬性是有效的,但是返回的值將爲nil,並且不會生成錯誤)
3 只有您傳遞給' URL '函數以接收此值的鍵所請求的字段纔會被填充
   (其他鍵對應的值函數將返回nil,而不管文件系統上的底層屬性是什麼)
4 爲了方便起見,可以從任何文件系統路徑請求卷資源值。返回的值將反映資源所在卷的屬性值。

資料

1 https://segmentfault.com/a/1190000002952903
2 https://stackoverflow.com/questions/39630532/urlresourcevalue-and-setresourcevalues-swift-3

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章