mrkeyoor.com_
Thu 24 Sept 23:58 UTC
Automationevaluationupdated 26 Aug 2026

App-Store-Connect-CLI review

App Store Connect CLI, called `asc`, puts Apple's app-management APIs and common Xcode release work behind scriptable commands. It covers builds, TestFlight, submissions, metadata, screenshots, signing, subscriptions, analytics, Xcode Cloud, and Apple Ads without making developers click through each task in the web console.

+57stars / 7d
Verdict

Our asc run passed 101 of 104 tests after a 56-second install, but 3 failures kept the source checkout from a clean bill of health. It is still a strong choice for Apple teams that want JSON-first automation, explicit dry runs, and much wider App Store Connect coverage than a homegrown script. Pin the binary, disable telemetry if policy requires it, and keep release submission behind a human confirmation step.

We ran it

Lab card: what happened when we ran App-Store-Connect-CLIScreenshot of App-Store-Connect-CLI (asccli.sh)
Install✓ · 56s141 packages
Build✓ · 78s
Tests✗ · 374s101 passed · 3 failed of 104 (go test)
Repo2455 files~760,141 lines of source · 37.5 MB · 9 CI workflows

Answers from our run

Does App-Store-Connect-CLI build from source?

Dependencies installed in 56 seconds (141 packages), and the build succeeded in 78 seconds. We cloned commit 95e2c65 into a clean Debian container with 3 CPUs and no project-specific setup.

Do App-Store-Connect-CLI's tests pass?

Not all of them: 101 of 104 passed and 3 failed when we ran the project's own test command (go test). Some failures need services or credentials a bare container does not have.

Who should not use App-Store-Connect-CLI?

Teams that need an official Apple client with Apple support: the README labels asc independent and unofficial.

What are the alternatives to App-Store-Connect-CLI?

fastlane, AppStoreConnect Swift SDK, Bitrise CLI. Our asc run passed 101 of 104 tests after a 56-second install, but 3 failures kept the source checkout from a clean bill of health.

Setup4/5Self-contained binaries; Apple credentials take the real work
Docs5/5Detailed commands, CI examples, auth checks, and dry runs
Community5/56,239 stars with same-day pushes and releases
Maturity4/5Wide command surface; 3 of 104 tests failed in our run

Who it’s for

Apple-platform teams that want App Store Connect work expressed as reviewable shell commands and JSON.
CI maintainers handling TestFlight groups, metadata, submissions, certificates, or reports across several apps.
Developers who want dry runs and explicit confirmation on release-changing operations.
Claude Code and other agent users who want a pinned set of App Store workflow skills.

Who it’s NOT for

Teams that need an official Apple client with Apple support: the README labels asc independent and unofficial.
Windows users expecting WinGet to work today: the README says acceptance is still tracked in discussion 1552 and directs users to release binaries meanwhile.
Operators who want zero telemetry without configuration: command-level usage reporting is on by default until disabled with the CLI or environment.
Anyone expecting local Xcode build, archive, and signing work on Linux: the workflow guide says manual signing resolution is Darwin-only, and Xcode itself requires macOS.
Release processes that cannot tolerate occasional platform-sensitive tests: our run had 3 failures, including an Xcode process test that waited for a descendant holding output pipes.

Setup reality

Our sandbox install succeeded in 56 seconds with 141 packages, and the build passed in 78 seconds. Tests failed after 374 seconds: 101 passed and 3 failed out of 104. The log tail names failures in telemetry and Xcode packages, including a process test that waited 2.93 seconds for a descendant.

Released binaries need no Go toolchain. Real App Store work needs an issuer ID, key ID, and .p8 private key from Apple; CI can bypass the system keychain and use protected config or environment values. Apple Ads and StoreKit Retention Messaging use separate credentials.

API and upload commands can run beyond macOS, but Xcode compilation, archive export, simulator work, and local signing need an Apple development host. Destructive or publishing commands use dry-run and confirmation flags in many workflows; scripts still need explicit output formats and careful credential handling.

One CLI covers most App Store Connect chores

asc gives Apple release teams a single command tree for apps, builds, TestFlight, submissions, metadata, screenshots, signing assets, subscriptions, analytics, Xcode Cloud, and Apple Ads. Interactive output defaults to tables, while pipes and CI receive JSON. That small behavior matters in practice because the same command remains readable at a terminal and predictable in automation. Explicit output flags override the default when a script needs a fixed contract.

The scope goes well beyond uploading an IPA. Teams can stage a release, validate readiness, attach builds to groups, inspect review blockers, synchronize localized metadata, plan screenshot work, and poll status. Many changing operations expose --dry-run or --confirm, and lifecycle labels identify experimental or deprecated commands. This gives reviewers a chance to distinguish a stable automation contract from a feature whose flags may still change.

Authentication needs an Apple API key and careful storage

