我已经使用XCode 5.1,6.4,7.0和各种macOS版本运行了多次测试,并注意到它没有按预期向前兼容,并且AFAIK没有记录此行为。
XCode 5.1与OS X 10.11兼容 XCode 6.4与macOS 10.12兼容 XCode 7.0与macOS 10.13兼容
似乎Apple故意在较新的macOS上禁用XCode强制更新,但我没有看到原因。它在XCode的plist中也不可见。 这意味着如果我升级我的操作系统,我就无法拥有一套固定的开发工具,而我仍然可以在较新版本的Windows上运行非常旧版本的Visual Studio。
为什么那样,是否有任何关于该行为的文件?
答案 0 :(得分:1)
Apple和Microsoft在如何处理向前和向后兼容方面有着截然不同的理念。作为一般规则,近年来Apple的Xcode环境的每个主要版本都只能在其发布的操作系统和后续的一个或两个版本的macOS上运行(例如,当您指向out,Xcode 7仍将在10.13上运行。
一般来说,如果您要为macOS(或iOS)应用程序开发新功能和新功能,Apple鼓励您使用最新的SDK,然后利用Xcode Deployment Target
机制以及一些特定于操作系统和语言的工具,例如#available
,可帮助您编写将在新旧版本操作系统上运行的代码,使用相同的代码库。
您可能同意或不同意这一理念,但这就是Apple对其生态系统的看法。
实际上,如果您继续使用较旧的SDK开发(或支持),那么维护旧版SDK原生的构建和测试环境非常有用。这可以在专用硬件上或使用虚拟化工具完成。但是,在许多情况下,可以使用Deployment Target
设置将代码转发到更新版本的工具,从而允许您维护单个代码库,以保持与旧iOS / macOS的兼容性,但也可以使用您将获得最新版本的最新工具和功能。
在我们的案例中,我们倾向于尽快与平台SDK一起向前推进。对于我们的iOS工作,这通常意味着每年使用新的iOS更新SDK版本,从而升级我们的编译器链。对于我们的macOS产品,我们保持与许多旧版本的向后兼容性(因为新macOS的采用往往比新iOS慢),这意味着我们目前拥有Xcode 7.x和Xcode 9.x的开发和测试环境。 。由于Xcode 7-Xcode 8时间帧(与QuickTime相关)的特定更改,我们不能仅使用Deployment Target
来保持我们最老的兼容性,而不使用较旧的Xcode。在不久的将来,我们将决定放弃对较旧的macOS版本的支持,并转而使用我们的Xcode 9作为我们的基础。