How to get an old version of macOS, OS X and Xcode

There are plenty of good reasons for wanting to install an old version of macOS or even OS X. It might be for an old Mac, or a new Virtual Machine, for example. Unfortunately installers aren’t always easy to come by, so in this article I explain the options offered by Apple for obtaining an official and properly signed installer for those versions, as well as how to download old versions of Xcode.

App Store

Apple’s support page lists all those installers currently available through the App Store and official downloads going back as far as OS X Yosemite. Simply click on the appropriate link, and that installer page will open in the App Store, where clicking on the Get button should start the download through the Software Update pane.

oldmacos1

That will then invite you to confirm that you do want to download the old version.

oldmacos2

oldmacos3

Once that download completes, the installer app will open and probably inform you that it’s too old to install on that Mac. Look in the main Applications folder for the installer app, whose name should start with Install, and make a copy of that.

softwareupdate

Sometimes that may not work, with macOS complaining that it isn’t capable of installing such an old version of macOS/OS X. Your fallback then, if you’re running Big Sur or Monterey, is to use the softwareupdate command in Terminal. First list the installers available using the command
softwareupdate --list-full-installers
(note that the option starts with two hyphens, not an m-dash)

This should return a list such as
Software Update found the following full installers:
* Title: macOS Monterey, Version: 12.1, Size: 12157035487K, Build: 21C52
* Title: macOS Monterey, Version: 12.0.1, Size: 12128428704K, Build: 21A559
* Title: macOS Big Sur, Version: 11.6.2, Size: 12433351292K, Build: 20G314
* Title: macOS Big Sur, Version: 11.6.1, Size: 12428472512K, Build: 20G224
* Title: macOS Big Sur, Version: 11.6, Size: 12428553042K, Build: 20G165
* Title: macOS Big Sur, Version: 11.5.2, Size: 12440916552K, Build: 20G95
* Title: macOS Catalina, Version: 10.15.7, Size: 8248985973K, Build: 19H15
* Title: macOS Catalina, Version: 10.15.7, Size: 8248854894K, Build: 19H2
* Title: macOS Catalina, Version: 10.15.6, Size: 8248781171K, Build: 19G2021
* Title: macOS Mojave, Version: 10.14.6, Size: 6038419486K, Build: 18G103
* Title: macOS High Sierra, Version: 10.13.6, Size: 5221689433K, Build: 17G66

Having identified the version you want from the list that’s offered, use a command such as
softwareupdate -d --fetch-full-installer --full-installer-version 10.13.6
which will download the installer app to the main Applications folder, but not run it. Sadly, these options aren’t available in Catalina or earlier versions of macOS, and there’s no substitute or workaround.

SIP

The snag with both of these methods is deleting that installer app once you’re done with it. It’s disappointing to see that some bright spark has decided that these old installer apps should be partially protected by SIP. When you try to empty the Trash, you may be (incorrectly) told that they’re still in use, and they’ll be left there to annoy you every time you try to empty the Trash.

The solution is tedious: restart in Recovery, there open Terminal and type in the command
csrutil disable
to disable SIP. Then restart normally, empty the Trash, restart in Recovery again, in Terminal there type the command
csrutil enable
to enable SIP again, and restart.

Xcode

If you need Xcode or its command line tools for an older version of macOS/OS X, you’ll be aware that those aren’t available in the App Store, which only offers the current version. Unfortunately, obtaining those older versions and their tools isn’t so easy. To do so, you’ll need to have an Apple Developer account (which doesn’t necessarily require that you pay a subscription), and use this link to list all available there. They do go back a very long way, but without a developer account, I don’t know of any way of reaching them.

Thanks to those who have asked about these recently, including Christian and @Sam_Ohanaware.