Getting xCode to run on unsupported versions of macOS

5.00 avg. rating (97% score) - 3 votes

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:

Screenshot 2023-09-01 102747

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:

Screenshot 2023-09-01 100902

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:

Screenshot 2023-09-01 at 11.37.47 AM

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:

Screenshot 2023-09-01 102704 - Copy

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.

5.00 avg. rating (97% score) - 3 votes
ToughDev

ToughDev

A tough developer who likes to work on just about anything, from software development to electronics, and share his knowledge with the rest of the world.

10 thoughts on “Getting xCode to run on unsupported versions of macOS

  • March 14, 2024 at 6:50 am
    Permalink

    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.

  • ToughDev
    March 14, 2024 at 7:07 pm
    Permalink

    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?

  • March 16, 2024 at 2:28 am
    Permalink

    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?

  • ToughDev
    March 16, 2024 at 9:56 am
    Permalink

    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.

  • March 16, 2024 at 7:52 pm
    Permalink

    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!

  • May 1, 2024 at 5:50 pm
    Permalink

    “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!

  • May 1, 2024 at 9:54 pm
    Permalink

    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?

  • ToughDev
    May 7, 2024 at 9:23 pm
    Permalink

    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.

  • May 8, 2024 at 6:33 pm
    Permalink

    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…

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>