為什么改用 Carthage

在這個幾乎每一個開源 iOS 第三方組件都支持 CocoaPods 的時代邮丰,為什么要選擇另一個組件支持數(shù)量少、項目配置相對繁瑣范嘱、無法直接查看組件源碼的包管理工具呢趣效?Carthage 到底好在哪呢?

最初看到 Carthage 第一眼就被「去中心化」這個高大上的名詞給嚇到了艾帐,但是它并不是個很復(fù)雜的事乌叶。在項目中,原來我們把一個組件做成 Pod柒爸,需要寫 Podspec准浴,用 development pod 或者更新 Specs 倉庫的項目,私有組件還要更新捎稚、指定自己的 Specs 源乐横。

最早 CocoaPods 還沒有流行的時候,我曾是 CocoaPods/Specs 倉庫的主要貢獻者之一今野。當(dāng)時第三方組件默認的安裝方式就是拖拽和 git submodule葡公,CocoaPods 為了推廣自己,有一個建議第三方倉庫支持 CocoaPods 的文字模板条霜,以 issue 的形式發(fā)到對方的倉庫里催什。讓倉庫擁有者辛辛苦苦地寫一個 podspec,還要更新 README 一般都要等上好幾天宰睡,而且很難一次就做對蒲凶。所以最好都是幫對方寫好 podspec,改好 README夹厌,發(fā) Pull Request豹爹,再代為更新 CocoaPods/Specs 倉庫,非常費事費力矛纹。

而組件支持 Carthage 的唯一要求就是臂聋,項目的里有一個 shared Framework target 存在。每次更新組件都不需要去更新任何 Podspec 或 Specs 倉庫或南。私有倉庫不需要額外設(shè)置 Specs 倉庫孩等,不需要 pod trunk。去中心化采够,意義非凡肄方。

另一個 Carthage 的設(shè)計優(yōu)勢是,先天只支持 Dynamic Framework蹬癌,只在更新時編譯权她,這是為 Swift 項目量身定制的特性虹茶。在發(fā)版本時不需編譯所有依賴,在項目 clean 時不需要重新編譯所有依賴隅要,開發(fā)者只有在用 carthage update 更新組件后才需要重新編譯組件蝴罪,而且一般只做一次。

另外組件作者可以進一步提供編譯好的 Framework 壓縮包步清,隨 release 發(fā)布要门,節(jié)省使用者的編譯時間。試想如果項目中的每一個依賴都這么做了廓啊,carthage update 會像 apt-get 一樣又快又好用欢搜。

再來說說公認的缺點。項目配置的步驟的確不如寫一個 Podfile 然后 pod install 那樣簡單谴轮,但其實也沒有多么痛苦吧炒瘟。Carthage 不會像 CocoaPods 那樣對項目做大量改動,也沒有要求一定要用 xcworkspace书聚。甚至如果放棄打包 dsym唧领,不用 copy-framework 腳本也是可以的。至于不能直接點到源碼雌续,可以用拖入 Carthage/checkouts 目錄中的 xcproj 的方式來臨時解決斩个,這樣就和使用 CocoaPods 或 git submodule 差不多了。

最后分享近兩年使用 Carthage 發(fā)現(xiàn)的一些小技巧驯杜,但我覺得是 Carthage 的 CLI 命令設(shè)計得比較奇葩受啥。如:

  • 只更新不編譯:carthage update --no-build

  • 只編譯特定依賴的 iOS 版:carthage build --platform iOS RxSwift

  • 刪除一個依賴的時候不需要重新 update,只要刪除 Cartfile.resolved 中相應(yīng)的行鸽心,和 Carthage 中的目錄即可

  • 如果經(jīng)常用的庫沒有提供編譯好的 Framework滚局,可以 fork 一個自己提供,然后就不用每次都編譯了

最后我想說的是顽频,Carthage 并沒有占據(jù)絕對的上峰藤肢,有很多常用組件如 Facebook 的大部分 SDK、Lookback SDK糯景、Fabric Framework 等都不支持 Carthage嘁圈。選擇自己習(xí)慣的、適合當(dāng)前項目的包管理工具蟀淮,以及使用配置更好的 Mac 能省去不少時間最住。

BTW: firefox - ios 使用了Carthage

本文轉(zhuǎn)自:https://lex.sh/why-carthage/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市怠惶,隨后出現(xiàn)的幾起案子涨缚,更是在濱河造成了極大的恐慌,老刑警劉巖策治,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脓魏,死亡現(xiàn)場離奇詭異兰吟,居然都是意外死亡,警方通過查閱死者的電腦和手機轧拄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門揽祥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人檩电,你說我怎么就攤上這事「鳎” “怎么了俐末?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵坦胶,是天一觀的道長嘹叫。 經(jīng)常有香客問我,道長限书,這世上最難降的妖魔是什么垄潮? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任烹卒,我火速辦了婚禮,結(jié)果婚禮上弯洗,老公的妹妹穿的比我還像新娘旅急。我一直安慰自己,他們只是感情好牡整,可當(dāng)我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布藐吮。 她就那樣靜靜地躺著,像睡著了一般逃贝。 火紅的嫁衣襯著肌膚如雪谣辞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天沐扳,我揣著相機與錄音泥从,去河邊找鬼。 笑死沪摄,一個胖子當(dāng)著我的面吹牛躯嫉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播卓起,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼和敬,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了戏阅?” 一聲冷哼從身側(cè)響起昼弟,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎奕筐,沒想到半個月后舱痘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體变骡,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年芭逝,在試婚紗的時候發(fā)現(xiàn)自己被綠了塌碌。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡旬盯,死狀恐怖台妆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情胖翰,我是刑警寧澤接剩,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站萨咳,受9級特大地震影響懊缺,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜培他,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一鹃两、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧舀凛,春花似錦俊扳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至螃壤,卻和暖如春抗果,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背奸晴。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工冤馏, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人寄啼。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓逮光,卻偏偏與公主長得像,于是被迫代替她去往敵國和親墩划。 傳聞我的和親對象是個殘疾皇子涕刚,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,446評論 2 348

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