Multiple Versions Of Xcode & Simulators using gem Xcode::Install
Install and update your Xcodes automatically.
You can greatly simplify this process by using the
Xcode::Install Ruby Gem.
You should already have a working installation of the
Xcode Command Line Tools and a version of Ruby that supports building native extensions.
I'd suggest using Homebrew for installing
rbenv and use rbenv to install Ruby.
A guide for this can be found here and many other places.
But it should work with the stock Ruby supplied by newer macOS versions as well, if you install the gem either using sudo
(not recommended) or using --user-install when installing the gem.
Installation
Basically:
# Install the Ruby Gem (I'm using rbenv, so no sudo or --user-install)
$ gem install xcode-install
# To list available versions:
# PS!You will get prompted for your Apple Developer / iCloud credentials)
# It's using Apple's own API's so 2FA are supported if enabled
$ xcversion list
6.0.1
6.1
6.1.1
6.2 (installed)
6.3
# To update the list of available versions, run:
$ xcversion update
# To install a certain version, simply:
$ xcversion install 8
##################################################################### 100.0%
Please authenticate for Xcode installation...
Xcode 8
Build version 6D570
This should download and install and activate that version of Xcode.
You can start it from /Applications as usual.
The new version will also be automatically selected for CLI commands
To select a different version as active, you'll run:
xcversion select <version_number>
from the list of installed versions, marked as (installed)
like:
# To see the active version in use:
$ xcversion selected
# To select and activate an installed version:
$ xcversion select 8
# To select, activate and change the symlink in /Apllications
$ xcversion select 8 --symlink
Other fun stuff, Simulators etc
Xcode::Install can also install Xcode's Command Line Tools by calling
xcversion install-cli-tools
and can also manage your local simulators using the simulators
command.
But instead of repeating more information that is probably going to change over time, head over to the project's GitHub page
for more about this gem.