If you’ve ever shipped an iOS app, you know the ritual. Open Xcode, archive, wait, open App Store Connect in the browser, click through a dozen screens to set up localizations, upload screenshots one display size at a time, attach the build, fill in What’s New, and finally hit Submit. For one app, it’s tedious. For multiple apps across multiple locales, it’s a time sink.
I wanted a single tool that could handle the entire release pipeline from the terminal: Create a version, build, upload, set metadata, attach the build, submit for review, without leaving the command line. That’s why I built asc-client.
What It Is
asc-client is a command-line tool for the App Store Connect API, built in Swift. It’s a single native binary. Installation is straightforward:
brew tap keremerkan/tap
brew install asc-client
asc-client configure
The configure command walks you through setting up your App Store Connect API key. It copies your .p8 private key to a secure location with owner-only permissions.
The Full Release Pipeline in One Workflow
The most useful feature is workflow files. Instead of running commands one by one, you write a plain text file with one command per line:
# release.workflow — Ship MyApp v2.1.0
apps create-version com.example.MyApp 2.1.0
builds archive --scheme MyApp
builds upload --latest --bundle-id com.example.MyApp
builds await-processing com.example.MyApp
apps localizations import com.example.MyApp --file localizations.json
apps build attach-latest com.example.MyApp
apps review submit com.example.MyApp
Then run it:
asc-client run-workflow release.workflow
The workflow displays all steps, asks for confirmation, and runs them sequentially. If any step fails, it stops and tells you where. Add --yes for CI/CD environments where there’s no one to confirm.
What It Covers
Beyond workflows, asc-client handles the parts of App Store Connect that are tedious in the browser:
- Screenshots & previews — download, edit locally, re-upload in bulk with
media download/media upload --replace - Localizations — export to JSON, edit, import back with
localizations export/localizations import - App info — update name, subtitle, categories, privacy URLs with
app-info update/app-info import - Pre-submission checks —
review preflightverifies builds, localizations, app info, and screenshots across all locales before you hit submit - In-app purchases & subscriptions — create, update, delete, manage localizations, and submit for review. When submitting an app version, asc-client detects IAPs/subscriptions with pending changes and offers to include them
- Provisioning — manage devices, certificates (with auto-CSR), bundle IDs, capabilities, and profiles entirely from the terminal
- Profile reissue — bulk-regenerate profiles after cert renewal with
profiles reissue --all - Everything else — phased releases, territory availability, age ratings, encryption declarations, EULAs, rate limits
All commands support aliases (alias add myapp → use myapp instead of com.example.MyApp), colored terminal output with human-readable locale names, and interactive mode for guided prompts when arguments are omitted.
For a detailed walkthrough of every feature with examples, see the full asc-client guide.
Why Swift?
I work almost exclusively in Swift and Xcode for iOS apps, so building the tooling in the same language was a natural choice. It also means asc-client is a native binary. Startup is instant, there’s no runtime to manage, and it compiles to a single ~64 MB executable for Apple Silicon.
Under the hood, it uses Aaron Sky’s excellent asc-swift library, which provides type-safe access to the entire App Store Connect API. Apple’s xcrun altool handles the actual binary uploads, the same tool Xcode uses, while asc-client orchestrates everything around it.
Built with Claude Code
I developed asc-client with Claude Code, Anthropic’s CLI coding agent. It turned out to be a great fit for this kind of project. Wrapping a well-documented API, handling many similar-but-different subcommands, and dealing with the edge cases of Apple’s API were handled efficiently while I focused on workflow design and user experience.
Get Started
asc-client is open source under the MIT license.
Install via Homebrew:
brew tap keremerkan/tap
brew install asc-client
Or download the binary from GitHub Releases.
You’ll need an App Store Connect API key. Create one in Users and Access with the App Manager role. Then run asc-client configure and you’re set.
Full documentation is in the README on GitHub.
Leave a Reply