This code works fine with iOS5/iOS6 but not working with iOS7.
CFErrorRef *error = NULL; ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error); //ABAddressBookRef addressBook = ABAddressBookCreate(); CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook); CFIndex numberOfPeople = ABAddressBookGetPersonCount(addressBook); for(int i = 0; i < numberOfPeople; i++) { ABRecordRef person = CFArrayGetValueAtIndex( allPeople, i ); NSString *firstName = (__bridge NSString *)(ABRecordCopyValue(person, kABPersonFirstNameProperty)); NSString *lastName = (__bridge NSString *)(ABRecordCopyValue(person, kABPersonLastNameProperty)); // NSLog(@"Name:%@ %@", firstName, lastName); ABMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty); NSString *phoneNumber; for (CFIndex i = 0; i < ABMultiValueGetCount(phoneNumbers); i++) { phoneNumber = (__bridge_transfer NSString *) ABMultiValueCopyValueAtIndex(phoneNumbers, i); // NSLog(@"phone:%@", phoneNumber); }
On iCloud.com or iCloud for WindowsAfter you turn on iCloud Contacts on your iPhone, iPad, iPod touch, or Mac, your contacts upload to iCloud. You can find and edit your contacts on iCloud.com or in iCloud for Windows. Any changes that you make automatically update on your other devices.
Today updated my example and removed memory leaks :)
+ (NSArray *)getAllContacts { CFErrorRef *error = nil; ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error); ABRecordRef source = ABAddressBookCopyDefaultSource(addressBook); CFArrayRef allPeople = (ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering(addressBook, source, kABPersonSortByFirstName)); //CFIndex nPeople = ABAddressBookGetPersonCount(addressBook); CFIndex nPeople = CFArrayGetCount(allPeople); // bugfix who synced contacts with facebook NSMutableArray* items = [NSMutableArray arrayWithCapacity:nPeople]; if (!allPeople || !nPeople) { NSLog(@"people nil"); } for (int i = 0; i < nPeople; i++) { @autoreleasepool { //data model ContactsData *contacts = [ContactsData new]; ABRecordRef person = CFArrayGetValueAtIndex(allPeople, i); //get First Name CFStringRef firstName = (CFStringRef)ABRecordCopyValue(person,kABPersonFirstNameProperty); contacts.firstNames = [(__bridge NSString*)firstName copy]; if (firstName != NULL) { CFRelease(firstName); } //get Last Name CFStringRef lastName = (CFStringRef)ABRecordCopyValue(person,kABPersonLastNameProperty); contacts.lastNames = [(__bridge NSString*)lastName copy]; if (lastName != NULL) { CFRelease(lastName); } if (!contacts.firstNames) { contacts.firstNames = @""; } if (!contacts.lastNames) { contacts.lastNames = @""; } contacts.contactId = ABRecordGetRecordID(person); //append first name and last name contacts.fullname = [NSString stringWithFormat:@"%@ %@", contacts.firstNames, contacts.lastNames]; // get contacts picture, if pic doesn't exists, show standart one CFDataRef imgData = ABPersonCopyImageData(person); NSData *imageData = (__bridge NSData *)imgData; contacts.image = [UIImage imageWithData:imageData]; if (imgData != NULL) { CFRelease(imgData); } if (!contacts.image) { contacts.image = [UIImage imageNamed:@"avatar.png"]; } //get Phone Numbers NSMutableArray *phoneNumbers = [[NSMutableArray alloc] init]; ABMultiValueRef multiPhones = ABRecordCopyValue(person, kABPersonPhoneProperty); for(CFIndex i=0; i<ABMultiValueGetCount(multiPhones); i++) { @autoreleasepool { CFStringRef phoneNumberRef = ABMultiValueCopyValueAtIndex(multiPhones, i); NSString *phoneNumber = CFBridgingRelease(phoneNumberRef); if (phoneNumber != nil)[phoneNumbers addObject:phoneNumber]; //NSLog(@"All numbers %@", phoneNumbers); } } if (multiPhones != NULL) { CFRelease(multiPhones); } [contacts setNumbers:phoneNumbers]; //get Contact email NSMutableArray *contactEmails = [NSMutableArray new]; ABMultiValueRef multiEmails = ABRecordCopyValue(person, kABPersonEmailProperty); for (CFIndex i=0; i<ABMultiValueGetCount(multiEmails); i++) { @autoreleasepool { CFStringRef contactEmailRef = ABMultiValueCopyValueAtIndex(multiEmails, i); NSString *contactEmail = CFBridgingRelease(contactEmailRef); if (contactEmail != nil)[contactEmails addObject:contactEmail]; // NSLog(@"All emails are:%@", contactEmails); } } if (multiEmails != NULL) { CFRelease(multiEmails); } [contacts setEmails:contactEmails]; [items addObject:contacts]; #ifdef DEBUG //NSLog(@"Person is: %@", contacts.firstNames); //NSLog(@"Phones are: %@", contacts.numbers); //NSLog(@"Email is:%@", contacts.emails); #endif } } //autoreleasepool CFRelease(allPeople); CFRelease(addressBook); CFRelease(source); return items; }
Actually recently wrote pod in Swift 3 using CNContacts, to whom it may need
Swift ContactBook Picker
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With