簡介
Cathage 一直致力于成為給 Cocoa 應用添加框架最簡單的方式。
它的使用流程如下:
- 創(chuàng)建一個 Cathage 乍惊,在里面列出你的項目要使用的第三方框架;
- 運行 Cathage撬碟, Cathage 會獲取并創(chuàng)建你列出的所有框架;
- 把生成的
.frameword
二進制文件拖到你的工程文件中惶傻。
Cathage 幫你創(chuàng)建第三方依賴其障、提供二進制的 framework
文件励翼,并且不會改變你的項目架構和創(chuàng)建。 Cathage 在你使用的過程中并不會修改的你工程文件和你的項目設置抚笔。
Cathage 與 CocoaPods 的不同
CocoaPods 是存在已久的 Cocoa 的第三方依賴管理方式殊橙,在此基礎上為什么還要使用 Cathage 狱从?
首先,CocoaPods 會自動為你的應用與第三方依賴創(chuàng)建和更新一個 Xcode workspace敞葛;Carthage 使用 xcodebuild
創(chuàng)建二進制 framework
与涡,添加和使用這此框架是用戶自己操作的。CocoaPods 使用上更簡單氨肌,而 Carthage 更靈活酌畜,耦合性更低。
從 CocoaPods 的 README 可以看出它有以下的目標:
通過創(chuàng)建一個集中式的生態(tài)系統(tǒng)使發(fā)現(xiàn)和管理第三方框架更便捷恳守。
相反贩虾, Carthage 是一個非集中式的第三方管理工具。它在工程文件中沒有集中的列表伊群,這可以大大降低維護的難度,避免集中列表的一些錯誤導致的編譯失敗奔则。然而蔽午,發(fā)現(xiàn)第三方框架也是一個麻煩的事情,用戶必須要到 GitHub 的趨勢頁面去查找或者去類似的網(wǎng)站抽莱。
CocoaPods 的工程文件中一定要有 podspec 文件骄恶,在 podspec 文件中用戶要填寫元數(shù)據(jù)和它創(chuàng)建的方式。Carthage 用 xcodebuild
去創(chuàng)建第三方框架虐呻。它不會把你的第三方依賴放在一個單獨的 workspace 中去管理寞秃,你寫的第三方框架一定要包含自己的 Xcode 項目用來描述怎么去生成和使用。
總之朗涩,Carthage 的目標就是成為管理第三方框架第簡單的工具绑改,它可以在不使用 Xcode 的情況下完成它的任務,也不會讓框架作者做額外的工作厘线。但 CocoaPods 也確實提供了很多非常好而且 Carthage 介于成本考慮可能永遠也不會有的功能。
安裝 Carthage
安裝 Carthage 有以下幾種方法:
- 通過安裝程序安裝:下載并運行
Carthage.pkg
覆履,根據(jù)軟件提示安裝即可费薄; - Homebrew安裝:使用
brew install carthage
命令安裝(注意:如果你安裝過二進制版本的 Carthage楞抡,你要先刪除/Library/Frameworks/CarthageKit.framework
); - 從GigHub源安裝:如果你想安裝最新版本(注意最新版可以不太穩(wěn)定)凳厢,直接克隆Carthage 在GigHub上的 master 分支,并運行
make install
即可治泥,僅支持 Xcode 8.0及以上(Swift支持 2.3 版本遮精,現(xiàn)在還不支持 3.0 以上的版本)。
為應用添加第三方框架
如果你安裝了 Carthage 准脂,你就可以為你的項目添加第三方框架了檬洞。注意 Carthage 只支持動態(tài)庫,動態(tài)庫只在 iOS 8 及以上才支持(任意版本的 OS X 都支持動態(tài)庫)湾戳。
開始使用
針對 iOS, tvOS 或者 watchOS 的使用方法:
- 創(chuàng)建一個
Cartfile
并列出你想使用的第三方庫澎灸; - 使用
carthage update
命令,Carthage 就會把第三方框架更新到 Carthage/Checkouts 文件夾中,然后挨個編譯糜颠; - 在你的工程文件的 “General” 選項卡中萧求,把你的框架從 Carthage/Build 文件夾拖到 “Linked Frameworks and Libraries” 區(qū)域內(nèi);
- 在你的工程文件 “Build Phases” 選項卡中元旬,點 "+" 然后選擇 “New Run Script Phase” 創(chuàng)建一個新的運行腳本來聲明你的 shell(比如:bin/sh)守问,把下面的內(nèi)容粘貼到 shell 中:
/usr/local/bin/carthage copy-frameworks
然后在 “Input Files” 中添加你要使用的框架的路徑耗帕,比如:
$(SRCROOT)/Carthage/Build/iOS/Box.framework
$(SRCROOT)/Carthage/Build/iOS/Result.framework
$(SRCROOT)/Carthage/Build/iOS/ReactiveCocoa.framework
當這些調(diào)試信息被復制到產(chǎn)品目錄中, 無論你的應用停在哪個斷點体啰,Xcode 都能夠 symbolicate 你的堆棧信息。這也能夠讓你用第三方的調(diào)試工具進行調(diào)試柒莉。
無論你的應用提交到 AppStore 還是打包測試沽翔,Xcode 都會復制這些文件到你應用的 .xcarchive
沙盒中 dSYMs 文件夾的子目錄中。
升級第三方框架
如果你修改了 Cartfile 文件西潘,或者你想使用第三方框架的最新版哨颂,只要再運行一次 carthage update
就行了。
如果你只是想更新某一個或者某幾個品姓,只要用空格隔開就行了箫措,比如:
carthage update Box
或者
carthage update Box Result
Cartfile
Cartfile 是用來描述第三方框架的斤蔓,它嚴格遵守 Ordered Graph Data Language 的語法,任何標準的 OGDL 工具都能解析它弦牡。
第三方框架聲明分為兩部分:基礎部分和版本需求部分驾锰。
基礎部分
如果使用 GigHub 的倉庫(GitHub.com 或者 GitHub Enterprise),使用時必須加入 github
關鍵字耻瑟,比如:
github "ReactiveCocoa/ReactiveCocoa" # GitHub.com
github "https://enterprise.local/ghe/desktop/git-error-translations" # GitHub Enterprise
其他 git 倉庫要加 git
關鍵字赏酥,如下:
git "https://enterprise.local/desktop/git-error-translations2.git"
版本需求
Carthage 支持以下幾種版本聲明:
-
>= 1.0
大于等于版本 1.0 -
~> 1.0
兼容版本 1.0 -
== 1.0
必須是版本 1.0 -
some-branch-or-tag-or-commit
針對一個明確的 Git 項目
如果沒有版本聲明今缚,就代表任何版本都可以使用。
兼容性是根據(jù)語義化版本規(guī)范確定的姓言,任何大于或者等于版本 1.5.1 小于版本 2.0 的,都被認定 兼容于 1.5.1囱淋。
但是根據(jù)語義化版本規(guī)范妥衣,任何 0.x.y 的版本都會在運行中崩潰,所以0.x 的版本沒有遵守語義化版本規(guī)范蜂筹,如果你定義了 0.1.1 的版本芦倒,那么 兼容的版本就是 0.1.2,而不是 0.2麻裳。
Cartfile 示例
# Require version 2.3.1 or later
github "ReactiveCocoa/ReactiveCocoa" >= 2.3.1
# Require version 1.x
github "Mantle/Mantle" ~> 1.0 # (1.0 or later, but less than 2.0)
# Require exactly version 0.4.1
github "jspahrsummers/libextobjc" == 0.4.1
# Use the latest version
github "jspahrsummers/xcconfigs"
# Use the branch
github "jspahrsummers/xcconfigs" "branch"
# Use a project from GitHub Enterprise
github "https://enterprise.local/ghe/desktop/git-error-translations"
# Use a project from any arbitrary server, on the "development" branch
git "https://enterprise.local/desktop/git-error-translations2.git" "development"
# Use a local project
git "file:///directory/to/project" "branch"