使用工具链在Xcode中切换Swift版本

原始文章发布在XCBlog上

毫无疑问,Swift是开发iOS应用程序的出色编程语言。 但是,由于Apple已将Swift开源,因此它正在经历重大的重大变化。 Swift每天都在发展,但我们必须确保我们的应用程序或库仍可在不断变化的Swift中工作。 苹果一直都在用新版本的Swift发行新的Xcode版本,这通常要求iOS开发人员切换Xcode版本或同时保留多个版本的Xcode。 在本文中,我们将看到如何在多个Swift版本之间切换而不更改Xcode版本。

Xcode和Swift

在进入更改Swift版本之前,让我们先谈谈Xcode和Swift版本是如何相互关联的。 Xcode的新版本始终具有Swift的最新稳定版本,例如Swift 4.1随附的Xcode 9.3。 我们总是可以在发行说明中找到带有Xcode的Swift版本。 默认情况下,位于/Applications/Xcode.app/Contents/Developer/的Xcode开发人员目录。 但是,如果安装了多个Xcode版本,则可以使用xcode-select实用工具切换Xcode开发人员目录。 例如,对于beta版本,我们可以使用切换到beta Xcode

  $ sudo xcode-select —切换/Applications/Xcode-beta.app/ 
$ export TOOLCHAINS = swift

检查当前使用哪个Swift版本也很重要。 我们可以检查Swift版本,只需运行以下命令即可。

  $ swift-版本 
  Apple Swift版本4.1(swiftlang-902.0.48 clang-902.0.37.1) 
目标:x86_64-apple-darwin17.5.0

这将打印最近Xcode版本正在使用的Swift的现有版本。 我们可以使用以下命令检查Swift二进制文件的位置。

  $ xcrun -f swift 
  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift 

如果我们还有其他Swift版本可用,则Xcode可以通过Xcode目标的build设置选项卡中的build设置$ SWIFT_VERSION使用不同版本的Swift。

我们可以从终端使用以下命令快速扫描构建设置。

  $ xcodebuild -showBuildSettings |  grep SWIFT_VERSION 

这将打印当前Xcode项目中正在使用的当前版本。 请注意,此命令必须从iOS项目的根目录运行。

获取新的Swift工具链

由于Swift是开源的,因此所有更新的活动开发都发布在swift.org网站上。 Swift的最新快照始终可以从此处的网站下载。 我们必须从那里在本地macOS机器上下载Swift快照,然后才能使用它。 一旦下载并安装了所需的Swift工具链程序包,它便也可用于Xcode。 它基本上在Xcode开发人员目录中创建另一个“工具链”目录。 默认工具链位于路径中

  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain 

现在,我们已经在浇筑机上提供了Swift 4.1,并且由于某些原因,我们需要Xcode 9.3中的Swift 3.1。 我们可以从此处从swift.org下载Swift 3.1工具链,并将软件包安装在本地macOS机器上。 该软件包将指导您完成安装过程。 您可以选择为特定用户或系统范围安装Swift工具链。 安装完成后,我们将看到以下屏幕

现在,我们已经成功安装了Swift 3.1工具链。 swift工具链已安装在以下路径中,用于系统范围的安装。

  $ /库/开发人员/工具链/swift-3.1-DEVELOPMENT-SNAPSHOT-2017-06-14-a.xctoolchain 

目录/Applications/Xcode.app/Contents/Developer/Toolchains具有用户特定的工具链。 我们可以从Xcode首选项访问新添加的工具链,如下所示

另一种方法,我们可以在Xcode首选项中设置新的工具链。 转到Xcode-> Preferences-> Components部分。 现在,您将看到“工具链”的另一个选项卡,在这里我们可以为本地开发选择所需的Swift工具链,而无需更改Xcode版本。

现在,我们已经成功下载了Swift 3.1开发快照。 现在该使用新下载的Swift工具链了。

切换Swift工具链

成功下载后,切换到新工具链相当容易。 可以使用Xcode完成,转到Xcode-> Preferences-> Components-> Toolchains部分,然后选择Swift.3.1.1快照,这将为本地Xcode设置新的Swift版本。 您可能需要重新启动Xcode。 为了从命令行查看新的工具链,我们必须导出新添加的工具链。

  $ export TOOLCHAINS = swift 

这会将新的Swift设置在终端中,我们也将从命令行获取新版本。

  $ swift-版本 
  Apple Swift版本3.1-dev(LLVM 9cb6a3ccee,Clang f38438fc01,Swift b5b79f88f6) 
目标:x86_64-apple-macosx10.9

现在,我们已经成功切换了Swift版本,而无需下载旧版本的Xcode。

从CI服务器切换Swift

如果CI服务器已预先安装Swift工具链,则可以轻松地从Continuous Integration Server切换Swift工具链。 但是,如果您使用TravisCI或CirlceCI之类的基于云的CI服务,那么在开始构建之前,您已经以编程方式下载了Swift工具链。 您的示例脚本可能看起来像这样,以下载并安装工具链。

  $ curl -O https://swift.org/builds/swift-3.1-branch/xcode/swift-3.1-DEVELOPMENT-SNAPSHOT-2017-06-14-a/swift-3.1-DEVELOPMENT-SNAPSHOT-2017-06- 14-osx.pkg 
$ sudo安装程序-pkg swift-3.1-DEVELOPMENT-SNAPSHOT-2017-06-14-a-osx.pkg -target /
$ export TOOLCHAINS = swift

请注意,以上脚本只是一个示例,您始终可以根据CI服务器的需要进行自定义。

要记住的事情

现在,我们已经看到了如何在不更改Xcode版本的情况下切换Swift版本。 但是,从最新的Xcode更改Swift版本时,要记住某些事情。

  • 最新版本的Xcode可能具有某些功能,这些功能可能与旧的Swift版本不兼容。 例如主线程检查器
  • 某些iOS应用程序已经在Xcode中设置了SWIFT_VERSION构建设置,因此请确保我们已安装该工具链。 构建设置优先于已安装的Swift版本。
  • 确保所有依赖项都与您刚切换到的Swift版本兼容,否则应用程序将无法编译。

结论

使用Swift工具链,我们可以避免为了更改Swift版本而安装不同版本的Xcode的麻烦。 Xcode安装是一项耗时且庞大的工作,如果可以使用工具链更改Swift版本,我们可以简单地避免安装它。 让我知道您在Swift版本之间切换时使用了哪些技术,请在下面的评论中放弃

像XCBlog的 XCTEQ 发布的帖子一样 您可能还喜欢我们的一些服务,例如访客博客或Mobile DevOps(CI / CD)或测试自动化。 Github 搜索我们的 服务 ,开源项目, 或者在 Twitter Facebook Youtube LinkedIn 上关注我们 下载我们的 XCBlog iOS应用程序以离线阅读博客。

X CTEQ 一家专门从事基于Mobile DevOps,CI / CD,Mobile,AI / ML的测试自动化Checkout XCTEQ产品和服务的公司, 网址 http://www.xcteq.co.uk 或写信给我们info@xcteq.co。英国..