iOS包依赖管理工具系列
iOS包依赖管理工具(四):Swift Package Manager(SPM)了解篇
一、前言
我们通过几篇文章,分别介绍了 Pods 和 SPM 如何使用,以及如何制作自己的库,本篇内容不多,只给出两者的对比分析。
二、中心化 VS 去中心化
相信大家都听过中心化这个词,通俗易懂的来讲,就是『(资源)集中式管理』:
- CocoaPods 是中心化的,因为所有的资源索引都集中在一个仓库中(下图 Master Repo 就代表 Pods);
- SPM 则是去中心化的,需要啥资源就自己去对应的仓库中下载;
三、对比分析
| \ | CocoaPods | SPM |
|---|---|---|
| 适用语言 | 修正补充:OC/C/CXX | |
| 支持库 | ||
| 使用复杂度 | ||
| 项目入侵 | ||
| 源码可见 | ||
| 编译速度 | 修正补充:首次较慢 |
不过,随着苹果不断向 Swift 倾斜,第三方的 Swift 版本库也会越来越多,而且,制作一个 SPM 库非常简单,只需定义好 Package.swift 即可;同时,苹果也在不断改进 SPM,相信不久大家新的项目都会用上 SPM。
2021.03.04 再次编辑
首先,感谢网友 @狄烨 的指出,我对以上对比分析再补充,以免误导大家!
SPM 从 5.3 版本开始,支持资源的打包,原文链接:传送门 5.3 ReleaseNotes
5.3 的改进主要有:
- 支持发布的包可以指定【不同的平台依赖】;
- 支持资源文件的打包:图片、文件、storyboard、xib 及其它文件
- 支持二进制(非源码级)依赖
SPM 5.0 开始也支持 C 和 CXX 语言:PackageDescription API
public enum CLanguageStandard {
case c89
case c90
case iso9899_1990
case iso9899_199409
case gnu89
case gnu90
case c99
case iso9899_1999
case gnu99
case c11
case iso9899_2011
case gnu11
}
public enum CXXLanguageStandard {
case cxx98 = "c++98"
case cxx03 = "c++03"
case gnucxx98 = "gnu++98"
case gnucxx03 = "gnu++03"
case cxx11 = "c++11"
case gnucxx11 = "gnu++11"
case cxx14 = "c++14"
case gnucxx14 = "gnu++14"
case cxx1z = "c++1z"
case gnucxx1z = "gnu++1z"
}