库包与可执行包
了解 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 反馈 — 无需本地设置。