CloudKit共享 - 由于userId无效,无法将userId转换为dsId

时间:2017-10-11 14:21:51

标签: ios cloudkit

我正在尝试使用Apple CloudKit的新数据共享功能。我可以成功发送共享链接到其他设备。当我打开它时,我得到共享元数据(一些哈希被截断):

<
    CKShareMetadata: 0x170110b30; 
    shareID=<
        CKRecordID: 0x170234020;
        recordName=com.mentalfaculty.ensembles.zone.schema2, 
        zoneID=com.mentalfaculty.ensembles.zone.schema2:_c96e4c45c173bb2215138...
    >,

    participantType=PrivateUser, 
    Owner=<
        CKUserIdentity: 0x1700b8720;
        lookupInfo=<
            CKUserIdentityLookupInfo: 0x170664900;
            email=me@company.com
        >,
        cached=0,
        nameComponents=MyName,
        userID=<
            CKRecordID: 0x170229ac0;
            recordName=_c96e4c45c173bb2215138...,
            zoneID=_defaultZone:__defaultOwner__
        >
    >,
    participantStatus=Pending,
    container=iCloud.com.company.app:Sandbox,
    rootRecordID=<
        CKRecordID: 0x17403a380;
        recordName=CDEFileSystemNode_/,
        zoneID=com.mentalfaculty.ensembles.zone.schema2:_c96e4c45c173bb2215138...
    >, 
    participantPermission=ReadWrite, 
    shareURL=https://www.icloud.com/share/...
>

但是,当我尝试接受共享时,我收到此错误:

<
    CKError 0x170440120: "Partial Failure" (2/1011);
    "Failed to accept some shares";
    uuid = 1C3D8534-BE22-42D2-9EDD-...;
    container ID = "iCloud.com.company.app.ios.debug"; 
    partial errors: {
        https://www.icloud.com/share/... = <
            CKError 0x17025f6b0: "Invalid Arguments" (12/2006);
            server message = "Cannot convert userId to dsId due to an invalid userId. The userId cannot be used for this container and/or environment."
        >
    }
>

我注意到元数据中的containerID与错误消息中的containerID不同。元数据中的containerID是“真实”的,而错误消息中的containerID只是应用程序包标识符。 我的问题:

  1. containerIDs不同是正常的吗?
  2. 如何解决此错误?
  3. 如果需要,我可以提供更多信息。

    注意:我正在使用Ensembles框架在云中保存数据。

    P.S。我已经多次观看WWDC 2016年会议226,研究了Ensembles的例子,当然,谷歌搜索了几个小时。没有成功。

1 个答案:

答案 0 :(得分:0)

我怀疑,问题出在containerID。在iCloud设置中更改了containerID(Xcode-&gt;项目设置 - &gt;目标 - &gt;功能-iCloud),因此它与包标识符相同,并且它开始工作。我不知道共享接受方法是否使用与元数据对象中提供的不同containerID(该方法仅使用包标识符)的错误。