Swift Package Manager
简称SwiftPM
或SPM
,是用来管理Swift代码分发的工具,它与Swift构建系统集成在一起,可以自动处理代码的下载、编译和依赖链接。Swift 3.0
及之后的版本中默认包含Swift Package Manager
。
Swift通过模块来组织代码,每一个模块都有一个对应的命名空间,模块中包含的代码会指定哪些部分可以被外部访问,哪些代码只能在模块内部使用。对于一个程序,可能所有的代码都写在一个模块中,也可能这个程序依赖了其它人写的模块。除了系统提供的模块可以被程序依赖以外,大部分情况下,我们写程序所依赖的其它模块都需要被先下载到本地,然后按指定顺序进行编译。
假设为了解决一个特定的问题我们写了一个模块,如果其它场景或其它人也要解决同样的问题,就可以把这个已经写好的模块直接拿过来使用,不需要重新再写一遍,这就是使用模块的好处。模块可以被复用,来提高生产效率。
在Swift Package Manager
中,有几个概念需要先明确一下:
Package.swift
,使用PackageDescription
模块定义了这个包的名称及包中包含的具体内容。从概念上来看,一个包中可能包含一个或多个编译目标(Target), 每一个编译目标会依赖一些其它的模块,一个编译目标经过编译器处理后会生成一个产物(Product)。库(library)
和可执行文件(executable)
。库(library)
中可以包含多个模块,可执行文件(executable)
可以被操作系统调起运行。Swift Package Manage
的作用就是自动的处理一个项目所依赖的所有包的下载工作并调用Swift工具链进行编译。一个包内部还会依赖其它包,这是一个递归的过程,可以用一棵依赖树来表示,Swift Package Manager
就是解析这棵依赖树,下载所有的包并执行编译任务生成对应产物。