OSX 10.8.4 で SecItemCopyMatching を呼び出すと、何らかの理由で空の辞書を取得しました。対応するアイテムはキーチェーンにあり、ユーザー名とパスワードが含まれています。SecItemCopyMatching はそれを見つけましたが (errSecSuccess)、結果の辞書には 0 エントリしか含まれていません。少なくともユーザー名とパスワードのデータが含まれていると思いますが、私の要求の何が問題なのですか?
OSStatus status;
NSMutableDictionary *query = [NSMutableDictionary dictionary];
[query setObject:(id)kSecClassGenericPassword forKey:(id)kSecClass];
[query setObject:(id)kSecReturnAttributes forKey:(id)kCFBooleanTrue];
[query setObject:@"MyService" forKey:(id)kSecAttrService];
CFDictionaryRef dictRef = NULL;
status = SecItemCopyMatching((__bridge CFDictionaryRef)query, (CFTypeRef *)&dictRef);
if (status != errSecSuccess) {
CFStringRef errorRef = SecCopyErrorMessageString(status, NULL);
NSLog(@"%s: %@", __FUNCTION__, (__bridge NSString *)errorRef);
CFRelease(errorRef);
return nil;
}
// --> dictRef empty
if (dictRef != NULL) CFRelease(dictRef);