Swift 发现不一致性&;从iOS 10.3开始,DiscoveryUserIdentity为CKUserIdentity.lookupInfo返回nil
CKContainer.DiscoveralIdentity(completionHandler:),discoverUserIdentity(recordID:-完成处理程序返回CKUserIdentity,但是。即使联系人包含电子邮件、电话等,lookupInfo也始终为零。其他属性,如hasiCloudAccount、userRecordID、nameComponents都可以。这个问题刚开始出现在最近的Swift 3.1版本中。有人知道这是否是预期行为,因为我无法o在发行说明中找到对CloudKit更改的任何参考,但这看起来像是隐私问题 经过进一步调查,此问题可能是由于最近的iOS 10.3更新造成的。在10.2.1版本的iPhone 5上运行应用程序时,不会出现此问题,并且lookupInfo正确包含emailAddress 提交的苹果bug:31377433Swift 发现不一致性&;从iOS 10.3开始,DiscoveryUserIdentity为CKUserIdentity.lookupInfo返回nil,swift,cloudkit,ios10.3,Swift,Cloudkit,Ios10.3,CKContainer.DiscoveralIdentity(completionHandler:),discoverUserIdentity(recordID:-完成处理程序返回CKUserIdentity,但是。即使联系人包含电子邮件、电话等,lookupInfo也始终为零。其他属性,如hasiCloudAccount、userRecordID、nameComponents都可以。这个问题刚开始出现在最近的Swift 3.1版本中。有人知道这是否是预期行为,因为我无法o在发行说明中找到对Cl
新增:此外,如果我尝试通过ckdiscoveralluseridentiesoperation访问信息,特别是userIdentityDiscoveredBlock->user.nameComponents,则与12岁以下用户(可能在“家庭共享”计划中)关联的apple id的结果是“空字符串”。我找不到有关这方面的信息,苹果开发支持部门也没有提供任何帮助。由于声誉不佳,我无法发表评论,所以我不得不这样做 我还提交了相同的bug(31397767),希望他们能修复它 对于
CKFetchShareParticipantsOperation
而言,必须具有CKUserIdentityLookupInfo
。因为没有解决方法,我们需要等待他们修复它
我只是对这个bug感到好奇,因为如果你已经将你的应用提交到应用商店,那么整个共享部分对用户来说都不起作用
更新
iOS 10.3.1更新无法解决此问题
更新:解决方案
我收到了苹果关于这个“问题”的回复。以下是c&p的答案:
这是预期的行为,因为
CKDiscoverallUserIdentity操作不需要提示
用于联系人访问的用户。如果要将这些结果转换为
参与者您需要请求联系人访问并获得查找
您可以通过contactIdentifiers属性自己获取联系人信息
//通过CKDiscoverallUserIdentity操作发现的身份
与本地联系人数据库中的条目相对应。这些
身份将填写ContactIdentifier,您的应用程序可能会
用于获取有关所选联系人的其他信息
已发现。单个联系人可能存在多个联系人标识符
发现的用户,因为多个联系人可能包含同一封电子邮件
地址或电话号码
请注意,发现用户和查找参与者是两个方面
逻辑上不同的东西-您只能发现
可通过-[CKContainer]发现其自身
requestApplicationPermission:CKApplicationPermissionUserDiscoverability
…],但您可以通过任何电子邮件地址或电话获得参与者
数字,即使它与iCloud帐户不对应。你没有
需要发现用户,然后将他们转化为参与者-您可以
只需让应用程序的用户输入参与者要添加的地址即可
分享
好的,这就是我在原版中所做的。在我的应用程序中,我会按如下方式提示访问。注意,这些都在10.3版本之前工作过,现在它不工作了,我无法从“lookupInfo”获取基本信息。想想看,如果除了名字和姓氏之外没有其他信息,那么lookupInfo有什么好处。下面是不再返回lookupInfo详细信息的工作流:fetchUserRecordID->checkDiscoverability->requestPermission->discoverUserIdentity