
This is especially important just after the public release of a major iOS version in September. It’s good practice to try and stay up-to-date, but sometimes you need the ability to release an app built with an older version. Having multiple versions of Xcode available provides more flexibility. You can’t release app updates built with a beta version of Xcode. If you want to start testing against beta OS versions or take advantage of new APIs, you’re going to need to use a beta version of Xcode. At the time of writing, WWDC 2019 is about to start. If you want simulator support for more than the current and previous two or three major iOS versions, you often can’t use the latest Xcode release. Xcode is quite aggressive at dropping simulator support for older iOS versions. Upgraded your code to Swift 5? You can’t use Xcode 10.1 or lower. Still using Swift 3? You can’t use Xcode 10.2 or higher.

This was particularly important during the Swift 2.x to 3.0 timeframe when the language underwent many significant, and incompatible, changes.

Build with Xcode 9.x (against the iOS 11 SDK) and even when opened on an iPhone XS Max running iOS 12, your app will use the iPhone X resolution and be scaled to fill the larger screen. For example, building against the iOS 12 SDK in Xcode 10.x opts your app in to support the iPhone XS Max and iPhone XR screen sizes. This can implicitly opt you in to certain OS features or device support.

