如何删除应用程序可访问的所有钥匙串项目?

我有丢失iOS上的keychain项目(可能是由旧版本的应用程序编写),我需要删除。 有没有简单的方法来实现这一点?

为所有的class级做

NSArray *secItemClasses = @[(__bridge id)kSecClassGenericPassword, (__bridge id)kSecClassInternetPassword, (__bridge id)kSecClassCertificate, (__bridge id)kSecClassKey, (__bridge id)kSecClassIdentity]; for (id secItemClass in secItemClasses) { NSDictionary *spec = @{(__bridge id)kSecClass: secItemClass}; SecItemDelete((__bridge CFDictionaryRef)spec); } 

Xamarin iOS版本(MonoTouch)的接受答案 如何删除应用程序可访问的所有钥匙串项目如下:

 foreach (var recordKind in new []{ SecKind.GenericPassword, SecKind.Certificate, SecKind.Identity, SecKind.InternetPassword, SecKind.Key, }) { SecRecord query = new SecRecord(recordKind); SecKeyChain.Remove(query); } 

如果你想确保你确实删除了logging,你可以在开发过程中用此代码检查前后特定种类的KeyChain中的项目数量:

 SecStatusCode scc; var records = SecKeyChain.QueryAsRecord(new SecRecord(SecKind.GenericPassword), 1000, out scc); 

我在Swift上重写了Daij-Djan的回答:

 let secItemClasses = [kSecClassGenericPassword, kSecClassInternetPassword, kSecClassCertificate, kSecClassKey, kSecClassIdentity] for secItemClass in secItemClasses { let dictionary = [kSecClass as String:secItemClass] SecItemDelete(dictionary) } 

感谢Daij-Djan,我得到了这个解决scheme:

 for (id secclass in @[ (__bridge id)kSecClassGenericPassword, (__bridge id)kSecClassInternetPassword, (__bridge id)kSecClassCertificate, (__bridge id)kSecClassKey, (__bridge id)kSecClassIdentity]) { NSMutableDictionary *query = [NSMutableDictionary dictionaryWithObjectsAndKeys: secclass, (__bridge id)kSecClass, nil]; SecItemDelete((__bridge CFDictionaryRef)query); } 

您可以看看在Utilities文件夹中find的KeyChain Access应用程序。 如果启动应用程序并点击“所有项目”,则应显示您使用此特定计算机创build的所有项目。 开发者通常以com开头。