asc is a fast, lightweight, and scriptable command-line interface (CLI) for interacting with the App Store Connect API. Designed to streamline workflows for iOS, macOS, tvOS, and visionOS releases, asc empowers developers and teams to automate tasks such as managing builds, distributing apps via TestFlight, and submitting updates directly from their terminal or CI/CD pipelines.
Key Features:
API Authentication: Supports integration with App Store Connect API keys for secure access to app data.
Resource Management: Enables interaction with builds, testflight groups, feedback, crashes, and metadata through intuitive commands.
CI/CD Integration: Designed to be used in automated workflows, reducing manual intervention and improving efficiency.
Output Customization: Supports table, JSON, and markdown output formats, adapting to both interactive terminals and non-interactive environments.
Stability Labels: Commands are labeled with lifecycle stages (stable, experimental, deprecated) to ensure users understand support expectations.
Cross-Platform Support: Works seamlessly on macOS, Linux, and Windows via Homebrew, install scripts, or winget.
Community-Driven Development: Built with contributions from developers worldwide, ensuring a robust and evolving toolset.
Audience & Benefit:
Ideal for developers, DevOps engineers, and release managers who need to automate App Store Connect workflows. By integrating asc into their pipelines, users can reduce manual tasks, accelerate app distribution, and maintain consistent releases across multiple platforms.
README
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.
# 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.
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 asc and asc 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=1 or re-run asc auth login --bypass-keychain
Use asc auth login --local --bypass-keychain ... when you want repo-local credentials in ./.asc/config.json
Output
asc defaults to table in an interactive terminal and json in pipes, files, and CI
Use an explicit format when scripting or sharing repro steps: --output json, --output table, or --output markdown
Use --pretty with JSON when you want readable output in terminals or bug reports
Set a personal default with ASC_DEFAULT_OUTPUT, but remember --output always 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 and exit outcome, runtime context, invocation
source, low-cardinality invocation shape and failure classifications, and random
event and session IDs. It does not include raw arguments, stderr, error messages,
or flag values, credentials, private keys, Apple account, team, or issuer IDs,
app or bundle IDs, API responses, 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 from ASC_DEBUG=api asc ... or asc --api-debug ...
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.
--app is the App Store Connect app ID. If you use local Xcode build flags such
as --archive-path, also pass exactly one of --workspace or --project plus
--scheme; otherwise use a pre-exported .ipa or .pkg upload. Add
--submit --confirm to asc builds add-groups when distributing to an external
TestFlight group that needs beta app review submission.
Release (high-level App Store publish flow)
# Optional: preview the staging plan before submission
asc release stage --app "123456789" --version "1.2.3" --build "BUILD_ID" --copy-metadata-from "1.2.2" --dry-run
# Canonical upload + attach + submit command
asc publish appstore --app "123456789" --ipa "/path/to/MyApp.ipa" --version "1.2.3" --submit --confirm
# Monitor status after submission
asc status --app "123456789" --watch
Lower-level submission lifecycle commands (for debugging or partial workflows):
Use asc metadata keywords audit before sync or apply when you want an ASO-focused
review of live keyword metadata across locales. It reports duplicate phrases, repeated
terms across locales, overlap with localized app name or subtitle, byte-budget usage,
and optional blocked terms from repeated --blocked-term flags or a text file.
Screenshots and media
asc screenshots plan --app "123456789" --version "1.2.3" --review-output-dir "./screenshots/review"
asc screenshots apply --app "123456789" --version "1.2.3" --review-output-dir "./screenshots/review" --confirm
asc screenshots list --version-localization "VERSION_LOCALIZATION_ID"
asc video-previews list --app "123456789"
VERSION_LOCALIZATION_ID is the App Store version localization resource ID
from data[].id, not the locale code from attributes.locale.
Signing and bundle IDs
asc certificates list
asc profiles list
asc bundle-ids list
Workflow automation
asc workflow validate
asc workflow run --dry-run testflight_beta VERSION:1.2.3
Verified local Xcode -> TestFlight workflow
See docs/WORKFLOWS.md for a copyable .asc/deployment.json,
.asc/workflow.json, and ExportOptions.plist that use asc builds next-build-number,
asc xcode inject, asc xcode archive, asc xcode export --timeout 10m, and
asc publish testflight --group ... --wait. Add --submit --confirm when
distributing to an external TestFlight group that needs beta app review submission.
# Trigger from a pull request
asc xcode-cloud run --workflow-id "WORKFLOW_ID" --pull-request-id "PR_ID"
# Rerun from an existing build run with a clean build
asc xcode-cloud run --source-run-id "BUILD_RUN_ID" --clean
# Fetch a single build run by ID
asc xcode-cloud build-runs get --id "BUILD_RUN_ID"
Apple Ads campaign management
Apple Ads uses separate OAuth credentials from App Store Connect:
See guides/apple-ads-playbooks.mdx for
operator playbooks covering credential safety, org inspection, read-only smoke
tests, reporting, raw API usage, and guarded mutations.
StoreKit Retention Messaging
Retention Messaging uses a dedicated In-App Purchase API key, separate from
App Store Connect API credentials:
asc storekit auth login --name Production --key-id "KEY_ID" --issuer-id "ISSUER_ID" --private-key ./SubscriptionKey.p8 --bundle-id com.example.app
asc storekit auth doctor --environment sandbox --network
asc storekit retention-messaging messages list --environment sandbox --output json
asc storekit retention-messaging endpoint view --environment production
This project is an independent, unofficial tool and is not affiliated with, endorsed by, or sponsored by Apple Inc. App Store Connect, TestFlight, Xcode Cloud, and Apple are trademarks of Apple Inc., registered in the U.S. and other countries.