正确的方法来删除(清除)iOS应用程序的所有钥匙串数据

时间:2013-03-06 01:11:27

标签: ios objective-c keychain

我在钥匙串中存储了一些信息,有一种情况我需要删除所有项目,而不是为所有密钥执行[keychain removeObjectForKey:theKey],我可以这样做:

NSDictionary *spec = [NSDictionary dictionaryWithObjectsAndKeys:(id)kSecClassGenericPassword, kSecClass,
                      [self serviceName], kSecAttrService, nil];

return !SecItemDelete((CFDictionaryRef)spec);

代替?

我尝试了它并且它有效,只是不确定我是否正在做正确的事情?

2 个答案:

答案 0 :(得分:5)

在我的应用程序中我正在使用此行来清除我的钥匙串:

[[[KeychainItemWrapper alloc] initWithIdentifier:@"my_key" accessGroup:nil] resetKeychainItem]

答案 1 :(得分:0)

我相信你所做的是正确的,事实上,你可以根据需要避免查询中的kSecAttrService参数。另一方面,SecItemDelete返回一个OSStatus值,您可以检查该事务的更多详细信息。

    NSDictionary *spec = [NSDictionary dictionaryWithObjectsAndKeys:(id)kSecClassGenericPassword, kSecClass, nil];

    OSStatus status = SecItemDelete((CFDictionaryRef)spec);
    if (status == errSecSuccess)
       return YES;

    return NO;

Here are the codes以及可能的状态值的含义