1

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

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

    OSStatus status = SecItemDelete((__bridge CFDictionaryRef)deleteQuery);
    NSLog(@"%@", SecCopyErrorMessageString(status, NULL));

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

谢谢你的帮助 :)

4

1 回答 1

5

解决了它:

我错过了传递一系列要寻找的钥匙串!似乎在 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);

这段代码完美运行。

于 2012-07-27T11:48:18.877 回答