Carthage:不同于Cocoapod的Cocoa依賴管理器

Cocoa的依賴管理器,我們已經(jīng)有了CocoaPods飒炎,非常好用埋哟,那么為什么還要創(chuàng)建這樣一個項目呢?本文翻譯自Carthage的Github的README.md郎汪,帶大家來了解一下這個工具有何不同之處赤赊。

Carthage的目標是用最簡單的方式來管理Cocoa第三方框架。

基本的工作流如下:

創(chuàng)建一個Cartfile煞赢,包含你希望在項目中使用的框架的列表

運行Carthage抛计,將會獲取列出的框架并編譯它們

將編譯完成的.framework二進制文件拖拽到你的Xcode項目當中

Carthage編譯你的依賴,并提供框架的二進制文件照筑,但你仍然保留對項目的結(jié)構(gòu)和設(shè)置的完整控制吹截。Carthage不會自動的修改你的項目文件或編譯設(shè)置。

Carthage與CocoaPods的不同

CocoaPods是已存在很長時間的Cocoa依賴管理器凝危,那么為什么要創(chuàng)建Carthage呢波俄?

首先,CocoaPods默認會自動創(chuàng)建并更新你的應(yīng)用程序和所有依賴的Xcode workspace蛾默。Carthage使用xcodebuild來編譯框架的二進制文件懦铺,但如何集成它們將交由用戶自己判斷。CocoaPods的方法更易于使用趴生,但Carthage更靈活并且是非侵入性的阀趴。

CocoaPods的目標在它的README文件描述如下:

…為提高第三方開源庫的可見性和參與度,創(chuàng)建一個更中心化的生態(tài)系統(tǒng)苍匆。

與之對照刘急,Carthage創(chuàng)建的是去中心化的依賴管理器。它沒有總項目的列表浸踩,這能夠減少維護工作并且避免任何中心化帶來的問題(如中央服務(wù)器宕機)叔汁。不過,這樣也有一些缺點,就是項目的發(fā)現(xiàn)將更困難据块,用戶將依賴于Github的趨勢頁面或者類似的代碼庫來尋找項目码邻。

CocoaPods項目同時還必須包含一個podspec文件,里面是項目的一些元數(shù)據(jù)另假,以及確定項目的編譯方式像屋。Carthage使用xcodebuild來編譯依賴,而不是將他們集成進一個workspace边篮,因此無需類似的設(shè)定文件己莺。不過依賴需要包含自己的Xcode工程文件來描述如何編譯。

最后戈轿,我們創(chuàng)建Carthage的原因是想要一種盡可能簡單的工具——一個只關(guān)心本職工作的依賴管理器凌受,而不是取代部分Xcode的功能,或者需要 讓框架作者做一些額外的工作思杯。CocoaPods提供的一些特性很棒胜蛉,但由于附加的復(fù)雜性,它們將不會被包含在Carthage當中色乾。

安裝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è)置標簽中的“Embedded Binaries”區(qū)域,將框架從Carthage.build文件夾拖拽進去谱俭。

在這個過程當中奉件,Carthage將創(chuàng)建一些build artifacts,其中最重要的是Cartfile.lock文件昆著,里面將列出每個框架的具體版本县貌,確保你提交了這個文件到版本控制工具里面(如Git、SVN)凑懂,因為每個用到項目的人都需要它來編譯相同版本的框架煤痕。

完成上面的步驟并提交你的修改,項目的其他用戶就只需要獲取該倉庫并執(zhí)行carthage bootstrap就能使用你所添加的框架。

添加框架到單元測試或另一個框架

使用Carthage添加框架到任意目標的方法摆碉,和添加到應(yīng)用程序差不多塘匣。主要的不同在于框架是如何設(shè)置并鏈接到Xcode的。

因為非應(yīng)用程序目標沒有“Embedded Binaries”設(shè)置區(qū)域巷帝,你需要將編譯完成后的框架拖拽到“Link Binaries With Libraries”的區(qū)域里忌卤。

