为什么改用 Carthage

在这个几乎每一个开源 iOS 第三方组件都支持 CocoaPods 的时代,为什么要选择另一个组件支持数量少、项目配置相对繁琐、无法直接查看组件源码的包管理工具呢?Carthage 到底好在哪呢?

最初看到 Carthage 第一眼就被「去中心化」这个高大上的名词给吓到了,但是它并不是个很复杂的事。在项目中,原来我们把一个组件做成 Pod,需要写 Podspec,用 development pod 或者更新 Specs 仓库的项目,私有组件还要更新、指定自己的 Specs 源。

最早 CocoaPods 还没有流行的时候,我曾是 CocoaPods/Specs 仓库的主要贡献者之一。当时第三方组件默认的安装方式就是拖拽和 git submodule,CocoaPods 为了推广自己,有一个建议第三方仓库支持 CocoaPods 的文字模板,以 issue 的形式发到对方的仓库里。让仓库拥有者辛辛苦苦地写一个 podspec,还要更新 README 一般都要等上好几天,而且很难一次就做对。所以最好都是帮对方写好 podspec,改好 README,发 Pull Request,再代为更新 CocoaPods/Specs 仓库,非常费事费力。

而组件支持 Carthage 的唯一要求就是,项目的里有一个 shared Framework target 存在。每次更新组件都不需要去更新任何 Podspec 或 Specs 仓库。私有仓库不需要额外设置 Specs 仓库,不需要 pod trunk。去中心化,意义非凡。

另一个 Carthage 的设计优势是,先天只支持 Dynamic Framework,只在更新时编译,这是为 Swift 项目量身定制的特性。在发版本时不需编译所有依赖,在项目 clean 时不需要重新编译所有依赖,开发者只有在用 carthage update 更新组件后才需要重新编译组件,而且一般只做一次。

另外组件作者可以进一步提供编译好的 Framework 压缩包,随 release 发布,节省使用者的编译时间。试想如果项目中的每一个依赖都这么做了,carthage update 会像 apt-get 一样又快又好用。

再来说说公认的缺点。项目配置的步骤的确不如写一个 Podfile 然后 pod install 那样简单,但其实也没有多么痛苦吧。Carthage 不会像 CocoaPods 那样对项目做大量改动,也没有要求一定要用 xcworkspace。甚至如果放弃打包 dsym,不用 copy-framework 脚本也是可以的。至于不能直接点到源码,可以用拖入 Carthage/checkouts 目录中的 xcproj 的方式来临时解决,这样就和使用 CocoaPods 或 git submodule 差不多了。

最后分享近两年使用 Carthage 发现的一些小技巧,但我觉得是 Carthage 的 CLI 命令设计得比较奇葩。如:

  • 只更新不编译:carthage update --no-build

  • 只编译特定依赖的 iOS 版:carthage build --platform iOS RxSwift

  • 删除一个依赖的时候不需要重新 update,只要删除 Cartfile.resolved 中相应的行,和 Carthage 中的目录即可

  • 如果经常用的库没有提供编译好的 Framework,可以 fork 一个自己提供,然后就不用每次都编译了

最后我想说的是,Carthage 并没有占据绝对的上峰,有很多常用组件如 Facebook 的大部分 SDK、Lookback SDK、Fabric Framework 等都不支持 Carthage。选择自己习惯的、适合当前项目的包管理工具,以及使用配置更好的 Mac 能省去不少时间。

BTW: firefox - ios 使用了Carthage

本文转自:https://lex.sh/why-carthage/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容