开发工具构建工具【免费下载链接】swift-package-managerThe Package Manager for the Swift Programming Language项目地址https://gitcode.com/gh_mirrors/sw/swift-package-manager点击查看免费下载本指南以 swift-package-manager 仓库中的 ReleaseNotes 文档为骨架系统梳理 Swift Package ManagerSwiftPM从 5.3 到 6.5 共十个版本的关键能力演进涵盖构建系统换代、插件体系、包注册表Registry、资源与二进制依赖、SBOM 与测试工具等主题并结合仓库源码给出对应的实现依据与迁移建议。读完本文你将掌握各版本新增特性的使用方式、tools-version 的开启条件、Swift Build 与原生构建系统的差异及回退方法以及每个特性对应的源码位置与文档入口。版本脉络概览ReleaseNotes 文档是一份索引页通过 Topics 列表组织各版本独立页面6.5、6.4、6.3、5.9、5.8、5.7、5.6、5.5、5.4、5.3。其中 5.3–5.4 的特性多为「基于 tools-version 选择性开启」而 6.x 版本则引入了影响全局的架构级变化例如默认构建系统的切换。下文按主题分组展开而不是机械地按版本罗列。构建系统演进从原生构建系统到 Swift BuildSwift 6.3SwiftBuild 预览Swift 6.3 首次将 SwiftBuild 作为下一代构建系统引入预览。按官方说明凡是能通过现有原生默认构建系统构建成功的包无需修改Package.swift或源码即可用 SwiftBuild 构建。你可以通过--build-system标志在三个命令上试用# 使用 SwiftBuild 构建 swift build --build-system swiftbuild # 使用 SwiftBuild 测试 swift test --build-system swiftbuild # 使用 SwiftBuild 运行可执行文件 swift run --build-system swiftbuild MyExecutable原生构建系统在 6.3 中仍为默认且持续受支持。完整的已知限制与平台相关问题见 SwiftBuildPreview 文档。Swift 6.4Swift Build 成为默认构建系统Swift 6.4 将 Swift Build 设为默认在所有 Swift 支持的平台上提供统一的构建体验同时首次为生成软件物料清单SBOM文档提供一等支持。构建系统的选择在源码中集中体现于 Sources/CoreCommands/Options.swift其_buildSystem选项默认值即为.swiftbuild而在多架构构建等场景下由architectures.count 1条件自动切换为 SwiftBuild。与原生构建系统的关键差异迁移到 Swift Build 后以下行为差异需要重点关注构建产物位置不同所有构建系统统一使用swift build --show-bin-path other build arguments查询产物输出目录不要依赖硬编码路径。--static-swift-stdlib校验更严格原生构建系统在部分平台上会静默忽略该选项Swift Build 改为直接报错在不支持静态链接标准库的平台上同样产生错误。测试运行器按目标生成Swift Build 为 manifest 中定义的每个测试目标分别创建测试运行器而原生构建系统只生成一个单体测试运行器。详细行为差异资源支持与 xcodebuild 对齐面向 Apple 平台时当包中包含 asset catalog、storyboard、Metal 源等资源类型SwiftPM 会与xcodebuild应用同一套资源规则。Swift Driver 集成--use-integrated-swift-driver选项已废弃且不再生效Swift Build 始终使用基于库的 Swift driver在受支持平台上Swift Build 使用显式构建的 Clang 与 Swift 模块。诊断增强相比原生构建系统Swift Build 可能产生不同的日志输出与诊断信息。通用二进制支持面向 Apple 平台构建 universal binary示例命令swift build --arch arm64 --arch x86_64。已知问题官方记录了三项与 Swift Build 相关的已知问题SDK 生成器产出的 Linux SDK 无法构建跟踪 issue package-manager#10006使用--explicit-target-dependency-import-check选项时行为不符合预期跟踪 issue #9620同时使用 swift-java 与构建工具插件的项目可能构建失败跟踪 issue #10060。故障排查与回退如果包在 Swift 6.4 下用 Swift Build 构建失败可通过--build-system native回退到之前的原生构建系统swift build --build-system native swift test --build-system native swift run --build-system native若原生构建系统构建成功而 Swift Build 失败请按下文「问题上报」一节提交 issue。Swift 6.5HTML 覆盖率报告Swift 6.5 为测试执行新增了 HTML 覆盖率报告能力对应 SE-0501: HTML Coverage Report 演进提案使覆盖率结果可以以浏览器可读的 HTML 形式输出方便团队共享与审查。测试相关能力Swift Testing 的重复执行6.4swift test新增--repeat-until与--maximum-repetitions参数支持按条件重复执行测试直到满足条件重复仅作用于满足重复条件的单个测试用例而非整个测试集--maximum-repetitions设置测试重复次数的上限。--repeat-until支持以下条件pass若测试失败则重复直到通过或达到maximum-repetitions上限fail若测试通过则重复直到失败或达到maximum-repetitions上限。若只提供--maximum-repetitions而不带--repeat-until则所有测试重复执行maximum-repetitions次。对应实现位于 Sources/Commands/SwiftTestCommand.swift其中maximumRepetitions与repeatUntil分别承载两个参数实际测试执行时通过--repetitions将上限传递给底层测试运行器。LLDB 调试器支持6.4在命令行中运行swift test --debugger会启动 LLDB 调试会话执行测试。该选项与多个其他参数互斥源码中在 Sources/Commands/SwiftTestCommand.swift 有完整校验逻辑不能与 release 配置同用调试需要调试符号、不能与--parallel/--num-workers同用调试需要顺序执行、不能与--list-tests同用、也不能与--show-coverage-path同用。详细用法见 SwiftTest 文档。关闭 testable5.7swift test新增--disable-testable-imports标志使用后测试将以禁用 testability 特性的方式构建即禁用import testable。自动测试发现成为默认5.4从 5.4 起自动测试发现在所有平台成为默认不再需要LinuxMain.swift该文件已废弃但若存在仍会被尊重。插件体系构建工具插件与命令插件5.6插件能力引入Swift 5.6 依据 SE-0303 引入构建工具插件自定义工具可在构建期间自动被调用典型用途是根据.proto等输入生成 Swift 源码从而把构建工具纳入构建图并安全地自动运行。SE-0332 进一步扩展命令插件用户可以直接从 SwiftPM CLI 或支持 Swift Package 的 IDE 调用命令插件执行文档生成、源码格式化等预定义语义动作或携带自定义动词的定制意图。5.7插件细化与资源生成插件体系进一步细化支持生成资源并改进诊断。入门指南见 Getting Started with Plugins。5.9网络权限与 C 目标支持allowNetworkConnections(scope:reason:)设置赋予命令插件网络访问权限作用域可限定为 Unix domain socket也可限定本地或远程 IP 连接并支持按端口限制非交互场景下可用命令行标志--allow-network-connections按特定作用域放行。构建工具插件可用于 C 系目标。6.3C 互操作与宏相关增强C 源码生成改进SwiftPM 现在可以正确支持插件工具向 C 模块目标生成 C 源文件也支持生成 module map、头文件与 API notes。这是实验特性需要在目标使用生成器插件的包的 manifest 中以如下方式在 tools-version 后附加标签// swift-tools-version: 6.3;(experimentalCGen)该实验模式存在若干限制每个目标只能有一个生成的 module mapmodule map 引用的头文件必须与其位于同一目录为 module map 中模块生成的 API notes 文件同理若生成了 module map则不能在目标的公共头路径中再提供一份。为便于找到生成的公共头文件构建系统会把插件输出目录中的include目录加入该模块及其所有传递依赖模块的 include path该目录名目前固定。此功能在原生构建系统与 SwiftBuild 中均可用。宏使用的预编译 Swift Syntax 支持对于仅由宏使用的库支持复用 swift-syntax 包的预编译产物便于宏目标间共享代码一旦检测到这类库可能被非宏目标使用SwiftPM 会自动禁用预编译产物——因为链接期混用 swift-syntax 预编译产物与源码构建产物曾引发诸多问题。符号图生成生成符号图的命令插件现在可以控制是否包含继承文档适配不同文档风格。包注册表Package Registry5.7解析与下载SwiftPM 依据 SE-0292 及其配套的服务规范支持包注册表能力。除发布外SwiftPM 可以通过定义好的 API 从任何合规注册表解析并下载依赖。接入方式为运行swift package-registry set子命令或直接编辑registries.json配置文件swift package工具的--use-registry-identity-for-scm与--replace-scm-with-registry选项也与注册表使用相关。完整说明见 UsingSwiftPackageRegistry 文档。5.8令牌认证与登录/登出SwiftPM 支持与包注册表交互时的令牌认证。swift package-registry新增login与logout两个子命令依据 SE-0378用于添加/移除注册表凭据。相关命令说明见 SwiftPackageRegistryCommands 文档。5.9发布与签名验证SwiftPM 现在可以依据 SE-0391 规范向注册表发布包并支持签名包注册表可能强制要求。Trust-on-first-useTOFU校验现在除指纹外还可以使用签名身份并同时作用于源码归档与包 manifest。Manifest API 与解析5.3条件依赖与资源、二进制依赖SwiftPM 5.3 允许为目标依赖声明条件例如按平台限制依赖从而灵活描述多平台目标依赖。示例 manifest// swift-tools-version:5.3 import PackageDescription let package Package( name: SamplePackage, dependencies: [ .package(url: https://github.com/pureswift/bluetooth, .branch(main)), .package(url: https://github.com/pureswift/bluetoothlinux, .branch(main)), ], targets: [ .target( name: SampleExecutable, dependencies: [ .product(name: Bluetooth, condition: .when(platforms: [.macOS])), .product(name: BluetoothLinux, condition: .when(platforms: [.linux])), ] ), ] )同一版本还引入了两类重要能力资源Resources包可以包含图片、asset catalog、storyboard 等资源Xcode 构建依赖该包的 App 时会把包代码与资源加入 App bundle 供运行时使用。资源还支持本地化内容除 asset catalog 内的本地化内容外Xcode 还支持.lproj目录下的独立本地化文件。⚠️ 注意资源支持的引入改变了包中非源文件的包含行为——tools-version 升级到 5.3 后对于 SwiftPM 不认识的任何文件类型必须在文件或目录级别显式声明是排除还是处理。详见 BundlingResources 文档。二进制依赖Binary dependencies包可以分发以 XCFramework 形式预构建的库从而依赖无法以源码形式分发的库Xcode 构建使用此类包的 App 时会将这些库嵌入 App bundle。5.4可执行目标、tools-version 格式化与缓存可执行目标声明 tools-version 5.4 的包可以显式将目标声明为可执行从而在包代码中使用main关键字。实现方式是在 manifest 中用executableTarget()声明目标告诉 SwiftPM 无论是否包含名为main的文件都将其视为可执行。编译器对可执行模块的常规规则仍然适用——例如单个目标不能同时存在main.swift文件与使用main的另一个文件。更灵活的 tools-version 格式化tools-version ≥ 5.4 时manifest 中swift-tools-version注释前后可以出现任意组合的水平空白字符例如//swift-tools-version: 5.4与// swift-tools-version: 5.4均合法同时 manifest 现在识别所有 Unicode 行终止符确保在非 Unix 平台编辑/构建的 manifest 也能被正确解析。依赖缓存SwiftPM 按用户维度缓存依赖仓库减少网络流量并提升后续解析性能。默认缓存位置因平台而异可用新的--cache-path选项控制SwiftPM 还会在~/.swiftpm创建指向默认缓存位置的符号链接。编译后的 manifest 也按用户缓存可用新的--manifest-cache选项覆盖。5.5集合与依赖便利初始化器包集合Package Collections包集合是作者以静态 JSON 文档形式发布、可放上 Web 或分发到本地文件系统的精选包列表SwiftPM 与 Xcode 本地共享同一份集合。试试官方 Apple Swift 包集合swift package-collection add https://developer.apple.com/swift/packages/collections/apple.json然后查看该集合包含哪些可直接导入的包swift package-collection describe https://developer.apple.com/swift/packages/collections/apple.json使用与发布指南见 PackageCollections 文档 与 PackageCollectionsCommand 文档。可执行目标测试测试目标现在可以像链接库一样链接可执行目标从而测试其中的数据结构与算法除main入口点本身外可执行文件的所有代码对单元测试可见。独立可执行文件仍会被链接也可照旧作为子进程测试。该能力面向 tools-version ≥ 5.5 的包。Manifest 改进新增两个依赖便利初始化器.package(url: String, revision: String)与.package(url: String, branch: String)目标级依赖解析接受更直观的.product(name:, package:)语法其中package为包 URL 定义的包名。其他单源文件可执行目标只要文件名不是main.swift就可以使用main——为绕开单文件模块的编译器特殊语义SwiftPM 在编译「只含一个非main.swiftSwift 源文件」的可执行模块时会传入-parse-as-library面向 tools-version ≥ 5.5 的包。同时修复了二进制依赖解析时未能解压二进制归档的问题。5.6语义版本与配置目录调整语义版本解析仅含 major 与 minor 的 Git tag如X.Y现在会被当作X.Y.0处理改善与既有仓库的兼容性。严格遵循 SemVer 2.0.0版本字符串解析严格遵循 Semantic Versioning 2.0.0 规范——首个-仅在前面没有时才作为版本核心与预发布标识的分隔符否则视作构建元数据的一部分比较逻辑忽略构建元数据标识两个语义版本当且仅当 major、minor、patch 与预发布标识均相等时视为相等。API 变化.package(name:, url:)弃用改为.package(url:)新增便利初始化器.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)。配置目录迁移project/.swiftpm/configmirrors 文件迁至project/.swiftpm/configuration/mirrors.json~/.swiftpm/config/collections.jsoncollections 文件迁至~/.swiftpm/configuration/collections.json。5.6 会自动从旧位置复制文件到新位置并提示用户删除旧文件。TOFU 安全校验为提升包安全性SwiftPM 执行信任首次使用TOFU校验——包首次从 Git 仓库或注册表下载时记录指纹后续下载的指纹必须与记录一致否则视设置产生构建警告或失败。Package.resolved 新格式引入第二版Package.resolved文件格式更精确地捕获包身份。5.8语言特性开关与 manifest 变化目标级特性开关目标可以指定所需的即将推出的语言特性manifest 语法扩展出在目标级设置enableUpcomingFeature与enableExperimentalFeature的 API依据 SE-0362。纯二进制可执行产品允许暴露「完全由 artifact bundle 支撑的二进制目标」构成的可执行产品从而可以把二进制可执行文件作为独立包单独分发不依赖使用它们的插件。Foundation 不再隐式导入tools-version 5.8 及以上的包manifest 不再隐式导入Foundation如用到 Foundation API 需显式import Foundation。5.8其他改进离线行为优化当磁盘上每包缓存或共享缓存存在兼容的已缓存依赖版本时SwiftPM 会检查网络可用性决定是否尝试更新已检出的依赖版本离线时直接使用缓存版本而不更新。--pkg-config-path选项build、test、run命令新增--pkg-config-path作为PKG_CONFIG_PATH环境变量的替代用于指定搜索.pc文件的额外路径可多次使用该选项指定多个路径。符号图扩展块swift package dump-symbol-graph新增--emit-extension-block-symbols与--omit-extension-block-symbols。前者输出扩展块符号格式的符号图文件默认行为不变未来默认改为--emit-extension-block-symbols后后者用于显式禁用。包特质、模块别名与跨编译等主题swift package show-traits6.3新命令帮助开发者更容易地发现包支持的 traits。命令用法见 PackageShowTraits 文档包特质的使用与条件依赖示例可在 Fixtures/Traits 目录下找到成套的测试包。模块别名5.7不同包中的同名模块可通过模块别名消除歧义SE-0339。在 package manifest 中为目标添加产品依赖时使用新参数moduleAliases为冲突模块提供新唯一名。详细机制见 ModuleAliasing 文档。跨编译5.9基于 Swift SDK bundle 格式支持交叉编译该特性仍视为实验性。嵌入资源5.9新增.embedInCode资源规则通过生成字节数组把资源内容嵌入可执行代码例如生成struct PackageResources { static let best_txt: [UInt8] [104,101,108,108,111,32,119,111,114,108,100,10] }package访问修饰符5.9包内不同目标/模块间无需public即可访问符号SwiftPM 自动设置编译器配置使其开箱即用。CompilerPluginSupport 模块5.9支持定义宏目标把自定义 Swift 宏作为库中的 API 编写与分发。单目标源码布局放宽5.9包只有一个目标时源码可分布在./Sources目录任意位置若源码放在./Sources/target子目录下或包内存在多个目标则仍沿用原有约定。镜像文件确定性顺序6.4通过swift package config command添加或移除镜像配置时此前mirrors.json会被以非确定性顺序整体重写现在会以确定性顺序渲染该文件。SBOM 生成6.4SwiftPM 可以为 Swift 包生成 SBOM 文档详情见 GeneratingSBOMs 文档底层实现位于 Sources/SBOMModel 目录支持 SPDX 与 CycloneDX 两种格式的编码与校验。问题上报规范各版本 Release Notes 均给出统一的问题上报步骤适用于所有版本先查阅上文列出的已知问题确认你的问题尚未被识别若未被列出则提交新 issue报告须包含以下信息失败的确切命令完整错误输出系统信息操作系统、Swift 版本等同一命令在原生构建系统下是否正常工作该条对 6.3/6.4 的 Swift Build 迁移问题尤其关键。版本选择与迁移建议综合各版本 Release Notes 可以归纳出如下实践要点tools-version 是特性开关的总闸5.3–5.4 的多数能力条件依赖、资源、二进制依赖、可执行目标、自动测试发现以及 5.5、5.8 的部分能力都要求声明对应的 tools-version升级 tools-version 前需评估资源包含行为变化5.3与 Foundation 隐式导入移除5.8等破坏性影响。6.x 是架构转折点6.3 引入 SwiftBuild 预览6.4 将其设为默认6.5 补齐 HTML 覆盖率。迁移到 6.4 后应使用swift build --show-bin-path查询产物路径并注意--static-swift-stdlib、测试运行器数量、资源规则与诊断输出的差异遇到失败可通过--build-system native回退。安全与合规能力逐步闭环从 5.6 的 TOFU 指纹、5.8 的注册表令牌认证到 5.9 的签名发布与 6.4 的 SBOM 生成供应链安全与依赖合规的拼图逐步完整。每个版本的完整条目都以独立文档维护在 Sources/PackageManagerDocs/Documentation.docc/ReleaseNotes 目录下读者可按需查阅对应版本的权威细节。赞分享开发工具构建工具【免费下载链接】swift-package-managerThe Package Manager for the Swift Programming Language项目地址https://gitcode.com/gh_mirrors/sw/swift-package-manager点击查看免费下载相关推荐Isaac Lab 版本发布全览与迁移指南从 v1.0.0 到 v2.3.2 的演进脉络Isaac Lab 版本发布全览与迁移指南从 v1.0.0 到 v2.3.2 的演进脉络 导读 本文基于 Isaac Lab 官方 Release Notes人工智能强化学习机器人具身智能深度学习google_maps_flutter 版本演进全景从 0.0.2 预览版到 2.18.0 的功能、API 与迁移指南google_maps_flutter 版本演进全景从 0.0.2 预览版到 2.18.0 的功能、API 与迁移指南 导读 本文以 Flutter 官方维护跨平台移动开发UI组件开发工具WebGoat 版本发布全览从 2026.3 到 8.x 的功能演进、关键修复与工程迁移WebGoat 版本发布全览从 2026.3 到 8.x 的功能演进、关键修复与工程迁移 WebGoat 是 OWASP 维护的一款刻意设计为存在漏洞的 We网络安全应用安全渗透测试教育上一篇Meteor package.js 完全指南包描述、依赖声明与构建插件开发实战下一篇RuntimeUnityEditor 项目推荐创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
