從零寫一個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

相關文章
相關標籤/搜索