Что такое строка ": ABPerson" в идентификаторе CNContact?

Мое приложение iOS время от времени проверяет контакты и импортирует новое в свою собственную базу данных.

Я проверяю, что контакт уже существует по полю identifier, который обычно заполняется 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]];

    ...

}

Иногда идентификатор за исключением UUID содержит строку :ABPerson (например, 9326A125-3C0A-494F-9E50-BBFCF1140EF0:ABPerson), и такой контакт появляется только один раз. В следующий раз появляется тот же контакт, но с другим UUID и без :ABPerson.

Таким образом, мой импортер контактов считает, что они являются двумя разными контактами и сохраняют их 2 раза.

Что такое :ABPerson строка ABPerson в идентификаторе CNContact?
Я знаю о структуре AddressBook с классом ABPerson, но я использую структуру Contacts для работы с контактами устройства, почему :ABPerson здесь появляется :ABPerson?
Могу ли я просто фильтровать или проверять эту строку в идентификаторе для предотвращения дублирования контактов?
Существуют ли другие строки, которые могут содержаться в идентификаторах CNContact?

Ответы