Cocoa的依賴管理器罩扇,我們已經(jīng)有了CocoaPods担神,非常好用,那么為什么還要創(chuàng)建這樣一個項目呢演痒?本文翻譯自Carthage的Github的README.md亲轨,帶大家來了解一下這個工具有何不同之處。
Carthage的目標(biāo)是用最簡單的方式來管理Cocoa第三方框架鸟顺。
基本的工作流如下:
創(chuàng)建一個Cartfile惦蚊,包含你希望在項目中使用的框架的列表
運行Carthage,將會獲取列出的框架并編譯它們
將編譯完成的.framework
二進(jìn)制文件拖拽到你的Xcode項目當(dāng)中
Carthage編譯你的依賴讯嫂,并提供框架的二進(jìn)制文件蹦锋,但你仍然保留對項目的結(jié)構(gòu)和設(shè)置的完整控制。Carthage不會自動的修改你的項目文件或編譯設(shè)置欧芽。
Carthage與CocoaPods的不同
CocoaPods是已存在很長時間的Cocoa依賴管理器莉掂,那么為什么要創(chuàng)建Carthage呢?
首先千扔,CocoaPods默認(rèn)會自動創(chuàng)建并更新你的應(yīng)用程序和所有依賴的Xcode workspace憎妙。Carthage使用xcodebuild
來編譯框架的二進(jìn)制文件,但如何集成它們將交由用戶自己判斷曲楚。CocoaPods的方法更易于使用厘唾,但Carthage更靈活并且是非侵入性的。
CocoaPods的目標(biāo)在它的README文件描述如下:
…為提高第三方開源庫的可見性和參與度龙誊,創(chuàng)建一個更中心化的生態(tài)系統(tǒng)抚垃。
與之對照,Carthage創(chuàng)建的是去中心化的依賴管理器。它沒有總項目的列表鹤树,這能夠減少維護(hù)工作并且避免任何中心化帶來的問題(如中央服務(wù)器宕機(jī))铣焊。不過,這樣也有一些缺點魂迄,就是項目的發(fā)現(xiàn)將更困難粗截,用戶將依賴于Github的趨勢頁面或者類似的代碼庫來尋找項目。
CocoaPods項目同時還必須包含一個podspec
文件捣炬,里面是項目的一些元數(shù)據(jù),以及確定項目的編譯方式绽榛。Carthage使用xcodebuild
來編譯依賴湿酸,而不是將他們集成進(jìn)一個workspace,因此無需類似的設(shè)定文件灭美。不過依賴需要包含自己的Xcode工程文件來描述如何編譯推溃。
最后,我們創(chuàng)建Carthage的原因是想要一種盡可能簡單的工具——一個只關(guān)心本職工作的依賴管理器届腐,而不是取代部分Xcode的功能铁坎,或者需要 讓框架作者做一些額外的工作。CocoaPods提供的一些特性很棒犁苏,但由于附加的復(fù)雜性硬萍,它們將不會被包含在Carthage當(dāng)中。
安裝Carthage
Carthage提供OS X平臺的pkg安裝文件围详,你可以從Github的最新release中找到朴乖,按照引導(dǎo)一步步安裝即可。
如果你想安裝最新的開發(fā)版本(可能存在穩(wěn)定性和兼容性的問題)助赞,你只需要clone本倉庫的master分支买羞,然后運行make install
.
添加框架到應(yīng)用程序
安裝完Carthage后,你能夠使用它來添加框架到你的項目雹食。注意Carthage只支持動態(tài)框架畜普,而后者只存在于iOS 8以上(以及任意版本的OS X)。
開始使用:
創(chuàng)建一個Cartfile群叶,將你想要使用的框架列在里面
運行carthage update
吃挑,將獲取依賴文件到一個Carthage.checkout
文件夾,然后編譯每個依賴
在你的應(yīng)用程序target的“General”設(shè)置標(biāo)簽中的“Embedded Binaries”區(qū)域盖呼,將框架從Carthage.build
文件夾拖拽進(jìn)去儒鹿。
在這個過程當(dāng)中,Carthage將創(chuàng)建一些build artifacts几晤,其中最重要的是Cartfile.lock
文件约炎,里面將列出每個框架的具體版本,確保你提交了這個文件到版本控制工具里面(如Git、SVN)圾浅,因為每個用到項目的人都需要它來編譯相同版本的框架掠手。
完成上面的步驟并提交你的修改,項目的其他用戶就只需要獲取該倉庫并執(zhí)行carthage bootstrap
就能使用你所添加的框架狸捕。
添加框架到單元測試或另一個框架
使用Carthage添加框架到任意目標(biāo)的方法喷鸽,和添加到應(yīng)用程序差不多。主要的不同在于框架是如何設(shè)置并鏈接到Xcode的灸拍。
因為非應(yīng)用程序目標(biāo)沒有“Embedded Binaries”設(shè)置區(qū)域做祝,你需要將編譯完成后的框架拖拽到“Link Binaries With Libraries”的區(qū)域里。
在某些稀有案例中鸡岗,你也許會想要復(fù)制每個依賴到已編譯的項目中(比如混槐,在外部框架中嵌入依賴,或確保依賴在測試工具中正常顯示)轩性。想要達(dá)到這個目的声登,你需要創(chuàng)建一個新的“Copy Files”編譯選項和“Frameworks”組,然后將框架的引用添加到里面揣苏。
升級框架
如果你改動了你的Cartfile悯嗓,或者你想升級到框架的最新版本(服從于你指定的需求版本),執(zhí)行carthage update
命令可以達(dá)到目的卸察。
讓你的框架支持Carthage
Carthage只正式支持動態(tài)框架脯厨,動態(tài)框架能夠在任何版本的OS X上使用,但只能在iOS 8及以上版本使用蛾派。
因為Carthage擁有非中心化的包列表俄认,以及沒有項目指定的編譯設(shè)置,大多數(shù)框架應(yīng)該能自動編譯洪乍。
分享你的Xcode schemes
Carthage將只從你的.xcodeproj
中標(biāo)記為已分享的Xcode schemes來編譯眯杏。如果你想檢查編譯是否成功,執(zhí)行carthage build --no-skip-current
命令壳澳,然后檢查Carthage.build
文件夾岂贩。
如果當(dāng)執(zhí)行命令但有scheme沒有被編譯,打開Xcode并確定對應(yīng)scheme被標(biāo)記為“Shared”巷波,以便Carthage能夠發(fā)現(xiàn)它萎津。
解決編譯失敗
如果你在執(zhí)行carthage build --no-skip-current
時編譯失敗,嘗試執(zhí)行xcodebuild -scheme SCHEME -workspace WORKSPACE build
或xcodebuild -scheme SCHEME -project PROJECT build
(將其中的大寫單詞換成你項目的對應(yīng)名稱)抹镊,然后觀察是否有相同的失敗發(fā)生锉屈,這應(yīng)該能生成足夠的失敗信息來解決問題。
穩(wěn)定版發(fā)布的標(biāo)簽
Carthage使用語義化標(biāo)簽來發(fā)布穩(wěn)定版本垮耳。如1.2.0
颈渊,如帶有字母則是不受支持的版本(如1.2-alpha-1
).
CarthageKit
大多數(shù)carthage命令行工具的功能都封裝在一個名為CarthageKit的框架中遂黍。
如果你希望將Carthage作為另一個工具的一部分,或者希望擴(kuò)展Carthage的功能俊嗽,可以看看CarthageKit的源碼雾家,檢查API是否符合你的需求。
授權(quán)協(xié)議
Carthage使用MIT開源協(xié)議授權(quán)發(fā)布绍豁。