我有我需要删除的iOS上丢失钥匙串项目(可能由旧版本的应用程序编写)。有没有简单的方法来实现这一目标?如何删除应用程序可访问的所有钥匙串项目?
回答
做的所有类
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);
}
您可以查看Utilities文件夹中的KeyChain Access应用程序。如果启动该应用程序并单击“所有项目”,它应显示您使用此特定计算机创建的所有项目。开发人员通常以com开头。
对于Mac,您的答案是完美的,但在iOS上,Keychain Access应用程序不存在。不管怎么说,还是要谢谢你! – sqreept
由于Daij-Djan我得到这个解决方案:
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);
}
Xamarin的iOS版本(MonoTouch的)的accepted answer上如何删除所有钥匙串项可访问的应用程序低于:
foreach (var recordKind in new []{
SecKind.GenericPassword,
SecKind.Certificate,
SecKind.Identity,
SecKind.InternetPassword,
SecKind.Key,
})
{
SecRecord query = new SecRecord(recordKind);
SecKeyChain.Remove(query);
}
如果你想确保你确实删除记录,你可能期间之前特定种类的钥匙串项目的发展支票号码后,此代码:
SecStatusCode scc;
var records = SecKeyChain.QueryAsRecord(new SecRecord(SecKind.GenericPassword), 1000, out scc);
非常感谢! –
我在斯威夫特改写Daij-Djan的答案:
let secItemClasses = [kSecClassGenericPassword,
kSecClassInternetPassword,
kSecClassCertificate,
kSecClassKey,
kSecClassIdentity]
for secItemClass in secItemClasses {
let dictionary = [kSecClass as String:secItemClass]
SecItemDelete(dictionary)
}
此代码导致我崩溃。问题发生在hashValue变量(至少在32位平台上)中进行CFHash到Int转换。 CFHash返回一个UINT,它在swift中转换为Int时可能会溢出。我建议将该行更改为'public var hashValue:Int {return Int(bitPattern:CFHash(self))}'以确保它不会溢出。 – Brett
CFString免费桥接到NSString,桥接到swift字符串,所以你可以施放它们,即'let dictionary = [kSecClass as String:secItemClass as String]' – Brandon
Swift 3编译器会抱怨,除非你写:“SecItemDelete(dictionary作为CFDictionary)“ – Laurent
- 1. 如何允许所有应用程序无需提示即可访问钥匙串项目
- 2. 钥匙串访问中没有钥匙
- 3. 枚举我的iOS应用程序中的所有钥匙串项目
- 4. 删除钥匙串项目当应用被卸载
- 5. 如何从钥匙串访问中删除证书?
- 6. 系统更新后从应用程序访问钥匙串
- 7. 钥匙串访问奇怪?
- 8. iOS钥匙串访问
- 9. 用户可以从他的iOS设备中删除钥匙串项目吗?
- 10. 由应用程序安全创建的钥匙串项目没有访问控制吗?
- 11. 正确删除(清除)iOS应用程序的所有钥匙串数据的方法
- 12. Jenkins删除钥匙扣中的钥匙
- 13. iPhone和Xcode钥匙串 - 无法删除钥匙串?
- 14. 无法使用使用钥匙串访问工具钥匙扣访问工具
- 15. 访问iCloud钥匙串中的所有密码
- 16. SMJobBless更新后无法访问钥匙串项目
- 17. 如何成功从OS X中的钥匙串中删除项目?
- 18. Xcode8:失败当我我的手机上运行应用程序删除钥匙串项目
- 19. 删除钥匙扣当应用程序被杀害
- 20. 删除iOS上的钥匙串数据
- 21. 限制只能访问您的iOS应用程序的钥匙串数据
- 22. 问题与应用程序商店的钥匙串和更新
- 23. 与watchOS共享钥匙串2 - 所有关于项目设置?
- 24. 选择除钥匙外的所有钥匙
- 25. 如何在我的应用程序卸载到ios上时清除钥匙串?
- 26. 如何从其他账户上传转移应用程序的新版本,钥匙串访问可能丢失
- 27. 钥匙串项目的默认kSecAttrAccessible值?
- 28. 获取钥匙串项目的属性
- 29. iOS用户在卸载应用程序后如何移除钥匙串
看到http://stackoverflow.com/questions/10966969/enumerate-all-keychain-items-in-my-ios-application为让您可以访问所有的项目,然后删除每一个.. –