如何从iOS钥匙串中删除KeyChainItemData和genericPasswordQuery项目

3
我一直在遇到一些与我的钥匙串相关的问题,我认为主要是因为我刚开始使用时不知道它的工作原理,我尝试了几种将数据和字符串密码等添加到我的钥匙串中的变化,认为当我从设备中删除应用程序时,它会清除钥匙串...现在我知道这不是钥匙串的工作方式,所以希望我能得到一些帮助来清理现在我的钥匙串中的垃圾。
问题是我现在正在尝试向我的钥匙串传递一些信息,但是收到以下错误提示:
*** Assertion failure in -[KeychainItemWrapper writeToKeychain], /Users/imac/Documents/Iphone applications/Keystone/Keystone/KeychainItemWrapper.m:268
2013-07-23 11:07:46.086 Keystone[2769:907] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Couldn't add the Keychain Item.'

当我尝试将一些信息传递到已声明的keychainwrapper中时,就会出现此错误,如下面代码所示。
[keychainItem setObject:@"somestringhere" forKey: (__bridge id)kSecAttrService];

我认为代码实际上是没问题的,因为我认为我的钥匙串里现有的垃圾正在阻止我正确地将新项目添加到钥匙串中。我像这样实现了封装

KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"gena" accessGroup:@"KeyStone.com.WHATWHAT.GenericKeychainSuite"];

我可以在我的调试区看到这个。
如您所见,KeyChainItemData和genericPasswordQuery已经与我的钥匙串中的6 - 5个对象一起使用了?!很奇怪。 为此,我尝试使用以下代码清除我的钥匙串...
[keychainItem resetKeychainItem];

唯一的问题是这并没有帮助到我。因此,我想知道我需要做什么才能删除似乎在我的钥匙串中阻止我添加正确条目的KeyChainItemDatagenericPasswordQuery条目。
非常感谢您的任何帮助。
更新: 所以从进一步的研究来看,当我声明KeychainItemWrapper时,所有这些值都会显示在我的调试区域中,然而在尝试在另一个没有进行任何钥匙链开发的设备上运行相同的代码后,它仍然显示相同的值。所以我认为这不是设备上的问题,必须是其他什么问题...希望这有意义...我将继续寻找解决方案。

看一下这篇之前的帖子。https://dev59.com/H2Yq5IYBdhLWcg3w7E6v - sangony
好的,我尝试实现了这个,但它仍然没有起作用。所有这些值在最后仍然存在。我将仔细检查所有内容,以查看当前有哪些变量类型。 - HurkNburkS
我仍然无法访问或删除KeyChainItemData中找到的数据,genericPasswordQuery有人有什么建议吗? - HurkNburkS
2个回答

1

请看这个简短的逐步示例,涉及useyourloaf.com上的内容。

它涵盖了简单的iPhone钥匙串访问。其中包括从钥匙串中搜索、创建、更新和删除项目的示例。

您可能还想查看苹果开发者Keychain Services Reference。您要查找的命令是SecItemDelete。


好的,谢谢。我现在会查看这两个链接,并慢慢地阅读它们。我会告诉你我的进展。 - HurkNburkS

0

我不建议使用KeychainItemWrapper。在多个项目中使用KeychainItemWrapper后,我发现了许多未考虑到的错误和边界情况,因此我创建了自己更简单的包装器来访问Keychain https://github.com/reidmain/FDKeychain

它的工作方式与NSDictionary非常相似,只有setValue:和objectForKey:方法。


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