莫哈韦沙漠不提示用户访问联系人

时间:2019-07-06 18:38:30

标签: macos cocoa abaddressbook macos-mojave

我有一个运行在10.9及更高版本上的macOS应用程序,允许用户在其“联系人”(又称为“地址簿”)中“查找”人员: [ABAddressBook sharedAddressBook]

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

在10.14中首次运行该应用程序的新用户不会收到提示是否允许访问的提示。我已经阅读了有关Mojave隐私更改的所有内容,但据我所知,访问此类联系人并没有改变...还是?有什么方法可以强制提示?

更新: 出于好奇,我使用“ new”(与ABAddressBook相比)Contacts Framework添加了以下代码,但仍然无法弹出询问是否允许我的App的弹出窗口。

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“访问被拒绝” UserInfo = {NSLocalizedDescription =访问被拒绝,NSLocalizedFailureReason =此应用程序未被授予访问联系人的权限。

并且应用名称仍未显示在“安全与隐私”中

2 个答案:

答案 0 :(得分:1)

检查应用沙箱权限: enter image description here

别忘了在Info.plist中按以下键

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

答案 1 :(得分:0)

检查您的info.plist是否包含用于请求“联系人”权限的密钥。 如果丢失,请将其添加到您的应用程序信息中。plist

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

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