A normal login requires an issuer ID, key ID, and App Store Connect .p8 private key. On a developer machine, asc can use the system keychain. Headless workers can bypass it and read restricted config or environment values. The documentation includes auth status --validate and auth doctor, which are better preflight checks than discovering a bad credential halfway through a release.

Credential boundaries multiply with the command surface. Apple Ads uses its own OAuth material and ad-account context. StoreKit Retention Messaging uses a dedicated In-App Purchase API key and bundle ID. The contribution guide also describes optional integration tests against the live App Store Connect API. CI owners need separate secret sets, narrow Apple roles, protected logs, and a rule that no .p8 file enters the repository.

What happened when we ran it

Our sandbox installed commit 95e2c65 in 56 seconds and fetched 141 Go packages. The build completed in 78 seconds. The repository contained 2,455 files and roughly 760,141 lines of source in a 37.5 MB checkout. It had 9 CI workflow files, no Dockerfile, and no top-level tests directory because Go tests are stored beside the packages they cover.

The test command failed after 374 seconds with 101 passed and 3 failed out of 104. The tail showed the telemetry package failing, though it did not include the individual assertion. It also named an Xcode test, TestRunXcodebuildDoesNotWaitForDescendantHoldingOutputPipes, which reported that the function waited 2.931116182 seconds after the direct process exited. We cannot assign a cause beyond what that output states.

This was a source-tree check in an unprivileged Debian container with 3 CPUs and 8 GB of RAM. It did not authenticate to Apple, upload a build, invoke Xcode, modify metadata, or submit an app. The result says the code compiled and most tests passed on Linux, while 3 did not. A release pipeline should add a macOS smoke test around the exact archive, export, upload, and status commands it uses.

Xcode work stays on macOS while API work travels

Released binaries are available for macOS, Linux, and Windows, and they do not require Go. App Store Connect API calls and uploads can therefore run on a headless non-Mac worker when the artifact already exists. The Windows path is less polished: the README says its WinGet package is still awaiting acceptance and points users to signed release downloads until winget search asc finds it.

Building the artifact is different. The documented Xcode path can inject version values, compile a scheme, archive, create export options, export an IPA or PKG, upload it, and monitor TestFlight. Manual signing resolution is Darwin-only because it inspects local identities and profiles. Teams can split the pipeline, using a Mac for build and signing and another trusted worker for App Store API calls, but that split needs secure artifact transfer.

Agent skills are pinned, but agents still need approval

The install-skills command checks out a reviewed commit of a separate skills repository and installs 23 entries. It verifies the pack, preserves unrelated skills, pins lock entries to the same commit, and rolls back failed replacement. The companion repository can also be installed as a Claude Code plugin. That is much safer than asking an agent to scrape current flags from a moving README each time.

Skills do not make release actions harmless. An agent can still select the wrong app ID, locale, TestFlight group, build, or submission state. The CLI's dry runs, JSON output, validation commands, and confirmation flags provide useful control points. A sensible agent policy allows reads and plans freely, then requires a person to approve metadata application, signing changes, tester distribution, upload, cancellation, or App Store submission.

Same-day releases show unusually active maintenance

GitHub recorded a push on August 26, 2026, and release 4.9.3 was published that day. The repository had 6,239 stars and 15 combined issues and pull requests when fetched. That release fixed behavior in subscriptions, reports, Game Center, TestFlight metrics, and encryption checks, which shows maintainers are working across the broad command set rather than only adding new verbs.

The open issue list was small, but issue 2190 identifies a useful limit in metadata validation: a Support URL can be syntactically valid and return successfully while landing on the wrong page. No CLI can judge every store asset or policy decision. Use asc to make the process repeatable, then keep human review for public copy, links, screenshots, pricing, and the final submission. The 101 passing tests make it credible; the 3 failures say to verify the slice your release depends on.

Alternatives

ProjectWhat it isPick it when
fastlane gh↗A mature Ruby toolkit for building and shipping both iOS and Android apps.pick this instead when you already have Fastfiles or need one automation system across Apple and Android releases.
AppStoreConnect Swift SDKA Swift client library generated around the App Store Connect API.pick this instead when App Store operations belong inside a Swift program rather than shell commands.
Bitrise CLIA local runner for Bitrise automation workflows on macOS or Linux.pick this instead when you want a general mobile CI workflow runner and already use Bitrise steps.

What people are saying

  1. [github-trending] rorkai/App-Store-Connect-CLI

Sources

  1. App Store Connect CLI README
  2. App Store Connect CLI workflow guide
  3. App Store Connect CLI contribution guide
  4. Release 4.9.3
  5. Issue 2190: Support URL validation
  6. ASC CLI skills

More automation reviews

alchemy · laya · prod-FARM-IOS-Core · ha_xiaomi_home · FreePEP · fragment-api-dev · the whole board →