Swift Package 是 Apple 推出的官方依赖管理工具,基于 Swift Package Manager(SPM)。它让我们可以轻松地组织代码模块,复用组件,同时也是开源库分享和集成的标准方式。
本教程将介绍 Swift Package 的概念、创建、结构、使用与发布等内容,帮助大家掌握 Swift Package 的使用。
什么是 Swift Package?
Swift Package 是一组 Swift 源代码、资源文件、依赖项和构建信息的集合。它的核心文件是 Package.swift
,用于声明包的名称、平台、版本、依赖等。
Swift Package 的优势
- 原生支持 Swift 语言
- 集成简单(通过 Xcode 或命令行)
- 支持模块化开发
- 支持依赖管理和版本控制
- 跨平台支持(iOS, macOS, watchOS, tvOS, Linux)
如何创建 Swift Package
方法一:通过 Xcode 创建(推荐)
-
打开 Xcode
-
菜单栏选择:File > New > Package
-
填写包名称和存储路径
-
Xcode 会自动创建如下结构:
MyPackage/
├── Package.swift
├── Sources/
│ └── MyPackage/
│ └── MyPackage.swift
└── Tests/
└── MyPackageTests/
└── MyPackageTests.swift
方法二:通过命令行创建
创建一个库
bash
mkdir MyLibrary
cd MyLibrary
swift package init --type library
输出:
swift
Creating library package: MyLibrary
Creating Package.swift
Creating .gitignore
Creating Sources/
Creating Sources/MyLibrary/MyLibrary.swift
Creating Tests/
Creating Tests/MyLibraryTests/
Creating Tests/MyLibraryTests/MyLibraryTests.swift
快速测试
swift
swift test
输出:
swift
Building for debugging...
[13/13] Linking MyLibraryPackageTests
Build complete! (3.54s)
Test Suite 'All tests' started at 2025-07-04 22:49:15.840.
Test Suite 'All tests' passed at 2025-07-04 22:49:15.841.
Executed 0 tests, with 0 failures (0 unexpected) in 0.000 (0.001) seconds
Test run started.
Testing Library Version: 124.4
Target Platform: arm64e-apple-macos14.0
Test example() started.
Test example() passed after 0.001 seconds.
Test run with 1 test passed after 0.001 seconds.
小结
• swift package init 是快速搭建包项目的工具;
• --type library 生成一个模块库项目,适合复用代码;
• 搭配 swift build 和 swift test,可以快速构建和测试;
• 生成结构符合 SwiftPM 规范,可直接被 Xcode 识别和引入。
Package.swift 文件结构
这是 Swift Package 的核心声明文件。示例如下:
swift
// swift-tools-version:5.9
import PackageDescription
let package = Package(
name: "MyPackage",
platforms: [.iOS(.v14)],
products: [
.library(name: "MyPackage", targets: ["MyPackage"]),
],
dependencies: [
.package(url: "https://github.com/Alamofire/Alamofire.git", from: "5.6.0")
],
targets: [
.target(
name: "MyPackage",
dependencies: ["Alamofire"]),
.testTarget(
name: "MyPackageTests",
dependencies: ["MyPackage"]),
]
)
字段详解
name
swift
name: "MyPackage"
- 定义 Swift 包的名称。
- 同时作为默认模块名和生成的产品名。
platforms
swift
platforms: [.iOS(.v14)]
- 指定支持的平台及最低版本;
- 示例中表示只支持 iOS 14 及以上;
- 可选平台还有:
.macOS
,.watchOS
,.tvOS
,.visionOS
等。
products
swift
products: [
.library(name: "MyPackage", targets: ["MyPackage"]),
]
- 定义此包输出的产品,供其他项目使用;
.library
表示构建成静态库或动态库;targets
指定由哪些目标组成这个库。
dependencies
swift
dependencies: [
.package(url: "https://github.com/Alamofire/Alamofire.git", from: "5.6.0")
]
- 指定依赖的外部 Swift 包;
from: "5.6.0"
表示兼容该版本及以上的小版本(直到不兼容的主版本);- 也支持:
exact: "1.0.0"
精确版本;branch: "main"
指定分支;revision: "commitHash"
指定 commit。
targets
swift
targets: [
.target(
name: "MyPackage",
dependencies: ["Alamofire"]
),
.testTarget(
name: "MyPackageTests",
dependencies: ["MyPackage"]
),
]
- target 是构建的最小单元,通常与
Sources/
和Tests/
目录对应; .target
: 主模块(源代码);.testTarget
: 测试模块。
.target
- name: 模块名;
- dependencies: 模块依赖,可以是外部包或同一项目中的其他 target。
.testTarget
- 用于测试目标模块;
- 测试代码一般放在
Tests/模块名Tests/
。
使用 Swift Package
方式一:在 App 项目中引入
-
打开 Xcode 项目
-
菜单栏选择 File > Add Packages...
-
输入 Git 仓库地址,例如:
https://github.com/yourname/MyPackage
-
选择版本规则(例如:从 1.0.0 开始)
-
勾选要引入的库,点击"Add Package"
方式二:在 Package.swift
中添加依赖
swift
.package(url: "https://github.com/apple/swift-argument-parser.git", from: "1.0.0")
并在 targets
中添加依赖:
swift
.target(
name: "MyTool",
dependencies: [
.product(name: "ArgumentParser", package: "swift-argument-parser"),
]
)
发布 Swift Package 到 GitHub
要发布你的 Swift Package,只需将它托管在 Git 仓库中(如 GitHub)并添加 tag:
bash
git tag 1.0.0
git push origin 1.0.0
确保你的包满足以下条件:
- 有效的
Package.swift
- 遵循 Semantic Versioning
- 已推送 tag 到远程仓库
调试与测试
Swift Package 支持在终端中直接构建、运行测试和生成 Xcode 工程,以下是常用命令:
构建包
swift
swift build
- 构建整个 Swift 包;
- 默认生成的构建产物位于 .build/ 目录;
- 支持添加参数如 --configuration release 或 --target MyTarget。
运行测试
swift
swift test
- 自动发现 Tests/ 目录下的所有 testTarget;
- 可用于持续集成和本地测试验证;
- 支持添加 --enable-code-coverage 开启测试覆盖率收集。
参考资料
- Apple 官方文档: https://developer.apple.com/documentation/swift_packages
- Swift.org 官方文档: https://www.swift.org/package-manager/