Database 已验证的开发人员用户无法在模拟器中写入/创建CloudKit公共数据库

Database 已验证的开发人员用户无法在模拟器中写入/创建CloudKit公共数据库,database,authentication,permissions,cloudkit,simulator,Database,Authentication,Permissions,Cloudkit,Simulator,我的设备可以在模拟器和测试iPhone上工作。我想将一条新记录保存到Cloudkit数据库。我可以在物理测试设备上创建记录,但不能在模拟器中创建记录。当我把它提交给苹果公司审查时,他们也因此拒绝了。这两个设备都已登录到iCloud。这在使用此代码保存记录之前确认: CKContainer.default().accountStatus { (accountStatus, error) in switch accountStatus { case .availabl

我的设备可以在模拟器和测试iPhone上工作。我想将一条新记录保存到Cloudkit数据库。我可以在物理测试设备上创建记录,但不能在模拟器中创建记录。当我把它提交给苹果公司审查时,他们也因此拒绝了。这两个设备都已登录到iCloud。这在使用此代码保存记录之前确认:

CKContainer.default().accountStatus { (accountStatus, error) in
        switch accountStatus {
        case .available:
            print("iCloud Available")
        case .noAccount:
            print("No iCloud account")
        case .restricted:
            print("iCloud restricted")
        case .couldNotDetermine:
            print("Unable to determine iCloud status")
        }
    }
我用来进行保存的代码非常简单,在实际设备上运行时没有任何问题:

static func saveUser(user: UserElement, completion: @escaping (Result<UserElement, Error>) ->
    ()) {
    let itemRecord = CKRecord(recordType: "userInfo")
    
    itemRecord["uniqueID"] = user.bossID as CKRecordValue
    itemRecord["screenName"] = user.screenName as CKRecordValue
    itemRecord["shareCode"] = user.shareCode as CKRecordValue
    itemRecord["subscribedBosses"] = user.subscribedBosses as CKRecordValue

    let container = CKContainer(identifier: "iCloud.Caz4Short.WatChaDoin")
    container.publicCloudDatabase.save(itemRecord) { (record, err) in
        DispatchQueue.main.async {
            if let err = err {
                print("error on run")
                completion(.failure(err))
                return
            }
            
            guard let record = record else {
                print("record")
                completion(.failure(CloudKitHelperError.recordFailure))
                return
            }
            
            let id = record.recordID
            guard let boss = record["uniqueID"] as? String else {
                print("record ID")
                completion(.failure(CloudKitHelperError.recordIDFailure))
                return
            }
            guard let name = record["screenName"] as? String else {
                
                print("screenname")
                completion(.failure(CloudKitHelperError.castFailure))
                return
            }
            guard let bossCode = record["shareCode"] as? String else {
                print("Code")
                completion(.failure(CloudKitHelperError.castFailure))
                return
            }
            guard let subs = record["subscribedBosses"] as? [String] else {
                completion(.failure(CloudKitHelperError.castFailure))
                return
            }
            let element = UserElement(recordID: id, bossID: boss, screenName: name, shareCode: bossCode, subscribedBosses: subs)
            completion(.success(element))
        }
    }
}
static func saveUser(用户:UserElement,完成:@escaping(Result)->
()) {
let itemRecord=CKRecord(记录类型:“userInfo”)
itemRecord[“uniqueID”]=user.bossID作为CKRecordValue
itemRecord[“screenName”]=user.screenName作为CKRecordValue
itemRecord[“shareCode”]=user.shareCode作为CKRecordValue
itemRecord[“SubscribedBoss”]=user.SubscribedBoss作为CKRecordValue
let container=CKContainer(标识符:“iCloud.Caz4Short.WatChaDoin”)
container.publicCloudDatabase.save(itemRecord){(record,err)in
DispatchQueue.main.async{
如果让err=err{
打印(“运行时出错”)
完成(.failure(err))
返回
}
guard let record=记录其他内容{
打印(“记录”)
完成(.failure(CloudKitHelperError.recordFailure))
返回
}
让id=record.recordID
守卫让boss=将[“唯一ID”]记录为?字符串else{
打印(“记录ID”)
完成(.failure(CloudKitHelperError.recordIDFailure))
返回
}
guard let name=将[“screenName”]记录为?字符串else{
打印(“屏幕名称”)
完成(.failure(CloudKitHelperError.castFailure))
返回
}
guard let bossCode=将[“共享代码”]记录为?字符串else{
打印(“代码”)
完成(.failure(CloudKitHelperError.castFailure))
返回
}
guard let subs=将[“subscribedboss”]记录为?[String]else{
完成(.failure(CloudKitHelperError.castFailure))
返回
}
let element=UserElement(recordID:id,bossID:boss,screenName:name,shareCode:bossCode,subscribedboss:subs)
完成(.success(元素))
}
}
}
代码在“运行时出错”时失败,并显示错误消息

将记录保存到服务器时出错:不允许创建操作

当我试图修改一条记录时,我得到了一个类似的错误,除了它说写而不是创建。不过,我可以毫无问题地阅读记录。这让我觉得我忘了设置该区域的安全角色,但事实并非如此。已验证用户&已为所有区域选择读取、创建和写入。创造者也有读写能力。我也在电脑上登录了iCloud,很久以前就接受了iCloud帐户的条款和条件,所以它不像是一个需要设置的新帐户。任何想法都将受到极大的赞赏,这样就不会再次遭到拒绝


在模拟器上,进入设置,然后点击帐户名。查看是否出现密码提示。我经常遇到一个问题,只有在模拟器上,您最终处于“部分登录到icloud”状态。状态检查返回时,就好像您已登录,但要求您登录的保存/写入操作失败。它给出了什么错误代码?如果let error=error as?CKError{print(error.errorCode)}抱歉-但是我正在寻找cloudkit错误代码-这可能有助于调试-您必须将错误转换为?CKError,然后查看error.errorCodeckerPermissionFailure=10,/*访问失败(保存、获取或共享接受)*/所以这与权限有关……我想知道这是否是另一个问题。我会测试“world”的权限,以防问题是您实际上没有经过身份验证——只是看看是否有什么问题。