mojave 不提示用户访问联系人

mojave not prompting user for access to Contacts

我有一个在 10.9 及更高版本上 运行s 的 macOS 应用程序,它允许用户 "lookup" 他们联系人(又名地址簿)中的人,例如: [ABAddressBook 共享地址簿]

在 10.14 之前的版本中使用过我的应用程序的用户已经在我的应用程序的 TCC 数据库中有一个条目,并且可以按预期在安全和隐私中打开和关闭联系人访问。

在 10.14 中首次 运行 应用程序的新用户不会收到是否允许访问的提示。我已经阅读了所有有关 Mojave 中隐私更改的信息,但据我所知,对联系人的访问权限并没有改变......或者是吗?有没有办法强制提示?

更新: 出于好奇,我使用 "new"(与 ABAddressBook 相比)联系人框架添加了以下代码,但我仍然无法获得要求允许我的应用程序权限的弹出窗口。

if ([CNContactStore class]) {
    CNAuthorizationStatus status = [CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts];
    NSLog(@"haveAccessToContacts: authorizationStatus-%ld", status);
    if (status == CNAuthorizationStatusAuthorized)
        return 1;
    CNContactStore *contactStore = [[CNContactStore alloc] init];
    [contactStore requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError * _Nullable error) {
        NSLog(@"Contacts request granted: %@", granted ? @"YES" : @"NO");
        if (error)
            NSLog(@"error: %@", error);
    }];
    return 2;
} else {
    ABAddressBook *newAB = [ABAddressBook sharedAddressBook];
    if (newAB != nil)
        return 1;
}
return 0;

输出为: 已批准联系人请求:否

错误:错误域=CNErrorDomain 代码=100 "Access Denied" UserInfo={NSLocalizedDescription=拒绝访问,NSLocalizedFailureReason=此应用程序未被授予访问联系人的权限。

应用名称仍然没有出现在安全和隐私中

检查您的 info.plist 是否包含请求联系人权限的密钥。 如果缺少,请将其包含在您的应用中 info.plist

<key>NSContactsUsageDescription</key>
<string>This app requires contacts access to function properly.</string>

将消息字符串更改为更适合您的情况。

检查应用沙箱权限:

不要忘记在 Info.plist

中按以下键
<key>NSContactsUsageDescription</key>
<string>This app requires contacts access to function properly.</string>