我正在设备上测试我的应用程序中的登录流程(使用KeychainItemWrapper
)。我该如何重置/删除我的应用程序的密钥链?
在模拟器上,我可以通过点击iOS模拟器-> 重置内容和设置...来进行操作。
我正在设备上测试我的应用程序中的登录流程(使用KeychainItemWrapper
)。我该如何重置/删除我的应用程序的密钥链?
在模拟器上,我可以通过点击iOS模拟器-> 重置内容和设置...来进行操作。
钥匙串项目位于iOS沙盒中,用户无法访问以删除不需要的钥匙串项目。这些只能通过API访问。
KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:[[NSBundle mainBundle] bundleIdentifier] accessGroup:nil];
//或者你如何访问你的钥匙链
[keychainItem resetKeychainItem];
或者您可以从设备设置中重置设备>>常规、重置、重置所有设置。 但是,它将重置设备上安装的每个应用程序的密钥链。
com.apple.keystore.access-keychain-keys
com.apple.keystore.device
1)将此二进制文件上传到您的设备的 /tmp 文件夹中,并确保其可执行。
2)现在,请确保存储在位置 /private/var/Keychains/keychain-2.db 的钥匙串数据库文件可被全局读取。
3)现在,转到终端,并通过传递命令 .keychain_dumper 来转储您的数据。
4)上述命令将列出所有用户名和密码。但是上述命令只会转储通用和互联网密码。您可以使用“-h”命令查看使用信息。
5)您可以使用“-a”命令转储所有信息。
您可以在转储钥匙串数据中阅读更多信息和示例。
代码:
#import "KeychainItemWrapper.h"
@interface YourViewController ()
{
KeychainItemWrapper *keychainItemWrapper;
}
- (void)viewDidLoad {
[super viewDidLoad];
keychainItemWrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"appname" accessGroup:nil];
}
- (IBAction)logoutButtonPressed:(id)sender {
[keychainItemWrapper resetKeychainItem];
}
我需要清除我的应用程序的整个用户存储,所以使用了这个:
NSMutableDictionary *storage = [[NSMutableDictionary alloc] init];
[storage setObject:"myService" forKey:(__bridge id)kSecAttrService];
[storage setObject:["myAccount" dataUsingEncoding:NSUTF8StringEncoding] forKey:(__bridge id)kSecAttrAccount];
// Possibly other attributes e.g.
[storage setObject:(__bridge id)kSecClassGenericPassword forKey:(__bridge id)kSecClass];
[storage setObject:["somethingCustom" dataUsingEncoding:NSUTF8StringEncoding] forKey:(__bridge id)kSecAttrGeneric];
OSStatus status = SecItemDelete((CFDictionaryRef)storage);
// Handle status
// ...