17

我有一个应用程序在一直到 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>"

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

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

4

3 回答 3

26

在 iOS 13 中,Apple 添加了一项新权利,如果您希望访问联系人的备注,则需要该权利。权利是com.apple.developer.contacts.notes。您可以请求使用此权利的权限,以便将应用程序放入 App Store。

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

截至 2019 年 8 月 15 日,此权利属于 beta 类别,这意味着它可能会在 iOS 13 发布之前发生变化,并且权利的名称可能会在 Xcode 中向开发人员呈现时稳定下来。

于 2019-08-15T21:43:56.743 回答
8

对我来说,这似乎是由“要获取的密钥”中存在 CNContactNoteKey 引起的。删除它会恢复功能。

我看到你也有 CNContactNoteKey。

我已将此标记为 Apple 的错误。

于 2019-08-15T10:47:27.167 回答
3

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

供应配置文件“iOS 开发配置文件”不包括 com.apple.developer.contacts.notes 权利。

谢谢,
萨纳斯

于 2019-09-26T10:33:02.560 回答