命令行工具
rorkai/App-Store-Connect-CLI avatar
rorkai/App-Store-Connect-CLI

App Store Connect CLI:用 JSON 和脚本接管 TestFlight 与上架流程

项目速览:适用于 App Store Connect API 的快速、可编写脚本的 CLI。自动化 TestFlight、构建、提交、签名、分析、屏幕截图、订阅等。 JSON优先,无交互式提示。

7,254 个 Star611 个 ForkGoMIT

秒懂

它是什么?
rorkai/App-Store-Connect-CLI 是一个面向 CI/CD 的 Go 写的命令行工具,用 JSON 输出替代交互式界面,覆盖 TestFlight、构建、签名、分析等 App Store Connect API 操作。本文基于 README 和仓库信息,分析它的机制、安装方式、局限和适用场景。
适合谁用?
适合已经把发布流程脚本化、需要无头环境操作的 iOS 开发者或 DevOps 团队。不适合喜欢交互式向导、不愿接受默认 telemetry 或需要图形界面反馈的用户。
能商用吗?
可以。MIT 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库在最近一天内有新的提交。
用什么语言写的?
主要是 Go(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。

开源项目深度解析

它解决的是发布流程的自动化缺口

App Store Connect 的网页后台适合人工操作,但一旦涉及每日构建、TestFlight 分发、元数据同步,人工点击就成了瓶颈。这个 CLI 把 API 封装成命令,直接面向终端和 CI 脚本。README 明确列出它覆盖的范围:TestFlight、构建、提交、签名、分析、截图、订阅。目标用户是那些需要把发布步骤写进 pipeline 的工程师,而不是偶尔上传一次应用的业余开发者。它强调 JSON-first,意味着输出可以被 jq 或其他工具直接消费,这比解析表格文本可靠得多。

JSON 优先和 TTY 感知的默认输出

这个工具的一个关键设计是输出格式自动切换。在交互式终端里,默认输出是 `table`,方便人看;在管道、文件或 CI 环境里,默认变成 `json`,方便程序读。这个行为由 stdout 是否连接 TTY 决定。你可以用 `ASC_DEFAULT_OUTPUT` 环境变量设置个人偏好,但显式的 `--output` 参数总是优先。这种设计避免了脚本里忘记加 `--output json` 导致解析失败的问题。README 还提到 `--pretty` 参数,用于在终端或 bug 报告中输出可读的 JSON。对于自动化场景,这是务实的选择。

安装与认证:三条路径和两种模式

安装方式有三种:Homebrew 推荐给 macOS 用户,`brew install asc`;macOS/Linux 可以用安装脚本 `curl -fsSL https://asccli.sh/install | bash`;Windows 用户等待 WinGet 包,目前需要从 GitHub releases 下载签名二进制。认证是使用 App Store Connect API 的关键步骤。`asc auth login` 需要 `--key-id`、`--issuer-id` 和 `--private-key`,这些在 Apple 的后台生成。对于 CI 或无头环境,README 建议加 `--bypass-keychain`,避免依赖 macOS 钥匙串。还有 `--local` 选项,把凭据存在仓库本地的 `./.asc/config.json`,适合需要团队共享配置的场景。认证后可以用 `asc auth status --validate` 和 `asc auth doctor` 检查健康状态。

稳定性标签:实验性命令的风险提示

这个项目用可见的生命周期标签来区分命令的稳定程度。没有标签的命令被视为稳定的公共 CLI 契约,可以放心用在 CI 里。`[experimental]` 标签表示功能可用但仍在演进,README 警告说会有更尖锐的边缘和更快的迭代。`DEPRECATED:` 则表明兼容性路径,但不会是长期归宿。这个设计值得肯定,因为 API 工具的破坏性变更在自动化环境中代价很高。但要注意,标签是文档层面的承诺,实际行为还要看版本更新。使用实验性命令时,最好锁定版本,避免自动升级导致行为变化。

telemetry 默认开启:隐私和 CI 的权衡

默认情况下,`asc` 会发送伪匿名的命令级使用遥测数据。README 详细列出了收集的内容:CLI 版本、操作系统和架构、命令路径、持续时间、运行时上下文、调用来源、结果类别,以及 API 请求失败时的 HTTP 状态。它明确排除了原始参数、错误消息、凭据、私钥、Apple 账号、团队或 issuer ID、应用或 bundle ID 等敏感信息。数据包含一个随机安装 ID,用于分组同一安装的事件,但不会关联 Apple 账号。你可以用 `asc telemetry status` 查看状态,`asc telemetry disable` 关闭,或者设置环境变量 `ASC_TELEMETRY_DISABLED=1` 和 `DO_NOT_TRACK=1`。对于 CI 环境,这个默认开启的设计可能让一些团队不舒服,但它的透明度和关闭选项是加分项。

一个实际限制:Apple 服务状态检查仍是实验性

README 提到 `asc system-status` 命令可以检查 Apple 开发者服务的健康状态,不需要凭据。这个命令可以指定服务,比如 `--service "App Store Connect"`,支持 `--watch` 轮询和 `--issues-only` 只看问题。但它被标记为 `[experimental]`,意味着在 CI 中依赖它可能不稳定。如果 Apple 的 API 本身有问题,这个命令可能无法准确反映,或者输出格式会变。对于发布流程,这不算核心功能,但如果你打算用它做故障前置检查,需要接受它的不稳定性。另一个限制是,README 没有详细说明所有命令的完整用法,只给了部分示例,实际覆盖范围需要查阅文档。

与 fastlane 的差异:脚本优先 vs 配置驱动

提到 iOS 自动化,很多人会想到 fastlane。fastlane 用 Ruby DSL 定义 lane,有丰富的插件生态和交互式界面。而 App Store Connect CLI 是 JSON-first,无交互提示,直接面向 shell 脚本。fastlane 更适合需要复杂工作流编排和大量社区插件的团队;这个 CLI 更轻量,适合只想快速调用 API 的简单场景。fastlane 的抽象层更厚,学习曲线陡,但功能全面。这个 CLI 的命令直接映射 API 操作,输出结构化 JSON,更容易嵌入现有脚本。如果你已经用 fastlane 管理签名和分发,迁移到这个工具可能不值得;如果只是需要几个 API 调用,它更直接。

编辑结论

适合已经把发布流程脚本化、需要无头环境操作的 iOS 开发者或 DevOps 团队。不适合喜欢交互式向导、不愿接受默认 telemetry 或需要图形界面反馈的用户。采用前先验证三点:确认 Homebrew 或安装脚本来源可靠,检查 `asc auth status --validate` 能否通过,阅读 `asc telemetry status` 决定是否禁用。该工具的核心价值在于把 App Store Connect API 变成可预测的 JSON 接口,但它的稳定性标签和 telemetry 默认开启意味着你需要在 CI 中显式声明输出格式,并明确接受或关闭数据上报。

官方来源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
社区笔记

社区笔记