在某些稀有案例中,你也許會想要復(fù)制每個依賴到已編譯的項目中(比如楞泼,在外部框架中嵌入依賴埠巨,或確保依賴在測試工具中正常顯示)。想要達到這個目的现拒,你需要創(chuàng)建一個新的“Copy Files”編譯選項和“Frameworks”組辣垒,然后將框架的引用添加到里面。

升級框架

如果你改動了你的Cartfile印蔬,或者你想升級到框架的最新版本(服從于你指定的需求版本)勋桶,執(zhí)行carthage update命令可以達到目的。

讓你的框架支持Carthage

Carthage只正式支持動態(tài)框架侥猬,動態(tài)框架能夠在任何版本的OS X上使用例驹,但只能在iOS 8及以上版本使用。

因為Carthage擁有非中心化的包列表退唠,以及沒有項目指定的編譯設(shè)置鹃锈,大多數(shù)框架應(yīng)該能自動編譯。

分享你的Xcode schemes

Carthage將只從你的.xcodeproj中標記為已分享的Xcode schemes來編譯瞧预。如果你想檢查編譯是否成功屎债,執(zhí)行carthage build --no-skip-current命令,然后檢查Carthage.build文件夾垢油。

如果當執(zhí)行命令但有scheme沒有被編譯盆驹,打開Xcode并確定對應(yīng)scheme被標記為“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ā)布的標簽

Carthage使用語義化標簽來發(fā)布穩(wěn)定版本。如1.2.0妻味,如帶有字母則是不受支持的版本(如1.2-alpha-1).

CarthageKit

大多數(shù)carthage命令行工具的功能都封裝在一個名為CarthageKit的框架中正压。

如果你希望將Carthage作為另一個工具的一部分,或者希望擴展Carthage的功能弧可,可以看看CarthageKit的源碼蔑匣,檢查API是否符合你的需求劣欢。

授權(quán)協(xié)議

Carthage使用MIT開源協(xié)議授權(quán)發(fā)布。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末裁良,一起剝皮案震驚了整個濱河市凿将,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌价脾,老刑警劉巖牧抵,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異侨把,居然都是意外死亡犀变,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門秋柄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來获枝,“玉大人,你說我怎么就攤上這事骇笔∈〉辏” “怎么了?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵笨触,是天一觀的道長懦傍。 經(jīng)常有香客問我,道長芦劣,這世上最難降的妖魔是什么粗俱? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮虚吟,結(jié)果婚禮上寸认,老公的妹妹穿的比我還像新娘。我一直安慰自己稍味,他們只是感情好废麻,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著模庐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪油宜。 梳的紋絲不亂的頭發(fā)上掂碱,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天,我揣著相機與錄音慎冤,去河邊找鬼疼燥。 笑死,一個胖子當著我的面吹牛蚁堤,可吹牛的內(nèi)容都是我干的醉者。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼撬即!你這毒婦竟也來了立磁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤剥槐,失蹤者是張志新(化名)和其女友劉穎唱歧,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體粒竖,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡颅崩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蕊苗。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沿后。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖朽砰,靈堂內(nèi)的尸體忽然破棺而出尖滚,到底是詐尸還是另有隱情,我是刑警寧澤锅移,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布熔掺,位于F島的核電站,受9級特大地震影響非剃,放射性物質(zhì)發(fā)生泄漏置逻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一备绽、第九天 我趴在偏房一處隱蔽的房頂上張望券坞。 院中可真熱鬧,春花似錦肺素、人聲如沸恨锚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽猴伶。三九已至,卻和暖如春塌西,著一層夾襖步出監(jiān)牢的瞬間他挎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工捡需, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留办桨,地道東北人。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓站辉,卻偏偏與公主長得像呢撞,于是被迫代替她去往敵國和親损姜。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容