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

40
我正在尝试使用idandersen的scifihifi-iphone代码进行钥匙链操作,并遇到了以下行为 - 我使用如下方式设置密码:

我正在玩idandersen的scifihifi-iphone代码用于钥匙链,遇到以下行为-我使用以下方式设置密码:

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

然后从设备中删除测试应用程序并重新安装 - 先前设置的密码似乎仍保留在钥匙链中...
这是预期行为吗?是否有方法确保我设置的密码将随着应用程序的删除而被删除?

2个回答

34

是的,这是期望的和正确的行为。

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

当您的应用程序被删除时,您应该只是让信息保持不变。您没有回调或方法来在删除您的应用程序时删除钥匙串项目。


2
所以,我不希望在应用程序卸载后信息留在钥匙链中这一事实可能意味着,钥匙链只是存储它的错误位置,对吗? - Vladimir
7
可以共享项目,但默认情况下不会共享;您需要设置访问组。 - James
就像 UIPasteboard 的实现方式一样,既私有又共享。 - Qamar Suleiman
5
在iOS中,每个应用程序始终都可以访问其自己的钥匙串项目;用户不会被要求解锁钥匙串。而在OS X中,只要用户允许,任何应用程序都可以访问任何钥匙串项目,但在iOS中,应用程序只能访问其自己的钥匙串项目。 - Zennichimaro
9
尽管您引用的文章所说,如果在资格文件中的keychain-access-groups中指定相同的密钥链组ID,则可以在您编写的两个应用程序之间共享密钥链。有关更多详细信息,请参阅苹果公司的“SecItemAdd()”文档。苹果公司的“GenericKeychain示例代码”演示了如何执行此操作。 - Steve

4

编辑: 他们最终恢复了我的答案中描述的行为,因此在每个人都远离那个版本范围之前,这种情况不应再发生。

不幸的是,这种情况不再是这样了。自iOS 10.3以来已经发生了改变。

iOS 10.3中的这个有意的更改旨在保护用户隐私。在创建它的应用程序被删除后,不能将能够识别用户的信息留在设备上。

按照API契约,应用程序创建的钥匙串项目永远不会在删除应用程序时保存。这一直是一个实现细节。

请参见此处的参考资料


3
据我所知,事实上已经发生了逆转,该信息不再有效。 - Sulthan
@Sulthan确实,除非有些人仍在使用那些版本的iOS。 :)我添加了一条注释。感谢您的更新。 - ForceMagic
我认为这只出现在10.3 Beta 2到Beta 5版本中。因此,普通人实际上不应该看到那种行为。 - Sulthan
@Sulthan 我的客户拥有150万移动用户,我们收到了其中数个用户遇到问题的报告,所以该问题肯定在某个时候上线了。虽然我同意并非绝大多数用户都遇到了这个问题。 - ForceMagic
1
很多IT人员即使知道这样做非常不明智,仍然安装beta版本。我的崩溃日志已经被iOS 12 beta bug引起的崩溃所污染。最好的做法是忽略beta版上的问题。 - Sulthan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接