从零写一个Cocoa库依赖管理工具

最开始是想默默写一个库依赖管理工具的,由于这牵涉到的知识点不少,想经过本身写来学习,写了一部分的时候想要不要写成系列文章呢?由于一来能够督促本身写完,二来你们在看的时候也能提供到帮助,由于我的还有不少知识点的欠缺,直到开始写这篇文章我还有不少细节没肯定,三来其余同窗在看到的时候或多或少能学习到一点东西。当开始写的仍是坐卧不安的,怕本身hold不住,也怕太监最后写不完😂,只能说在能力所及内尽力写完,在写的过程当中有错误也欢迎你们提出来。linux

你们都知道目前可用的库依赖管理工具备swift-package-manager,Cocoadods和Carthage,这三个库刚好我都用过,swift-package-manager和Carthage的源码也都看过,先来简单分析分析他们的区别。git

swift-package-manager

  1. Apple官方提供的软件包管理器,将来有可能实现大一统。
  2. 采用Swift编写。
  3. 采用swift-llbuild构建编译。swift-llbuild是一个并行、高效、增量编译的构建系统做为其构建引擎,因此编译速度快,不会对不变的依赖进行重复编译。
  4. 支持跨平台,好比windows,linux,macOS,darwin。
  5. 支持executable类型,因此能够用来写命令行工具。
  6. 自动生成package.xcworkspace和并支持命令行生成.xcodeproj,这一点和Cocoadods很像。
  7. 采用了Swift来做为配置描述语言,在Package.swift文件中进行配置,写起来更加清晰方便。
  8. 使用git tag来作版本依赖,格式上遵循Semantic Versioning。
  9. 不支持资源文件管理,不过这个好像也已经有方案了。

Cocoadods

  1. 采用ruby编写。
  2. 自动创建和更新一个 Xcode workspace,用来管理你的项目和全部依赖。
  3. CocoaPods的工程目录中必须有一个叫作podspec的这么一个文件,其中包含有关项目的元数据并指定了工程的的编译方式。
  4. CocoaPods的DSL很繁琐。

Carthage

  1. 采用Swift编写。
  2. Carthage经过xcodebuild将依赖库打包成framework,这样能够减小开发过程当中的编译时间。
  3. Cartfile文件格式是基于OGDL(Ordered Graph Data Language)标准来组织的,这种格式支持3种类型的数据源:github和git、binary。
  4. 在 Xcode 里定位到源码不方便,是很麻烦,不方便调试。
  5. 由于Carthage去中心化,不修改xcodeproj,也不生成xcworkspace文件,因此须要手动引入依赖库,很繁琐。
  6. 由于提早将依赖库打包成framework,因此在编译主项目的时候可能会出现Swift编译器版本不一样的错误。

固然上面列的各个框架的缺点也都是能够经过一些手段避免的,好比CocoaPods也能够结合Cathage进行二进制化,这里就不细讲了。github

咱们本身实现的库依赖管理工具叫Nabla,至于为啥叫这个,向量微分算子,Nabla算子(nabla operator),又称劈形算子。既然是理工科的起名字也要有逼格一点,像特斯拉,寒武纪这名字多有逼格😂。咱们要实现哪些功能呢?swift

功能:windows

  1. 采用Swift编写。
  2. 可能须要实现一套DSL,这个还不肯定,暂时先用YAML来写,也就是须要经过一个.yml来管理项目和依赖,结构上和Package.swift相似。
  3. 经过xcodebuild将依赖库打包成framework,最先的时候也是想采用swift-llbuild构建编译,但后来研究了一下,须要生成一个YAML的Build File,这一步异常麻烦,暂时放弃。
  4. 像SPM和CocoaPods同样修改xcodeproj和建立xcworkspace。
  5. 经过git来下载依赖库,使用git tag来作版本依赖。

系列文章

这个还没肯定,会写一个加一个。xcode

  1. 从零写一个Cocoa库依赖管理工具(一):建立工程结构和添加依赖

项目地址

Nablaruby

相关文章
相关标签/搜索