iphone钥匙串项目在应用程序卸载后仍然存在?

Posted

技术标签:

【中文标题】iphone钥匙串项目在应用程序卸载后仍然存在?【英文标题】:iphone keychain items persist after application uninstall? 【发布时间】:2011-04-09 22:44:13 【问题描述】:

我正在使用 idandersen 的 scifihifi-iphone 钥匙串代码并遇到以下行为 - 我设置密码使用,说

[SFHFKeychainUtils storeUsername:@"User" andPassword:@"123"
                  forServiceName:@"TestService" updateExisting:YES error:&error];

然后从设备中删除测试应用程序并重新安装 - 之前设置的密码似乎保留在钥匙串中... 这是预期的行为吗?有没有办法确保我设置的密码会随应用程序一起删除?

【问题讨论】:

【参考方案1】:

编辑: 他们终于恢复了我的回答中描述的行为,所以在每个人都离开那个版本范围之前,这不应该再发生了。

不幸的是,现在已经不是这种情况了。自 ios 10.3 起已更改。

这是 iOS 10.3 中为保护用户隐私而进行的有意更改。在删除创建它的应用程序后,不应将可识别用户的信息留在设备上。

钥匙串项目从来都不是 API 合约的一部分 应用程序创建的应用程序将在应用程序被删除时继续存在。这有 一直是实现细节。

请参阅reference here。

【讨论】:

其实这个已经被还原了,据我所知信息已经失效了。 @Sulthan 确实,除非有些人仍在使用这些版本的 iOS。 :) 我加了一条注释。感谢您的更新。 我认为它只是在 10.3 Beta 2 到 Beta 5 中出现。因此普通人根本不应该看到这种行为 @Sulthan 我的客户有 150 万移动用户,我们收到报告称其中有几个用户遇到了这个问题,所以它最终在某个时候上线了。我同意这不是绝大多数。 很多 IT 人员安装测试版,即使它非常不明智。我的崩溃日志已经被由 beta 错误引起的 iOS 12 崩溃所污染。最好的做法是忽略测试版的问题。【参考方案2】:

是的,这是预期的正确行为。

某些钥匙串项目可能会与您控制的其他应用共享(共享相同的钥匙串项目访问组)。

当您的应用被删除时,您应该只保留这些信息。您没有回调或删除应用程序时删除钥匙串项的方法。

【讨论】:

所以我不希望应用程序卸载后信息留在钥匙串中这一事实可能意味着钥匙串只是存储它的错误位置,对吧? @Mihai Damian 项目可以在应用之间共享,但不是默认的;您必须设置访问组。 就像 UIPasteboard 的实现方式一样。私有但共享 "在 iOS 中,每个应用程序始终可以访问自己的钥匙串项;从不要求用户解锁钥匙串。而在 OS X 中,只要用户授予权限,任何应用程序都可以访问任何钥匙串项,在 iOS 中,应用程序只能访问它自己的钥匙串项。”请更正您的答案,这是误导!来源:developer.apple.com/library/ios/#documentation/security/… @Zennichimaro 尽管你引用的段落说了什么,你可以在你编写的两个应用程序之间共享一个钥匙串,如果你在钥匙串访问中指定相同的钥匙串组ID-权利文件中的组。有关更多详细信息,请参阅 Apple 的 SecItemAdd() 文档。 Apple 的 GenericKeychain sample code 演示了如何做到这一点。

以上是关于iphone钥匙串项目在应用程序卸载后仍然存在?的主要内容,如果未能解决你的问题,请参考以下文章

iOS会自动清理钥匙串项目吗?

重新安装应用程序后,钥匙串存储的密码仍然可用

卸载应用程序时删除钥匙串项

钥匙串类不适用于 iPhone 4s/5 和 iPad

苹果密码钥匙串在哪里

如何查看 iPhone 模拟器的钥匙串