9.1.1 SwiftPM 6.4 发布说明
3 分钟阅读
原文链接: https://docs.swift.org/latest/documentation/packagemanagerdocs/6.4/
9.1.1 SwiftPM 6.4 发布说明
Swift Package Manager 6.4 把 Swift Build 作为新的默认构建系统,在 Swift 支持的所有平台上提供统一的构建体验。这个版本还增加了对生成软件物料清单(SBOM)文档的一等支持。
Swift Build:新的默认构建系统
SwiftPM 已把默认构建系统改为 Swift Build。
相对原生构建系统的关键变化
- Swift Build 把构建产物输出到不同的位置。对于所有构建系统,都可以用
swift build --show-bin-path <其他构建参数>来确定构建产物的位置。 - Swift Build 对
--static-swift-stdlib执行更严格的校验,遇到问题会报错,而不是静默忽略该选项。- 原生构建系统在某些平台上会静默忽略这个选项;Swift Build 现在会报错。
- 在不支持静态链接标准库的平台上,Swift Build 会产生错误。
- Swift Build 会为包清单中定义的每个测试目标创建一个测试运行器,而原生构建系统只创建一个单一的整体测试运行器。
详细差异
下面各节描述迁移到 Swift Build 时会出现的行为差异。
与 xcodebuild 一致资源支持
在面向 Apple 平台时,当包中包含资源目录、故事板和 Metal 源文件等资源类型时,SwiftPM 会一致地应用与 xcodebuild 相同的资源规则。
Swift 驱动集成
--use-integrated-swift-driver命令行选项已弃用,没有任何效果。Swift Build 始终使用基于库的 Swift 驱动。- 在受支持的平台上,Swift Build 使用显式构建的 Clang 和 Swift 模块。
增强的诊断信息
与原生构建系统相比,Swift Build 可能产生不同的日志输出和诊断信息。
通用二进制文件
- 在面向 Apple 平台时支持构建通用二进制文件。示例调用:
swift build --arch arm64 --arch x86_64
已知问题
Swift Build 无法构建使用 SDK 生成器生成的 Linux SDK 的项目。
- 跟踪 issue:package-manager#10006
构建时使用
--explicit-target-dependency-import-check命令行选项的行为不符合预期。- 跟踪 issue:swiftlang/swift-package-manager#9620
构建使用 swift-java 和构建工具插件的项目可能失败。
疑难排查
如果你的包在 Swift 6.4 下用 Swift Build 构建失败,可以用 --build-system native 标志回退到先前的原生构建系统:
| |
如果你的构建在用原生构建系统时通过、用 Swift Build 时失败,请报告该问题。
软件物料清单(SBOM)支持
Swift Package Manager 现在可以为你的 Swift 包生成 SBOM。更多信息参见生成软件物料清单(SBOM)。
Swift Testing 的测试重复运行
swift test 现在支持通过 --repeat-until 和 --maximum-repetitions 参数反复运行测试,直到满足某个条件。重复运行只影响那些满足重复条件的单个测试用例。
--maximum-repetitions给出测试重复次数的上限。--repeat-until支持下列重复条件:pass:如果测试失败,就反复运行直到它通过,或者达到maximum-repetitions为止。fail:如果测试通过,就反复运行直到它失败,或者达到maximum-repetitions为止。
如果只提供 --maximum-repetitions 而没有提供 --repeat-until,所有测试都会重复运行 maximum-repetitions 次。
swift test 中的 LLDB 调试器支持
运行 swift test --debugger 会在命令行的 LLDB 调试会话中启动测试。更多信息参见 swift test。
镜像配置的确定性顺序
使用 swift package config <command> 添加或移除镜像配置时,生成的 mirrors.json 文件此前会以非确定性的顺序被完全重写。SwiftPM 的改动会让 mirrors.json 文件以确定性的顺序渲染。
报告问题
报告问题时请遵循以下步骤: