IOS 13 CNContact不再工作以检索所有联系人



我有一个应用程序,它与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    noten), unifyResults=1, sortOrder=0>"

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

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

在iOS 13中,Apple添加了如果您希望访问联系人笔记所需的新权利。 权利是com.apple.developer.contacts.notes.您可以请求将此权利用于放入 App Store 的应用程序的权限。

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

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

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

我看到你也有CNContactNoteKey。

我已将此标记为Apple错误。

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

预配配置文件"iOS 开发配置文件"不包括 com.apple.developer.contacts.notes 权利。

谢谢,
萨纳特

最新更新