Swift Package Manager 是苹果官方推出的库管理工具。类似 cocoapods。
准备事项:
- 一个需要封装的库
- 存放库的远程仓库,如 github、gitee、gitLab等
创建Package
创建 Package 有2种方式,命令行和 Xcode。
一、命令行
首先创建包名
mkdir SPMTest
cd SPMTest
创建 package 项目
swift package init
此时我们已经创建好了一个包项目,只需要双击 Package.swift 文件即可启动 Xcode,进行编码和测试。
我们也可以使用swift package generate-xcodeproj
来生成 xcode 项目,但是一般不需要。
Tips: 对于已经存在的库, 我们可以指定源码路径, 不一定要使用默认的构建源码路径
二、Xcode
通过 Xcode 开发工具,我们也可以新建一个 Package 项目。
输入库名即可。
Package 文件编辑
Package.swift
相当于 Cocoapods 库的 xxx.podspes
文件,是对库的配置。
示例:
import PackageDescription
let package = Package(
name: "SPMTest",
products: [
// Products define the executables and libraries a package produces, and make them visible to other packages.
.library(
name: "SPMTest",
targets: ["SPMTest"]),
],
dependencies: [
// Dependencies declare other packages that this package depends on.
// .package(url: /* package url */, from: "1.0.0"),
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages this package depends on.
.target(
name: "SPMTest",
dependencies: []),
.testTarget(
name: "SPMTestTests",
dependencies: ["SPMTest"]),
]
)
默认添加 name、products、targets,还可以添加其他参数,但是需要按照顺序。
参数解释
name:库包的名称;
defaultLocalization:资源的默认本地化;
platforms:支持的最低系统平台的列表;
pkgConfig:用于C模块的名称。如果存在,Xcode将搜索.pc文件以获取系统目标所需的其他标志;
providers:系统目标的程序包提供者;
products:此软件包可让客户使用的产品列表;
dependencies:软件包依赖项列表(可空,或需要其它外部依赖);
targets:属于此软件包的目标列表(源码目录、测试目录);
swiftLanguageVersions:此软件包兼容的Swift版本列表;
cLanguageStandard:用于此程序包中所有C目标的C语言标准;
cxxLanguageStandard:用于此程序包中所有C ++目标的C ++语言标准;
测试
一、 单元测试
自行封装的库,建议写好单元测试,以便后期维护和保证库的稳定性。
二、使用测试
在库还没有推到远程仓库,或者没有发布时,本地该如何测试?
将库文件夹手动拉入项目,手动添加库
Tips: Xcode 可在不删除远程库的条件下,添加本地库调试(本地库会覆盖远程库),调试完成删除即可
使用
我们可以在 Xcode 的菜单栏 File -> Swift Pakcages -> Add Package Dependncy进入添加页面。
也可以直接选择项目,进入PROJECT 选择 Swift Packages
复制库地址或者搜索库选择之后,选择版本号,等待下载就可以了。
Tips: 没有发布 release 的库 只能通过
branch
或者commit
下载代码
项目使用的 SPM 库文件路径在[appName].xcodeproj/project.workspace/xcshareddata/swiftpm/Package.resolved
更新第三方库
我们使用 Cocoapods 的时候可以随时通过 pod install
或者 pod update
将库更新到最新,如果使用 Swift Package Manager 怎么更新了。
虽然Xcode会更新你的包依赖并自动解析包版本,但你可以从File > Swift Packages菜单中触发这两个动作。
如下图,选择更新库。
参考
Swift Package Manager介绍 – raywenderlich
如何让自己的库支持 Swift Package Manager
how to use swift package manager – Mobile Thinking: 英文介绍,包含如何创建和使用。