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 开启测试覆盖率收集。

参考资料


相关推荐
2501_916008891 分钟前
uni-app iOS 日志与崩溃分析全流程 多工具协作的实战指南
android·ios·小程序·https·uni-app·iphone·webview
2501_915921431 小时前
iOS混淆工具实战 在线教育直播类 App 的课程与互动安全防护
android·安全·ios·小程序·uni-app·iphone·webview
Digitally3 小时前
没 iCloud, 如何数据从iPhone转移到iPhone
ios·iphone·icloud
笑尘pyrotechnic3 小时前
push pop 和 present dismiss
macos·ui·ios·objective-c·cocoa
Digitally4 小时前
如何将联系人从 iPhone 转移到 Redmi 手机
ios·智能手机·iphone
2501_915106325 小时前
Charles抓包工具在接口性能优化与压力测试中的实用方法
ios·性能优化·小程序·https·uni-app·压力测试·webview
Winson℡13 小时前
在 React Native 层禁止 iOS 左滑返回(手势返回/手势退出)
react native·react.js·ios
Digitally19 小时前
如何轻松地将联系人从 Mac 同步到 iPhone
macos·ios·iphone
2501_9159090621 小时前
uni-app iOS 上架常见问题与解决方案,实战经验全解析
android·ios·小程序·https·uni-app·iphone·webview
他们都不看好你,偏偏你最不争气1 天前
【iOS】对象复制与属性关键字
macos·ios·objective-c·cocoa·面向对象