IOS 13 CNContacts больше не работает для получения всех контактов

У меня есть приложение, которое отлично работало с платформой CNContacts вплоть до IOS 12. В настоящее время я тестирую его с бета-версией IOS 13, и оно полностью сломано. Я проверил разрешения контактов, удалил приложение и повторно разрешил разрешения. Это код, который я использую для получения всех контактов:

NSError* error;

CNContactStore *store = [[CNContactStore alloc]init];

[store containersMatchingPredicate:[CNContainer predicateForContainersWithIdentifiers: @[store.defaultContainerIdentifier]] error:&error];

NSArray *keysToFetch =@[CNContactGivenNameKey, CNContactEmailAddressesKey, CNContactNoteKey];

CNContactFetchRequest *request = [[CNContactFetchRequest alloc]initWithKeysToFetch:keysToFetch];

BOOL success = [store enumerateContactsWithFetchRequest:request error:&error usingBlock:^(CNContact * __nonnull contact, BOOL * __nonnull stop){

       NSLog(@"Contact Found: %@", contact.givenName);

}];

Хранилище контактов строится нормально, и ошибка равна нулю. Однако, когда я затем пытаюсь получить контакты с помощью запроса на выборку, я получаю success=NO и получаю следующую ошибку:

Error Domain=CNErrorDomain Code=102 "(null)" UserInfo={CNKeyPaths=(
    note
), CNInvalidRecords=(
    "<CNContactFetchRequest: 0x60000189aa00: predicate=(null), keysToFetch=(\n    givenName,\n    emailAddresses,\n    note\n), unifyResults=1, sortOrder=0>"

Я пробовал различные настройки, но я не могу заставить это работать вообще. Я также не могу найти никакой документации, чтобы сказать, что это поведение было изменено.

Кто-нибудь еще пробовал это или нашел обходной путь?


person Plasma    schedule 10.08.2019    source источник
comment
Похоже, что это связано с этим новым правом: developer.apple.com/documentation/bundleresources/entitlements /   -  person Petesh    schedule 15.08.2019
comment
@Petesh выглядит именно так, как есть, мне бы очень хотелось, чтобы они сделали изменения более очевидными. Кроме того, если я не могу получить разрешение, принятое для моего приложения, мне придется использовать обходной путь, что причинит огромные неудобства моим клиентам. Если вы опубликуете вышеизложенное как ответ, я приму это как решение. Спасибо за информацию.   -  person Plasma    schedule 15.08.2019
comment
@Plasma, вы смогли получить одобрение на это право? Мы запросили одобрение несколько недель назад и ничего не слышали от Apple.   -  person haplo1384    schedule 01.10.2019
comment
Я подал заявку на право, но это заняло слишком много времени, поэтому я изменил дизайн своего приложения, чтобы оно не нуждалось в праве, и мне удалось сохранить все функции. Обновление было принято, и у меня все в порядке, не уверен, что другим будет так же легко, но желаю вам удачи.   -  person Plasma    schedule 01.10.2019


Ответы (3)


В iOS 13 Apple добавила новое право, которое необходимо, если вы хотите получить доступ к заметкам для контактов. Право: com.apple.developer.contacts.notes. Вы можете запросить разрешение на использование этого разрешения для приложения, помещаемого в Магазин приложений.

Причина, по которой он был добавлен, в первую очередь связана с соображениями конфиденциальности — поле заметок может содержать любую информацию, которую вы можете иметь о контакте; и во многих случаях эта информация является значительно более конфиденциальной, чем просто контактная информация.

По состоянию на 15 августа 2019 г. это право находится в категории бета-версий, что означает, что оно может быть изменено до выпуска iOS 13, и название права, вероятно, будет стабилизировано при представлении разработчику в Xcode.

person Petesh    schedule 15.08.2019
comment
Вам удалось получить разрешение на это право? Мы запросили разрешение по приведенной выше ссылке несколько недель назад и не можем получить ответ от Apple. - person haplo1384; 01.10.2019
comment
Нет, я ничего не слышал от Apple, и это не видно в пользовательском интерфейсе подготовки на веб-сайте или в XCode. Похоже, это проблема «упущенного мяча» - я бы предложил зарегистрировать проблему по этому поводу. - person Petesh; 01.10.2019
comment
Я подал заявку на разработчика, и ответом было подать заявку на разрешение на использование профиля, и я ожидаю, что если вы получите одобрение, оно появится в профиле подготовки для приложения, но в противном случае будет непригодным для использования. Тем временем я просто отказался от получения поля заметок, так как оно не было нужно для моего варианта использования. - person Petesh; 08.10.2019
comment
Спасибо @Petesh, мы наконец-то связались с командой внутренней проверки, и они сказали, что ожидают, что наша проверка будет завершена на этой неделе. Причиной задержки стало количество полученных ими запросов. - person haplo1384; 08.10.2019
comment
Нужен ли корпоративным приложениям этот запрос, одобренный Apple? Я спрашиваю, как говорится в ссылке. Прежде чем вы сможете отправить приложение с этим правом в App Store, вы должны сначала получить разрешение на использование этого права. - person Vaibhav Misra; 10.10.2019
comment
@VaibhavMisra Я не знаю. У меня нет опыта работы со специальными правами для корпоративных приложений. - person Petesh; 23.10.2019
comment
Кто-то получил ответ на запрос? - person Michel Marqués; 29.10.2019

Для меня это, казалось, было вызвано наличием CNContactNoteKey в «ключах для извлечения». Его удаление восстанавливает работоспособность.

Я вижу, у вас тоже есть CNContactNoteKey.

Я отметил это в Apple как ошибку.

person Peter Johnson    schedule 15.08.2019
comment
Оказывается, это не ошибка, см. комментарий @Petesh выше и эту ссылку здесь. noreferrer">developer.apple.com/documentation/bundleresources/entitlements/ - person Plasma; 15.08.2019
comment
Не будет ли ошибка: дать мне сообщение об ошибке, в котором говорится, какой ключ был нарушающим? - person benc; 12.01.2021

Последнее право com.apple.developer.contacts.notes для iOS 13 не обновляется в Xcode, а также в конфигурации идентификатора в приложении на портале разработчиков Apple. В настоящее время мы заблокированы из-за того же. Может кто-нибудь, пожалуйста, дайте нам знать, как поступить с этим. Если мы добавим com.apple.developer.contacts.notes вручную к праву, это выдаст ошибку, которая гласит:

Профиль подготовки «Профиль разработки iOS» не включает права com.apple.developer.contacts.notes.

Спасибо,
Санат

person user948440    schedule 26.09.2019
comment
У меня точно такая же проблема. Вы нашли какое-нибудь решение? - person Halil İbrahim YILMAZ; 13.11.2019
comment
вам нужно запросить разрешение, это единственный способ на данный момент. developer.apple.com/contact/request/contact-note-field - person Elano Vasconcelos; 15.11.2019