9.1.1 SwiftPM 6.4 发布说明

原文链接: 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 6.4 下用 Swift Build 构建失败,可以用 --build-system native 标志回退到先前的原生构建系统:

1
2
3
swift build --build-system native
swift test --build-system native
swift run --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 文件以确定性的顺序渲染。

报告问题

报告问题时请遵循以下步骤:

  1. 先查看上面列出的已知问题,确认你的问题还没有被提及。
  2. 如果你的问题不在其中,请在 GitHub 上提交新 issue。
  3. 在你的报告中包含下列信息:
    • 失败的确切命令
    • 完整的错误输出
    • 系统信息,例如操作系统和 Swift 版本
    • 同一个命令在原生构建系统下是否正常