一、前言
我們通過幾篇文章,分別介紹了 Pods 和 SPM 如何使用,以及如何制作自己的庫,本篇內(nèi)容不多,只給出兩者的對比分析。
二、中心化 VS 去中心化
相信大家都聽過中心化這個(gè)詞,通俗易懂的來講,就是『(資源)集中式管理』:
- CocoaPods 是中心化的,因?yàn)樗械馁Y源索引都集中在一個(gè)倉庫中(下圖 Master Repo 就代表 Pods);

中心化.png
- SPM 則是去中心化的,需要啥資源就自己去對應(yīng)的倉庫中下載;

去中心化.png
三、對比分析
| \ | CocoaPods | SPM |
|---|---|---|
| 適用語言 | ||
| 支持庫 | ||
| 使用復(fù)雜度 | ||
| 項(xiàng)目入侵 | ||
| 源碼可見 | ||
| 編譯速度 |
不過,隨著蘋果不斷向 Swift 傾斜,第三方的 Swift 版本庫也會越來越多,而且,制作一個(gè) SPM 庫非常簡單,只需定義好 Package.swift 即可;同時(shí),蘋果也在不斷改進(jìn) SPM,相信不久大家新的項(xiàng)目都會用上 SPM。
補(bǔ)充
SPM 從 5.3 版本開始,支持資源的打包,原文鏈接:傳送門 5.3 ReleaseNotes
5.3 的改進(jìn)主要有:
- 支持發(fā)布的包可以指定【不同的平臺依賴】;
- 支持資源文件的打包:圖片、文件、storyboard、xib 及其它文件
- 支持二進(jìn)制(非源碼級)依賴
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"
}