Daniel Bauke
Open Source / xcodectl

xcodectl

See it on GitHub
Animated demo: xcodectl lists Xcode versions, installs 27.1 and selects it.

Install, upgrade and switch Xcode versions and their simulator runtimes from the terminal, on your Mac and on self-hosted CI Macs.

Why it exists

xcodes is the established tool for this job. It also carries its own implementation of Apple’s login, which has to be fixed each time Apple changes it, and hardware security keys are not supported.

xcodectl has no Apple login code of its own to break. You sign in on Apple’s own web page, in a small window, with a two-factor code or a YubiKey.

What it does

Sign-in that keeps working
On Apple's own page, with a two-factor code or a FIDO2 key.
Fast downloads
16 parallel connections, resumable, expanded in process with unxip.
Upgrades in one command
Each installed Xcode moves to the newest release of its major.
Simulator runtimes
List, install, remove and prune, most without signing in.
Release notes in the terminal
In color, compared between versions, or summarized.
Built for CI and agents
One pipe moves the session. JSON output for scripts.

The session is the secret

The Keychain keeps the session, never the password. That one choice also solves CI: a runner gets a signed-in session through a single pipe, with no Apple ID in an environment variable.

# on your Mac, into a self-hosted runner
xcodectl auth export | ssh runner xcodectl auth import

Compared to xcodes

xcodectlxcodes
Sign-inApple’s own page in a windowIts own implementation of the login
Hardware keysYubiKey and other FIDO2 keysNot supported
Keychain holdsThe sessionYour Apple ID password
Upgrade in placeYes, runtimes includedNo
Intel MacsNoYes
GUI appNoXcodes.app