# App Store Connect CLI (`asc`) > Unofficial, fast, lightweight, agent-assisted CLI for the App Store Connect API. Automate iOS, macOS, tvOS, and visionOS release workflows from your terminal or CI/CD pipeline. `asc` is a single Go binary that wraps the full App Store Connect API behind explicit, scriptable commands. JSON-first output, non-interactive by design, TTY-aware formatting. ## Links - [Website](https://asccli.sh): Homepage with features, testimonials, and Wall of Apps - [Blog](https://asccli.sh/blog): Guides and walkthroughs on automating App Store Connect - [RSS Feed](https://asccli.sh/feed.xml): Subscribe to new blog posts - [GitHub Repository](https://github.com/rorkai/App-Store-Connect-CLI): Source code, issues, and contributing guide - [Agent Skills](https://github.com/rorkai/app-store-connect-cli-skills): Reusable asc workflow skills for AI agents - [Command Reference](https://github.com/rorkai/App-Store-Connect-CLI/blob/main/docs/COMMANDS.md): Full list of commands with flags and usage - [API Notes](https://github.com/rorkai/App-Store-Connect-CLI/blob/main/docs/API_NOTES.md): App Store Connect API quirks and workarounds - [Contributing Guide](https://github.com/rorkai/App-Store-Connect-CLI/blob/main/CONTRIBUTING.md): Development setup, PR workflow, and coding standards ## Install - Homebrew (recommended): `brew install asc` - Install script (macOS/Linux): `curl -fsSL https://asccli.sh/install | bash` - Source: clone the repository and run `make build` ## Command discovery The CLI is self-documenting. Always run `--help` to confirm the current interface: - `asc --help` - `asc --help` - `asc --help` ## Quick start - Generate an API key at https://appstoreconnect.apple.com/access/integrations/api - Authenticate: `asc auth login --name "MyApp" --key-id "ABC123" --issuer-id "DEF456" --private-key /path/to/AuthKey.p8` - First command: `asc apps list --output table` ## Common workflows - TestFlight feedback: `asc feedback --app "APP_ID" --paginate` - Crash reports: `asc crashes --app "APP_ID" --sort -createdDate --limit 10` - Upload a build: `asc builds upload --app "APP_ID" --ipa "/path/to/MyApp.ipa"` - List TestFlight builds: `asc testflight builds list --app "APP_ID" --output table` - Dry-run release: `asc release run --app "APP_ID" --version "1.2.3" --build "BUILD_ID" --metadata-dir "./metadata" --dry-run` - Submit release: `asc release run --app "APP_ID" --version "1.2.3" --build "BUILD_ID" --metadata-dir "./metadata" --confirm` - Check status: `asc status --app "APP_ID"` - List certificates: `asc certificates list` - List profiles: `asc profiles list` - Run a workflow: `asc workflow run release` ## CI/CD integrations - [GitHub Actions](https://github.com/rudrankriyam/setup-asc): `uses: rudrankriyam/setup-asc@v1` - [GitLab Components](https://gitlab.com/rudrankriyam/asc-ci-components): `gitlab.com/rudrankriyam/asc-ci-components/run@main` - [Bitrise Step](https://github.com/rudrankriyam/steps-setup-asc): `git::https://github.com/rudrankriyam/steps-setup-asc.git@main` - [CircleCI Orb](https://github.com/rudrankriyam/asc-orb): `rudrankriyam/asc-orb` ## Output and pagination - JSON piping: `asc apps list | jq '.data[] | {id: .id, name: .attributes.name}'` - Fetch all pages: `asc apps list --paginate` - Table output: `asc builds list --app "APP_ID" --output table` ## Authentication and environment variables `asc` uses App Store Connect API key auth with keychain storage (when available), plus config/env fallback. Core auth variables: `ASC_KEY_ID`, `ASC_ISSUER_ID`, `ASC_PRIVATE_KEY_PATH`, `ASC_PRIVATE_KEY`, `ASC_PRIVATE_KEY_B64`, `ASC_BYPASS_KEYCHAIN`, `ASC_STRICT_AUTH`. Operational variables: `ASC_APP_ID`, `ASC_VENDOR_NUMBER`, `ASC_TIMEOUT`, `ASC_UPLOAD_TIMEOUT`, `ASC_DEBUG` (set to `api` for HTTP logs), `ASC_DEFAULT_OUTPUT` (`json`, `table`, `markdown`). Output defaults are TTY-aware: `table` in interactive terminals, `json` for pipes. Explicit `--output` always overrides. ## Notes for agents - Use explicit long flags (`--app`, `--output`) over short aliases. - Prefer JSON output in automation paths. - Never use interactive prompts; pass `--confirm` for destructive operations. - Always run `--help` before invoking a command to confirm current flags. ## Optional - [OpenAPI Spec](https://github.com/rorkai/App-Store-Connect-CLI/blob/main/docs/openapi/latest.json): Full App Store Connect API schema (large file) - [Testing Guide](https://github.com/rorkai/App-Store-Connect-CLI/blob/main/docs/TESTING.md): Test patterns and conventions - [Go Standards](https://github.com/rorkai/App-Store-Connect-CLI/blob/main/docs/GO_STANDARDS.md): Go coding standards used in the project ## Blog posts - [Validating App Store Subscriptions Before You Hit Submit](https://asccli.sh/blog/validating-subscriptions): Pre-flight checks for subscription metadata, localizations, pricing, and review assets - [Replacing Xcode Cloud with ASC CLI for Faster, Local Builds](https://asccli.sh/blog/replacing-xcode-cloud): Local release pipeline from build number bump to TestFlight distribution - [From ASO Research to Review Submission with ASC CLI and Astro MCP](https://asccli.sh/blog/aso-research-review-submission): Keyword audit, competitor analysis, localization, and submission workflow - [Monitoring the Xcode Cloud Situation](https://asccli.sh/blog/monitoring-xcode-cloud): Full walkthrough of Xcode Cloud commands — builds, usage, alerts, and env vars - [Faster iOS Subscriptions with ASC CLI and RevenueCat MCP](https://asccli.sh/blog/faster-ios-subscriptions): End-to-end subscription setup across App Store Connect and RevenueCat