Carthage 初探:四大优势与四大劣势

https://imtx.me/archives/1939.html

Carthage 是 iOS/Mac 开发生态圈的一个包管理工具,与现在流行的 CocoaPods 不同,它是一个去中心化的解决方案。知道它已经有一段时间了,但是一直没有好好玩过,今天整合 Carthage 并自己创建 Carthage 兼容的 Framework 的过程中让我有了很大的体会,决定写篇文字记录一下。

先来简单介绍下 CocoaPods,这是现在注流的 iOS/Mac 的包管理工具,当前最新版本是 0.37.2,已经支持 iOS Frameworks。它管理着共 10,822 个库(并在不断增长),可以让开发者非常容易地将一个第三方库集成进来。

经过一段时间的使用,我觉得 CocoaPods 有如下优势:

使用方便,除编写 Podfile 以外其他几乎都是自动完成;

软件包数量多,主流支持;

支持 iOS 8 Framework,当然也支持旧的静态编译;

但是 CocoaPods 作为一个有中心仓库的解决方案,缺点也比较明显:

每次更新环境都需要连接到中心仓库,比较耗时;

开发者使用比较简单,但是如果创建兼容 CocoaPods 的库,就会相对繁琐一些(尽管有了命令行);

每次干净编译都会把所有第三方库都重新编译一次(看似很正确,直到我遇见 Carthage…)

看到这里你已经知道 Carthage 的一个优势了,没错,使用 Carthage 的话,所有的第三方库依赖,除非是更新的需要,不然平常干净编译 Project,它是不需要再次编译的,大大加快平常编译及 Archive 的时间。每次 Archive 及干净编译时都能节省几十秒以上,还是非常可观的,光是冲的这点,Carthage 就值得使用。

那么,Carthage 还有什么优势呢?前面还提到了,它是去中心化的,没有中心服务器,这意味着每次配置和更新环境,只会去更新具体的库,而不会有一个向中心服务器获取最新库的索引这么个过程,如此一来,又省了很多时间。

「好了好了,如果还有第三个优势,我就被你说服,开始用 Carthage!」

第三个优势就是:与 CocoaPods 无缝集成!

「什么?一个项目使用两套包管理工具,不会出差错吗?」

经过我的亲自试验,我已经非常完美地将我的「奇点」项目改造成了 Carthage + CocoaPods 共同管理依赖这么一个配置。没有丝毫冲突。

因为 Carthage 并不是像 CocoaPods 那样一个全自动+全功能的第三方库配置工具,它的设计哲学是,完成琐碎的部分,并把主要控制权交给开发者,它不会像 CocoaPods 那样一定会生成一个 Workspace,这意味着我可以自由地去控制 Framework 如何放进我的 Project/Workspace,是 Required 还是 Optional。当我发现 Carthage 是如此灵活后,我毫不犹豫地在当前 CocoaPods 管理主要 Framework 的配置下,将少量其他 Framework 交给了 Carthage 管理。它们非常和谐地共存着。

事实上,我用 Carthage 还有一个主要原因,那就是创建第三方库并让 Carthage 可以使用实在是太简单了,不需要弄像 CocoaPods 那样结构复杂+声明文件式的模式,我只需要创建一个 Project/Framework,让 Framework 这个 Scheme 设置成 Shared 就可以了。这样,我的第三方库的目录非常干净,没有任何与 Carthage 有关的文件,Carthage 却能去发现并使用它,我就喜欢这样简单纯粹的技术解决方案。

以上,便是 Carthage 的第四个优势:结构标准的项目天然就是 Carthage 库。

列举完这四大 Carthage 优势后,来谈谈它的不足:

库依然不如 CocoaPods 丰富:尽管很多库不需要声明并改造就直接可以被 Carthage 用,但依然有大量 CocoaPods 能用的库不支持,我相信时间能解决这个问题;

只支持 Framework,所以是 iOS 8 Only 了,随着时间推移,这个也不会是问题;

工具仍不完善:在使用过程中,我发现它无法在一个结构复杂的项目中正确发现库(比如有 iOS, Mac demo + framework 的结构);

无法在 Xcode 里定位到源码:如果你在写代码过程中,想跳转到一个第三方库去看具体的实现,这是无法办到的,Carthage 的配置只能让你看到一个库的头文件;

不知道这四个劣势到底会在什么时候得到解决(第四个因项目配置原因我觉得是无法解决了),但是综合上面提到的四大优势,Carthage 的使用还是让我省时又省力了。

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

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,016评论 4 62
  • 静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别...
    吃瓜群众呀阅读 11,857评论 3 42
  • 今天开始放假了 下图是今天的陈滢 在医院呆的头痛 明天妈妈说过来陪奶奶一晚上 现在长大了很多 以前跟妈妈在一起一句...
    你听过可乐吗阅读 147评论 0 1
  • Y高一的时候 注意到了隔壁班的一个男生 小篮球 高高的个子 衣服每天都换 还注重搭配 发型每天都精心整理过 在一群...
    禾豆阅读 158评论 1 2
  • 怨恨是一种对他人不满的情绪反应,这种情绪是中潜藏在心中隐忍未发的怒意,毒蛇般地折磨和扭曲一个人的正常心智与价值观。...
    Curtain_樂阅读 437评论 0 0