0Pricing
Swift Academy · 课时

库包与可执行包

了解 SwiftPM 库 包与 可执行 包的区别:如何声明产品和目标、使用库,以及运行可执行文件。

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

两种产品类型

SwiftPM 包可以作为库(供导入的代码)或可执行程序(可运行的工具)发布。

  • 在 Package.swift 中声明产品
  • 组织目标和源代码
  • 使用库;运行可执行程序

库产品基础

库会公开其他代码可以 import 的模块。不需要入口点。

// Package.swift (illustrative library)
// import PackageDescription
// let package = Package(
//   name: "GreeterLib",
//   products: [
//     .library(name: "GreeterLib", targets: ["GreeterLib"]),
//   ],
//   targets: [
//     .target(name: "GreeterLib"),
//     .testTarget(name: "GreeterLibTests", dependencies: ["GreeterLib"]),
//   ]
// )
//
// Sources/GreeterLib/Greeter.swift
public struct Greeter {
    public init() {}
    public func hello(_ name: String) -> String { "Hello, \\(name)!" }
}
print(Greeter().hello("Ana")) // demo run

可执行产品基础

可执行程序具有入口点(main.swift),并会构建可运行的二进制文件(swift run)。

// Package.swift (illustrative executable)
// import PackageDescription
// let package = Package(
//   name: "greeter",
//   products: [ .executable(name: "greeter", targets: ["App"]) ],
//   targets: [ .executableTarget(name: "App") ]
// )
//
// Sources/App/main.swift
let args = CommandLine.arguments.dropFirst()
let who = args.first ?? "world"
print("Hello, \\(who)")

依赖库

在使用方中使用 .package 和 .product 来导入库。使用语义化版本固定依赖(例如 from: "1.0.0")。

// In the consumer's Package.swift (illustrative):
// dependencies: [
//   .package(url: "https://example.com/GreeterLib.git", from: "1.0.0")
// ],
// targets: [
//   .executableTarget(
//     name: "App",
//     dependencies: [ .product(name: "GreeterLib", package: "GreeterLib") ]
//   )
// ]
//
// Sources/App/main.swift
// import GreeterLib
struct Dummy {}
print("Add import GreeterLib in your app to use its APIs.")

拆分职责

共享代码:将核心逻辑放入库,并让可执行程序只承担薄封装。

// Package.swift can expose both a library and an executable:
// products: [
//   .library(name: "GreeterLib", targets: ["GreeterLib"]),
//   .executable(name: "greeter", targets: ["GreeterCLI"]),
// ],
// targets: [
//   .target(name: "GreeterLib"),
//   .executableTarget(name: "GreeterCLI", dependencies: ["GreeterLib"]),
// ]
//
// Reuse logic in the library; keep CLI thin.
print("Tip: put reusable logic in the library; the CLI depends on it.")

构建与运行命令

使用 swift build 构建库,并使用 swift test 运行测试。通过 swift run <name> 运行可执行程序。

// Library: build & test
//   swift build
//   swift test
//
// Executable: run & release
//   swift run greeter Ana
//   swift build -c release
//
// Artifact:
//   .build/release/greeter
print("Use swift run for executables; import libraries into apps.")

库与可执行程序的定义

快速检查:在 SwiftPM 中,库与可执行程序有什么区别?

回顾

回顾:使用库在不同应用之间共享代码,使用可执行程序发布 CLI/工具。在 Package.swift 中声明产品和目标,并通过 .package + .product 依赖库。

常见问题解答

「库包与可执行包」课时是免费的吗?

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

「库包与可执行包」这节课中我会学到什么?

了解 SwiftPM 库 包与 可执行 包的区别:如何声明产品和目标、使用库,以及运行可执行文件。 你通过在浏览器中直接运行的动手代码来练习 Swift Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Swift Academy 需要有经验吗?

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

「库包与可执行包」课时需要多长时间?

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

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

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

此课程中的所有课时

  1. 库包与可执行包
  2. 语义化版本控制与发布标记
  3. 使用 swift test 和构建产物的 CI 基础
← 返回 Swift Academy