一句话:Swift Package Manager(swift包管理器,简称:SPM)就是在swift开发中用来替代CocoaPod的;在swift开发中,SPM完全可以替代CocoaPod的功能,并且速度更快,体验更佳;
一、安装SPM
SPM随Xcode 8.x 一起发布,终端上可查看SPM版本:
$ swift package --version
Swift Package Manager - Swift 3.0.0-dev
二、使用SPM创建项目
创建一个可执行项目,如SPMDemo:
$ mkdir SPMDemo
三、添加外部模块
我们试着把Alamofire模块添加到SPMDemo中;
1、编辑Package.swift文件,内容如下:
import PackageDescription
let package = Package(
name: "SPMDemo",
dependencies: [
.Package(url: "https://github.com/Alamofire/Alamofire.git", Version(4,2,0))
]
)
2、main.swift中引入并使用Alamofire
import Alamofire
print(Alamofire.request("https://httpbin.org/get"))
3、编译并运行
$ swift build
Compile Swift Module 'SPMDemo' (1 sources)
Linking ./.build/debug/SPMDemo
$ ./.build/debug/SPMDemo
GET https://httpbin.org/get
四、更新依赖包
假设我们需要将Alamofire 4.2.0“更新”到4.1.0;
1、编辑Package.swift,将Version(4,2,0)改为Version(4,1,0);
2、更新依赖:
$ swift package update
Cloning https://github.com/Alamofire/Alamofire.git
HEAD is now at c2134d7 Added release notes to the CHANGELOG and bumped the version to 4.1.0.
Resolved version: 4.1.0
可以用 swift package generate-xcodeproj更新一下Xcode工程文件,然后就可以build的运行了
五、创建模块(库)
假设我们需要创建一个BarModule,步骤如下:
1、初始化模块
$ mkdir BarModule
$ cd BarModule
$ swift package init --type library
2、编写模块代码
初始化为库时,自动生成了一个文件BarModule.swift,编辑BarModule.swift文件如下:
public struct BarModule {
public var text = "Hello, Module!"
public var num: Int
public init() {
num = 12
}
}
3、添加git tag
$ git init
$ git add .
$ git commit -m "Init Commit"
$ git tag 1.0.0
这个 tag 1.0.0就是我们引用时的版本号;
如果把这个BarModule推送到外部,如github上,就是可以通过引入外部引入的方式引入到项目中;
当然,我们还能本地引入模块;
六、本地引入模块
我们将在SPMDemo项目中引入BarModule;
1、编辑SPMDemo的Package.swift文件
import PackageDescription
let package = Package(
name: "SPMDemo",
dependencies: [
.Package(url: "https://github.com/Alamofire/Alamofire.git", Version(4,1,0)),
.Package(url: "../BarModule", Version(1, 0, 0))
2、swift build将BarModule添加到SPMDemo项目中
3、编辑main.swift文件
import Alamofire
import BarModule
print(Alamofire.request("https://httpbin.org/get"))
let bar = BarModule()
print(bar.num)
print(bar.text)
4、编译运行
$ swift build
$ ./.build/debug/SPMDemo
GET https://httpbin.org/get
12
Hello, Module!
七、待解决的问题
以下是笔者尚未解决的问题:
1、如何在Swift的iOS项目中应用Swift Package Manager进行依赖管理?
2、如何用Swift Package Manager发布管理二进制的SDK?
请发表评论