關(guān)于Carthage的小知識(shí)

什么是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)(甚至是嵌套的版本)。

Cartfile.resolved.png

強(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 updatecarthage 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)系作者并注明出處

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
禁止轉(zhuǎn)載旺入,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者兑凿。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市茵瘾,隨后出現(xiàn)的幾起案子礼华,更是在濱河造成了極大的恐慌,老刑警劉巖龄捡,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卓嫂,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡聘殖,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)行瑞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)奸腺,“玉大人,你說(shuō)我怎么就攤上這事血久⊥徽眨” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵氧吐,是天一觀的道長(zhǎng)讹蘑。 經(jīng)常有香客問(wèn)我,道長(zhǎng)筑舅,這世上最難降的妖魔是什么座慰? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮翠拣,結(jié)果婚禮上版仔,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好蛮粮,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布益缎。 她就那樣靜靜地躺著,像睡著了一般然想。 火紅的嫁衣襯著肌膚如雪莺奔。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,182評(píng)論 1 299
  • 那天变泄,我揣著相機(jī)與錄音弊仪,去河邊找鬼。 笑死杖刷,一個(gè)胖子當(dāng)著我的面吹牛励饵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播滑燃,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼役听,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了表窘?” 一聲冷哼從身側(cè)響起典予,我...
    開(kāi)封第一講書(shū)人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎乐严,沒(méi)想到半個(gè)月后瘤袖,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡昂验,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年捂敌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片既琴。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡占婉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出甫恩,到底是詐尸還是另有隱情逆济,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布磺箕,位于F島的核電站奖慌,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏松靡。R本人自食惡果不足惜简僧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望击困。 院中可真熱鬧涎劈,春花似錦广凸、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蹦浦,卻和暖如春扭吁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背盲镶。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工侥袜, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人溉贿。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓枫吧,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親宇色。 傳聞我的和親對(duì)象是個(gè)殘疾皇子九杂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353