提问人:Morten Holmgaard 提问时间:5/18/2015 更新时间:3/13/2020 访问量:2631
检测iOS应用程序是否从iCloud备份恢复
Detect if iOS app restored from iCloud backup
问:
有没有办法检测启动是否来自iCloud备份?(已恢复)
我看过这里,但什么都没有。
他们关于允许备份的内容的规则非常严格(多次被拒绝)备份数据库,其中只有一个用户生成的更改 - 现在我必须将数据备份到其他地方,并在从备份还原时重新插入它。
答:
3赞
Ashton-W
11/1/2018
#1
https://developer.apple.com/documentation/security/ksecattraccessiblealwaysthisdeviceonly
可以使用带有“ThisDeviceOnly”的可访问属性之一将钥匙串项标记为不备份。
只要缺少密钥链项,但存在用户默认值(或备份的密钥链项),则必须已从备份还原,可以向 NSUserDefaults 和 Keychain(使用 kSecAttrAccessibleAlwaysThisDeviceOnly)写入标志。也要注意安全和不安全的iTunes备份。不安全的备份不应包含任何钥匙串项。
评论
0赞
Piepants
11/22/2018
这如何回答这个问题?问题是“检测iOS应用程序是否从iCloud备份恢复”。
0赞
Ashton-W
11/28/2018
使用上述 API 将已备份和未备份的值存储在密钥串中(或密钥链和用户错误混合)。如果启动时仅存在备份值 - 则应用已从备份中恢复。
0赞
Baran
11/29/2018
哦,这太棒了,谢谢你的解决方案。这就是我一直在寻找的。
0赞
holex
9/17/2021
可能值得一提的是一个关键细节:如果恢复发生在同一设备上,则标记的值在恢复后仍然存在,因为它仍然是 thisDeviceOnly – 最好在恢复期间使用 secure-enclace 来“丢失”信息,因为无论如何,secure-enclave 肯定会被清除。kSecAttrAccessibleAlwaysThisDeviceOnly
0赞
Runo Sahara
3/13/2020
#2
一种方法是检查文档目录中的文件是否存在/有效,如果启动时不存在,则创建该文件。.isExcludedFromBackupKey
还原备份时,将删除文档目录中带有该标志的文件。
var resourceURL = documentFileURL
var resourceValues = URLResourceValues()
resourceValues.isExcludedFromBackup = excludedFromBackup
try resourceURL.setResourceValues(resourceValues)
评论