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_9160088910 小时前
HTTPS 双向认证抓包实战,原理、难点、工具与可操作的排查流程
网络协议·http·ios·小程序·https·uni-app·iphone
2501_9151063210 小时前
HTTPS 能抓包吗?实战答案与逐步可行方案(HTTPS 抓包原理、证书Pinning双向认证应对、工具对比)
网络协议·http·ios·小程序·https·uni-app·iphone
游戏开发爱好者810 小时前
App HTTPS 抓包实战,原理、常见问题与可行工具路线(开发 测试 安全 角度)
网络协议·安全·ios·小程序·https·uni-app·iphone
2501_9151063210 小时前
App HTTPS 抓包实战指南,原理、常见阻碍、逐步排查与工具组合
网络协议·http·ios·小程序·https·uni-app·iphone
CocoaKier11 小时前
苹果海外老账号续费,踩了个大坑!
ios·apple
大熊猫侯佩18 小时前
雪山飞狐之 Swift 6.2 并发秘典:@concurrent 的江湖往事
swiftui·swift·apple
2501_9151063220 小时前
上架 App 全流程解析,iOS 应用上架步骤、App Store 审核流程、ipa 文件上传与测试分发经验
android·ios·小程序·https·uni-app·iphone·webview
2501_916013741 天前
苹果应用上架全流程指南 iOS 应用发布步骤、App Store 审核流程、ipa 文件上传与 uni-app 打包实战经验
android·ios·小程序·uni-app·cocoa·iphone·webview
2501_915921431 天前
HTTPS 映射如何做?(HTTPS 映射配置、SNI 映射、TLS 终止、内网映射与 iOS 真机验证实战)
android·网络协议·ios·小程序·https·uni-app·iphone