On Sep 18, 2015, at 02:02 , Dave <email@hidden> wrote:
I think this must have changed in XCode 6 or 7?
Indeed, no, it’s always been like this (“always" since about OS X 10.2 or 10.3, when the idea of base SDKs was introduced — before that you were compiling against the version of OS X that was running on your development Mac).
The only changes have been in the way the base/deployment model is supported. For example, weak linking of frameworks (around 10.6, IIRC) made run-time checks a lot easier, and Swift recently introduced built-in availability checks.
In the old days, you had much more freedom to stick with older SDKs, which helped you avoid using newer API accidentally. Xcode used to ship with several historical SDKs for exactly this purpose, and sometimes you could download more. Currently, Apple is extremely aggressive about forcing you to move forward with SDKs.
This is a big, big headache if you’re using Obj-C, but (basically) no trouble at all if you’re using Swift. In Obj-C, if you want to use older ones, you have to use the older Xcode versions that support them, and to use older Xcodes, you often have to develop on older OS X versions.
Incidentally, it’s NOT supported to copy an old SDK into a newer Xcode that doesn’t already have it. This is sometimes ignored, as an ideological restriction rather than a technical incompatibility, but as Xcode gets ever more complicated the technical basis for the limitation is ever more compelling. Really, don’t do it.)
|