Getting xCode to run on unsupported versions of macOS
My MacBook Air 2017 has been running macOS Monterey (12.6.5), the last version to support my MacBook model, which in turns supports up to Xcode 14.2. xCode 14.3 requires macOS Ventura 13 (which can’t be run on Macbook Air 2017), so I had postponed the update for so long as I could still use xCode to publish iOS and macOS apps. However, when a new project requires iOS 17 SDK (which comes with xCode 15), I decided to find a way to get xCode 15 to run on macOS Monterey, which is not officially supported.
The first thing to know is that the macOS version shown in the About This Mac screen is simple retrieved from /System/Library/CoreServices/SystemVersion.plist:
On versions up to OS X El Capitan (10.11, released in 2015), all you need to do to change the reported version number is to edit this file, update various version fields and reboot:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>ProductBuildVersion</key> <string>21G217</string> <key>ProductCopyright</key> <string>1983-2022 Apple Inc.</string> <key>ProductName</key> <string>macOS</string> <key>ProductUserVisibleVersion</key> <string>12.6.1</string> <key>ProductVersion</key> <string>12.6.1</string> <key>iOSSupportVersion</key> <string>15.7</string> </dict> </plist>
If you try this, start with changing the only minor build number (e.g. 12.6.1 to 12.6.4). If the version check is purely a formality, changing the version number will cheat applications into thinking they are running on the expected macOS version, allowing them to start. Obviously, if a certain functionality from the application really requires features from the newer OS version, merely changing the version field will not get things to work. Do not try to update System Software after changing the version number, as the updater might download packages meant for the newer version and corrupt the system. Finally, only change the major build number (e.g. 12.6 to 13.0) as a last resort, as some libraries will refuse to start if the wrong major build number is detected, which could result in serious system serious issues.
On recent versions of macOS which implement System Integrity Protection (SIP), you will need to boot into recovery mode and disable SIP before the SystemVersion.plist can be updated. Otherwise, nano will report “Operation not permitted” when saving the file:
In my case, getting xCode 15 to work on macOS Monterey would require setting the version number to 13.4, a change I am totally not comfortable with. Fortunately, there is another way to change the Info.plist of the xCode application package to lower the system requirement. To do this, right click xCode application icon and choose Show Package Contents:
Inside Info.plist file you will see a field named Minimum system version. By default, the field is set to 13.4 which means that xCode will refuse to run on older versions. To get it to run on Monterey, set this field to 12.5:
Save the file and reboot the machine (as the plist contents of each application package may be cached until reboot). After that, you should see that xCode 15 now works just fine on Monterey. This method of changing xCode’s Info,plist is better as it does not require disabling System Integrity Protection and modifying SystemVersion.plist which could potential affects other apps. Obviously if you use functionalities of xCode 15 which make use of macOS Ventura’s specific features, then things will not work. However, in my case, I was able to build and submit my iOS application using iOS 17 SDK on xCode 15 running on macOS Monterey with this simple change.
I hope this note will be helpful to you. In any case, I hate forced obsolescence – it treats users like idiots and serves no purpose except to force you to buy new devices unnecessarily, wasting money and harming the environment in the process.
See also
Running macOS Sonoma 14 on VMware
Hi, this method does not seem to work on Xcode 15.3 and MacOS Monetery 12.6.3. If someone knows of a solid way please kindly share your findings. Thank you.
Hi Will,
Several methods are mentioned in the articles. Have you tried all of them? When you say it didn’t work, what exactly happened? Did xCode still refuse to start, or did it crash? Where did you download xCode from, App Store or XIP file?
Same problem here. I do not wan’t to install Ventura to my MacBook Air 2015 or change the “System Reporting Version” string in MacOS. However, previously something has worked when just copying additional directory from newer xCode installation package to current xCode Applications directory. At least “supported iOS devices” to test my code in my device. However, the xCode 15.3 does not even include iOS 17 files in DeviceSupport directory? Only have changed iPhoneOS.sdk to iPhoneOS17.4.sdk. Does xCode 14.2 still work if I change the content of this directory to newer files? Maybe Apple will reconsider their AppStore request to make all apps using only using iOS17 SDK by April 14 2024? Mine are still iOS 12 apps and have lot of users for them. Why should I convert everything to iOS 17 that most of my users are not using?
Hi,
Have you tried changing Info.plist and reduced the Minimum system version property to see if the newer version of xCode can run on older macOS?
Unfortunately starting from Xcode 15 Apple changed how the device support works. As a result, it is longer possible to copy DeviceSupport files. More information is available here https://developer.apple.com/forums/thread/730947
It might still be possible to build for iOS 12 using iOS 17 SDK simply by setting “Minimum deployment target” to iOS 12. I am not sure if there is a better way. I simply hate Apple’s planned obsolescence.
Thanks. Yep, I tried to copy all the files from developer/platforms/iPhoneOS.platform to old xCode. Strange things happened. First, when compiling my app code all NSURLSession related code needs to be updated. Then xCode started to download “iOS17 support files” around 7GB. When download was finished, then complained that “disk image file is invalid”. Seems, that either upgrading my MacBook or try MacOS hack are only solutions. Their requirements are not justified!
“In any case, I hate forced obsolescence – it treats users like idiots and serves no purpose except to force you to buy new devices unnecessarily, wasting money and harming the environment in the process.”
YES, SIR!
For me the above solution doesn’t work either. So I set the ‘Minimum system version’ to 12.5 in the Info.plist. I have a Macbook Air 2017. I downloaded XCode version 15.0.1 from this site: https://xcodereleases.com/
Then I unpacked it with the macOS package manager and changed the Info.plist as described. Even after a restart, macos refuses to start XCode, saying that at least macos 13.5 is needed.
Have you done anything else?
I got xCode15 work in my MacBook Air 2015 using OpenCore Legacy Patcher and installing Sonora to my computer.
https://dortania.github.io/OpenCore-Legacy-Patcher/INSTALLER.html#creating-the-installer
So far seems to be working fine. Somehow wasn’t able to install only Ventura, because after legacy patcher created it’s boot particion, my old Monterey wanted immediatly upgrade to Sonora.
veiko, thanks for sharing. I tried OpenCore before, which worked for me on my Macbook Air 2017 running Mac OS Sonoma for a few weeks. One day I started up my Macbook and the progress bar appeared to stall at 70%. After a forced power-off, my Macbook Air refused to turn on again! No chime, totally black screen. Battery is still good. Tried resetting NVRAM and many other things to no avail and my (once) $1500 Macbook is now a paperweight! I refused to use Opencore again after that.
I also got Xcode15 work on my MacBook Air 2017 using Open Core Legacy Patcher and installing Sonoma. At least, I can work on now. I’m just disappointed with Apple because of this “forced obsolescence” update policy. But that’s not the only reason…
Hi and thanks for the post.
I have a mid 2015 MBP (A1398 or MacBook11,5) on which I have installed Monterey (latest supported), Ventura, Sonoma, and Sequoia (all last 3 with OCLP), but unfortunately, due to some bug with OCLP and metal drivers, my QtQuick apps still run fine on Ventura but not on Sonoma neither on Sequoia.
So I have one volume per version plus a fifth volume for data, and on all versions I made my user directory into that user (in other words, ~ refers to /Volume/User/Users/myUserName) and all versions of xcode are installed into ~/Applications, instead of the root /Applications).
So at the moment i’m trying to run xcode 16 on ventura due to the bug with sonoma and sequoia.
So I’ve tried your method editing the plist file, so it unlocked the app, but it freezes. So I dove into the directory in search of other .app subdirs and found a few (in a subdir named Applications) that needed the same hack. All those .app subdirs run smooth on Ventura, but i’m still unable to run the xcode app itself.
It shows me the licence agreement, when agreeing i’m prompted with password, and then nothing.
It then should prompt me for some setup and extra downloads (that I already made from Sonoma or Sequoia), but those changes rather seem to be stored on system drive. No idea where.
However, xcode-select’ing 16 on ventura runs successfully and obviously my Qt apps are built fine onto xcode 16.
Hi Yannick,
Thanks for sharing your multi-boot macOS setup with OpenCore and I am glad you find the instructions useful!
As you’ve found out, there are other utilities inside the Applications subdir whose plist files will need to be modified before they can run on earlier macOS version. I do not believe these utilities indeed require newer macOS features; it’s just Apple’s way of forcing people to upgrade unnecessarily.
xCode is also quite buggy, with many obvious bugs that have been there for many years. Visual Studio is a much better IDE in my opinion.
ok I found out how to override the licence agreement blocking issue : accept it by command line instead of GUI, aka ‘sudo xcodebuild -licence’, hit ‘accept’ when prompted, and now everything is fine, I have XCode16.0 GUI running smooth, making it’s necessary downloads (like iOS SDK), and Qt building fine against XCode16
I don’t use Xcode as an IDE, there’s no point for me as I don’t develop specifically for mac.
i use QtCreator for Qt/C++ or VSCode for other purposes.
I found visual studio nice on windows, but hated it on mac. They’re too different between the two platforms.