Xcode 11 已经有了对 Swift Package 的支持,今后使用 Swift 编写的 iOS 项目就可以开始尝试使用 SwiftPM 逐步替换 CocoaPods 和 Carthage 了。常用的使用 Swift 编写的三方库如 Alamofire
、Moya
等也都已经支持了 SwiftPM。
本文通过一个例子来介绍 Swift Package 的创建、发布以及使用。
准备工作
由于打算将创建的 Package 发布到 Github,首先需要在 Xcode 上登陆 Github,这将方便后续的上传和下载集成。
Swift Package 的创建
Xcode 快捷键 shift + control + command + N
可以快速创建一个 Swift Package,我们命名为 Hello
。创建项目的时候勾选 Create Git repository on my Mac
,因为后续还要上传 Github。
创建后,目录中会有一个 Package.swift
文件,一个 Sources
文件夹包含着这个包将要包含的代码,以及一个 Tests
文件夹包含测试文件。
其中,Hello.swift
文件中代码为
1 | struct Hello { |
由于做成 Package 之后就是跨模块访问,我们加上访问控制关键字,并创建一个构造器(因为默认的构造器是 internal 关键字),然后增加一个方法。
1 | public struct Hello { |
之后我们可以提交并上传了,但是这里我们预留了一个 bug。
我们将代码推到 Github 上的流程,可以先在 Github 上创建一个空项目,然后本地和远程仓库关联,也可以直接通过 Xcode 在 Github 上创建一个远程仓库(因为已经在 Xcode 上登陆了 Github,这一步非常简单)。这个仓库完全可以设置为私有的,也就是说我们为自己项目创建的 Package 是可以托管在 Github 上的。
下一步是为当前 Git 版本打标签,这将成为 Package 的版本号。需要说明的是,这个版本号是遵守语义化版本控制规范的,具体可参考 Semantic Versioning 2.0.0。打了标签之后,记得还需要 Push 一次,将标签同步到远程仓库中。至此,我们已经创建一个 Swift Package 并上传到了 Github。
Swift Package 的使用
我们再新建一个项目,名为 Demo,之后尝试添加之前的 Package。
图 1 - 创建 Swift Package
点击加号后,由于已经登陆了 Github,弹出的列表中可以找到之前创建的 Package,当然也可以复制 URL 进行搜索。找到后,会提示我们设置版本规则。其中,默认的 Up to Next Major
的意思是从指定的版本到下个大版本,这样进行小版本更新时,我们可以轻松对 Package 进行更新。再次点击下一步后,会提示选取 Product 以及添加到的 Target,我们都不加修改点击完成。这样,这个 Package 就集成到我们都项目中了。
之后我们在项目中使用一下。
1 | // |
至此,我们成功地在项目中集成并使用了一个 Swift Package。
修改 Package
我们这个 Package 是有问题的,输出的不是 Hello
而是 Hell
。
所以我们进一步可以去修改那个 Package,然后再次上传。对于新的版本需要打一个新的标签,由于只是 bug 修复,新版本就是 1.0.1
。
之后对于 Demo 项目,要做的只需要更新 Package 到最新版本,操作是 File->Swift Packages->Update to Latest Package Versions
,之后这个 Package 就会更新到 1.0.1
版本,这个项目我们不修改任何代码重新运行,打印结果从 Hell, World!
修正为 Hello, World!
。