我想在Mac OS X上删除自己创建的KeyChain中的所有项目

yan*_*kun 0 macos cocoa objective-c keychain core-foundation

我正在编写一个用于同步密码的小工具。我为此使用自己的KeyChain。在保存之前,我想清除此KeyChain。但是,似乎我不明白如何使用SecItemDelete函数。

NSMutableDictionary *deleteQuery = [[NSMutableDictionary alloc] initWithObjectsAndKeys:
                                            kSecClassGenericPassword, kSecClass,
                                            kSecMatchLimit, kSecMatchLimitAll, nil];

    OSStatus status = SecItemDelete((__bridge CFDictionaryRef)deleteQuery);
    NSLog(@"%@", SecCopyErrorMessageString(status, NULL));
Run Code Online (Sandbox Code Playgroud)

到目前为止,这就是我写的内容,但是不幸的是,我的项目(称为Root.Foo和Root.Bar)仍保留在KeyChain中。我也想知道,该函数如何知道应该搜索哪个KeyChain?我喜欢的大多数示例都是关于iOS的,默认情况下每个应用程序都有自己的KeyChain。

谢谢你的帮助 :)

yan*_*kun 5

解决了:

我错过了传递一系列KeyChains寻找的机会!似乎在iOS上,始终使用应用程序的默认KeyChain,但在Mac OS上,您需要将KeyChain指定为包含SecKeychainRefs的数组:

NSMutableDictionary *q = [NSMutableDictionary dictionary];
    [q setObject:kSecClassGenericPassword forKey:kSecClass];
    [q setObject:[NSArray arrayWithObject:(__bridge id)keyChain] forKey:kSecMatchSearchList];
    [q setObject:kSecMatchLimitAll forKey:kSecMatchLimit];
    SecItemDelete((__bridge CFDictionaryRef)q);
Run Code Online (Sandbox Code Playgroud)

这段代码运行完美。