CloudKit Console 新变化
What's new in CloudKit Console
2022年6月6日
一句话判断
CloudKit Console 终于从一个”能看数据库”的只读工具变成了一个完整的开发者控制台——新查询构建器、Schema 编辑器、Token 管理、团队协作支持,日常开发再也不用开 Xcode 了。
这场 Session 讲了什么
这场 Session 全面介绍了 CloudKit Console 在 2022 年的改版。新版 Console 从 UI 到功能都做了大幅升级,目标是让开发者直接在浏览器里完成大部分 CloudKit 管理工作。
全新的查询构建器。 之前的 Console 只能做最简单的 record 查询,新版引入了一个可视化的查询构建器。你可以通过下拉菜单选择 record type、添加过滤条件、指定排序规则,不需要手写任何代码。查询结果以表格形式展示,支持内联编辑——点击某个字段直接修改值,按回车保存。这比之前”改一个字段 -> 跑一遍 App -> 再查一次”的工作流高效太多了。
Schema 管理。 新版 Console 允许你直接在浏览器里查看和编辑 CloudKit Schema。你可以添加新字段、修改字段类型、创建新的 record type。修改 Schema 时 Console 会提示你哪些操作是破坏性的(比如删除字段),需要你二次确认。之前改 Schema 只能通过代码初始化或者用旧的 CloudKit Dashboard,体验很粗糙。
Environment 切换。 Development 和 Production 环境的切换更方便了,顶部有一个切换器可以一键切换。你可以在 Development 环境里测试 Schema 变更,确认无误后 deploy 到 Production。
Token 和 API 密钥管理。 Console 现在可以直接生成和管理 CloudKit API tokens、Server-to-Server tokens。之前这些操作需要在代码里或者通过旧版 Dashboard 完成。新的 token 管理界面会显示每个 token 的创建时间、最后使用时间和权限范围。
团队协作。 CloudKit Console 现在支持 App Store Connect 的团队角色。管理员和开发者都可以访问 Console,但只有管理员能执行 Schema 变更和 deploy 到 Production 等高风险操作。这让多人协作开发 CloudKit 后端变得更安全。
日志和监控。 新增了请求日志查看功能,你可以看到最近的 API 请求列表,包括请求时间、响应状态码、耗时等信息。对于调试 CloudKit 性能问题很有帮助。
值得深挖的点
Schema deploy 的安全策略。 CloudKit 的 Schema 变更在 Production 环境是有限制的——你不能删除正在被使用的字段或 record type,也不能把字段的类型从 String 改成 Integer 这种不兼容变更。Console 在 deploy 之前会做一次完整的兼容性检查,把所有有风险的操作列出来让你确认。这个设计避免了”一个 Schema 变更搞崩线上 App”的经典惨剧。
内联编辑的事务模型。 Console 的内联编辑是即时生效的——你修改一个字段值,按回车,修改就写入 CloudKit 数据库了。没有”暂存”或”批量提交”的概念。这对于快速修复数据很方便,但也意味着误操作没有回滚余地。建议在操作 Production 数据之前先在 Development 环境验证。
代码片段
CloudKit Console 的操作都是通过浏览器 UI 完成的,但有些操作也可以通过 CKTool JS(命令行工具)来做:
# 使用 CKTool JS 查询 record(和 Console 的查询构建器等效)
npx cktool records query \
--container iCloud.com.example.myapp \
--environment development \
--record-type MyRecord \
--filter 'name == "Test"'
在 Console 里构建复杂查询的等效代码(用于理解查询逻辑):
// 对应 Console 查询构建器的代码
let query = CKQuery(recordType: "MyRecord", predicate: [
NSPredicate(format: "score > %d", 100),
NSPredicate(format: "category == %@", "Games")
].reduce(NSCompoundPredicate.and, { NSCompoundPredicate(andPredicateWithSubpredicates: [$0, $1]) }))
query.sortDescriptors = [NSSortDescriptor(key: "score", ascending: false)]
let operation = CKQueryOperation(query: query)
operation.resultsLimit = 50
最佳实践
在 Console 里修改 Production Schema 之前,始终先在 Development 环境里测试。虽然 Console 会做兼容性检查,但有些边界情况(比如删除一个已经没有代码引用但仍有数据的字段)可能不会触发警告。
善用 Console 的日志功能来监控 CloudKit API 的使用情况。如果某个 record type 的查询频率异常高,可能是 App 端有不必要的重复查询。日志里的响应时间数据也能帮你发现哪些查询需要优化(比如添加 sort descriptor 或者缩小查询范围)。
给团队成员分配最小必要权限。App Store Connect 里的 “Admin” 角色可以执行所有 Console 操作,“Developer” 角色只能查看和查询。如果你的团队里有 QA 人员需要查看数据但不应修改 Schema,用 Developer 角色就够了。
还有什么值得关注
- Console 支持批量删除 record,但不支持批量创建。如果你需要导入大量数据,还是得用代码(CKModifyRecordsOperation)或者 CKTool JS。
- Console 的查询结果默认只显示前 200 条,需要手动翻页。对于有大量 record 的表,导出功能(CSV)可能更实用。
- 新版 Console 的 URL 结构和旧版不同,如果你有书签的话需要更新。
- Console 现在支持深色模式,会自动跟随系统偏好设置。