我是iOS开发新手并致力于钥匙串存储。在我的应用程序中,我想在iOS钥匙串(不是共享钥匙串)中保存一些重要信息。
我不知道钥匙串数据是否会在app卸载时消失。我看了一些博客/堆栈溢出帖子,但我没有找到任何官方苹果文档提到这些具体信息。 我想知道,
由于
答案 0 :(得分:8)
来自Apple Developer论坛 参考:https://forums.developer.apple.com/thread/36442
首先,时间表:
在删除应用程序时,10.3 beta之前的所有iOS版本都会保留钥匙串项。重要这绝对是原始iOS钥匙串的实现细节。我们的钥匙串文档从未指明在这种情况下会发生什么。
10.3 beta包含删除此类项目的更改。
这导致兼容性问题(应用程序依赖于现有行为,即使没有记录),因此它在10.3 GM之前回滚。
iOS 11引入了DeviceCheck框架,该框架为此行为最常见的合法用例之一提供了转发路径。有关详细信息,请参阅WWDC 2017 Session 702 Privacy and Your Apps。
其次,在删除时保留钥匙串项是一个明显的隐私问题。据我所知,Apple尚未就我们打算如何解决此问题发表任何具体公告2。但是,如果10.3行为在将来某个时候返回,我认为不会让任何人感到惊讶。我希望我们能更积极主动地宣布这样的改变 - 例如,在WWDC上谈论它 - 但是,一如既往,我不能对The Future™作出任何承诺。
第三,我的具体建议:
如果您希望在删除应用时删除钥匙串项,请将其与存储在磁盘上的随机密钥纠缠在一起,如我之前的帖子(2016年2月11日)所述。无论操作系统的行为如何,这都可以保证有效。
如果要保留项目,请首先查看DeviceCheck框架。如果这允许您实现高级目标,则可以在iOS 11及更高版本上采用它,然后不再担心此问题。注意您可以继续在早期系统上使用现有技术,因为它们不会更改。
如果DeviceCheck框架不能满足您的需求,请提交一份enhancement request来解释您的情况以及为什么DeviceCheck不适合您。我很感激你在这里发布你的错误号,只是为了记录。
如果您继续依赖当前行为,我强烈建议您编写应用程序,以便在行为发生变化时合理行事。
我意识到上述情况仍然“含糊不清”。唉,在Apple正式公布我们未来的计划之前,我无法100%清晰地回答。
答案 1 :(得分:1)
1。在应用卸载后,我存储的数据会被删除吗?
不,即使卸载后,它仍会保留在钥匙串中。如果您不想这样做,可以使用use default
来解决这个问题,以了解它是否是第一次安装。
如果用户卸载并立即再次安装应用程序会怎样?他会获取以前存储的数据吗? 仅保留钥匙串数据。不是应用程序沙箱中的数据,例如用户默认设置,文档目录,核心数据等
答案 2 :(得分:0)
您可以使用KeyChain进行存储,即使用户卸载了您的应用,此操作也不会删除。
let id = KeyChain.createUniqueID()
let data = id.data(using: String.Encoding.utf8)
let status = KeyChain.save(key: "yourKey", data: data!)
print(status)