我有问题。 我使用Code for iOS为SecItemAdd的Keychain添加私钥。它没有任何错误。 在OS X上具有相同的属性和值,它不起作用。 任何想法,问题是什么。以下是本准则的一部分:
NSData * keyData = ...
NSString * name = @"TestKey"
NSString * keyID = @"TestKey"
const id keys[] = {
(__bridge id)(kSecClass),
(__bridge id)(kSecAttrKeyClass),
(__bridge id)(kSecAttrLabel),
(__bridge id)(kSecAttrApplicationLabel),
(__bridge id)(kSecAttrIsPermanent),
(__bridge id)(kSecAttrAccessible),
(__bridge id)(kSecValueData) };
const id values[] = {
(__bridge id)(kSecClassKey),
(__bridge id)(kSecAttrKeyClassPrivate),
name,
keyID,
(id)kCFBooleanTrue,
(__bridge id)(kSecAttrAccessibleAfterFirstUnlock),
keyData };
NSMutableDictionary * attributes = [[NSMutableDictionary alloc] initWithObjects:values forKeys:keys count:ATTR_COUNT(keys)];
CFTypeRef result;
NSError * error = nil;
OSStatus osStatus = SecItemAdd((__bridge CFDictionaryRef)attributes, &result);
错误是:
25303(errKCNoSuchAttr / errSecNoSuchAttr:/该属性不 存在。)。)
答案 0 :(得分:3)
错误代码指定The attribute does not exist
,它归因于属性:kSecAttrKeyClass
。尝试删除此属性,并使用标记名称来区分不同的键。我的代码中也遇到了类似的问题。
答案 1 :(得分:0)
您想支持哪个OS X版本? OS X Keychain服务与iOS Keychain Services不同。例如,kSecClass仅在OS X 10.7和kSecAttrAccessible 10.9时可用。