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

时间:2013-07-22 23:19:23

标签: ios keychain keychainitemwrapper

我的钥匙串遇到了一些问题,我认为主要是因为当我第一次使用钥匙链时我不知道它是如何工作的,我尝试了几种将数据和字符串密码等添加到我的钥匙串中的变体,以为当我从我的设备中删除了应用程序,它将清除钥匙链...我现在知道这不是钥匙链的工作方式,所以希望我能得到一些帮助清理我钥匙串中的垃圾。

问题是我现在正试图将一些信息传递给我的钥匙串,但是收到了以下错误

*** 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"];

我可以在调试区域看到这一点。

enter image description here

正如您所看到的 KeyChainItemData genericPasswordQuery 已经在我的钥匙串中,有6到5个对象?!奇怪的。 从那以后,我尝试使用以下代码清除我的钥匙串......

[keychainItem resetKeychainItem];

唯一的问题是,这个剂量无助于我。所以我想知道为了删除这些似乎在我的钥匙串中的 KeyChainItemData genericPasswordQuery 条目,我可能需要做些什么来阻止我添加正确的条目。

非常感谢任何帮助。

更新: 因此,当我在KeychainItemWrapper中声明所有这些值在我的调试区域中显示时,进行进一步的研究时,然而在未完成任何钥匙串开发的其他设备上尝试相同的代码后,它仍显示相同的值。所以我认为它不是在设备上它必须是别的......希望这是有道理的......我会继续尝试寻找解决方案。

2 个答案:

答案 0 :(得分:1)

useyourloaf.com

上查看这个简短的分步示例

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

您可能还想查看Apple Developer Keychain Services Reference。您正在寻找的命令是SecItemDelete。

答案 1 :(得分:0)

我建议不要使用KeychainItemWrapper。在使用KeychainItemWrapper处理多个项目之后,我不断发现多个错误和边缘情况,因此我创建了自己的更简单的包装器来访问Keychain https://github.com/reidmain/FDKeychain

它与NSDictionary非常相似,只有setValue:和objectForKey:methods。