IOS 13 CNContacts不再能够检索所有联系人

Pla*_*sma 11 xcode objective-c ios cncontact cncontactstore

我有一个应用程序一直与CNContacts框架完美兼容,直到IOS12。我目前正在使用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);

}];
Run Code Online (Sandbox Code Playgroud)

联系人存储建立良好,错误为零。但是,当我随后尝试通过获取请求获取联系人时,我获得成功=否,并且收到以下错误:

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>"
Run Code Online (Sandbox Code Playgroud)

我已经尝试了各种调整,但是根本无法使用。我也找不到任何文档说明此行为已更改。

是否有其他人也尝试过此方法或找到了解决方法?

Pet*_*esh 14

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

添加它的原因主要是出于隐私方面的考虑-备注字段可以包含您可能在联系人中拥有的任何信息;在很多情况下,此信息比联系信息更加敏感。

截至2019年8月15日,此权利位于beta类别中,这意味着它可能会在iOS 13发行之前进行更改,并且该权利的名称可能会稳定在以Xcode呈现给开发人员的位置。

  • 您获得这项权利的批准了吗?我们几周前使用上面的链接请求了许可,但无法从 Apple 获得答复。 (2认同)
  • 不,我从Apple没听到任何消息,并且在网站上的配置UI或XCode中都看不到。这似乎是一个“丢球”问题-我建议提出一个与此有关的问题。 (2认同)
  • 我提出了一个开发人员问题,答复是申请使用配置文件的权限,我希望如果获得批准,它将出现在应用程序的配置文件中,否则将无法使用。在此期间,我只是想获取notes字段,因为用例不需要它 (2认同)
  • 有人收到了请求的答复吗? (2认同)

Pet*_*son 6

对我来说,这似乎与“要获取的键”中CNContactNoteKey的存在有关。删除它可以恢复功能。

我看到您也有CNContactNoteKey。

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

  • 事实证明它不是错误,请参阅上面@Petesh的评论以及此处的链接.. https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_developer_contacts_notes?language=objc (3认同)