When click on any contacts in address book (inside my app) it's crashing on iOS 10 beta and working fine on iOS 9 versions;
This is the crash log
*** Terminating app due to uncaught exception 'CNPropertyNotFetchedException', reason: 'A property was not requested when contact was fetched.'
*** First throw call stack:
(0x1cf11a07 0x1c62af63 0x1cf1194d 0x246f0f4f 0x246c6a71 0x1ce355eb 0x1ce2e19b 0x246c69cf 0x246c6883 0x25e4a375 0x2538f283 0x254204ef 0x25420bb1 0xe9da97 0xe9da83 0xea2321 0x1cecf18f 0x1cecd477 0x1ce1e6bd 0x1ce1e549 0x1e54ebfd 0x21f961e3 0x21f90947 0x966c9 0x1ca9e507)
libc++abi.dylib: terminating with uncaught exception of type NSException
And here is the code to open address book inside my app:
-(void)showContactPicker {
__weak RecieverSelectorViewController *weakSelf = self;
ABPeoplePickerNavigationController* picker = [[ABPeoplePickerNavigationController alloc] init];
picker.peoplePickerDelegate = self;
picker.modalPresentationStyle = UIModalPresentationFullScreen;
picker.modalTransitionStyle = UIModalPresentationPopover;
[self presentViewController:picker
animated:YES
completion:^{
[weakSelf hideLoadingAnimation];
// animation to show view controller has completed.
}];
}
- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier {
[self setSelectedPerson:person];
}
- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController*)peoplePicker didSelectPerson:(ABRecordRef)person {
[self setSelectedPerson:person];
}
-(void)setSelectedPerson:(ABRecordRef)person {
NSString *contactName = CFBridgingRelease(ABRecordCopyCompositeName(person));
ABMultiValueRef phoneRecord = ABRecordCopyValue(person, kABPersonPhoneProperty);
CFStringRef phoneNumber = ABMultiValueCopyValueAtIndex(phoneRecord, 0);
self.isSenderReciever = NO;
NSString *phone = [PorterUtils
extraLast10DigitsFromDigitString:[PorterUtils
extractNumberFromText:(__bridge_transfer NSString *)phoneNumber]];
//Handling Social Media Contacts - Crash
if(contactName.length>0 && phone.length>0){
[self setRecieverName:contactName
number:phone];
CFRelease(phoneRecord);
}
}
It's crashing only on iOS 10 public beta.
The Address Book API was deprecated in iOS 9 in favor of the more object-oriented Contacts Framework.
Instead of using the ABPeoplePickerViewController, move to CNContactPickerViewController.
iOS 10 is not allowing to access the Contact until we mention Why we are using it.open your plist as Source code add the below code under dict Now run it again.
Try to use CNContactPickerViewController (iOS9 and above):
Add ContactsUI.framework, import the framework, declare the delegate CNContactPickerDelegate.
Implement it (in Objective-C):
delegate example:
Add "Privacy - Contacts Usage Description" to your info.plist .
The same question was raised in Apple Forums. The original answer by GWesley is given below.
Apple Forum thread
There is a list of all Cocoa Keys that you can specify in your Info.plist file
Photo :
Microphone :
Camera :
Swift 3
Delegate example