10.1 预览 Swift 构建系统集成

原文链接: https://docs.swift.org/latest/documentation/packagemanagerdocs/swiftbuildpreview/

10.1 预览 Swift 构建系统集成

了解、使用并预览包管理器的下一代构建系统。

概述

Swift Package Manager 正在预览新的构建系统 Swift Build,用它取代当前的原生构建系统。本文概述了这次预览的现状、关键差异以及已知问题。

我们鼓励你在自己的项目中试用这个新的构建系统,并报告你遇到的任何问题。

关于迁移到 Swift Build 的更多信息,参见这篇论坛帖子。

迁移计划

Swift Build 集成遵循下列阶段:

  1. 预览阶段(当前)——测试并收集反馈
  2. 功能对齐——解决剩余的差距和平台问题
  3. 默认迁移——过渡到以 Swift Build 为默认
  4. 旧构建系统弃用——逐步淘汰 native 和 xcode 构建系统

如何使用 Swift Build 构建系统

要参与这次预览,请在运行 Swift Package Manager 命令时加上 --build-system swiftbuild 标志:

1
2
3
swift build --build-system swiftbuild
swift test --build-system swiftbuild
swift run --build-system swiftbuild

关键改进与差异

  • --static-swift-stdlib:更严格的校验(报错而不是静默忽略)
    • 原生构建系统在某些平台上会静默忽略这个选项;Swift Build 现在会报错。
    • 在 Windows 上,Swift Build 构建系统会报错,直到它支持静态库为止。参见Windows Swift SDK 即将发生的变化。

详细差异

与 xcodebuild 一致的资源支持

  • 当使用 --build-system swiftbuild 面向 Apple 平台时,如果包中包含资源目录、故事板、Metal 源文件等资源类型,SwiftPM 现在会一致地应用与 xcodebuild 相同的资源规则。

Swift 驱动集成

  • --use-integrated-swift-driver 命令行选项被视为已弃用。--build-system swiftbuild 始终使用基于库的 Swift 驱动。
  • 在受支持的平台上,--build-system swiftbuild 会使用显式构建的 Clang 和 Swift 模块。

增强的诊断信息

  • 原生构建系统与 Swift Build 构建系统在日志记录和诊断信息上的差异

其他

  • 在面向 Apple 平台时,--build-system swiftbuild 支持构建通用二进制文件。示例调用:swift build --build-system swiftbuild --arch arm64 --arch x86_64
  • Swift Build 构建系统把构建产物输出到不同的位置。可以用 swift build --show-bin-path <其他构建参数> 来确定构建产物的位置。

已知问题

Windows 平台

Linux 平台

功能缺口

报告问题

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

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