What is Xcode?
Xcode is Apple’s app building software. When you build apps for iOS with Scripture App Builder, you must build them with a macOS device, and you use (but do not interact with) Xcode – SAB uses Xcode command line tools in the background. The SAB documentation has us use the Xcode version from the Mac App Store, and this is the easiest way to do it but has some limitations.
Apple is in the hardware business, and that means getting users to upgrade. One way they do that is to steadily increase in a few ways the version of iOS devices need to be running to install and update apps in the App Store.
For example, as of this writing, in September 2024,
- to submit an app to the App Store, you need to be running at least Xcode 15.
- Xcode 15 will only build for iOS 12 and up.
- So that means that anyone who has a device limited to iOS 11 will not be able to install or update your app.
Current Xcode requirement
All iOS and iPadOS apps uploaded to App Store Connect must be built with a minimum of Xcode 15 and the iOS 17 SDK. Starting April 2025, all iOS and iPadOS apps uploaded to App Store Connect must be built with the iOS 18 SDK.
And this enforced iOS minimum version creep continues each year. Apple controls this forced iOS increment at the App Store level, but also at the Xcode level – if you have automatic updates turned on, your Xcode will automatically update, your Mac will automatically update to the latest version of macOS, which then limits which versions of Xcode you can run, all of which limits which versions of iOS you can build for.
We as app builders can’t control all levels of this, but we can do a couple of things to make sure we’re building for the largest number of users, which is just make sure we’re building with the oldest version of Xcode that the App Store will accept so the lowest iOS levels possible will be included.
Delay Xcode upgrade
There’s a window each year where the new Xcode version is out but not required by the App Store. Delaying the upgrade to Xcode will help your users with older devices be able to install and upgrade. There are a couple of ways of doing this.
Manually install Xcode
Instead of installing Xcode from the App Store, install from this site the lowest version that the App Store will accept.
(If you’ve already Xcode installed, you can uninstall the App Store version).
First check out this page to see what the current Xcode requirement is. (https://developer.apple.com/ios/submit/)
Then go to this page to grab that minimum version.
It will not auto-update, so you’ll have to manually update it when the requirement changes. You’ll know when Transporter rejects your build for not being up to date with the requirement.
Xcode version control
There is another way of installing and tracking Xcode which allows you to keep several versions around for testing or if you are using Xcode for other kinds of projects outside of SAB.
The Xcodes app (not to be confused with Xcode itself) allows you to manage your Xcode installations. You can install one or a few versions.
Below you can see I’ve got the current 15.3 installed, and also the 15.0 that fixes a couple of current issues for SAB. This is the minimum required right now, or I’d go back even farther.
When you add a new version of Xcode, you can make it the active version by clicking on Make Active on the right pane after selecting that version. Below clicking on Make Active would make 15.3 the version that SAB uses when building.
Wrapping up
iOS creep is a headache that Apple is creating for us needlessly – and long term there is no solution as eventually the App Store requirements will catch up with us each year, but we can at least widen the update window for our users while still taking advantage of macOS security and feature updates.