Objective c 目标C:列出钥匙链访问(OS X)中的所有项目

Objective c 目标C:列出钥匙链访问(OS X)中的所有项目,objective-c,cocoa,Objective C,Cocoa,我刚刚开始使用Objective-C,我正在编写一个简单的应用程序。 我试图获取钥匙链访问中的所有项目,但遇到了一些问题。从Safari中键入“Web表单密码”的项目,我无法获取它们。有什么想法吗? 这是我的代码: NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init]; [dictionary setObject:(__bridge id)kCFBooleanTrue forKey:(__bridge id)kS

我刚刚开始使用Objective-C,我正在编写一个简单的应用程序。 我试图获取钥匙链访问中的所有项目,但遇到了一些问题。从Safari中键入“Web表单密码”的项目,我无法获取它们。有什么想法吗? 这是我的代码:

NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
[dictionary setObject:(__bridge id)kCFBooleanTrue forKey:(__bridge id)kSecReturnAttributes];
[dictionary setObject:(__bridge id)kSecMatchLimitAll forKey:(__bridge id)kSecMatchLimit];
[dictionary setObject:(__bridge id)kSecAttrAccess forKey:(__bridge id)kSecAttrAccessGroup];

NSArray *secItemClasses = [NSArray arrayWithObjects:
                           (__bridge id)kSecClassGenericPassword,
                           (__bridge id)kSecClassInternetPassword,
                           (__bridge id)kSecClassIdentity,
                           (__bridge id)kSecClassKey,
                           (__bridge id)kSecClassCertificate,
                           nil];

int count = 0;
for (id secItemClass in secItemClasses) {
    [dictionary setObject:secItemClass forKey:kSecClass];
    CFTypeRef result = nil;
    OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)dictionary, &result);

    if(status == noErr)
    {
        NSArray *arr = (__bridge_transfer NSArray *)result;
        count+= arr.count;
        NSLog(@"%@",arr);
        [self showLog:[arr description]];
    }
    else if(status == errSecNoAccessForItem)
    {
        NSLog(@"errSecNoAccessForItem");
        [self showLog:@"errSecNoAccessForItem\n"];
    }
    else if(status == errSecItemNotFound)
    {
        NSLog(@"errSecItemNotFound");
        [self showLog:@"errSecItemNotFound\n"];
    }
}

(我的英语很抱歉)

它们(可能)是
iCloud
同步密码,只能由Safari或在应用程序和应用程序相关网站之间共享密码的应用程序访问。@peter:这些项目在本地项目密钥链中。当我双击每个项目,进入“访问控制”选项卡时,我看不到任何要修改的内容。只是:“无法编辑此项目的访问权限”…@@@。您对这个问题有什么想法吗?在“访问组”列表中是否列出了任何项目,例如
com.apple.cfnetwork
?如果该项不可编辑且存在,则表示该项是icloud项。@彼得:是的,有一个标题为“此项的访问组:名称:com.apple.cfnetwork”的表,但该表不可编辑。请解释一下,如果该项目是icloud项目,会发生什么情况?如果该项目是
icloud
keychain项目(例如safari保存的密码),则API将只允许具有特定权限的应用程序访问它们,例如应用程序之间的keychain共享,或相关域,以允许访问存储在safari中的用户名/密码子集。