迅速地

swiftly 是一个 CLI 工具,用于安装、管理和切换 Swift 工具链,它本身使用 Swift 编写。swiftly 的设计目标是极其易于安装和运行,其命令界面旨在灵活且易于使用。整体体验灵感来源于 Rust 工具链管理器 rustup,并力求与之相似。

此项目的持续维护和管理由 SSWG 领导。

安装

使用脚本(托管在此仓库中)通过以下命令安装 swiftly

curl -L https://swiftlang.github.io/swiftly/swiftly-install.sh | bash

未来,从 swift.org 下载 swiftly 包,即可使用 init 自行安装

swiftly init

基本用法

$ swiftly install latest

Fetching the latest stable Swift release...
Installing Swift 5.8.1
Downloaded 488.5 MiB of 488.5 MiB
Extracting toolchain...
Swift 5.8.1 installed successfully!

$ swift --version

Swift version 5.8.1 (swift-5.8.1-RELEASE)
Target: x86_64-unknown-linux-gnu

功能特性

平台支持

目前,swiftly 仍处于早期开发阶段,并支持 Linux 和 macOS。有关 swiftly 预期功能和实现的更多详细信息,请查看设计文档

命令界面概述

安装工具链

安装最新版本的 Swift

$ swiftly install latest

安装特定发布版本的 Swift

可以将 Swift 的特定版本提供给 install 命令。

$ swiftly install 5.6.1

如果未指定补丁版本,swiftly 将查找并安装与提供的小版本匹配的最新补丁版本

$ swiftly install 5.6

安装主开发快照版本 (trunk)

$ swiftly install main-snapshot-2022-01-28

如果未指定日期,swiftly 将查找并安装最新的可用快照版本

$ swiftly install main-snapshot

安装 Swift 版本开发快照版本

$ swiftly install 5.7-snapshot-2022-08-30

如果未指定日期,swiftly 将查找并安装与提供的开发分支关联的最新快照版本

$ swiftly install 5.7-snapshot

卸载工具链

卸载发布工具链

$ swiftly uninstall 5.6.3

要卸载与给定小版本关联的所有工具链,请省略补丁版本

$ swiftly uninstall 5.6

卸载快照工具链

$ swiftly uninstall main-snapshot-2022-08-30
$ swiftly uninstall 5.7-snapshot-2022-08-30

要卸载与给定分支(主分支或发布分支)关联的所有快照版本,请省略日期

$ swiftly uninstall main-snapshot
$ swiftly uninstall 5.7-snapshot

列出已安装的工具链

list 命令打印 swiftly 安装的所有工具链

$ swiftly list

选择要使用的工具链

“使用”工具链会将其设置为活动工具链,这意味着它将是通过 $PATH 找到并在 shell 中通过 swift 命令调用的工具链。工具链必须先安装才能使用。

您可以提供与 swiftly install 相同的版本选择器来使用工具链,包括精确的发布版本 “major.minor.patch” 和快照版本。

$ swiftly use latest
$ swiftly use 5.3.1
$ swiftly use 5.3
$ swiftly use 5.3-snapshot
$ swiftly use 5.3-snapshot-2022-08-16
$ swiftly use main-snapshot
$ swiftly use main-snapshot-2024-06-18

使用工具链后,您在 shell 中的命令将使用该工具链运行

$ swiftly use x.y.z
$ swift build             # Build my package with toolchain version x.y.z
$ clang -c foo.c -o foo.o # Compile this C file using the clang compiler in toolchain version x.y.z
$ lldb                    # Open the debugger from toolchain version x.y.z

如果您只想使用特定工具链运行一个命令,而无需切换回之前使用的工具链,则可以使用带有版本的 swiftly run 命令。此命令使用当前版本的最新快照工具链构建您的当前包

$ swiftly run swift build +main-snapshot

带有 “+” 的参数表示要使用的工具链的版本选择器,并支持上面以及 swiftly install 命令中显示的全范围选择器。必须安装工具链才能使用该工具链运行命令。

更新工具链

