1、通过命令行创建包
我们创建一个可执行文件类型的包
$ mkdir SPMTestDemo //创建文件夹
$ cd SPMTestDemo //进入文件夹
$ swift package init --type executable //创建可执行的二进制包
Creating executable package: SPMTestDemo //以下为创建的工程文件
Creating Package.swift
Creating README.md
Creating .gitignore
Creating Sources/
Creating Sources/SPMTestDemo/main.swift
Creating Tests/
Creating Tests/SPMTestDemoTests/
Creating Tests/SPMTestDemoTests/SPMTestDemoTests.swift
$ swift build //编译并生成可执行的二进制文件
[3/3] Build complete!
$ swift run //通过命令行运行可执行文件
[0/0] Build complete!
Hello, world! //运行结果
再通过 swift package init 或swift package init --type library创建一个静态库包,后面我们将静态库作为依赖库引入到SPMTestDemo工程中。
- 二进制包文件结构
-
静态包文件结构
静态包
两者唯一的区别就是前者会生成二进制可执行文件,可以直接用命令行执行。如果创建的是Library,用命令行执行会提示没有可执行文件,这个时候只需要在Sources目录下创建一个main.swift文件就可以执行了。
2、添加依赖包
这里对SPMTestDemo工程配置三方SwiftyJSON依赖包添加,双击Package.swift
文件即打开Xcode,就可以对Package.swift
配置文件进行修改。
import PackageDescription
let package = Package(
name: "SPMTestDemo",
dependencies: [
// Dependencies declare other packages that this package depends on.
.package(url: "https://github.com/SwiftyJSON/SwiftyJSON.git", from: "5.0.2"),
],
targets: [
.target(
name: "SPMTestDemo",
dependencies: ["SwiftyJSON"]),
.testTarget(
name: "SPMTestDemoTests",
dependencies: ["SPMTestDemo"]),
]
)
**注: **dependencies可以指定分支、具体的commit编号、版本范围等。
稍等片刻,等待SwiftyJSON库加载完成。
然后我们在main.swift文件中填写import SwiftyJSON
,查看下依赖包是否引入成功.
import SwiftyJSON
let json = JSON(["name":"www", "age": 25, "sex":"男"])
print(json)
print("Hello, world!")
然后运行 swift run
:
$ swift run
[3/3] Build complete!
{
"name" : "www",
"age" : 25,
"sex" : "男"
}
Hello, world!
输入结果证明SwiftyJSON
依赖包被引入成功
3、定义一个库作为其他项目的依赖包
通过命令行创建自定义依赖库
$ mkdir SPMLDemo
$ cd SPMLDemo/
$ swift package init
Creating library package: SPMLDemo
Creating Package.swift
Creating README.md
Creating .gitignore
Creating Sources/
Creating Sources/SPMLDemo/SPMLDemo.swift
Creating Tests/
Creating Tests/SPMLDemoTests/
Creating Tests/SPMLDemoTests/SPMLDemoTests.swift
修改自定义依赖库代码,使之可以具备外部访问能力
public struct SPMLDemo {
var text = "Hello, SPMLDemo!"
public var num:Int
public init() {
num = 20
}
}
进行build(命令swift build),看一看是否可以顺利编译成功。
注:因为SPM依赖包必须使用git url和版本号,所以我们需要为我们的库创建一个git仓库并提交代码和打tag。
$ git init
$ git add .
$ git commit -m "Initial Commit"
$ git tag 1.0.1
继续,在SPMTestDemo工程的Package.swift文件中加入对SPMLDemo
的依赖配置。
import PackageDescription
let package = Package(
name: "SPMTestDemo",
dependencies: [
// Dependencies declare other packages that this package depends on.
.package(url: "https://github.com/SwiftyJSON/SwiftyJSON.git", from: "5.0.2"),
//因为没有推送到远程仓库,所以这里用相对路径,from就是我们刚才打的tag
.package(url: "../SPMLDemo", from: "1.0.1") ,
],
targets: [
.target(
name: "SPMTestDemo",
dependencies: ["SPMTestDemo","SPMLDemo"]),//添加依赖包名
.testTarget(
name: "SPMTestDemoTests",
dependencies: ["SPMTestDemo"]),
]
)
然后运行命令swift build
进行编译,等待片刻发现工程文件变为下图
在Swift package Dependencies下gitHub下载的三方库和自定义的本地库都加载进去了。
4、验证自定义包是否导入成功
修改SPMTestDemo的main.swift
文件
import SwiftyJSON
import SPMLDemo
//SwiftyJSON:来自gitHub
let json = JSON(["name":"www", "age": 25, "sex":"男"])
print(json)
print("Hello, world!")
//自定义依赖库
let customlib = SPMLDemo()
print(customlib)
然后运行 swift run
:
{
"name" : "www",
"age" : 25,
"sex" : "男"
}
Hello, SPMDemo!
SPMLDemo(text: "Hello, SPMLDemo!", num: 20)
自定义依赖包导入成功
网友评论