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
$PATH
发现的工具链)目前,swiftly 仍处于早期开发阶段,并支持 Linux 和 macOS。有关 swiftly 预期功能和实现的更多详细信息,请查看设计文档。
$ swiftly install latest
可以将 Swift 的特定版本提供给 install
命令。
$ swiftly install 5.6.1
如果未指定补丁版本,swiftly 将查找并安装与提供的小版本匹配的最新补丁版本
$ swiftly install 5.6
$ swiftly install main-snapshot-2022-01-28
如果未指定日期,swiftly 将查找并安装最新的可用快照版本
$ swiftly install main-snapshot
$ 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 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 定义的行为准则。这份文档被许多开源社区使用,我们认为它很好地表达了我们的价值观。有关更多信息,请参阅行为准则。
Swift.org 目前提供实验性的 .rpm
和 .deb
包,允许您通过包管理器安装 Swift。虽然这些是安装和更新单个 Swift 版本的有效方法,但它们不太适合安装多个 Swift 工具链并在它们之间轻松切换的任务。swiftly 的目标受众是 Swift 开发者,他们出于测试库和应用程序的目的而在版本之间切换。.deb
和 .rpm
目前也不支持快照工具链。
swiftenv 是一个现有的 Swift 版本管理器,它已经具有 swiftly 最终将拥有的许多功能。它是一个很棒的工具,如果它是您工作流程的一部分,那么我们鼓励您继续使用它!也就是说,swiftly 是/将会在以下几个方面有所不同
swiftly 正在作为一个由 Swift 服务器工作组领导的社区驱动的项目构建,通过这种协作,swiftly 最终将成为 Swift 工具链的官方安装工具。作为迈向这一目标的第一步,swiftly 将帮助指导 Swift 项目维护的 API 端点的创建,它将使用这些端点来检索有关哪些工具链可供安装的信息,并验证其预期签名。swiftenv 目前为此使用第三方 API 层。使用官方 API 减少了安全漏洞的途径,并降低了停机时间影响 Swift 安装的风险。
swiftly 将使用 Swift 编写,我们认为这对于可维护性和鼓励社区贡献非常重要。
swiftly 对安装和管理快照工具链具有一流的支持。
swiftly 内置了对更新工具链的支持。
swiftly 针对易于安装进行了优化——可以使用类似于 Homebrew 和 rustup 的 bash 单行命令完成安装。此外,swiftly 不需要用户的系统上安装任何系统依赖项。虽然 swiftenv 也相对容易安装,但它确实涉及克隆 git 存储库或使用 Homebrew,并且需要一些系统依赖项(例如 bash、curl、tar)。