我有一个运行在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 =此应用程序未被授予访问联系人的权限。
并且应用名称仍未显示在“安全与隐私”中
答案 0 :(得分:1)
别忘了在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>
将消息字符串更改为更适合您的情况。