Maybe I have missed some big change between Xcode 9 and 10, but I've noticed a couple of strange things:
Compiling our project with Xcode 10, we noticed that we were able to reference functions that are only available in Swift 4.x, where our Project Settings clearly have it set to Swift 3.3. We can call array.randomElement() etc, whereas in Xcode 9 (with Swift 3.3) we get the expected compilation error.
We also started noticing some behaviour in our UI that were not there previously - such as UIViewControllers with hidesBottomBarOnPush set to true in code not smoothly animating the tab bar out on push, and only doing so correctly when the property is set in Interface Builder. I determined this to be a bug on iOS 12, but actually it appears to be when building with Xcode 10.
I checked the Base SDK setting in Xcode 10 and it simply says "iOS". I opened Xcode 9.4.1 and it says "Latest iOS (iSO 11.4)" and allows me to change it.
Is the base SDK now forced to 12?
How can we not get compilation errors for using Swift 4 methods when our Swift version is 3.3?
Maybe I've missed something obvious but I'd be grateful if someone could explain how Xcode 10 is handling Base SDK and Swift language versioning.