Xcode 9:如何安装iOS 10 SDK。

11
鉴于目前Xcode 9仍处于测试版,而今天主要关注的重点是获取有关iOS 11的知识,因此问题确实很奇怪...是否有办法在使用Xcode 9 beta时以iOS 10作为基本SDK的目标?苹果是否需要像在Xc8中处理先前操作系统的SDK一样打包Xcode 9的SDK?为什么会有这种需求呢?
a)首先想到的是在涉及需要从iOS 10更改到11的代码的项目上使用Xcode 9美妙的新重构工具,但目前必须在iOS 10上运行。
b)出于实验目的。

1
你在这里的问题不明确。使用Xcode 9开发iOS 10是完全可能的,只需确保您的部署目标设置为iOS 10即可。 - allenh
我想知道在使用Xcode 9 beta时是否已经有一种方式可以添加先前的iOS SDK,就像你可以在发布版本中做的那样... - aaberga
这很可能不会在测试期内预见到... - aaberga
2个回答

11

使用这个这个,我成功地使用Xcode 9 beta 4编译了SDK10.3。但有多项注意事项。

注意事项1:Xcode GUI似乎无法同时检测到多个iPhone SDK。因此,您无法在10.3和11.0之间切换基本SDK。

注意事项2:Xcode 9附带的Swift编译器不支持针对小于11.0的iPhone模拟器SDK。如果尝试,则会出现以下错误:

error: Swift does not support the SDK 'iPhoneSimulator10.3.sdk'

注意事项3:即使您按照所有步骤进行操作,仍然不能发布旨在在iOS 11发布之前发布的应用程序。使用较旧的基本SDK的唯一好处是利用iOS平台中某些特殊情况。其中一个值得注意的例子是后台VoIP套接字,iOS历史上也散布着类似的其他例子。

传统的VoIP架构在iOS 8中被新的基于PushKit的架构所取代。然后在iOS 9 SDK中正式弃用。在iOS 10中,它仅作为兼容措施提供。如果您的应用程序链接了旧的SDK,则它继续工作(与以往一样好),但如果链接到iOS 10 SDK,则被禁用。

注意事项4:只能使用纯Objective-C项目进行。似乎10.3 SDK与Xcode 9附带的Swift编译器版本之间存在某些不兼容性。具体来说,出现以下错误:

在此输入图片描述

如果您仍然感兴趣

... 这是如何操作的。

步骤1

用 Xcode 8.3.3 中的 10.3 SDK 替换 Xcode 9 中的 11.0 SDK,具体操作如下:

Xcode-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs

用以下文件替代上述文件夹中的文件:

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

步骤2

在以下文件中,将 MinimumSDKVersion 的值从 11.0 改为 10.3:

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


看起来你的问题可能有些混淆。"基础 SDK"和"部署目标"之间有很大的区别。这个答案特别讨论如何改变基础 SDK。改变部署目标是微不足道的。 - allenh
谢谢!我已经成功地在10.3 SDK的iPhone X模拟器上启动了我的应用程序。只需将“iPhoneOS.platform”更改为“iPhoneSimulator.platform”。 - Evgeny Mikhaylov
@AllenHumphreys 为什么不保留两个SDK,只需更改符号链接的路径? ‍♂️ - ipatch
@Chris 看起来这个方法可能可行,但是这已经是很久以前的事情了,所以我不认为我会重新尝试来确保它能够正常工作。 - allenh
@AllenHumphreys,这就是我所做的,我能够使用Xcode 8.3.3提供的10.3.x SDK来构建iOS应用程序。 - ipatch

1
Xcode 9 beta 4允许下载并使用所有以前的模拟器,无需任何解决方法,只需单击“下载模拟器”菜单项即可下载模拟器,如图片中所示(最后一项)。

截图:XCode 9 beta混合模拟器版本列表


感谢分享。对我来说,这不仅仅是在模拟器上进行测试,更重要的是编译iOS 10与11之间的变化。有一些重大变化(例如顶部布局指南),使得目前继续为iOS 10编译您的应用程序更加理想,而不仅仅是在其他模拟器中进行测试。 - d2burke
但是Xcode 9完全可以编译iOS 10。我一直在使用它来编译10.3目标。如果您选择了10.3目标,编译器将调用自身的Swift 3.2(这是Swift 4编译器以Swift 3兼容模式工作)。这是您要做的吗?还是我误解了您的评论? - Andras M.
针对10.3版本的定位作用很小,而Swift语言版本与此无关。您可以使用Swift 4针对10.3进行开发而不会出现问题。问题在于编译时二进制文件链接到的系统库的哪个版本。 - allenh
你说得对。我只是考虑在之前的iOS版本上进行测试,而没有使用更旧的SDK进行编译。 - Andras M.

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