10.1 预览 Swift 构建系统集成
4 分钟阅读
原文链接: https://docs.swift.org/latest/documentation/packagemanagerdocs/swiftbuildpreview/
10.1 预览 Swift 构建系统集成
了解、使用并预览包管理器的下一代构建系统。
概述
Swift Package Manager 正在预览新的构建系统 Swift Build,用它取代当前的原生构建系统。本文概述了这次预览的现状、关键差异以及已知问题。
我们鼓励你在自己的项目中试用这个新的构建系统,并报告你遇到的任何问题。
关于迁移到 Swift Build 的更多信息,参见这篇论坛帖子。
迁移计划
Swift Build 集成遵循下列阶段:
- 预览阶段(当前)——测试并收集反馈
- 功能对齐——解决剩余的差距和平台问题
- 默认迁移——过渡到以 Swift Build 为默认
- 旧构建系统弃用——逐步淘汰
native和xcode构建系统
如何使用 Swift Build 构建系统
要参与这次预览,请在运行 Swift Package Manager 命令时加上 --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 平台
- Swift Build 不支持 CodeView 调试信息格式。
- 跟踪:swiftlang/swift-package-manager#9302
- 影响:Windows 上的调试能力受限。
Linux 平台
- 某些 Linux 平台上存在覆盖率报告问题
功能缺口
swift run --repl命令可能无法导入某些模块。Swift Build 不为
scudo和fuzzer提供 sanitizer 支持。- 跟踪:swiftlang/swift-package-manager#9448
- 影响:测试和调试能力受限。
Swift Build 不支持
--enable-parseable-module-interfaces选项。带覆盖率的测试执行在某些平台上可能失败。
Swift SDK 和 toolset.json 文件大部分情况下无法工作。
Swift Build 不支持测试目标依赖其他测试目标。
- 变通做法:创建一个非测试目标,供测试目标依赖。
- 跟踪:swiftlang/swift-package-manager#9458
在
release配置下预期会出现的native构建失败,在 Swift Build 下可能不会失败Swift Build 不支持
--explicit-target-dependency-import-check标志。Swift Build 不向插件工具传递环境变量。
Swift Build 不支持可执行产品名与库产品名重叠(不区分大小写)。
报告问题
报告问题时请遵循以下步骤: