9.1.6 SwiftPM 5.6 发布说明
3 分钟阅读
原文链接: https://docs.swift.org/latest/documentation/packagemanagerdocs/5.6/
9.1.6 SwiftPM 5.6 发布说明
包插件
SE-0303 引入了在 SwiftPM 中定义构建工具插件的能力,让自定义工具可以在构建期间被自动调用。构建工具插件专注于在包构建期间生成代码,例如从 .proto 文件或其他输入生成 Swift 源文件,从而让构建工具能够被纳入构建图,并以安全的方式自动运行。
SE-0332 扩展了此前由 SE-0303 引入的 SwiftPM 插件支持,允许定义自定义命令插件——用户可以既从 SwiftPM 命令行,也从支持 Swift 包的 IDE 中直接调用这类插件,对包执行自定义操作。命令插件会说明该命令的语义意图——它可以是「生成文档」或「源代码格式化」这类预定义意图之一,也可以是带专门动词、可传给 swift package 命令的自定义意图。
清单 API 的改进
语义化版本依赖现在可以针对只包含主版本和次版本标识的 Git 标签名解析。形如 X.Y 的标签会被当作 X.Y.0。这提高了与现有仓库的兼容性。
语义化版本的解析和比较现在都严格遵循 Semantic Versioning 2.0.0 规范(https://semver.org/)。解析逻辑现在把版本字符串中第一个 “-” 视为版本核心与预发布标识之间的分隔符,但前提是它前面没有 “+”。否则,它会被当作构建元数据标识的一部分。比较逻辑现在会忽略构建元数据标识,并且当且仅当两个语义化版本的主版本、次版本、补丁版本和预发布标识都相同时,才把它们视为相等。
.package(name:, url:) 依赖语法已弃用,改用 .package(url:),因为目标依赖查找不再需要显式的 name 属性。
现在可以用便捷构造器 .package(url: String, exact: Version) 添加依赖版本要求。
依赖版本要求枚举的调用约定已弃用,改用带标签的实参:
.package(url: String, .branch(String)) -> .package(url: String, branch: String).package(url: String, .revision(String)) -> .package(url: String, revision: String).package(url: String, .exact(Version)) -> .package(url: String, exact: Version)
其他改进
配置文件(包括镜像文件)的位置发生了变化,以适应需要更健壮的配置目录结构的新特性,例如 SE-0292:
<project>/.swiftpm/config(镜像文件)被移到<project>/.swiftpm/configuration/mirrors.json。SwiftPM 5.6 会自动把文件从旧位置复制到新位置,并发出警告提示用户删除旧位置的文件。~/.swiftpm/config/collections.json(集合文件)被移到~/.swiftpm/configuration/collections.json。SwiftPM 5.6 会自动把文件从旧位置复制到新位置,并发出警告提示用户删除旧位置的文件。
为了提高包的安全性,SwiftPM 会执行首次使用即信任(TOFU)校验。包首次从 Git 仓库或包注册表下载时,它的指纹会被记录下来。后续下载的指纹必须与之前记录的值一致,否则会根据设置产生构建警告或失败。
引入了第二版 Package.resolved 文件格式,它能更准确地记录包的身份。