Xcode相依性管理工具


前言

Xcode雖然現在有支援Git版本管理,但對於函式庫或框架的導入仍然沒有提供預設的工具。CocoaPods一直以來就是這個領域的唯一選擇,尤其是在Swift語言前的Objective-C時代,導入外部函式庫是一件苦差事,以下是CocoaPods的功能說明:

CocoaPods is the dependency manager for Swift and Objective-C Cocoa projects. It has thousands of libraries and can help you scale your projects elegantly.

它是一套用於相依性(dependency manager)的管理程式,相依性管理就如同在PHP語言中相當流行的Composer,或Node.js中的npm

相依性管理程式是什麼

我們在程式開發時經常會使用外部的函式庫、框架、套件包之類的,例如你要整合Facebook功能或其他功能的函式庫到應用程式中,尋找合適的函式庫或框架,用導入的方式就行了。純手工的方式當然就是從github或其他下載它們的程式碼,加到你的專案中(有時候需要先編譯過,然後在專案中設定它們),然後在你的程式碼中引用它們,不過這樣作會有幾個問題:

  • 函式庫或框架的版本問題:假設說之後的函式庫或框架有新的改版或修正,你又得要重新作一次,而且有可能你自已的程式碼會產生新的其他問題。

  • 函式庫與框架彼此之間參照使用的問題:假設你用了A函式庫,它又參考(或使用)了B函式庫,變成如果你用了A但也需要B,所以兩個都得要加到你的專案裡。

  • 函式庫管理的問題:你用了多少個函式庫?它們的版本是什麼?有更新的版本或相關文件資訊嗎?沒有一個統一的地方可以看到這些。你得要一個個去找這些東西。

相依性(dependency manager)管理程式,就是用來解決這些問題的工具。它可以協助下載函式庫或框架、編譯它們、管理它們的更新與設定專案。這類工具可以協助你節省時間、方便管理,讓你在開發程式的工作更輕鬆些。

兩套工具:CocoaPods vs Carthage

CocoaPods

  • 知名的相依性管理工具,使用者數量龐大,長期穩定選擇
  • 使用Ruby語言開發
  • 有豐富的套件庫列表,可以搜尋所需套件庫
  • 會自建立Xcode workspace與所有的相依性

Carthage

  • 後起之秀,由Github工程師開發
  • 使用Swift語言開發,只能用於iOS8之後(Dynamic frameworks)
  • 使用xcodebuild編譯套件
  • 去中心化的管理方式,沒有套件列表,開發者自己去找所需的函式庫
  • 專案設定是由開發者自行設定(非侵入式)
  • 只能用於使用Github的套件庫(與git)

比較

侵入性:

有很多人會支持新的Carthage是或支持CocoaPods的理由,因為CocoaPods會自動作專案的設定,這也是它的重要功能之一,簡化開發者的工作。但Carthage不作這件事,這也是它的特性之一,它希望保留這部份的彈性給應用的開發者。這是兩套工具的原開發者的目標不同、觀念不同。

支援性:

CocoaPods提供了很容易的搜尋、使用和建立函式庫,在官網上可以找到一個很大的套件資料庫。

Carthage要自己到Github去找(而且目前只支援Github)。目前較知名的函式庫或框架都有支援兩者。而Carthage因為只支援iOS8,所以有些舊的套件可能無法使用。

簡易性:

CocoaPods但為了達成容易使用的目標,它的代價是"複雜"。用另一句話來說是「it is easier but less simple.」(為了更容易使用但更缺乏了簡單),套件的原作者需要花更多時間建立符合CocoaPods規範的文件。在這篇文件的回答中,寫的很詳細。

Carthage簡化了相依性的工作,它保留了彈性與自由度給開發者。有時候我們只需要幾個簡單的套件,並不需要那麼多的相依性管理,甚至是協助設定專案的設定值。

參考資料