Carthage 的使用——iOS第三方庫的管理

PS:本文旨在介紹Carthage的使用,為初學者提供一個Carthage學習的入口,高手如不喜歡請繞行~

在項目中究竟是使用Carthage管理第三方庫,還是使用CoocaPods管理第三方庫?如果是個人獨立開發(fā),看自己的喜好了;如果是團隊開發(fā),以團隊成員商量結果為準。

Carthage是什么?

  • 主頁:Carthage:https://github.com/Carthage/Carthage
  • 目標:Carthage旨在使用最簡單的方式來管理Cocoa等第三方框架。
  • 原理:自動將第三方框架編譯為動態(tài)庫(Dynamic framework)。
  • 優(yōu)點:Carthage為用戶管理第三方框架和依賴,但不會自動修改項目文件或構建設置,開發(fā)者可以完全控制項目結構和設置。
  • 缺點:只支持iOS 8.0+,不能用來開發(fā)iOS 8.0以前的項目。

Carthage與CocoaPods的區(qū)別

  • 1、Cocoapods通過創(chuàng)建一個更集中的生態(tài)系統(tǒng)來提高第三方開源庫的可維護性和參與度,而Carthage強調盡可能靈活的將任務委托給Xcode和Git;
    2、Cocoapods在使用中會自動創(chuàng)建和更新workspace、依賴和Pod項目并進行整合;
    3、Carthage在使用中不需要創(chuàng)建和繼承相應的workspace和project,只需要依賴打包好的framework文件即可。
    總結:Cocoapods的方法更加簡單粗暴容易使用,而Carthage則更靈活且對項目沒有侵入性。
  • CocoaPods項目還必須具有Podspec文件,其中包括有關該項目的元數(shù)據(jù),并指出如何構建它。Carthage用于Xcode構建依賴關系,而不是將它們集成到單個工作空間中,它沒有類似的規(guī)范文件。
  • Cocoapods有一個中心倉庫,而Carthage是去中心化的,沒有中心服務器也就避免了可能因中心節(jié)點錯誤而帶來的失敗,也減少了維護,即Carthage每次配置和更新環(huán)境,只會去更新具體的庫,所需時間更短。
  • Carthage存在的一些缺陷:
    1、支持Carthage的第三方庫依然不如CocoaPods豐富;
    2、僅支持iOS 8.0+;
    3、在使用的過程中無法查看第三方庫源碼。

Carthage的安裝

安裝Carthage有多種選擇:

  • pkg文件:下載并運行Carthage.pkg最新版本的文件,然后按照屏幕上的說明進行操作。
  • Homebrew:可以使用Homebrew安裝Carthage
    1、安裝Homebrew,在終端運行:/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)",這條指令運行結束后,Homebrew就安裝完成了,具體可以查看官網(wǎng)(https://brew.sh);
    2、安裝Carthage,在終端運行:brew update,等待運行結束后,接著運行:brew install carthage,這樣Carthage就安裝完成了。
    注意:如果以前安裝過Carthage,則應先刪除/Library/Frameworks/CarthageKit.framework
  • 源代碼:只需要克隆master存儲庫的分支,然后在終端進入到項目目錄下運行make install即可,這需要Xcode 8.3(Swift 3.1)支持。

Carthage的使用

1、新建一個iOS工程(使用Xcode8.3.3創(chuàng)建)
CartHageDemo文件目錄.png
2、使用Carthage安裝第三方庫:

1、先進入到項目所在的文件夾
$ cd ~/Path/CartHageDemo
2、創(chuàng)建一個空的Cartfile文件(兩種方式)
(1)使用終端創(chuàng)建:
$ touch Cartfile
(2)使用文本文件創(chuàng)建:
創(chuàng)建一個名為Cartfile的文件,并保存到項目目錄下
3、編輯Cartfile文件,例如要安裝MBProgressHUD框架
github "jdg/MBProgressHUD" ~> 1.0.0
4、保存并關閉Cartfile文件,使用Carthage安裝框架
$ carthage update

carthage安裝.png

到此為止,MBProgressHUD就已經(jīng)安裝到項目中了
CartHageDemo安裝第三方庫后的文件目錄.png

對比上面的文件目錄,發(fā)現(xiàn)多了三個文件:

  • Cartfile文件:是開發(fā)者自己維護的,添加刪除第三方庫等;
  • Cartfile.resolved文件:運行carthage update命令后,Cartfile在項目目錄中創(chuàng)建了一個名為Cartfile.resolved的文件。該文件精確地為每個版本指定了依賴項,并列出所有依賴關系(甚至是嵌套的依賴項);
  • Carthage文件夾:打開Carthage文件夾可以看到,里面包含兩個文件夾:
    (1)Checkouts目錄:從github獲取的源代碼;

    (2)Build目錄:編譯出來的.framework二進制代碼庫。
    Carthage文件目錄.png
3、配置項目
  • 打開項目,點擊Target -> General -> Link Library with Libraries選擇Carthage/Build目錄中導入的framework
    配置項目(1).png

    配置項目(2).png
4、添加編譯腳本
  • 點擊Target -> Build Phases -> “+” -> New Run Script Phase
    添加編譯腳本(1).png
  • 展開Run Script
    1、在shell下面輸入:/usr/local/bin/Carthage copy-frameworks
    2、在Input Files中加入:$(SRCROOT)/Carthage/Build/iOS/MBProgressHUD.framework
    3、在Output Files中加入:$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/MBProgressHUD.framework
    添加編譯腳本(2).png

5、在項目中使用

#import <MBProgressHUD/MBProgressHUD.h>

其他

  • 卸載Carthage:通過Homebrew 安裝的可以使用$ brew uninstall Carthage進行卸載;
  • 更新第三方框架:
    1、更新多個框架:修改Carfile文件,并重新執(zhí)行$ carthage update
    2、更新某個框架:$ Carthage update 具體的框架名稱
  • Carthage語法:
    Cartfile 遵循 Ordered Graph Data Language 語法。

1、GitHub的庫(GitHub.com和GitHub Enterprise都使用github關鍵字指定):

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

2、其它 git 庫

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

3、只支持二進制文件的 frameworks

binary "https://my.domain.com/release/MyFramework.json"

4、版本號

github "jdg/MBProgressHUD"  // 不顯示指定版本號,永遠獲取最新的版本
github "jdg/MBProgressHUD" == 1.0   // “1.0版本”
github "jdg/MBProgressHUD" ~> 1.0.0 // “1.0及以上的兼容版本<2.0”
github "jdg/MBProgressHUD" >= 1.0   // “大于等于 1.0 的版本”
"some-branch-or-tag-or-commit" //特定的分支、tag、或者提交

注意:目前不是所有的第三方庫都支持Carthage管理,在使用前請先到GitHub查詢是否支持Carthage管理。

Carthage傳送門:https://github.com/Carthage/Carthage
CarthageDemo傳送門(本文中的演示Demo):https://github.com/XiaoSongWolf/CarthageDemo

寫在最后:當今社會競爭中想要脫穎而出,人必須有一技之長,而且萬里挑一。 每個人都有不同的選擇,有時一個正確的選擇比奮斗本身更重要。 做你喜歡的事情,做你擅長的事情。 沒有七十二變,豈能大鬧天宮?

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

推薦閱讀更多精彩內容