You can't use allowActions
property with CNContactPickerViewController
. I am using this approach and its not showing details of any contact, it only shows list like this 
After that you can select any contact and delegate method will give you contact details of that contact.
-(void) openDeviceContactList {
CNContactPickerViewController *contactPicker = [CNContactPickerViewController new];
contactPicker.delegate = self;
[self presentViewController:contactPicker animated:YES completion:nil];
}
- (void) contactPicker:(CNContactPickerViewController *)picker didSelectContact:(CNContact *)contact {
[self getPhoneNumberFrom:contact];
}
-(void)getPhoneNumberFrom:(CNContact *)contactObject {
NSString * phone = @"";
NSString * userPHONE_NO = @"";
for(CNLabeledValue * phonelabel in contactObject.phoneNumbers) {
CNPhoneNumber * phoneNo = phonelabel.value;
phone = [phoneNo stringValue];
if (phone) {
userPHONE_NO = phone;
}
break;
}
NSLog(@"PHONE NO :: %@",userPHONE_NO);
}
Call [self openDeviceContactList];
on button tap from which you want to open contact list. This will present CNContactPickerViewController
. For this cause you have to implement CNContactPickerDelegate
and also you have to add ContactsUI.framework
and Contacts.framework
from Build Settings
.
This is working code.
IMP NOTE: This will work iOS 9.0 onwards only. If you are supporting 8.0 onwards then add OS check and use AddressBook.framework & AddressBookUI.framework