在移动应用开发的生命周期中,最耗时且重复性最高的环节往往不是编码,而是上架与分发。手动登录 App Store Connect 后台、上传构建版本、配置 TestFlight 测试组、提交审核……这些繁琐步骤不仅效率低下,还极易出错。

asc (App Store Connect CLI) 应运而生。这是一个用 Go 语言编写的快速、轻量且完全可脚本化的命令行工具。它将庞大的 App Store Connect API 封装为简洁的终端命令,让你能在本地终端、IDE 或 CI/CD 流水线中,轻松自动化 iOS、macOS、tvOS 乃至 visionOS 应用的全套工作流。
作为一个单一的静态二进制文件,asc 无需复杂的运行时依赖,启动瞬间完成,是现代化移动工程体系的理想拼图。
核心功能全景
asc 覆盖了应用从构建到上架的全生命周期管理:
- 🧪 TestFlight 管理:自动化管理构建版本、创建测试群组、邀请测试员、收集反馈及监控崩溃报告。
- 📦 App Store 提交:一键管理版本信息、多语言本地化、截图上传、提交审核及控制分阶段发布。
- 🏗️ 构建版本控制:直接上传 IPA/PKG 包、自动过期旧版本、精细化管理构建元数据。
- 🔐 签名与证书:无缝管理证书、描述文件、Bundle ID 及各类 Entitlements 能力。
- 💰 订阅与内购 (IAP):创建和管理订阅组、内购项目、优惠代码及定价策略。
- 📊 数据分析与销售: programmatically 下载销售报告、获取分析数据及财务报表。
- ☁️ Xcode Cloud 集成:触发云构建工作流、实时监控运行状态、下载构建产物。
- ✅ macOS 公证 (Notarization):提交公证请求、轮询状态并检索日志,确保 Mac 应用顺利分发。
- 🎮 Game Center:管理成就系统、排行榜及其集合,支持多语言本地化。
- 🖼️ 媒体资源管理:批量上传截图和预览视频,自动添加设备边框,统一管理 App Store 素材。
- 🔗 Webhooks 支持:创建和管理 App Store Connect 事件通知钩子。
- ⚙️ 工作流自动化:通过
.asc/workflow.json定义多步骤复杂任务,支持 JSON 标准输出,完美契合自动化脚本。 - 🤖 CI/CD 友好:优先输出 JSON 格式、明确的命令行标志、无交互式提示、清晰的退出码,专为机器执行设计。
💡 为什么选择 asc?
| 痛点 | asc 解决方案 |
|---|---|
| 手动操作繁琐 | 全命令行自动化,解放双手,减少人为失误 |
| 现有工具笨重缓慢 | 单一 Go 二进制文件,毫秒级启动,零依赖负担 |
| 脚本集成困难 | 原生支持 JSON 输出、明确的状态码,轻松嵌入 Shell/Python/Node 脚本 |
⚡ 快速开始
安装方式
推荐:通过 Homebrew 安装 (macOS/Linux)
brew tap rudrankriyam/tap
brew install asc
备选:一键安装脚本
curl -fsSL https://raw.githubusercontent.com/rudrankriyam/App-Store-Connect-CLI/main/install.sh | bash
# 默认安装至 ~/.local/bin,请确保该目录已在 PATH 中
源码构建 (适合贡献者)
git clone https://github.com/rudrankriyam/App-Store-Connect-CLI.git
cd App-Store-Connect-CLI
make build
./asc --help
注意:
asc不会自动更新。使用 Homebrew 时运行brew upgrade asc;使用脚本时重新运行安装命令即可。
🔐 认证与配置
asc 提供了灵活且安全的认证机制,支持多配置文件切换,完美适配本地开发与 CI/CD 环境。
1. 注册 API 密钥
首先,你需要在 App Store Connect 生成 API 密钥。
也可以在终端直接打开该页面:
asc auth init --open
2. 登录与凭证管理
基础登录:
asc auth login \
--name "MyApp" \
--key-id "ABC123" \
--issuer-id "DEF456" \
--private-key /path/to/AuthKey.p8
CI/CD 场景(跳过网络验证):
在自动化环境中,为了加快速度,可跳过凭证有效性检查:
asc auth login \
--skip-validation \
--name "CI-Build" \
--key-id "ABC123" \
--issuer-id "DEF456" \
--private-key /path/to/AuthKey.p8
多配置文件管理:
你可以为不同的项目或客户保存多套凭证:
# 添加新客户配置
asc auth login --name "ClientA" --key-id "XYZ789" ...
# 切换默认配置
asc auth switch --name "ClientA"
# 临时指定配置运行命令
asc --profile "ClientA" apps list
3. 存储策略与安全
- 默认行为:凭证优先存储在系统钥匙串 (Keychain) 中,配置文件
~/.asc/config.json作为后备。 - 绕过钥匙串:在某些无图形界面的服务器或 Docker 容器中,可使用
--bypass-keychain将凭证直接存入配置文件。 - 项目级配置:使用
asc auth init --local可在当前仓库生成./.asc/config.json,该配置优先级高于全局配置,适合团队协作。
4. 环境变量支持
在 CI/CD 流水线中,推荐使用环境变量注入敏感信息,避免硬编码:
| 变量名 | 描述 |
|---|---|
ASC_KEY_ID | API 密钥 ID |
ASC_ISSUER_ID | 颁发者 ID |
ASC_PRIVATE_KEY_PATH | 私钥文件路径 |
ASC_PRIVATE_KEY | 私钥原始内容 (自动写入临时文件) |
ASC_PRIVATE_KEY_B64 | Base64 编码的私钥内容 |
ASC_PROFILE | 指定使用的配置名称 |
ASC_BYPASS_KEYCHAIN | 设为 true 强制使用文件/环境变量,忽略钥匙串 |
ASC_STRICT_AUTH | 设为 true,当检测到凭证来源冲突时报错,确保安全 |
🛠️ 高级用法与调试
输出格式化
asc 支持多种输出格式,方便不同场景消费:
--output json:机器可读,适合脚本解析。--output table:人类可读,适合终端查看。--output markdown:适合生成文档。- 可通过
ASC_DEFAULT_OUTPUT环境变量设置默认格式。
调试模式
遇到 API 错误或连接问题时,开启调试日志:
# 启用通用调试
ASC_DEBUG=1 asc apps list
# 查看详细的 HTTP 请求/响应 (已脱敏)
ASC_DEBUG=api asc apps list
# 或针对单条命令
asc apps list --api-debug
重试机制
网络波动是常态,asc 内置了智能重试逻辑:
ASC_MAX_RETRIES(默认 3):最大重试次数。ASC_BASE_DELAY/ASC_MAX_DELAY:退避策略控制。ASC_RETRY_LOG=1:将重试过程记录到 stderr,便于排查。
📝 配置文件结构
config.json 采用蛇形命名法,支持以下关键配置项:
{
"app_id": "123456789",
"vendor_number": "123456",
"timeout": "90s",
"upload_timeout": "300s",
"max_retries": 5,
"base_delay": "1s",
"debug": "api"
}














