Xcode 8 与较旧的 Base SDK

Xcode 8 with older Base SDK

我 运行 遇到了我在项目中使用的一些外部框架的兼容性问题。有没有办法在 Xcode 8 上更改 Base SDK?目前在项目设置中只显示最新的SDK。

我已经尝试将旧版 SDK 从另一个版本的 Xcode 复制到此处,但没有成功:

/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/

从Xcode7.3开始,除了在SDK中复制,还必须编辑某个Info.plist文件,as described here for macOS in the post by agx。 iOS 似乎有一个类似的文件,位于

Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Info.plist

尝试将 MinimumSDKVersion 的值从 10.0 更改为您想要的任何 SDK 版本。

我没有用 iOS 尝试过这个,但是,使用这个解决方法,我只能使用 Xcode 8.0 (8A218a)(“GM ").

更新

上述 hack 在 Xcode 9 中对我不起作用。如果您想使用 Xcode 9+,请参阅我 2017 年 11 月 22 日的最新回答。

您只需更改 "Deployment Target" 设置。您基本上使用最新可用的 SDK 作为基础 SDK,但 select 目标 OS X 版本。 当然这取决于你为什么要使用旧的SDK?

我原来的回答,虽然它适用于 Xcode 8,但由于一些不值得解释的奇怪原因,不再适用于特定客户的旧项目的 Xcode 9。所以我一直在使用一个替代的工作流程,它真的还不错。

为了处理这个项目,我在 中打开它,旧的 Xcode 可以使用所需的 SDK 构建它,并且在最近的 Xcode.我把旧的Xcodewindow放在后台,在最近的Xcode做我的工作。当我准备好测试更改时,我会执行 File > Save All (⌥⌘S) ,然后切换到旧的 Xcode 和 Build (⌘B)。构建完成后,我切换回最近的 Xcode 和 Product > Perform Action > 运行 没有建筑物 (⌃⌘R)。因为 dSYM 文件格式没有改变,断点按预期工作。

优点是不需要破解 Xcode,关于旧的 Xcode(Xcode 3 在我的例子中)我唯一需要记住的是,幸运的是: ⌘B.

一个小警告:在这个特定项目的 Target 中,在 Build Settings 中,它有一个自定义的 Build Products Path。这是 Mac 应用程序多年前构建的典型方式。为确保您的两个 Xcode 都使用相同的产品,如果您的旧的和最近的 Xcode 跨越了更改默认 Build Products Path 的版本, 您可能需要设置 Build Products Path.

通过编写 xcodebuildxcode-select 命令行工具的脚本,工作流程可能会变得更加简单,但这已经足够了。随着 Apple 在今年的 WWDC 上宣布在未来两年内不再支持 32 位 Mac 应用程序,我的客户无论如何都面临着一些艰难的决定。