PS:本文旨在介紹Carthage的使用,為初學者提供一個Carthage學習的入口,高手如不喜歡請繞行~
在項目中究竟是使用Carthage管理第三方庫,還是使用CoocaPods管理第三方庫?如果是個人獨立開發(fā),看自己的喜好了;如果是團隊開發(fā),以團隊成員商量結果為準。
Carthage是什么?
- 主頁:Carthage:https://github.com/Carthage/Carthage
- 目標:Carthage旨在使用最簡單的方式來管理Cocoa等第三方框架。
- 原理:自動將第三方框架編譯為動態(tài)庫(Dynamic framework)。
- 優(yōu)點:Carthage為用戶管理第三方框架和依賴,但不會自動修改項目文件或構建設置,開發(fā)者可以完全控制項目結構和設置。
- 缺點:只支持iOS 8.0+,不能用來開發(fā)iOS 8.0以前的項目。
Carthage與CocoaPods的區(qū)別
- 1、Cocoapods通過創(chuàng)建一個更集中的生態(tài)系統(tǒng)來提高第三方開源庫的可維護性和參與度,而Carthage強調盡可能靈活的將任務委托給Xcode和Git;
2、Cocoapods在使用中會自動創(chuàng)建和更新workspace、依賴和Pod項目并進行整合;
3、Carthage在使用中不需要創(chuàng)建和繼承相應的workspace和project,只需要依賴打包好的framework文件即可。
總結:Cocoapods的方法更加簡單粗暴容易使用,而Carthage則更靈活且對項目沒有侵入性。 - CocoaPods項目還必須具有Podspec文件,其中包括有關該項目的元數(shù)據(jù),并指出如何構建它。Carthage用于Xcode構建依賴關系,而不是將它們集成到單個工作空間中,它沒有類似的規(guī)范文件。
- Cocoapods有一個中心倉庫,而Carthage是去中心化的,沒有中心服務器也就避免了可能因中心節(jié)點錯誤而帶來的失敗,也減少了維護,即Carthage每次配置和更新環(huán)境,只會去更新具體的庫,所需時間更短。
- Carthage存在的一些缺陷:
1、支持Carthage的第三方庫依然不如CocoaPods豐富;
2、僅支持iOS 8.0+;
3、在使用的過程中無法查看第三方庫源碼。
Carthage的安裝
安裝Carthage有多種選擇:
- pkg文件:下載并運行Carthage.pkg最新版本的文件,然后按照屏幕上的說明進行操作。
- Homebrew:可以使用Homebrew安裝Carthage
1、安裝Homebrew,在終端運行:/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)",這條指令運行結束后,Homebrew就安裝完成了,具體可以查看官網(wǎng)(https://brew.sh);
2、安裝Carthage,在終端運行:brew update,等待運行結束后,接著運行:brew install carthage,這樣Carthage就安裝完成了。
注意:如果以前安裝過Carthage,則應先刪除/Library/Frameworks/CarthageKit.framework - 源代碼:只需要克隆master存儲庫的分支,然后在終端進入到項目目錄下運行make install即可,這需要Xcode 8.3(Swift 3.1)支持。
Carthage的使用
1、新建一個iOS工程(使用Xcode8.3.3創(chuàng)建)
CartHageDemo文件目錄.png
2、使用Carthage安裝第三方庫:
1、先進入到項目所在的文件夾
$ cd ~/Path/CartHageDemo
2、創(chuàng)建一個空的Cartfile文件(兩種方式)
(1)使用終端創(chuàng)建:
$ touch Cartfile
(2)使用文本文件創(chuàng)建:
創(chuàng)建一個名為Cartfile的文件,并保存到項目目錄下
3、編輯Cartfile文件,例如要安裝MBProgressHUD框架
github "jdg/MBProgressHUD" ~> 1.0.0
4、保存并關閉Cartfile文件,使用Carthage安裝框架
$ carthage update
到此為止,MBProgressHUD就已經(jīng)安裝到項目中了
對比上面的文件目錄,發(fā)現(xiàn)多了三個文件:
- Cartfile文件:是開發(fā)者自己維護的,添加刪除第三方庫等;
-
Cartfile.resolved文件:運行
carthage update
命令后,Cartfile在項目目錄中創(chuàng)建了一個名為Cartfile.resolved的文件。該文件精確地為每個版本指定了依賴項,并列出所有依賴關系(甚至是嵌套的依賴項); -
Carthage文件夾:打開Carthage文件夾可以看到,里面包含兩個文件夾:
(2)Build目錄:編譯出來的.framework二進制代碼庫。
(1)Checkouts目錄:從github獲取的源代碼;
Carthage文件目錄.png
3、配置項目
- 打開項目,點擊Target -> General -> Link Library with Libraries選擇Carthage/Build目錄中導入的framework
配置項目(1).png
配置項目(2).png
4、添加編譯腳本
- 點擊Target -> Build Phases -> “+” -> New Run Script Phase
添加編譯腳本(1).png - 展開Run Script,
1、在shell下面輸入:/usr/local/bin/Carthage copy-frameworks
;
2、在Input Files中加入:$(SRCROOT)/Carthage/Build/iOS/MBProgressHUD.framework
;
3、在Output Files中加入:$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/MBProgressHUD.framework
添加編譯腳本(2).png
5、在項目中使用
#import <MBProgressHUD/MBProgressHUD.h>
其他
- 卸載Carthage:通過Homebrew 安裝的可以使用
$ brew uninstall Carthage
進行卸載; - 更新第三方框架:
1、更新多個框架:修改Carfile文件,并重新執(zhí)行$ carthage update
2、更新某個框架:$ Carthage update 具體的框架名稱
- Carthage語法:
Cartfile 遵循 Ordered Graph Data Language 語法。
1、GitHub的庫(GitHub.com和GitHub Enterprise都使用github關鍵字指定):
github "ReactiveCocoa/ReactiveCocoa" # GitHub.com
github "https://enterprise.local/ghe/desktop/git-error-translations" # GitHub Enterprise
2、其它 git 庫
git "https://enterprise.local/desktop/git-error-translations2.git"
3、只支持二進制文件的 frameworks
binary "https://my.domain.com/release/MyFramework.json"
4、版本號
github "jdg/MBProgressHUD" // 不顯示指定版本號,永遠獲取最新的版本
github "jdg/MBProgressHUD" == 1.0 // “1.0版本”
github "jdg/MBProgressHUD" ~> 1.0.0 // “1.0及以上的兼容版本<2.0”
github "jdg/MBProgressHUD" >= 1.0 // “大于等于 1.0 的版本”
"some-branch-or-tag-or-commit" //特定的分支、tag、或者提交
注意:目前不是所有的第三方庫都支持Carthage管理,在使用前請先到GitHub查詢是否支持Carthage管理。
Carthage傳送門:https://github.com/Carthage/Carthage
CarthageDemo傳送門(本文中的演示Demo):https://github.com/XiaoSongWolf/CarthageDemo
寫在最后:當今社會競爭中想要脫穎而出,人必須有一技之長,而且萬里挑一。 每個人都有不同的選擇,有時一個正確的選擇比奮斗本身更重要。 做你喜歡的事情,做你擅長的事情。 沒有七十二變,豈能大鬧天宮?