【发布时间】:2018-10-06 16:30:32
【问题描述】:
我正在尝试根据其名称 (kSecAttrLabel) 在我的 Mac OS X keychain 中查找特定条目,但看起来 SecItemCopyMatching 已损坏并且在查找以下类型的项目时不应用任何过滤:@ 987654324@.
这段代码将返回 all 在 all 钥匙串中找到的身份,尽管有 kSecAttrLabel: @"MyIdentity" 参数:
NSDictionary *query = @{ (__bridge id)kSecClass: (__bridge NSString*)kSecClassIdentity,
(__bridge id)kSecAttrLabel: @"MyIdentity",
(__bridge id)kSecMatchLimit: (__bridge id)kSecMatchLimitAll,
(__bridge id)kSecReturnAttributes: @YES,
(__bridge id)kSecReturnRef: @YES };
OSStatus status;
status = SecItemCopyMatching((__bridge CFDictionaryRef)query, (CFTypeRef *)&privateKey);
当然,我可以通过手动过滤返回的数组来找到我正在寻找的一个身份,但是,除了 IMHO 应该可以正常工作之外,我还想从我的使用SecItemDelete() 的钥匙串,它以查询为参数,就像SecItemCopyMatching。
如果过滤不适用于SecItemCopyMatching,那么它很可能不适用于SecItemDelete,这意味着如果我尝试使用此查询调用SecItemDelete,我将简单地删除我的钥匙串的内容。
我做错了什么?
【问题讨论】: