So I have a method to get all the contact phone numbers from the address book on the iPhone, but is there a way to get the phone number label? For example you can do this:

And I'd be looking to modify my method to print out the label (such as iPhone/Home/mobile/etc).
ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef all = ABAddressBookCopyArrayOfAllPeople(addressBook);
CFIndex n = ABAddressBookGetPersonCount(addressBook);
for( int i = 0 ; i < n ; i++ )
{
    ABRecordRef ref = CFArrayGetValueAtIndex(all, i);
    NSString *firstName = (NSString *)ABRecordCopyValue(ref, kABPersonFirstNameProperty);
    NSLog(@"Name %@", firstName);
    ABMultiValueRef *phones = ABRecordCopyValue(ref, kABPersonPhoneProperty);
    for(CFIndex j = 0; j < ABMultiValueGetCount(phones); j++)
    {
        NSString *phoneLabel = @""; // ???
        CFStringRef phoneNumberRef = ABMultiValueCopyValueAtIndex(phones, j);
        //CFRelease(phones);
        NSString *phoneNumber = (NSString *)phoneNumberRef;
        CFRelease(phoneNumberRef);
        NSLog(@"  - %@ (%@)", phoneNumber, phoneLabel);
        [phoneNumber release];
    }
}
In order to find your Google Contact labels within your iPhone or iPad, follow these simple steps: Make sure your labels are found in your Google Contacts manager. All your labels/contact lists will be found under 'Labels'. Install the Shared Contacts for iOS application from the Appstore.
Find a contactTap the search field at the top of the contacts list, then enter a name, address, phone number, or other contact information. You can also search your contacts using Search (see Search from the iPhone Home Screen or Lock Screen).
//get the particular contact or email from phone book
    - (BOOL)peoplePickerNavigationController: (ABPeoplePickerNavigationController *)picker shouldContinueAfterSelectingPerson:(ABRecordRef)person
    {
        // Name of contact.
        NSString* name = (NSString *)ABRecordCopyCompositeName(person);
        // Numbers of selected contact
        ABMutableMultiValueRef phones = ABRecordCopyValue(person, kABPersonPhoneProperty);
        NSMutableString *mobile = [[NSMutableString alloc] init];
        NSMutableString *office = [[NSMutableString alloc] init];
        // Getting if Mobile, Office(work) numbers exist
        for(CFIndex numberIndex = 0; numberIndex < ABMultiValueGetCount(phones); numberIndex++)
        {
            // Number in contact details of current index
        CFStringRef phoneNumberRef = ABMultiValueCopyValueAtIndex(phones, numberIndex);
        // Label of Phone Number
        CFStringRef locLabel = ABMultiValueCopyLabelAtIndex(phones, numberIndex);
        NSString *phoneLabel =(NSString*) ABAddressBookCopyLocalizedLabel(locLabel);
        // Phone number
        NSString *phoneNumber = (NSString *)phoneNumberRef;
        // Release Phone Number and locationLabel reference object
        CFRelease(phoneNumberRef);
        CFRelease(locLabel);
        NSLog(@"  - %@ (%@)", phoneNumber, phoneLabel);
        if ([phoneLabel isEqualToString:NSLocalizedString(@"mobile", nil)])// Mobile number saving.
        {
            [mobile appendFormat:@"%@", phoneNumber];
        }
        else if ([phoneLabel isEqualToString:NSLocalizedString(@"work", nil)])// Office number saving.
        {
            [office appendFormat:@"%@", phoneNumber];
        }
        [phoneNumber release];
    }
    CFRelease(phones);
    // Emails of selected contact
    ABMutableMultiValueRef emails = ABRecordCopyValue(person, kABPersonEmailProperty);
    NSMutableString *generalMail = [[NSMutableString alloc] init];
    NSMutableString *officeMail = [[NSMutableString alloc] init];
    // Getting if Home, Office(work) mails exist
    for(CFIndex numberIndex = 0; numberIndex < ABMultiValueGetCount(emails); numberIndex++)
    {
        // Mail in contact details of current index
        CFStringRef mailRef = ABMultiValueCopyValueAtIndex(emails, numberIndex);
        // Label of Phone Number
        CFStringRef locLabel = ABMultiValueCopyLabelAtIndex(emails, numberIndex);
        NSString *mailLabel =(NSString*) ABAddressBookCopyLocalizedLabel(locLabel);
        // Phone number
        NSString *mail = (NSString *)mailRef;
        // Release Phone Number and locationLabel reference object
        CFRelease(mailRef);
        CFRelease(locLabel);
        NSLog(@"  - %@ (%@)", mail, mailLabel);
        if ([mailLabel isEqualToString:NSLocalizedString(@"mobile", nil)])// Home mail.
        {
            [generalMail appendFormat:@"%@", mail];
        }
        else if ([mailLabel isEqualToString:NSLocalizedString(@"work", nil)])// Office(Work) mail.
        {
            [officeMail appendFormat:@"%@", mail];
        }
        [mail release];
    }
    CFRelease(emails);
    [mobile release];
    [office release];
    [generalMail release];
    [officeMail release];
    [self dismissViewControllerAnimated:YES completion:nil];
    return NO;
}
Simply use -
ABMultiValueRef phones = ABRecordCopyValue(ref, kABPersonPhoneProperty);
for(CFIndex j = 0; j < ABMultiValueGetCount(phones); j++)
{
  CFStringRef phoneNumberRef = ABMultiValueCopyValueAtIndex(phones, j);
  CFStringRef locLabel = ABMultiValueCopyLabelAtIndex(phones, j);
  NSString *phoneLabel =(NSString*) ABAddressBookCopyLocalizedLabel(locLabel);
  //CFRelease(phones);
  NSString *phoneNumber = (NSString *)phoneNumberRef;
  CFRelease(phoneNumberRef);
  CFRelease(locLabel);
  NSLog(@"  - %@ (%@)", phoneNumber, phoneLabel);
  [phoneNumber release];
}
EDIT
Please see the notes for this answer about CFBridgingRelease and __bridge_transfer. 
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