我需要更新钥匙串条目的 kSecAttrAccessible。我不需要更新实际数据,只需更新可访问性属性。
首先,我尝试找到该项目以确保我的查询字典是好的:
sanityCheck = SecItemCopyMatching((__bridge CFDictionaryRef)(queryPrivateKey), (void *)&privateKeyRef);
此行成功找到我要查找的项目(返回代码为 0)。
然后我使用相同的查询更新 kSecAttrAccessible 属性:
if (sanityCheck == noErr && privateKeyRef != nil) {
// found it, update accessibility
NSMutableDictionary *updatedAttributes = [[NSMutableDictionary alloc] init];
updatedAttributes[(__bridge id)kSecAttrAccessible] = (__bridge id)kSecAttrAccessibleAlways;
OSStatus updateItemStatus = SecItemUpdate((__bridge CFDictionaryRef)queryPrivateKey, (__bridge CFDictionaryRef)updatedAttributes);
}
此时,updateItemStatus 为 -50 (paramErr)。
我看过这个帖子:Is it possible to update a Keychain item's kSecAttrAccessible value?
但是我的问题是不同的。即使我将 kSecValueData 添加到我的updatedAttributes
. 此外,文档还指出我们只需要为 iOS 4 和更早版本添加 kSecValueData。我支持 iOS 7 及更高版本,所以这不应该是我的问题。
谁能指出我在这里缺少什么?非常感谢。