IOS 13 个 CNContacts 不再努力检索所有联系人

IOS 13 CNContacts No Longer Working To Retrieve All Contacts

我有一个应用程序在 IOS 12 之前一直与 CNContacts 框架完美配合。我目前正在使用 IOS 13 beta 测试它并且它完全坏了。我检查了联系人权限并删除了应用程序并重新授予权限。这是我用来检索所有联系人的代码:

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

我已经尝试了各种调整,但我根本无法让它工作。我也找不到任何文件说明此行为已更改。

有没有其他人也尝试过这个或找到了解决方法?

对我来说,这似乎是 "keys to fetch" 中存在 CNContactNoteKey 造成的。删除它可恢复功能。

我看到你也有 CNContactNoteKey。

我已将此作为错误标记给 Apple。

在iOS13 中,Apple 添加了一个新的授权,如果您希望访问联系人的备注,则需要该授权。 对于被放入 App Store 的应用程序,授权是 com.apple.developer.contacts.notes. You can request permission to use this entitlement

添加它的原因主要是出于隐私原因——注释字段可以包含您可能拥有的关于联系人的任何信息;很多时候,这些信息比联系信息要敏感得多。

截至 2019-08-15,该权利处于 beta 类别,这意味着它可能会在 iOS13 发布之前发生变化,并且权利名称可能会稳定在它在 Xcode.

中呈现给开发人员

iOS 13 的最新 com.apple.developer.contacts.notes 权利未在 Xcode 中更新,Apple 开发者门户中的应用内 ID 配置也未更新。目前,我们因为同样的原因被封锁了。有人可以让我们知道如何进行吗?如果我们将 com.apple.developer.contacts.notes 手动添加到权利中,它会抛出一个错误:

Provisioning profile "iOS Development Profile" doesn't include the com.apple.developer.contacts.notes entitlement.

谢谢,
萨纳斯