SPM介绍
SPM又称SwiftPM(Swift Package Manager),是苹果官方推出的依赖包管理工具,它被集成到Xcode开发工具中,可以自动执行依赖库的下载、编译、链接,在swift3.0时被引入,SPM完全由swift编写,与Swift有着非常好的契合性,可以将 SPM看做是工程引入的一个特殊的库。
SPM中的一些概念
Modules:模块
Swift将代码组织成模块,将package以模块的形式进行管理。每个模块都指定了一个命名空间,并且可以通过访问控制符,控制模块内的代码是否可以被模块外访问。
每个工程可以将它需要用到的代码放入一个模块中,也可以将其他模块作为依赖库导入进来。
Packages:包
包是由swift源文件和配置文件组成的,这个配置文件被命名为Package.swift,配置文件中定义了 Package 的名称和内容。一个package可以包含创建多个target,每个target对应一个product,并且可以声明一个或以上的 dependency依赖项。
Products:产品
target可以构建库
或可执行文件
做为它的产物,库中包含可以被其他swift代码导入引用的模块,可执行文件可以由操作系统直接运行。
Dependencies:依赖关系
工程需要外部三方待代码实现某些功能、复用一些功能代码,就需要指定自己的工程依赖哪些外部的代码,这些外部提供的代码称为依赖。所以target中引入的依赖库是工程代码中需要模块,Target有自己需要的依赖库,依赖库也可以有自己的依赖项,每个依赖项也可以有自己的依赖项,因此形成依赖关系图。
如何创建依赖库
这里先介绍下如何使用SPM创建依赖Package
1、创建项目
命令行方式创建
使用swift package init 命令创建一个Swift项目,默认创建的是library
$ mkdir TestPackage //创建文件夹,文件夹名为依赖包的名字
$ cd TestPackage //进入文件内
$ swift package init //默认创建的类型是library
或
$ swift package init --type library/executable/empty/system module
type支持的四种类型
- library:创建库;
- executable:创建可执行文件;
- empty:创建空项目;
- system module:创建系统模块项目;
创建完项目后进入项目文件夹,点击Package.swift文件即可启动xcode进行开发,我们也可以使用swift package generate-xcodeproj
来生成xcode项目,如果需要更新项目中的依赖包版本信息可执行swift package update 进行更新。
相关的命令行
- swift package init --type library 初始化创建一个库或可执行文件项目
- swift package generate-xcodeproj 构建xcode项目
- swift package clean 删除构建工件
- swift build 进行编译
- swift run 编译并且运行可执行文件
- swift package update 更新依赖包
xcode中创建
这个简单,看下图
2、配置文件
依赖库的相关配置在 Pacakage.swift 中,Package.swift 是整个包描述,它依赖 PackageDescription 结构。
// swift-tools-version:5.0
import PackageDescription
let package = Package(
name: "TestLibrary",
//平台版本限制
platforms: [.iOS(.v10)],
products: [
// Products define the executables and libraries produced by a package, and make them visible to other packages.
// A package can produce multiple executables and libraries.
.library(
name: "TestLibrary",
targets: ["TestLibrary"]),
],
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, and of course an executable.
// Targets can depend on other targets in this package, and on products in packages which this package depends on.
.target(
name: "TestLibaray",
dependencies: []), //此处需要填写依赖的外部库名字
.testTarget(
name: "TestLibarayTests",
dependencies: ["TestLibaray"]),
]
)
详细解释下各个字段的含义
- name:指定项目(包)名称
- products:指定编译后项目生成的东西,可以是 library 或者 executable,同一个项目可以生成多个 library 或 executable
- dependencies:指定项目所使用的依赖库及其 URL、版本等信息。可以为空
- targets:属于此软件包的目标列表(源码目录、测试目录)
- platforms:支持的最低系统平台的列表;
- providers:系统目标的程序包提供者;
- swiftLanguageVersions:此软件包兼容的Swift版本列表;
注:常用的一些字段:name、platforms、products、dependencies、targets
3、发布
将编译好的library发布到gitHub、gitLee中托管仓库中
结束
还有很多细节及遇到的坑未总结!!!
下面是如何在自己的项目中集成SPM,并添加依赖库,
网友评论