CocoaPods 好處?
- 開發
iOS
項目不可避免地要使用第三方開源庫,CocoaPods
的出現使得我們可以節省設置和更新第三方開源庫的時間 - 在引入第三方庫時它可以自動為我們完成各種各樣的配置,包括配置編譯階段、連接器選項、甚至是
ARC
環境下的-fno-objc-arc
配置等
Carthage 好處?
- 通過Carthage可以將一部分不常變的庫打包成framework,再引如到主工程,這樣可以減少開發過程中的編譯時間。
- 可以將一些編譯時間很長的庫打包成framework。
- 國內防火牆的緣故,有些庫的下載慢到一定境界,這個時候,使用Carthage就是福音了。
- 同時可以優化CI的編譯、打包時間。
三、Carthage 和 CocoaPods 的不同之處:
CocoaPods
(默認)自動建立和更新一個 Xcode workspace
,用來管理你的項目和所有依賴。Carthage
使用xcodebuild
來編譯出二進制庫,剩下的集成工作完全交給開發人員。CocoaPods
使用起來方便,Carthage
更加靈活並且對現有項目沒有太多的侵略性。CocoaPods
希望建立一個生態系統,可以更加方便的發現和集成第三方代碼庫。Carthage
希望變成一個去中心化的依賴管理系統,不提供中心化的項目列表,減少維護成本和單點失敗的概率。不過這樣給開發人員尋找項目帶來不便。CocoaPods
的項目需要配置 podspec
文件,包含了項目和第三方庫的信息。Carthage
並不使用類似的配置文件,第三方庫的依賴關系是通過 Xcode
項目來配置的。
http://kaaaaai.cn/articles/036.html
http://www.cocoachina.com/special/20160926/17635.html
CocoaPods是已存在很長時間的Cocoa依賴管理器, 那么為什么要創建Carthage呢?
1) CoaoaPods 是一套整體解決方案,我們在 Podfile 中指定好我們需要的第三方庫。然后 CocoaPods 就會進行下載,集成,然后修改或者創建我們項目的 workspace 文件,這一系列整體操作。
2) 相比之下,Carthage 就要輕量很多,它也會一個叫做 Cartfile 描述文件,但 Carthage 不會對我們的項目結構進行任何修改,更不多創建 workspace。它只是根據我們描述文件中配置的第三方庫,將他們下載到本地,然后用 xcodebuild 構建成 framework 文件。然后由我們自己將這些庫集成到項目中。Carthage 使用的是一種非侵入性的哲學。
Carthage or CocoaPods? 3
CocoaPods 有如下優勢:
① 使用方便, 除編寫 Podfile 以外其他幾乎都是自動完成;
② 軟件包數量多,主流支持;
③ 支持 iOS 8 Framework,當然也支持舊的靜態編譯.
但是 CocoaPods 作為一個有中心倉庫的解決方案,缺點也比較明顯:
1?? 每次更新環境都需要連接到中心倉庫,比較耗時;
2?? 開發者使用比較簡單,但是如果創建兼容 CocoaPods 的庫,就會相對繁瑣一些(盡管有了命令行);
3?? 每次干凈編譯都會把所有第三方庫都重新編譯一次
Carthage 的優勢:
① 使用 Carthage 的話,所有的第三方庫依賴,除非是更新的需要,不然平常
干凈編譯 Project,它是不需要再次編譯
的,大大加快平常編譯及 Archive 的時間.
② 它是去中心化
的,沒有中心服務器. 這意味着每次配置和更新環境,只會去更新具體的庫,而不會有一個向中心服務器獲取最新庫的索引這么個過程,如此又省了很多時間.
③ CocoaPods 無縫集成!一個項目可同時使用兩套包管理工具
, 當前 CocoaPods 管理主要 Framework 的配置下, 將少量其他 Framework 交給了 Carthage 管理, 二者可以和諧地共存.
④ 結構標准的項目天然就是 Carthage 庫
.
Carthage 的不足:
1?? 庫依然不如 CocoaPods 豐富:盡管很多庫不需要聲明並改造就直接可以被 Carthage 用,但依然有大量 CocoaPods 能用的庫不支持,我相信時間能解決這個問題;
2??只支持 Framework,所以是 iOS 8 Only
了,隨着時間推移,這個也不會是問題;
3?? 工具仍不完善:在使用過程中,發現它無法在一個結構復雜的項目中正確發現庫(比如有 iOS, Mac demo + framework 的結構);
4?? 無法在 Xcode 里定位到源碼:如果你在寫代碼過程中,想跳轉到一個第三方庫去看具體的實現,這是無法辦到的,Carthage 的配置只能讓你看到一個庫的頭文件