什么是Carthage
Carthage和CocoaPods都是用來(lái)管理第三方庫(kù)垦垂,與CocoaPods相比Carthage更加輕量一些宦搬,它是由Swift編寫(xiě)的,所以在純Swift項(xiàng)目中更為便利
A simple, decentralized dependency manager for Cocoa
一個(gè)簡(jiǎn)單劫拗、松散的依賴管理者
這個(gè)是Carthage Github上的描述
簡(jiǎn)單對(duì)比Carthage與Cocoapods
- Carthage用xcodebuild 構(gòu)建框架(framework)的二進(jìn)制文件间校,但是并沒(méi)有將他們整合到用戶項(xiàng)目中。Cocoapods的目的是讓用戶使用起來(lái)更簡(jiǎn)單页慷,而 Carthage 則是更靈活憔足,減少對(duì)項(xiàng)目的侵入性
- Cocoapods項(xiàng)目還必須具有所謂的podspec文件,其中包括有關(guān)項(xiàng)目的元數(shù)據(jù)酒繁,并指定應(yīng)如何構(gòu)建它滓彰。Carthage使用xcodebuild去構(gòu)建依賴,而不是將它們集成到單個(gè)工作區(qū)中州袒,它沒(méi)有類似的規(guī)范文件揭绑,但你的依賴項(xiàng)必須包含到自己的 Xcode 項(xiàng)目中,該項(xiàng)目描述了如何構(gòu)建其產(chǎn)品
安裝Carthage
- 安裝Homebrew
- 如果你已經(jīng)安裝了可以跳過(guò)這一步
- 更新最新版本
- 如果你沒(méi)有安裝郎哭,可以參考這里Mac 安裝homebrew并更新到最新版本
brew update
如果遇到
Error: The /usr/local directory is not writable.
錯(cuò)誤他匪,就執(zhí)行以下命令sudo chown -R $(whoami):admin /usr/local
再更新
- 安裝Carthage
brew install carthage
- 查看Carthage版本
carthage version
在項(xiàng)目中使用Carthage
- 進(jìn)入項(xiàng)目所在文件夾
- 創(chuàng)建Cartfile文件
- 打開(kāi)Cartfile文件
- 編輯Cartfile文件弓叛,添加依賴庫(kù)
cd 項(xiàng)目文件夾路徑
touch Cartfile
open Cartfile
github "Alamofire/Alamofire" == 4.5
git "https://enterprise.local/desktop/git-error-translations2.git"
binary "/absolute/path/MyFramework.json"
Cartfile文件
- 格式
- 使用 github 關(guān)鍵字指定 GitHub 存儲(chǔ)庫(kù)(GitHub.com 和 GitHub Enterprise)
- 其他 git 存儲(chǔ)庫(kù)使用 git 關(guān)鍵字指定
- 僅作為已編譯的二進(jìn)制文件
.frameworks
提供的依賴項(xiàng)使用binary
關(guān)鍵字和https://
鏈接,file://
鏈接诚纸,或沒(méi)有方案的相對(duì)或絕對(duì)路徑撰筷,返回二進(jìn)制項(xiàng)目規(guī)范
- 版本要求
-
>= 1.0
指“1.0 及以上版本”。 -
~> 1.0
指“1.x 版本” -
== 1.0
指“版本為 1.0” -
"some-branch-or-tag-or-commit"
特指 git 對(duì)象(git rev-parse 任何內(nèi)容都被允許)畦徘。
Note:二進(jìn)制源 不支持這種形式毕籽。
如果沒(méi)有指定任何版本,任何版本的依賴都將被允許(默認(rèn)使用最新版本)井辆。
-
- 保存關(guān)閉Cartfile关筒,運(yùn)行Carthage
carthage update --platform iOS
運(yùn)行命令后,一個(gè)叫Cartfile.resolved
的文件將會(huì)被創(chuàng)建到 Cartfile 同級(jí)目錄下杯缺。此文件準(zhǔn)確指定了每個(gè)依賴項(xiàng)選擇的版本蒸播,并列出了所有依賴項(xiàng)(甚至是嵌套的版本)。
強(qiáng)烈建議將該文件加入到版本控制中萍肆,告知其他開(kāi)發(fā)者袍榆,當(dāng)前使用的版本。
雖然 Cartfile.resolved 文件是人類可讀和可擴(kuò)展的塘揣,但你不能修改它包雀。文件的格式非常嚴(yán)格,列出依賴項(xiàng)的順序?qū)τ跇?gòu)建過(guò)程很重要亲铡。
Carthage 文件夾
- Build
包含對(duì)應(yīng)平臺(tái)編譯好的Framework - Checkouts
包含編譯framework
所使用的源代碼(除非你使用 submodules 才写,否則不要修改這里的代碼,carthage update
和carthage checkout
會(huì)覆蓋這里的代碼奖蔓,清除你的修改)赞草。
在"Carthage/Build/iOS"文件夾中會(huì)生成 .framework 文件。
在項(xiàng)目中使用Carthage
- 在Carthage -> Build中找到需要的framework
- 將framework拖拽到Xcode 工程的
Linked Frameworks and Libraries
中 - 進(jìn)入工程的 target -> Build Phases吆鹤,點(diǎn)擊 +厨疙,添加
New Run Script Phase
輸入一下腳本
/usr/local/bin/carthage copy-frameworks
在 Input Files 下添加要使用的框架的路徑
$(SRCROOT)/Carthage/Build/iOS/XXXX.framework
將復(fù)制框架的路徑添加到 Output Files
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/XXX.framework
- 為什么需要指定 Output Files
使用 Carthage 來(lái)管理第三方庫(kù),在編譯并運(yùn)行 App 的時(shí)候檀头,會(huì)有一個(gè)階段叫:Carthage Copy Frameworks轰异。這個(gè)階段通過(guò)跑一個(gè)腳本的形式把所有依賴的第三方庫(kù)都復(fù)制到 App 的目錄里。
這個(gè)階段通常會(huì)花 1~x 秒不等暑始,這取決于你的 App 依賴的第三方庫(kù)數(shù)量搭独。默認(rèn)情況下,每次你 Build & Run 的時(shí)候廊镜,都會(huì)進(jìn)行一次這個(gè)操作——盡管你的第三方庫(kù)沒(méi)有任何改變牙肝。
所以我們需要指定 Output Files,在 Output Files 指定輸出文件的情況下,Xcode 只會(huì)在 framework 發(fā)生更改時(shí)去進(jìn)行 copy framework 操作配椭,這樣就節(jié)省了時(shí)間虫溜。
更新庫(kù)
1、在carthage文件里面把有指定版本的庫(kù)更新到想要的版本股缸,如無(wú)指定版本可忽略
2衡楞、調(diào)用命令更新庫(kù)
- 全部更新
carthage update --platform iOS
- 更新制定庫(kù)
carthage update XXX --platform iOS
最后的話
雖然說(shuō)Carthage是純Swift編寫(xiě),但個(gè)人感覺(jué)還是覺(jué)得CocoaPods更加便利快捷敦姻,特別是在國(guó)內(nèi)瘾境。
在實(shí)際項(xiàng)目中Carthage升級(jí)或加庫(kù)經(jīng)常各種報(bào)錯(cuò),有可能是本人學(xué)藝未精镰惦,經(jīng)過(guò)萬(wàn)般折騰迷守,本人還是會(huì)首選CocoaPods作為第三方庫(kù)管理工具
參考文章
Carthage 新手教程
版權(quán)所有,如需轉(zhuǎn)載請(qǐng)聯(lián)系作者并注明出處