【问题标题】:Detect if iOS app restored from iCloud backup检测 iOS 应用程序是否从 iCloud 备份恢复
【发布时间】:2015-07-30 02:41:09
【问题描述】:

有什么方法可以检测启动是否来自 iCloud 备份? (恢复)

我看过here,但什么都没有。

他们关于允许备份的规则非常严格(多次拒绝)备份数据库,其中只有一个用户生成的更改 - 现在我必须将数据备份到其他地方并重新插入从备份中恢复。

【问题讨论】:

  • 你有没有发现这是否可行?
  • 不,我从来没有找到检测它的方法。

标签: ios backup icloud


【解决方案1】:

https://developer.apple.com/documentation/security/ksecattraccessiblealwaysthisdeviceonly

可以使用带有“ThisDeviceOnly”的可访问属性之一将钥匙串项目标记为不备份。

您可以向 NSUserDefaults 和 Keychain 写入一个标志(使用 kSecAttrAccessibleAlwaysThisDeviceOnly),每当缺少钥匙串项但用户默认值存在(或备份的钥匙串项)时,它必须已从备份中恢复。也请注意安全和不安全的 iTunes 备份。不安全的备份不应包含任何钥匙串项。

【讨论】:

  • 这如何回答这个问题?问题是“检测 iOS 应用是否从 iCloud 备份恢复”。
  • 使用上面的 API 在钥匙串(或钥匙串和用户错误的混合)中存储备份和未备份的值。如果启动时仅存在备份值 - 则应用已从备份中恢复。
  • 哦,非常感谢您的解决方案。这就是我一直在寻找的。​​span>
  • 可能值得一提的关键细节是:如果恢复发生在相同设备上,则标有kSecAttrAccessibleAlwaysThisDeviceOnly的值在恢复后仍然存在,因为它是仍然是 thisDeviceOnly – 最好在恢复过程中使用安全区域“丢失”信息,因为无论如何都会清除安全区域。
【解决方案2】:

一种方法是检查文档目录中带有.isExcludedFromBackupKey 的文件是否存在/有效,如果在启动时不存在,则创建该文件。

当备份恢复时,文档目录中带有该标志的文件将被删除。

var resourceURL = documentFileURL
var resourceValues = URLResourceValues()
resourceValues.isExcludedFromBackup = excludedFromBackup
try resourceURL.setResourceValues(resourceValues)

【讨论】:

    猜你喜欢
    • 2012-02-19
    • 2016-01-19
    • 2018-07-31
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    • 2015-01-30
    • 2015-05-14
    • 2015-11-05
    相关资源
    最近更新 更多