【发布时间】:2015-07-30 02:41:09
【问题描述】:
有什么方法可以检测启动是否来自 iCloud 备份? (恢复)
我看过here,但什么都没有。
他们关于允许备份的规则非常严格(多次拒绝)备份数据库,其中只有一个用户生成的更改 - 现在我必须将数据备份到其他地方并重新插入从备份中恢复。
【问题讨论】:
-
你有没有发现这是否可行?
-
不,我从来没有找到检测它的方法。
有什么方法可以检测启动是否来自 iCloud 备份? (恢复)
我看过here,但什么都没有。
他们关于允许备份的规则非常严格(多次拒绝)备份数据库,其中只有一个用户生成的更改 - 现在我必须将数据备份到其他地方并重新插入从备份中恢复。
【问题讨论】:
https://developer.apple.com/documentation/security/ksecattraccessiblealwaysthisdeviceonly
可以使用带有“ThisDeviceOnly”的可访问属性之一将钥匙串项目标记为不备份。
您可以向 NSUserDefaults 和 Keychain 写入一个标志(使用 kSecAttrAccessibleAlwaysThisDeviceOnly),每当缺少钥匙串项但用户默认值存在(或备份的钥匙串项)时,它必须已从备份中恢复。也请注意安全和不安全的 iTunes 备份。不安全的备份不应包含任何钥匙串项。
【讨论】:
kSecAttrAccessibleAlwaysThisDeviceOnly的值在恢复后仍然存在,因为它是仍然是 thisDeviceOnly – 最好在恢复过程中使用安全区域“丢失”信息,因为无论如何都会清除安全区域。
一种方法是检查文档目录中带有.isExcludedFromBackupKey 的文件是否存在/有效,如果在启动时不存在,则创建该文件。
当备份恢复时,文档目录中带有该标志的文件将被删除。
var resourceURL = documentFileURL
var resourceValues = URLResourceValues()
resourceValues.isExcludedFromBackup = excludedFromBackup
try resourceURL.setResourceValues(resourceValues)
【讨论】: