The best command-line tool to install and switch between multiple versions of Xcode.
If you're looking for an app version of xcodes
, try Xcodes.app.
Xcodes is now part of the XcodesOrg
- read more here
brew install xcodesorg/made/xcodes
These are Developer ID-signed and notarized release builds and don't require Xcode to already be installed in order to use.
Other methods:
Install a specific version of Xcode using a command like one of these:
xcodes install 10.2.1
xcodes install 11 Beta 7
xcodes install 11.2 GM seed
xcodes install 9.0 --path ~/Archive/Xcode_9.xip
xcodes install --latest-prerelease
xcodes install --latest --directory "/Volumes/Bag Of Holding/"
xcodes install --latest --experimental-unxip
You'll then be prompted to enter your Apple ID username and password. You can also provide these with the XCODES_USERNAME
and XCODES_PASSWORD
environment variables.
After successfully authenticating, xcodes will save your Apple ID password into the keychain and will remember your Apple ID for future use. If you need to use a different Apple ID than the one that's remembered, set the XCODES_USERNAME
environment variable.
xcodes will download and install the version you asked for so that it's ready to use.
(1/6) Downloading Xcode 11.2.0: 100%
(2/6) Unarchiving Xcode (This can take a while)
(3/6) Moving Xcode to /Applications/Xcode-11.2.0.app
(4/6) Moving Xcode archive Xcode-11.2.0.xip to the Trash
(5/6) Checking security assessment and code signing
(6/6) Finishing installation
xcodes requires superuser privileges in order to finish installation.
macOS User Password:
Xcode 11.2.0 has been installed to /Applications/Xcode-11.2.0.app
If you have aria2 installed (it's available in Homebrew, brew install aria2
), then xcodes will default to use it for downloads. It uses up to 16 connections to download Xcode 3-5x faster than URLSession.
Xcode will be installed to /Applications by default, but you can provide the path to a different directory with the --directory
option or the XCODES_DIRECTORY
environment variable. All of the xcodes commands support this option, like select
and uninstall
, so you can manage Xcode versions that aren't in /Applications. xcodes supports having all of your Xcode versions installed in one directory, wherever that may be.
Run this command line to display the available runtimes
xcodes runtimes --include-betas
Install the wanted Runtime (ex. iOS 17.0-beta1)
xcodes runtimes install "iOS 17.0-beta1"
.xcode-version
We recommend the creation of a .xcode-version
file to explicitly declare and store the Xcode version to be used by your CI environment as well as your team.
13.4.1
Read the proposal of .xcode-version
.
download <version>
: Download a specific version of Xcodeinstall <version>
: Download and install a specific version of Xcodeinstalled
: List the versions of Xcode that are installedlist
: List all versions of Xcode that are available to installselect
: Change the selected Xcodeuninstall
: Uninstall a specific version of Xcodeupdate
: Update the list of available versions of Xcodeversion
: Print the version number of xcodes itselfsignout
: Clears the stored username and passwordThanks to the amazing work by saagarjhi - Xcodes now includes the ability to unxip up to 70% faster on some systems.
xcodes install --latest --experimental-unxip
xcodes can generate completion scripts which allow you to press the tab key on your keyboard to autocomplete commands and arguments when typing an xcodes command. The steps to install a completion script depend on the shell that you use. More information about installation instructions for different shells and the underlying implementation is available in the swift-argument-parser repo.
You'll need Xcode 13 in order to build and run xcodes.
There's a Makefile to help build xcodes for distribution. We already do this for you in order to provide Developer ID-signed and notarized release builds via Homebrew (see Installation).
Notable design decisions are recorded in DECISIONS.md. The Apple authentication flow is described in Apple.paw, which will allow you to play with the API endpoints that are involved using the Paw app.
xcode-install
and fastlane/spaceship both deserve credit for figuring out the hard parts of what makes this possible.