How to Stop Opening App Store Connect Web and Automate Everything from the Terminal
Anyone who has ever deployed an app to the App Store knows this pain. The App Store Connect web interface loves to freeze, demand re-authentication at the most inconvenient moment, and force you to click the mouse for something as simple as adding a build to TestFlight.
Recently I came across the asc utility (App Store Connect CLI). It's a Go-based console tool created specifically to remove the browser from iOS and macOS app publishing routines.
What asc is
The project is written in Go, distributed as a single binary, and works on macOS, Linux, and Windows. The main advantage is that the tool was designed from the start without interactive prompts. It doesn't need an Enter key confirmation unless you specifically request it. This makes it convenient for scripts and pipelines in CI/CD.
The output format adapts to the environment. If you run commands in the terminal, the utility draws tables. If the result goes to a pipe or file, it outputs clean JSON.
Main features in practice
The utility covers almost all the tasks you used to have to go to the Apple website for.
Uploading builds and working with TestFlight
Uploading an .ipa or .pkg file is done with a single command:
asc builds upload --app "123456789" --ipa "/path/to/MyApp.ipa"
After that, you can immediately attach the build to testers. For teams building for macOS, there's support for a chain with uploading the .pkg and adding the version to the internal testers group:
asc builds upload --app "123456789" --pkg "./build/MyMacApp.pkg" --version "1.2.3" --build-number "42" --wait --output json
asc builds add-groups --app "123456789" --build-number "42" --version "1.2.3" --platform MAC_OS --group "Internal Testers"
You can read crash logs and user feedback from TestFlight directly from the console.
Managing metadata and ASO
If an app is localized across multiple languages, updating descriptions through the web interface becomes tedious. The utility exports localizations to a local directory, allows you to edit them, and then applies the changes back:
asc metadata init --dir "./metadata" --version "1.2.3" --locale "en-US"
asc metadata apply --app "123456789" --version "1.2.3" --dir "./metadata" --dry-run
For ASO optimization, there's the asc metadata keywords audit command. It checks for duplicate keywords, repetitions across locales, conflicts with the app name, and byte overages.
Working with screenshots
Screenshots can be uploaded in batches from folders, specifying the required device type:
asc screenshots upload --version-localization "LOCALIZATION_ID" --path "./screenshots/en-US" --device-type "IPHONE_65" --replace
Authorization without pain in CI/CD
In a local environment, the utility can store keys in the system Keychain. But on CI servers (GitHub Actions, GitLab CI, Bitrise), Keychain is often unavailable. The developers provided the --bypass-keychain flag and configuration loading from a file or environment variables:
asc auth login \
--bypass-keychain \
--name "MyCIKey" \
--key-id "ABC123" \
--issuer-id "DEF456" \
--private-key /path/to/AuthKey.p8
You can verify that your keys are valid before starting a long build with a special validation command:
asc auth doctor
Is it worth adopting
If you release one app once a year, Apple's web panels may be enough. But for regular releases, working with multiple localizations, or building transparent CI/CD, the utility saves hours of work.
The project is actively developed, receives positive feedback from mobile developers, and easily integrates into existing shell scripts.
Related projects