使用 cktool
开始之前
- 你必须是 Apple Developer Program 或 Apple Developer Enterprise Program 的现有成员,才能使用
cktool
。 - 了解“认证”的概念,实现 CloudKit 开发自动化中介绍了此概念。
- 选取用户账户的 Settings (设置) 部分,从 CloudKit Console 生成 CloudKit 管理令牌。请存储此令牌,因为它不会再次显示。
安装 App
默认情况下,从 Xcode 13 起,cktool
会随 Xcode 一起分发。Xcode 13 可从 Mac App Store 下载。
一般用法
cktool
是无状态的,可以在单次操作中将所有操作传递给 CloudKit Management API。可通过 help
命令或 man
页面获取受支持操作的完整列表:
xcrun cktool --help
OVERVIEW: CloudKit Command Line Tool
USAGE: cktool <subcommand>
OPTIONS:
-h, --help Show help information.
SUBCOMMANDS: ...
向 CloudKit 认证 cktool
cktool
支持管理令牌和用户令牌,并会将它们安全地储存在 Mac 钥匙串中。你可以使用 save-token
命令添加令牌,此命令将在提示用户提供信息后启动 CloudKit Console 以拷贝相应的令牌:
xcrun cktool save-token \
--type [management | user]
发出架构管理命令
架构管理命令要求提供管理令牌。提供后,cktool
可以执行以下命令:
重置开发架构:这让你可以将开发数据库恢复为当前的生产定义。
xcrun cktool reset-schema \
--team-id [TEAM-ID] \
--container-id [CONTAINER]
导出架构文件:这让你可以将现有 CloudKit 数据库架构定义存储到文件中,此文件可以与相关源代码一起保存:
xcrun cktool export-schema \
--team-id [TEAM-ID] \
--container-id [CONTAINER] \
--environment [development | production] \
[--output-file schema.ckdb]
导入架构文件:这会对开发数据库应用基于文件的架构定义以进行测试。
xcrun cktool import-schema \
--team-id [TEAM-ID] \
--container-id [CONTAINER] \
--environment development \
--file schema.ckdb
发出数据命令
当用户令牌可用时,cktool
可以代表用户访问公共数据库和私有数据库。这可用于在集成测试之前获取数据和插入新记录。请注意,由于用户令牌的使用期限短,因此可能需要频繁进行交互式认证。
可以使用 query-records
命令来查询记录。请注意,如果在查询中没有使用筛选器,则需要对 ___recordID
应用 Queryable
索引,就像在可选的 --filters
参数中指定的字段那样:
xcrun cktool query-records \
--team-id [TEAMID] \
--container-id [CONTAINER] \
--zone-name [ZONE_NAME] \
--database-type [public | private] \
--environment [development | production] \
--record-type [RECORD_TYPE] \
[--filters [FILTER_1] [FILTER_2]]
其中 FILTER_1
采用 "[FIELD_NAME] [OPERATOR] [VALUE]"
形式,例如 "lastname == Appleseed"
。
插入数据通过 create-record
命令完成:
xcrun cktool create-record \
--team-id [TEAM_ID] \
--container-id [CONTAINER] \
--zone-name [ZONE_NAME] \
--database-type [public | private] \
--environment [development | production] \
--record-type [RECORD_TYPE] \
[--fields-json [FIELDS_JSON]]
其中 FIELDS_JSON
是要在记录中设置的字段的 JSON 表示形式。例如:
'{
"firstName": {
"type": "stringType",
"value": "Johnny"
},
"lastName": {
"type": "stringType",
"value": "Appleseed"
}
}'