iOS包依赖管理工具(六):CocoaPods VS SPM 总结篇

一、前言

我们通过几篇文章,分别介绍了 Pods 和 SPM 如何使用,以及如何制作自己的库,本篇内容不多,只给出两者的对比分析。

二、中心化 VS 去中心化

相信大家都听过中心化这个词,通俗易懂的来讲,就是『(资源)集中式管理』:

  • CocoaPods 是中心化的,因为所有的资源索引都集中在一个仓库中(下图 Master Repo 就代表 Pods);
中心化.png
  • SPM 则是去中心化的,需要啥资源就自己去对应的仓库中下载;
去中心化.png

三、对比分析

\ CocoaPods SPM
适用语言 \color{green}{OC、Swift} \color{orange}{Swift/OC/C/CXX}
支持库 \color{green}{大部分支持} \color{orange}{部分支持}
使用复杂度 \color{orange}{中等} \color{green}{简单}
项目入侵 \color{red}{严重} \color{green}{无}
源码可见 \color{red}{可见} \color{red}{可见}
编译速度 \color{red}{慢} \color{orange}{首次较慢}

不过,随着苹果不断向 Swift 倾斜,第三方的 Swift 版本库也会越来越多,而且,制作一个 SPM 库非常简单,只需定义好 Package.swift 即可;同时,苹果也在不断改进 SPM,相信不久大家新的项目都会用上 SPM。

补充

SPM 从 5.3 版本开始,支持资源的打包,原文链接:传送门 5.3 ReleaseNotes

5.3 的改进主要有:

  1. 支持发布的包可以指定【不同的平台依赖】;
  2. 支持资源文件的打包:图片、文件、storyboard、xib 及其它文件
  3. 支持二进制(非源码级)依赖


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"
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容