What is the ":ABPerson" string in CNContact identifier?

2.1k views Asked by At

My iOS application checks the contacts from time to time and imports a new one to its own database.

I checked that contact and it already exists by the identifier field, that is usually filled by UUID:

CNContactStore *store = [CNContactStore new];
[store requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError *error) {
    if (granted) {
        NSArray *keys = @[CNContactNamePrefixKey,
                          CNContactGivenNameKey,
                          CNContactMiddleNameKey,
                          CNContactFamilyNameKey,
                          CNContactInstantMessageAddressesKey];
        NSString *containerId = store.defaultContainerIdentifier;
        NSPredicate *predicate = [CNContact predicateForContactsInContainerWithIdentifier:containerId];
        NSArray *cnContacts = [store unifiedContactsMatchingPredicate:predicate keysToFetch:keys error:&err];
        for (CNContact *contact in cnContacts) {
            ...
            NSString *contactId = [contact identifier];
            [fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"uuid == %@", contactId]];

        ...

    }

Sometimes, the identifier excepts UUID that contains the :ABPerson string (eg 9326A125-3C0A-494F-9E50-BBFCF1140EF0:ABPerson), and such contact appears only one time. Next time, the same contact appears, but with another UUID and without the :ABPerson string.

So, my contacts importer considers that they are 2 different contacts and saves them 2 times.

What is the :ABPerson string in CNContact identifier?
I know about AddressBook framework with ABPerson class, but I'm using the Contacts framework to work with device contacts, why is the :ABPerson string appearing here?
Can I just filter or check this string in the identifier for preventing contacts duplicates?
Are there other strings that may be contained in CNContact identifiers?

1

There are 1 answers

0
chepiok On

Looks like :ABPerson is added when sharing a contact from the Contacts application. By the way, be careful because a shared contact may have a different ID even on a same device.