APAddressBook is a wrapper on AddressBook.framework that gives easy access to native address book without pain in a head.
- Load contacts from iOS address book asynchronously
- Decide what contact data fields you need to load (for example, only first name and phone number)
- Filter contacts to get only necessary records (for example, you need only contacts with email)
- Sort contacts with array of any NSSortDescriptor
Add APAddressBook
pod to Podfile
APAddressBook *addressBook = [[APAddressBook alloc] init];
// don't forget to show some activity
[addressBook loadContacts:^(NSArray *contacts, NSError *error)
{
// hide activity
if (!error)
{
// do something with contacts array
}
else
{
// show error
}
}];
Callback block will be run in main thread!
Available fields:
- APContactFieldFirstName - contact first name
- APContactFieldLastName - contact last name
- APContactFieldCompany - contact company (organisation)
- APContactFieldPhones - contact phones array
- APContactFieldEmails - contact emails array
- APContactFieldPhoto - contact photo
- APContactFieldThumbnail - contact thumbnail
- APContactFieldDefault - contact first name, last name and phones array
- APContactFieldAll - all contact fields described above
You should use
APContactFieldPhoto
very carefully, because it takes a lot of memory and may crash the application. UsingAPContactFieldThumbnail
is much safer.
Example of loading contact with first name and photo:
APAddressBook *addressBook = [[APAddressBook alloc] init];
addressBook.fieldsMask = APContactFieldFirstName | APContactFieldPhoto;
The most common use of this option is to filter contacts without phone number. Example:
addressBook.filterBlock = ^BOOL(APContact *contact)
{
return contact.phones.count > 0;
};
APAddressBook returns unsorted contacts. So, most of users would like to sort contacts by first name and last name.
addressBook.sortDescriptors = @[
[NSSortDescriptor sortDescriptorWithKey:@"firstName" ascending:YES],
[NSSortDescriptor sortDescriptorWithKey:@"lastName" ascending:YES]
];
switch([APAddressBook access])
{
case APAddressBookAccessUnknown:
// Application didn't request address book access yet
break;
case APAddressBookAccessGranted:
// Access granted
break;
case APAddressBookAccessDenied:
// Access denied or restricted by privacy settings
break;
}
If you have improvements or concerns, feel free to post an issue and write details.
Check out all Alterplay's GitHub projects. Email us with other ideas and projects.
Version 0.0.3
- Added loading contact thumbnail. Thanks to Carlos Fonseca.
Version 0.0.2
- Fixed potential crash on fetching contacts using non-property APAddressBook object. Thanks to Evgen Bakumenko.
Version 0.0.1
- First release.