I have a shipping macOS App that runs on 10.9 and above that allows a user to "lookup" people in their Contacts (aka AddressBook) like: [ABAddressBook sharedAddressBook]
Users that have used my app in releases previous to 10.14 already have an entry in the TCC database for my App and can turn Contact access on and off in Security & Privacy as expected.
New users who run the App for the first time in 10.14 are not getting prompted to allow access or not. I have read all about the privacy changes in Mojave but as far as I can tell, access to Contacts like this did not change ... or did it? Is there any way to force the prompt?
UPDATE: Just for curiosity, I added the following code using the "new" (compared to ABAddressBook) Contacts Framework, and I still can't get a popup asking to allow permission for my 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;
Output is: Contacts request granted: NO
error: Error Domain=CNErrorDomain Code=100 "Access Denied" UserInfo={NSLocalizedDescription=Access Denied, NSLocalizedFailureReason=This application has not been granted permission to access Contacts.
And the App name still does not show up in Security&Privacy
Check if your info.plist contains the key to request for Contact permission. if it is missing, include this on your app info.plist
<key>NSContactsUsageDescription</key>
<string>This app requires contacts access to function properly.</string>
Change the message string to what is better for your case.