Meet CloudKit Console
Developer Tools 入门 18m

认识 CloudKit Console

Meet CloudKit Console

2021年6月10日

在 Apple 官方观看视频

一句话判断

CloudKit Console 是旧版 CloudKit Dashboard 的 Web 重建版本 —— 终于可以在浏览器里直接写查询、查看日志、监控性能了,但还缺少批量数据导入和实时数据流查看这些高级功能。

这场 Session 讲了什么

Session 展示了全新的 CloudKit Console,一个基于 Web 的 CloudKit 管理工具。替代了老旧的 CloudKit Dashboard。

核心功能:

  1. Schema 浏览和编辑:直接在浏览器中查看和修改 Record Type、Field、Index。
  2. 查询执行器:写 CloudKit 查询(基于 GUI 的筛选器),直接查看结果记录。
  3. 日志查看器:实时查看 API 请求日志,包括每个请求的延迟、错误信息和客户端信息。
  4. 性能面板:按时间维度查看 API 请求量、延迟分布、错误率等指标。
  5. 权限管理:给团队成员分配不同的 CloudKit 环境访问权限(开发/生产)。

还演示了如何在 CloudKit Console 中使用声明式 Schema 管理、如何调试同步问题、以及如何监控生产环境的健康状态。

值得深挖的点

查询执行器的实用价值。以前要查看 CloudKit 中的数据,要么写代码跑查询,要么用 CloudKit Dashboard 的简陋界面。新的查询执行器支持类似 SQL 的过滤条件:字段名 + 操作符 + 值,可以快速定位问题数据。比如查询”所有 createdAt 在上周之后、status 为 failed 的记录”。查询结果可以直接在浏览器中编辑和删除,这对调试开发环境非常有用。

性能面板的告警机制。CloudKit Console 的性能面板可以设置阈值告警:当 API 延迟超过某个阈值、错误率超过某个百分比时,自动发送邮件通知。这对于生产环境的监控至关重要 —— 用户不会告诉你 CloudKit 查询变慢了,但性能面板会。

代码片段

CloudKit Console 中的查询示例(伪代码,在 Web UI 中操作)

// CloudKit Console Query Builder(在浏览器 GUI 中配置)
Record Type: Task
Filter: status == "failed" AND creationDate > 2021-06-01
Sort: creationDate DESC
Limit: 50

对应的 Swift 查询代码(参考)

import CloudKit

func queryFailedTasks() {
    let predicate = NSPredicate(
        format: "status == %@ AND creationDate > %@",
        "failed",
        Calendar.current.date(byAdding: .day, value: -7, to: Date())! as NSDate
    )
    let query = CKQuery(recordType: "Task", predicate: predicate)
    query.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]

    let operation = CKQueryOperation(query: query)
    operation.resultsLimit = 50
    operation.recordFetchedBlock = { record in
        print("失败任务: \(record.recordID), 原因: \(record["errorMessage"] ?? "")")
    }
    CKContainer.default().privateCloudDatabase.add(operation)
}

Schema 声明式配置(JSON,配合 cktool 使用)

{
    "recordTypes": {
        "Task": {
            "fields": {
                "title": { "type": "STRING" },
                "status": { "type": "STRING" },
                "dueDate": { "type": "DATE/TIME" },
                "priority": { "type": "INT64" }
            },
            "indexes": {
                "statusIndex": {
                    "field": "status",
                    "type": "VALUE"
                },
                "dueDateIndex": {
                    "field": "dueDate",
                    "type": "VALUE"
                }
            }
        }
    }
}

最佳实践

  1. 用 CloudKit Console 的日志查看器排查同步失败。当用户报告数据没有同步时,在日志中搜索用户的 CloudKit User ID,可以看到该用户的所有 API 请求和错误信息。
  2. 生产环境上线前在 Console 中检查 Schema 索引。常见性能问题的根源是缺少查询索引。CloudKit Console 会标记没有索引的高频查询字段。
  3. 给团队的不同角色分配不同的 Console 权限。开发者只需要开发环境权限,运维人员需要生产环境只读权限,避免误操作。

还有什么值得关注

  • CloudKit Console 支持”Telemetry”视图,可以按 API 类型(query/modify/subscribe)分别查看请求量趋势。
  • 日志支持导出为 CSV 格式,方便在分析工具中进一步处理。
  • cktool 命令行工具可以和 CloudKit Console 配合使用,Console 负责可视化,cktool 负责自动化。
WWDC 2021