asc-client: A Swift CLI for the App Store Connect API

·

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 checksreview preflight verifies 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.



Comments

Leave a Reply

Your email address will not be published. Required fields are marked *