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

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

方法二:通过命令行创建

创建一个库

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 项目中引入

  1. 打开 Xcode 项目

  2. 菜单栏选择 File > Add Packages...

  3. 输入 Git 仓库地址,例如:

    复制代码
    https://github.com/yourname/MyPackage
  4. 选择版本规则(例如:从 1.0.0 开始)

  5. 勾选要引入的库,点击"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

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


调试与测试

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

构建包

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

运行测试

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

参考资料


相关推荐
AirDroid_cn6 小时前
OPPO手机怎样被其他手机远程控制?两台OPPO手机如何相互远程控制?
android·windows·ios·智能手机·iphone·远程工作·远程控制
杂雾无尘8 小时前
开发者必看,全面解析应用更新策略,让用户无法拒绝你的应用更新!
ios·xcode·swift
xiangzhihong89 小时前
使用Universal Links与Android App Links实现网页无缝跳转至应用
android·ios
Digitally11 小时前
如何将iPhone备份到Mac/MacBook
macos·ios·iphone
帅次11 小时前
【iOS设计模式】深入理解MVC架构 - 重构你的第一个App
ios·swiftui·objective-c·iphone·swift·safari·cocoapods
东坡肘子16 小时前
高温与奇怪的天象 | 肘子的 Swift 周报 #092
人工智能·swiftui·swift
Swift社区16 小时前
Swift 解 LeetCode 320:一行单词有多少种缩写可能?用回溯找全解
开发语言·leetcode·swift
Frank学习路上1 天前
【IOS】XCode创建firstapp并运行(成为IOS开发者)
开发语言·学习·ios·cocoa·xcode
瓜子三百克1 天前
CALayer的异步处理
macos·ios·cocoa
吴Wu涛涛涛涛涛Tao1 天前
一步到位:用 Very Good CLI × Bloc × go_router 打好 Flutter 工程地基
flutter·ios