Xcode 8与旧版Base SDK的兼容性问题

26

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

我尝试将另一个版本的Xcode中的旧SDK复制到此处,但它没有起作用:

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

3个回答

31

从Xcode 7.3开始,除了复制SDK外,您还必须编辑某个Info.plist文件,如agx在此贴中描述macOS一样。看起来iOS也有一个类似的文件。

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

尝试将其中的MinimumSDKVersion值从10.0更改为您想要的任何SDK版本,以此解决问题。

我没有在iOS上尝试过这种方法,但是使用这种解决方法,我刚刚能够使用Xcode 8.0(8A218a)(“GM”)构建macOS 10.6的目标。

更新

上述描述的解决方法在Xcode 9中已经不可用。如果您想使用Xcode 9或更高版本,请参考我在2017年11月22日发布的更新答案。


1
我可以确认这也适用于iOS。请记住,如果您想为模拟器构建,则需要对“iPhoneSimulator.platform”执行相同的步骤。 - dcow
1
这帮助我使用Xcode 8构建适用于iOS 9.3而不是iOS 10的版本。谢谢! - jfmg
1
目标设备在列表中出现了两次...但这就是解决方法的交易方式。 - Julian F. Weinert
1
@JulianF.Weinert 顶部设备条目实际上是针对您的目标 SDK 进行构建,而底部设备条目则是针对最新的 SDK 进行构建。 - MechEthan
1
DanM: 我已经安装了Xcode 7.2.1和Xcode 8.2.1两个版本。我将Xcode 7.2.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk复制到了Xcode 8.2.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs目录下,并将Xcode 7.2.1.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.2.sdk复制到了Xcode 8.2.1.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs目录下。我还修改了iPhoneOS.platform和iPhoneSimulator.platform下的2个Info.plist文件,将MinimumSDKVersion设置为9.2。但是在Base SDKs中仍然看不到9.2的选项。 - tala9999
显示剩余4条评论

8

我的原始答案虽然适用于Xcode 8,但由于某种不值得解释的奇怪原因,在特定客户的旧项目中不再适用于Xcode 9。所以我一直在使用另一种替代工作流程,这并不太糟糕。

为了处理这个项目,我在旧版Xcode中打开它,该版本可以使用所需的SDK进行构建,并在最近的Xcode中打开它。我将旧的Xcode窗口放在后台,并在最近的Xcode中进行工作。当我准备好测试更改时,我执行“文件”>“全部保存”(⌥⌘S),然后切换到旧的Xcode并执行“构建”(⌘B)。构建完成后,我切换回最近的Xcode,并执行“产品”>“执行操作”>“无需构建即可运行”(⌃⌘R)。由于dSYM文件格式没有更改,断点按预期工作。

优点是不需要对Xcode进行任何黑客攻击,而且我需要记住有关旧版Xcode(我的情况下为Xcode 3)的唯一一件事是:⌘B

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

通过脚本化xcodebuildxcode-select命令行工具,工作流程可能会更加简单,但这已经足够好了。随着苹果在今年WWDC上宣布支持32位Mac应用程序在未来两年内消失,我的客户在任何情况下都面临着一些艰难的决策。


0
你只需要更改“部署目标”设置。基本上,您使用最新可用的 SDK 作为基本 SDK,但选择一个目标 OS X 版本。 当然,这取决于您想要使用较旧 SDK 的原因是什么?

2
使用旧版SDK的一个原因是避免苹果根据你所链接的SDK做出自动选择的假设。特别是因为这些假设通常很难找到,除非通过艰难的方式。 - Peter N Lewis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接