0Pricing
Swift Academy · 课时

版本管理、冲突解决与 Swift 插件

管理版本范围、解决依赖冲突,并使用构建工具插件。

版本管理、冲突解决与 Swift 插件 是 CoddyKit 上的免费 Swift Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Swift Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Swift Academy 课程共包含 4 节课。

SPM 中的语义化版本控制

SPM 使用语义化版本控制:MAJOR.MINOR.PATCH。使用 from:、exact: 或 .upToNextMajor 声明版本要求。

.package(url: "https://github.com/apple/swift-log", from: "1.5.0"),
.package(url: "https://github.com/vapor/vapor", exact: "4.83.0"),
.package(url: "https://github.com/pointfreeco/swift-composable-architecture",
  .upToNextMajor(from: "1.0.0"))

Package.resolved

Package.resolved 会固定所有依赖项的确切版本。对于应用,请提交此文件;对于库,请省略此文件。

// Package.resolved (auto-generated):
// Pins exact commit hash and version for every dependency
// Run "swift package update" to update pinned versions

解决版本冲突

当两个包要求同一依赖项的不同版本时,SPM 会尝试找到兼容的版本。无法解决的冲突会导致构建错误。

// PackageA requires Logging 1.4.0
// PackageB requires Logging 1.5.0
// SPM resolves to 1.5.0 (satisfies both >= 1.x)
// Conflict: PackageA requires Logging 1.x, PackageB requires 2.x

强制指定版本

将发生冲突的依赖项直接添加到应用的 Package.swift 中,以覆盖 SPM 原本会选择的版本。

// Force Logging 1.5.0 by declaring it directly:
.package(url: "https://github.com/apple/swift-log", exact: "1.5.0")

构建工具插件

构建工具插件会在构建期间运行,以自动生成源代码、处理资源或运行代码检查工具。

// In Package.swift:
.plugin(
  name: "SourceGenerator",
  capability: .buildTool()
)

实现构建工具插件

构建工具插件遵循 BuildToolPlugin,并返回 BuildCommand 或 PrebuildCommand。

import PackagePlugin

@main
struct SourceGenerator: BuildToolPlugin {
  func createBuildCommands(context: PluginContext, target: Target) async throws -> [Command] {
    let output = context.pluginWorkDirectory.appending("Generated.swift")
    return [.buildCommand(
      displayName: "Generating sources",
      executable: try context.tool(named: "gen-tool").path,
      arguments: ["--output", output],
      outputFiles: [output]
    )]
  }
}

命令插件

命令插件可以从 Xcode 或 CLI 按需运行,适合用于格式化、代码检查或生成文档。

// In Package.swift:
.plugin(
  name: "FormatPlugin",
  capability: .command(intent: .sourceCodeFormatting())
)

运行命令插件

您可以从终端或 Xcode 的右键菜单执行命令插件。

// CLI:
swift package plugin format-source-code
// Xcode: right-click target → "Format Source Code"

将 SwiftLint 用作构建插件

SwiftLint 以 SPM 插件的形式提供,会在每次构建时自动运行。

.package(url: "https://github.com/realm/SwiftLint", from: "0.54.0"),
// In target:
.plugin(name: "SwiftLintBuildToolPlugin", package: "SwiftLint")

插件沙盒

插件在具有受限文件系统访问权限的沙盒中运行,以确保安全。它们只能写入指定的工作目录。

// Accessible from plugins:
// context.pluginWorkDirectory — writable work dir
// context.package.directory — read-only source
// target.sourceFiles — source file list

快速检查

Package.resolved 在 Swift 包中的作用是什么?

课程回顾

在 Package.swift 中使用语义化版本范围。对于应用,请提交 Package.resolved,以实现可复现的构建。通过直接声明依赖项来解决版本冲突。构建工具插件会在构建期间自动运行(代码检查工具、代码生成器)。命令插件按需运行。插件会受到沙盒保护,以确保安全。

常见问题解答

「版本管理、冲突解决与 Swift 插件」课时是免费的吗?

是的 — 「版本管理、冲突解决与 Swift 插件」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Swift Academy 课程的其余内容,请升级到 CoddyKit PRO。 Swift Academy 课程共包含 4 节课。

「版本管理、冲突解决与 Swift 插件」这节课中我会学到什么?

管理版本范围、解决依赖冲突,并使用构建工具插件。 你通过在浏览器中直接运行的动手代码来练习 Swift Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Swift Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Swift Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「版本管理、冲突解决与 Swift 插件」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Swift Academy 课中编写并运行代码吗?

能。每节 Swift Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. Package.swift:目标、产品与依赖
  2. 本地包与功能模块
  3. 二进制目标与 XCFramework
  4. 版本管理、冲突解决与 Swift 插件
← 返回 Swift Academy