更新会将给定的工具链替换为该工具链的更高版本。对于稳定版本,这意味着更新到更高的补丁版本、小版本或大版本。对于快照版本,这意味着更新到最新的可用快照版本。

如果未提供版本,则更新会将当前选定的工具链更新到其最新的补丁版本(如果是发布工具链)或最新的可用快照版本(如果是快照版本)。新安装的版本将被选中。

$ swiftly update

要将最新的已安装发布版本更新到最新的可用发布版本,可以提供 “latest” 版本。请注意,这可能会将工具链更新到下一个小版本甚至大版本。

swiftly update latest

如果仅指定了大版本,则具有该大版本的最新安装工具链将更新到该大版本的最新可用发布版本

swiftly update 5

如果指定了大版本和小版本,则与该大版本/小版本关联的最新安装工具链将更新到该大版本/小版本的最新可用补丁版本。

swiftly update 5.3

您还可以指定完整版本,以将该工具链更新到该大版本/小版本的最新可用补丁版本

swiftly update 5.3.1

类似地,要更新与特定版本关联的最新快照版本,可以提供 “a.b-snapshot” 版本

swiftly update 5.3-snapshot

您还可以通过仅提供 main-snapshot 来更新最新的已安装主分支快照版本到最新的可用版本

swiftly update main-snapshot

通过包含日期,可以将特定的快照工具链更新到该分支的最新可用快照版本

swiftly update 5.9-snapshot-2023-09-20

列出可供安装的工具链

list-available 命令可用于列出 Apple 提供的最新可供安装的工具链。

请注意,此命令尚未实现,但将在未来的版本中包含。

swiftly list-available

可以选择性地提供选择器以缩小结果范围

$ swiftly list-available 5.6
$ swiftly list-available main-snapshot
$ swiftly list-available 5.7-snapshot

更新 swiftly

此命令检查是否有新版本的 swiftly 本身,如果有,则升级到新版本。

请注意,此命令尚未实现,但将在未来的版本中包含。

swiftly self-update

指定快照工具链

在 swiftly 的命令界面中,快照工具链的规范名称如下所示

<branch>-snapshot-YYYY-MM-DD

但是,swiftly 也接受 swift.org 提供的下载中的快照工具链文件名。例如

swift-DEVELOPMENT-SNAPSHOT-2022-09-10-a
swift-5.7-DEVELOPMENT-SNAPSHOT-2022-08-30-a

选择规范名称格式是为了减少引用快照工具链所需的击键次数,但是当从其他地方复制/粘贴工具链名称时,较长的形式也很有用。

贡献

欢迎来到 Swift 社区!

欢迎并鼓励为 Swiftly 做出贡献!请参阅Swift 贡献指南,并查看社区结构

为了成为一个真正伟大的社区,Swift 需要欢迎来自各行各业、具有不同背景和广泛经验的开发者。一个多元化和友好的社区将拥有更多的好想法、更独特的视角,并产生更出色的代码。我们将努力使 Swift 社区欢迎所有人。

为了明确对我们成员的期望,Swift 采用了 Contributor Covenant 定义的行为准则。这份文档被许多开源社区使用,我们认为它很好地表达了我们的价值观。有关更多信息,请参阅行为准则

常见问题解答

为什么不通过包管理器(例如 aptyum)安装 Swift?

Swift.org 目前提供实验性的 .rpm.deb 包,允许您通过包管理器安装 Swift。虽然这些是安装和更新单个 Swift 版本的有效方法,但它们不太适合安装多个 Swift 工具链并在它们之间轻松切换的任务。swiftly 的目标受众是 Swift 开发者,他们出于测试库和应用程序的目的而在版本之间切换。.deb.rpm 目前也不支持快照工具链。

这与 swiftenv 有什么不同?

swiftenv 是一个现有的 Swift 版本管理器,它已经具有 swiftly 最终将拥有的许多功能。它是一个很棒的工具,如果它是您工作流程的一部分,那么我们鼓励您继续使用它!也就是说,swiftly 是/将会在以下几个方面有所不同