CloudKit - 如何修改其他用户创建的记录

CloudKit - How to modify the record created by other user

开发中还可以, 但是当我通过 TestFlight 分发我的应用程序时,我遇到了这个问题。

当我检查一些故障时, 我猜想 当没有创建记录的用户试图修改它时,不能那样做。 顺便说一句,我可以获取 Public 数据库中的所有记录值。仅修改未执行。

在下图中,iCloud 帐户写在绿色区域。我预测这些必须相同。

image: Metadata - CloudKit Dashboard

现在,用户正在尝试通过以下代码修改记录:

func modifyRecord() {

    let publicDatabase = CKContainer.default().publicCloudDatabase

    let predicate = NSPredicate(format: "accountID == %@", argumentArray: [myID!])
    let query = CKQuery(recordType: "Accounts", predicate: predicate)

    publicDatabase.perform(query, inZoneWith: nil, completionHandler: {(records, error) in

        if let error = error {
            print("error1: \(error)")
            return
        }

        for record in records! {
        
            /* ↓ New Value */
            record["currentLocation"] = CLLocation(latitude: 40.689283, longitude: -74.044368)

            publicDatabase.save(record, completionHandler: {(record, error) in

                if let error = error {
                    print("error2: \(error)")
                    return
                }
                print("success!")
            })
        }
    })
}

在开发中,所有记录都是我自己创建和修改的,所以没能发现这个问题。

版本

Xcode 11.6 / Swift 5

总结

我猜有必要在这段代码中由同一用户(=相同的 iCloud 帐户)创建和修改记录。 那么请问如何修改其他用户创建的记录? 首先,我可以这样做吗?

谢谢。

您似乎遇到了权限问题。在您的 cloudkit 仪表板中,转到:架构 > 安全角色

然后在'Authenticated'下(表示用户登录到Icloud)

您需要向相关记录类型授予 'Write' 权限。那应该可以解决它!