App Store Connect CLI
A fast, lightweight, and scriptable CLI for the App Store Connect API. Automate iOS, macOS, tvOS, and visionOS release workflows from your terminal, IDE, or CI/CD pipeline.
Table of Contents
- asc skills
- Sponsors
- Quick Start
- Troubleshooting
- Privacy and telemetry
- Support
- Wall of Apps
- Common Workflows
- Commands and Reference
- Documentation
- Contributing
- License
asc skills
Agent Skills for automating asc workflows including builds, TestFlight, metadata sync, submissions, and signing:
https://github.com/rorkai/app-store-connect-cli-skills
Install them globally so they are available across projects:
asc install-skills
asc install-skills checks out reviewed commit
f52c4f04323bb2dfb21ca8be82e6494e9cd0b4d8 and copies its 25 skills directly
into the standard global agent-skills directory. It verifies the complete pack
and every installed file before succeeding, preserves unrelated skills and
unrelated lock entries, and pins the 25 ASC lock entries to the same reviewed
commit so external checks cannot update them from a mutable branch. It rolls
back the pack if any replacement fails. Only
git is required; the command does not execute Node.js, npx, an npm package,
or repository scripts.
git --version
asc install-skills
Quick Start
If you want to confirm the binary works before configuring authentication:
asc version
asc --help
1. Install
# Homebrew (recommended)
brew install asc
# Install script (macOS/Linux)
curl -fsSL https://asccli.sh/install | bash
# Windows (WinGet, once the package is accepted)
winget install asc
# Exact fallback when scripting
winget install --id Rorkai.ASC --exact
The WinGet package is tracked in
GitHub Discussion #1552.
Until it appears in winget search asc, Windows users can download the signed
release binaries directly from the
GitHub releases page.
For source builds and contributor setup, see CONTRIBUTING.md.
Released binaries are self-contained and do not require a Go installation;
source builds use the toolchain version declared by go.mod.
2. Authenticate
asc auth login \
--name "MyApp" \
--key-id "ABC123" \
--issuer-id "DEF456" \
--private-key /path/to/AuthKey.p8 \
--network
Individual API keys have no issuer ID. Omit --issuer-id and pass --key-type individual:
asc auth login \
--name "MyIndividualKey" \
--key-id "ABC123" \
--key-type individual \
--private-key /path/to/AuthKey.p8
Generate API keys at: https://appstoreconnect.apple.com/access/integrations/api
If you are running in CI, a headless shell, or a machine where keychain access is not available, use config-backed auth instead:
asc auth login \
--bypass-keychain \
--name "MyCIKey" \
--key-id "ABC123" \
--issuer-id "DEF456" \
--private-key /path/to/AuthKey.p8
3. Validate auth
asc auth status --validate
asc auth doctor
4. First command
asc apps list --output table
asc apps list --output json --pretty
Output defaults (TTY-aware)
asc chooses a default --output based on where stdout is connected:
- Interactive terminal (TTY):
table - Non-interactive output (pipes/files/CI):
json
You can still set a global preference:
export ASC_DEFAULT_OUTPUT=markdown
And explicit flags always win:
asc apps list --output json
Compatibility
Commands are supported as documented. Deprecation warnings identify the available migration path and the command's long-term replacement.
Troubleshooting
Homebrew
- Refresh Homebrew first:
brew update && brew upgrade asc - Check which binary you are running:
which asc - Confirm the installed version:
asc version - If Homebrew is behind the latest GitHub release, use the install script from
https://asccli.sh/install
WinGet
- Refresh WinGet sources first:
winget source update - Prefer the short install once available:
winget install asc - If the short name ever becomes ambiguous, use the package identifier:
winget install --id Rorkai.ASC --exact - Confirm the installed command resolves:
Get-Command ascandasc version
Authentication
- Validate the active profile:
asc auth status --validate - Run the auth health check:
asc auth doctor - If keychain access is blocked, retry with
ASC_BYPASS_KEYCHAIN=1or re-runasc auth login --bypass-keychain - Use
asc auth login --local --bypass-keychain ...when you want repo-local credentials in./.asc/config.json
Apple service health
- Check Apple's developer services without credentials:
asc system-status - Narrow unexpected API or upload failures:
asc system-status --service "App Store Connect" - Poll only when requested:
asc system-status --watch --poll-interval 30s - Use
--issues-onlyfor a concise incident view; summary counts still cover all matched services
Output
ascdefaults totablein an interactive terminal andjsonin pipes, files, and CI- Use an explicit format when scripting or sharing repro steps:
--output json,--output table, or--output markdown - Use
--prettywith JSON when you want readable output in terminals or bug reports - Set a personal default with
ASC_DEFAULT_OUTPUT, but remember--outputalways wins
Privacy and telemetry
asc sends pseudonymous command-level usage telemetry by default to help
maintainers understand which commands are used and where reliability work is
needed. Local events include a random installation ID, which lets events from
one installation be grouped over time; it is not derived from an Apple account
or machine identifier.
Telemetry includes the CLI version, operating system and architecture, registered command path, duration, runtime context, invocation source, a bounded outcome class, and the HTTP status when an API request fails. It may include a sanitized public flag name. It does not include raw arguments, stderr, error messages, flag values, response bodies, credentials, private keys, Apple account, team, or issuer IDs, app or bundle IDs, usernames, hostnames, repository names, or file paths.
Review or change telemetry at any time:
asc telemetry status
asc telemetry disable
asc telemetry reset-id
ASC_TELEMETRY_DISABLED=1 and DO_NOT_TRACK=1 also disable telemetry. See the
telemetry reference for the exact event payload,
runtime handling, collector endpoint, and all controls.
Support
- Use GitHub Discussions for install help, authentication setup, workflow advice, and "how do I...?" questions
- Use GitHub Issues for reproducible bugs and concrete feature requests
- See SUPPORT.md for the support policy and bug-report checklist
- Before filing an auth or API bug, retry with
ASC_BYPASS_KEYCHAIN=1; if it is safe to do so, include redacted output fromASC_DEBUG=api asc ...orasc --api-debug ...
Wall of Apps
Want to add yours?
asc apps wall submit --app "1234567890" --confirm
The command uses your authenticated gh session to fork the repo and open a pull request that updates docs/wall-of-apps.json.
It resolves the public App Store name, URL, and icon from the app ID automatically. For manual entries that are not on the public App Store yet, use --link with --name.
Use asc apps wall submit --dry-run to preview the fork, branch, and PR plan before creating anything.
Common Workflows
TestFlight feedback and crashes
a