【譯】Carthage的使用

簡介

Cathage 一直致力于成為給 Cocoa 應(yīng)用添加框架最簡單的方式。
它的使用流程如下:

  1. 創(chuàng)建一個 Cathage ,在里面列出你的項目要使用的第三方框架;
  2. 運行 Cathage, Cathage 會獲取并創(chuàng)建你列出的所有框架;
  3. 把生成的 .frameword 二進(jìn)制文件拖到你的工程文件中。

Cathage 幫你創(chuàng)建第三方依賴、提供二進(jìn)制的 framework 文件,并且不會改變你的項目架構(gòu)和創(chuàng)建。 Cathage 在你使用的過程中并不會修改的你工程文件和你的項目設(shè)置。

Cathage 與 CocoaPods 的不同

CocoaPods 是存在已久的 Cocoa 的第三方依賴管理方式,在此基礎(chǔ)上為什么還要使用 Cathage ?

首先,CocoaPods 會自動為你的應(yīng)用與第三方依賴創(chuàng)建和更新一個 Xcode workspace;Carthage 使用 xcodebuild 創(chuàng)建二進(jìn)制 framework ,添加和使用這此框架是用戶自己操作的。CocoaPods 使用上更簡單,而 Carthage 更靈活,耦合性更低。

從 CocoaPods 的 README 可以看出它有以下的目標(biāo):

通過創(chuàng)建一個集中式的生態(tài)系統(tǒng)使發(fā)現(xiàn)和管理第三方框架更便捷。

相反, Carthage 是一個非集中式的第三方管理工具。它在工程文件中沒有集中的列表,這可以大大降低維護(hù)的難度,避免集中列表的一些錯誤導(dǎo)致的編譯失敗。然而,發(fā)現(xiàn)第三方框架也是一個麻煩的事情,用戶必須要到 GitHub 的趨勢頁面去查找或者去類似的網(wǎng)站。

CocoaPods 的工程文件中一定要有 podspec 文件,在 podspec 文件中用戶要填寫元數(shù)據(jù)和它創(chuàng)建的方式。Carthage 用 xcodebuild 去創(chuàng)建第三方框架。它不會把你的第三方依賴放在一個單獨的 workspace 中去管理,你寫的第三方框架一定要包含自己的 Xcode 項目用來描述怎么去生成和使用。

總之,Carthage 的目標(biāo)就是成為管理第三方框架第簡單的工具,它可以在不使用 Xcode 的情況下完成它的任務(wù),也不會讓框架作者做額外的工作。但 CocoaPods 也確實提供了很多非常好而且 Carthage 介于成本考慮可能永遠(yuǎn)也不會有的功能。

安裝 Carthage

安裝 Carthage 有以下幾種方法:

  • 通過安裝程序安裝:下載并運行 Carthage.pkg ,根據(jù)軟件提示安裝即可;
  • Homebrew安裝:使用 brew install carthage 命令安裝(注意:如果你安裝過二進(jìn)制版本的 Carthage,你要先刪除 /Library/Frameworks/CarthageKit.framework);
  • 從GigHub源安裝:如果你想安裝最新版本(注意最新版可以不太穩(wěn)定),直接克隆Carthage 在GigHub上的 master 分支,并運行 make install 即可,僅支持 Xcode 8.0及以上(Swift支持 2.3 版本,現(xiàn)在還不支持 3.0 以上的版本)。

為應(yīng)用添加第三方框架

如果你安裝了 Carthage ,你就可以為你的項目添加第三方框架了。注意 Carthage 只支持動態(tài)庫,動態(tài)庫只在 iOS 8 及以上才支持(任意版本的 OS X 都支持動態(tài)庫)。

開始使用

針對 iOS, tvOS 或者 watchOS 的使用方法:

  1. 創(chuàng)建一個 Cartfile 并列出你想使用的第三方庫;
  2. 使用 carthage update 命令,Carthage 就會把第三方框架更新到 Carthage/Checkouts 文件夾中,然后挨個編譯;
  3. 在你的工程文件的 “General” 選項卡中,把你的框架從 Carthage/Build 文件夾拖到 “Linked Frameworks and Libraries” 區(qū)域內(nèi);
  4. 在你的工程文件 “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

當(dāng)這些調(diào)試信息被復(fù)制到產(chǎn)品目錄中, 無論你的應(yīng)用停在哪個斷點,Xcode 都能夠 symbolicate 你的堆棧信息。這也能夠讓你用第三方的調(diào)試工具進(jìn)行調(diào)試。

無論你的應(yīng)用提交到 AppStore 還是打包測試,Xcode 都會復(fù)制這些文件到你應(yīng)用的 .xcarchive 沙盒中 dSYMs 文件夾的子目錄中。

升級第三方框架

如果你修改了 Cartfile 文件,或者你想使用第三方框架的最新版,只要再運行一次 carthage update 就行了。

如果你只是想更新某一個或者某幾個,只要用空格隔開就行了,比如:

carthage update Box

或者

carthage update Box Result

Cartfile

Cartfile 是用來描述第三方框架的,它嚴(yán)格遵守 Ordered Graph Data Language 的語法,任何標(biāo)準(zhǔn)的 OGDL 工具都能解析它。

第三方框架聲明分為兩部分:基礎(chǔ)部分和版本需求部分。

基礎(chǔ)部分

如果使用 GigHub 的倉庫(GitHub.com 或者 GitHub Enterprise),使用時必須加入 github 關(guān)鍵字,比如:

github "ReactiveCocoa/ReactiveCocoa" # GitHub.com
github "https://enterprise.local/ghe/desktop/git-error-translations" # GitHub Enterprise

其他 git 倉庫要加 git 關(guān)鍵字,如下:

git "https://enterprise.local/desktop/git-error-translations2.git"

版本需求

Carthage 支持以下幾種版本聲明:

  1. >= 1.0 大于等于版本 1.0
  2. ~> 1.0 兼容版本 1.0
  3. == 1.0 必須是版本 1.0
  4. some-branch-or-tag-or-commit 針對一個明確的 Git 項目

如果沒有版本聲明,就代表任何版本都可以使用。

兼容性是根據(jù)語義化版本規(guī)范確定的,任何大于或者等于版本 1.5.1 小于版本 2.0 的,都被認(rèn)定 兼容于 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"
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,663評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,125評論 3 414
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,506評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,614評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,402評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,934評論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,021評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,168評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,690評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,596評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,784評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,288評論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,027評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,404評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,662評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,398評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 47,743評論 2 370

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

  • Carthage v0.26.2(原文鏈接) Carthage的目標(biāo)是用最簡單的方式來管理Cocoa第三方框架。 ...
    iOSLee閱讀 3,616評論 0 7
  • PS:本文旨在介紹Carthage的使用,為初學(xué)者提供一個Carthage學(xué)習(xí)的入口,高手如不喜歡請繞行~ 在項目...
    小松wolf閱讀 6,003評論 5 9
  • 文檔地址https://github.com/Carthage/Carthage release v0.20.0...
    指尖彈灰閱讀 4,513評論 2 4
  • 從秦始皇算起,古往今來,歷朝歷代,不知涌現(xiàn)出了多少位皇帝。這些皇帝有的雄才大略,有的禮賢下士,有的睿智圣明,也有一...
    果昊媽媽閱讀 474評論 0 0
  • 一大早大家都高興地起來了。吃過早餐后,今天去新神洞游玩。洞里風(fēng)景不錯,就是呆久了點就會覺得很冷。廷鍵自已...
    紫彤閱讀 300評論 0 0