CloudKit 私有数据库读取和写入无需用户登录 iCloud



我一直在使用CloudKit,我的印象是用户需要登录到iCloud才能使用CloudKit中的私有数据库,但我不认为这是真的。

我正在测试一个在CloudKit中成功与私有数据库通信的应用程序,我可以在其中读取和写入记录。令我惊讶的是,我从我的iCloud帐户和Sandbox Account注销,我仍然可以从CloudKit中读取和写入记录,这是出乎意料的,我在想注销后我将无法与CloudKit通信,事实上,我从手机中删除了该应用程序,在Xcode中重新编译,该应用程序仍然可以与CloudKit通信。

这是正常行为吗,CloudKit在没有用户登录iCloud的情况下工作吗?

有人可以解释一下与CloudKit的连接是如何工作的吗?

连接到私有数据库
let privateDatabase = CKContainer.default().database(with: .private)

阅读记录
privateDatabase.perform(query, inZoneWith:nil){( results , error) in ... }

写作记录
privateDatabase.save(ckRecord){ (record, error) in ...}

您应该无法写入 CloudKit(如果未登录,则为公共或私有数据库(...

在我的应用程序中,如果我尝试在不登录 iCloud 的情况下写入 CloudKit(公共数据库(,则会收到错误:

保存

错误:保存记录时出错<CKRecordID:0x7f91727cf0c0;>default所有者>到服务器:不写入操作 允许

您确定设备已注销吗? 只是为了仔细检查 - 为什么你相信你能够读/写? 是没有错误还是您正在通过仪表板验证保存?

根据某人的建议,使用以下内容检查他们是否已登录:

CKContainer.default().accountStatus { (accountStatus, error) in
if accountStatus == .available {
print("iCloud app container and private database is available")   
} else {
print("iCloud not available (String(describing: error?.localizedDescription))")   
}    
}

最新更新