Jos*_*ian 21 iphone cocoa-touch objective-c ios4 ios
我想知道是否有办法重置我的应用程序的钥匙串.我想知道是否有任何事情存在
[NSUserDefaults resetStandardUserDefaults]
用于钥匙串.即使在删除应用后,密钥链也不会重置.到目前为止,我所知道的唯一方法是从应用程序中逐个重置它们.
Veg*_*ard 57
因为到目前为止所有的答案都依赖于您知道要删除的标识符我想提交以下解决方案来删除应用程序的所有现有密钥(仅限iOS)
-(void)resetKeychain {
[self deleteAllKeysForSecClass:kSecClassGenericPassword];
[self deleteAllKeysForSecClass:kSecClassInternetPassword];
[self deleteAllKeysForSecClass:kSecClassCertificate];
[self deleteAllKeysForSecClass:kSecClassKey];
[self deleteAllKeysForSecClass:kSecClassIdentity];
}
-(void)deleteAllKeysForSecClass:(CFTypeRef)secClass {
NSMutableDictionary* dict = [NSMutableDictionary dictionary];
[dict setObject:(__bridge id)secClass forKey:(__bridge id)kSecClass];
OSStatus result = SecItemDelete((__bridge CFDictionaryRef) dict);
NSAssert(result == noErr || result == errSecItemNotFound, @"Error deleting keychain data (%ld)", result);
}
Run Code Online (Sandbox Code Playgroud)
Swift 2.2版本:
func resetKeychain() {
self.deleteAllKeysForSecClass(kSecClassGenericPassword)
self.deleteAllKeysForSecClass(kSecClassInternetPassword)
self.deleteAllKeysForSecClass(kSecClassCertificate)
self.deleteAllKeysForSecClass(kSecClassKey)
self.deleteAllKeysForSecClass(kSecClassIdentity)
}
func deleteAllKeysForSecClass(secClass: CFTypeRef) {
let dict: [NSString : AnyObject] = [kSecClass : secClass]
let result = SecItemDelete(dict)
assert(result == noErr || result == errSecItemNotFound, "Error deleting keychain data (\(result))")
}
Run Code Online (Sandbox Code Playgroud)
Swift 3版
func resetKeychain() {
deleteAllKeysForSecClass(kSecClassGenericPassword)
deleteAllKeysForSecClass(kSecClassInternetPassword)
deleteAllKeysForSecClass(kSecClassCertificate)
deleteAllKeysForSecClass(kSecClassKey)
deleteAllKeysForSecClass(kSecClassIdentity)
}
func deleteAllKeysForSecClass(_ secClass: CFTypeRef) {
let dict: [NSString : Any] = [kSecClass : secClass]
let result = SecItemDelete(dict as CFDictionary)
assert(result == noErr || result == errSecItemNotFound, "Error deleting keychain data (\(result))")
}
Run Code Online (Sandbox Code Playgroud)
jcr*_*son 11
KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"nameOfYourKeychain" accessGroup:nil];
[keychainItem resetKeychainItem];
Run Code Online (Sandbox Code Playgroud)
更简单:)
编辑:回答下面提出的问题 - KeychainItemWrapper是什么?
这是Apple编写的一个类,你可以在这里下载:http://developer.apple.com/library/ios/#samplecode/GenericKeychain/Listings/Classes_KeychainItemWrapper_m.html
将其添加到您的项目,然后将其导入您想要使用它的位置.然后使用我上面提供的代码段.
归档时间: |
|
查看次数: |
20018 次 |
最近记录: |