web-dev-qa-db-fra.com

IOS 13 CNC contacte ne fonctionne plus pour récupérer tous les contacts

J'ai une application qui a parfaitement fonctionné avec le framework CNContacts jusqu'à IOS 12. Je la teste actuellement avec IOS 13 beta et son complètement cassé. J'ai vérifié les autorisations de contacts et supprimé l'application et ré-autorisé les autorisations. Voici le code que j'utilise pour récupérer tous les contacts:

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);

}];

Le magasin de contacts se construit correctement et l'erreur est nulle. Cependant, lorsque j'essaie ensuite d'obtenir les contacts via la demande de récupération, j'obtiens succès = NON et je reçois l'erreur suivante:

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>"

J'ai essayé divers réglages, mais je n'arrive pas du tout à le faire fonctionner. Je ne trouve pas non plus de documentation indiquant que ce comportement a été modifié.

Quelqu'un d'autre a-t-il également essayé ou trouvé un moyen de contourner le problème?

15
Plasma

Dans iOS 13, Apple ont ajouté un nouveau droit qui est nécessaire si vous souhaitez accéder aux notes des contacts. Le droit est com.Apple.developer.contacts.notes . Vous pouvez demander l'autorisation d'utiliser ce droit pour une application placée dans l'App Store.

La raison pour laquelle il a été ajouté est principalement pour des raisons de confidentialité - le champ des notes peut contenir toutes les informations que vous pourriez avoir sur le contact; et souvent, ces informations sont beaucoup plus sensibles que les seules informations de contact.

À partir du 2019-08-15, ce droit appartient à la catégorie bêta, ce qui signifie qu'il peut être sujet à changement avant la sortie d'iOS 13, et le nom du droit se stabilisera probablement dans sa présentation au développeur dans Xcode.

22
Petesh

Pour moi, cela semblait être dû à la présence de CNContactNoteKey dans les "clés à récupérer". Le supprimer restaure la fonctionnalité.

Je vois que vous avez également CNContactNoteKey présent.

J'ai signalé cela à Apple comme bogue.

7
Peter Johnson

Le dernier com.Apple.developer.contacts.notes le droit pour iOS 13 n'est pas mis à jour dans Xcode ainsi que la configuration des identifiants dans l'application dans Apple portail des développeurs. Actuellement, nous sommes bloqués à cause de la même chose. Quelqu'un peut-il nous faire savoir comment pour continuer. Si nous ajoutons com.Apple.developer.contacts.notes manuellement à un droit, il renvoie une erreur qui dit:

Le profil d'approvisionnement "Profil de développement iOS" n'inclut pas le droit com.Apple.developer.contacts.notes.

Merci,
Sanath

3
user948440