CLI tool
rorkai/App-Store-Connect-CLI avatar
rorkai/App-Store-Connect-CLI

App Store Connect CLI: A JSON-First Command Line for Apple Release Automation

Project brief: Fast, scriptable CLI for the App Store Connect API. Automate TestFlight, builds, submissions, signing, analytics, screenshots, subscriptions, and more. JSON-first, no interactive prompts.

7,254 stars611 forksGoMIT

At a glance

What is it?
This review covers the App Store Connect CLI (asc), a Go-based tool for automating TestFlight, submissions, signing, and more via the App Store Connect API. It is fast, scriptable, and JSON-first, but its default telemetry and evolving experimental commands require attention.
Who is it for?
Adopt the App Store Connect CLI if you need a scriptable, JSON-first interface to the App Store Connect API for CI/CD pipelines, especially for TestFlight builds, submissions, and signing. Skip it if you prefer a GUI or a fully interactive tool, or if you cannot accept default telemetry without explicit opt-out.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly Go, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What Problem This CLI Solves

Apple's App Store Connect API is powerful but not ergonomic for terminal users. The App Store Connect CLI, invoked as `asc`, wraps that API into a command line tool for iOS, macOS, tvOS, and visionOS release workflows. The README lists automation of TestFlight, builds, submissions, signing, analytics, screenshots, and subscriptions as core capabilities. The intended audience is developers and release engineers who work from a terminal, an IDE, or a CI/CD pipeline and want to avoid clicking through Apple's web portal. The tool is JSON-first, meaning its output is structured for machines, and it has no interactive prompts. That design makes it suitable for unattended scripts, but it also means you must know what you want before you run a command.

How It Works: The Mechanism Behind `asc`

The CLI authenticates against the App Store Connect API using API keys. You supply a key ID, an issuer ID, and a private key file in `.p8` format. The README shows `asc auth login` with those parameters and a `--network` flag for keychain-backed storage. In CI or headless environments, you can use `--bypass-keychain` to store credentials in a config file instead. After authentication, commands like `asc apps list` produce output in table, JSON, or markdown formats. The tool is TTY-aware: it defaults to `table` when stdout is a terminal and `json` when piped or run in CI. This default behavior reduces the chance of accidentally parsing human-readable tables in scripts. The CLI also includes a `doctor` command and a `system-status` command (marked experimental) to check Apple's developer services health without credentials.

Getting It Running: Install and Configure

Installation is straightforward. The recommended path on macOS is Homebrew: `brew install asc`. For Linux and macOS, there is an install script: `curl -fsSL https://asccli.sh/install | bash`. Windows users can use WinGet once the package is accepted; until then, they must download signed release binaries from GitHub. After installation, authentication requires an API key from Apple's integrations page. The README gives this example: `asc auth login --name "MyApp" --key-id "ABC123" --issuer-id "DEF456" --private-key /path/to/AuthKey.p8 --network`. For CI, the same command with `--bypass-keychain` stores credentials locally. You can validate with `asc auth status --validate` and `asc auth doctor`. A first command like `asc apps list --output json --pretty` confirms everything works. The CLI also supports an `ASC_DEFAULT_OUTPUT` environment variable to set a global output format, though explicit `--output` flags take precedence.

Output Modes and Stability Labels: What to Expect

The CLI's output handling is a deliberate design choice. In an interactive terminal, you get a table; in a pipe or CI, you get JSON. This TTY-aware default is convenient, but it can surprise users who run a command in a terminal and expect JSON. The README advises using explicit `--output` flags when scripting or sharing repro steps. Stability labels are another important aspect. Commands without a label are considered stable public contracts. Experimental commands are marked and may change faster; deprecated commands are kept for migration but are not the long-term home. This labeling is honest and useful for CI adoption, but it means you must check each command's label before depending on it. The `system-status` command is explicitly experimental, so its output format or behavior could evolve.

Telemetry: A Trade-Off You Should Know

The CLI sends pseudonymous command-level usage telemetry by default. The README states that local events include a random installation ID, the CLI version, OS and architecture, command path, duration, runtime context, and a bounded outcome class. It does not include raw arguments, credentials, private keys, Apple account IDs, or file paths. You can check or disable telemetry with `asc telemetry status`, `asc telemetry disable`, and `asc telemetry reset-id`. Environment variables `ASC_TELEMETRY_DISABLED=1` and `DO_NOT_TRACK=1` also disable it. This default-on telemetry is a real trade-off for privacy-conscious teams. The absence of sensitive data is reassuring, but the default still sends usage data to the maintainers. If you need zero data leaving your network, you must remember to disable it, which adds a configuration step.

Limitations and Wrong Tool Cases

The CLI is not a substitute for a full-featured GUI. It has no interactive prompts, so you cannot explore options or get guided workflows. For a developer who prefers clicking through App Store Connect, this tool is the wrong fit. Another limitation is the dependency on Apple's API key system, which requires generating a key and managing its private key file. If you cannot store keys securely, the tool becomes inconvenient. The README also notes that the WinGet package is not yet accepted, so Windows users face friction until that is resolved. The experimental `system-status` command may not be reliable for critical decisions. Finally, the default telemetry is a limitation for strict privacy policies, even though it is pseudonymous. These constraints mean the CLI is best for automation, not for casual use.

Alternative Approaches and How They Differ

A common alternative is using Apple's own `transporter` command-line tool for uploading builds, but that is limited to uploads and does not cover TestFlight management, submissions, or signing. Another alternative is writing custom scripts against the App Store Connect REST API directly, using a language like Python or Node.js. That approach gives you full control but requires you to implement authentication, pagination, and error handling yourself. The App Store Connect CLI abstracts those details and provides a consistent JSON output, which saves time. The key difference is abstraction level: `asc` is a ready-made wrapper, while direct API scripting is a lower-level, more flexible path. For teams that need custom logic beyond what the CLI offers, direct API access may be necessary, but for standard workflows, the CLI reduces boilerplate.

Maintenance, Upgrades, and License

The project is written in Go and released under the MIT license, which permits commercial use, modification, and redistribution. Released binaries are self-contained and do not require a Go installation, which simplifies deployment. The repository shows frequent releases, with version 4.10.0 pushed recently. The README mentions a contributor guide and a `go.mod` for source builds. For maintenance, you need to keep the binary updated. The Homebrew formula can be refreshed with `brew update && brew upgrade asc`. The install script from `asccli.sh` is another update path. The project also offers an `asc install-skills` command that installs 23 agent skills into a global directory, pinned to a reviewed commit for security. This suggests active development, but it also means you should track releases for bug fixes and API changes. The MIT license is permissive, but you are responsible for ensuring your use of the App Store Connect API complies with Apple's terms.

Editorial conclusion

Adopt the App Store Connect CLI if you need a scriptable, JSON-first interface to the App Store Connect API for CI/CD pipelines, especially for TestFlight builds, submissions, and signing. Skip it if you prefer a GUI or a fully interactive tool, or if you cannot accept default telemetry without explicit opt-out. Before relying on it in production, verify the stability labels of each command you plan to use, test authentication with `asc auth status --validate` and `asc auth doctor`, and review the telemetry policy and disable it if needed with `asc telemetry disable`.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
Community notes

Community notes