Swift Package 教程:创建、发布与使用详解

发布于:2025-07-08 ⋅ 阅读:(11) ⋅ 点赞:(0)

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 创建(推荐)

  1. 打开 Xcode
  2. 菜单栏选择:File > New > Package
  3. 填写包名称和存储路径
  4. Xcode 会自动创建如下结构:
MyPackage/
├── Package.swift
├── Sources/
│   └── MyPackage/
│       └── MyPackage.swift
└── Tests/
    └── MyPackageTests/
        └── MyPackageTests.swift

方法二:通过命令行创建

创建一个库

mkdir MyLibrary
cd MyLibrary
swift package init --type library

输出:

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 test

输出:

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-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
name: "MyPackage"
  • 定义 Swift 包的名称。
  • 同时作为默认模块名和生成的产品名。
platforms
platforms: [.iOS(.v14)]
  • 指定支持的平台及最低版本;
  • 示例中表示只支持 iOS 14 及以上;
  • 可选平台还有:.macOS, .watchOS, .tvOS, .visionOS 等。
products
products: [
    .library(name: "MyPackage", targets: ["MyPackage"]),
]
  • 定义此包输出的产品,供其他项目使用;
  • .library 表示构建成静态库或动态库;
  • targets 指定由哪些目标组成这个库。
dependencies
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
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 项目中引入

  1. 打开 Xcode 项目
  2. 菜单栏选择 File > Add Packages…
  3. 输入 Git 仓库地址,例如:
    https://github.com/yourname/MyPackage
    
  4. 选择版本规则(例如:从 1.0.0 开始)
  5. 勾选要引入的库,点击“Add Package”

方式二:在 Package.swift 中添加依赖

.package(url: "https://github.com/apple/swift-argument-parser.git", from: "1.0.0")

并在 targets 中添加依赖:

.target(
    name: "MyTool",
    dependencies: [
        .product(name: "ArgumentParser", package: "swift-argument-parser"),
    ]
)

发布 Swift Package 到 GitHub

要发布你的 Swift Package,只需将它托管在 Git 仓库中(如 GitHub)并添加 tag:

git tag 1.0.0
git push origin 1.0.0

确保你的包满足以下条件:


调试与测试

Swift Package 支持在终端中直接构建、运行测试和生成 Xcode 工程,以下是常用命令:

构建包

swift build
  • 构建整个 Swift 包;
  • 默认生成的构建产物位于 .build/ 目录;
  • 支持添加参数如 --configuration release 或 --target MyTarget。

运行测试

swift test
  • 自动发现 Tests/ 目录下的所有 testTarget;
  • 可用于持续集成和本地测试验证;
  • 支持添加 --enable-code-coverage 开启测试覆盖率收集。

参考资料