一、前言
我们通过几篇文章,分别介绍了 Pods 和 SPM 如何使用,以及如何制作自己的库,本篇内容不多,只给出两者的对比分析。
二、中心化 VS 去中心化
相信大家都听过中心化这个词,通俗易懂的来讲,就是『(资源)集中式管理』:
- CocoaPods 是中心化的,因为所有的资源索引都集中在一个仓库中(下图 Master Repo 就代表 Pods);
![](https://img.haomeiwen.com/i25416234/bd9362f649cbb793.png)
- SPM 则是去中心化的,需要啥资源就自己去对应的仓库中下载;
![](https://img.haomeiwen.com/i25416234/88a02e4f34885f40.png)
三、对比分析
\ | CocoaPods | SPM |
---|---|---|
适用语言 | ||
支持库 | ||
使用复杂度 | ||
项目入侵 | ||
源码可见 | ||
编译速度 |
不过,随着苹果不断向 Swift 倾斜,第三方的 Swift 版本库也会越来越多,而且,制作一个 SPM 库非常简单,只需定义好 Package.swift 即可;同时,苹果也在不断改进 SPM,相信不久大家新的项目都会用上 SPM。
补充
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"
}
网友评论