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 的使用还是让我省时又省力了。

Carthagecocopads 摘抄笔记相关推荐

  1. mysql学习ppt摘抄笔记

    目录 二.SQL优化原则与方法原则 三.SQL执行顺序: 四.order by查询的两种情况: 等价改写.反嵌套 SELECT优化-limit 事务的使用与优化 一.✓减少磁盘IO 全表扫描 磁盘临时 ...

  2. 《区块链:定义未来金融与经济新格局》摘抄笔记

    前三章是关于区块链的科普文章.最后一章专门涉及技术,最后一章感觉抄了<精通比特币>一书不少内容. 第0章 必然的出现 世界上最早的货币 -- 已知的最早货币:大麦货币.苏美尔人将定量的大麦 ...

  3. 《Practical Machine Learning A New Look at Anomaly Detection》摘抄+笔记

    <Practical Machine Learning A New Look at Anomaly Detection>--实用机器学习, 异常检测的新看法 本文照抄论文主要内容加上个人理 ...

  4. 《excel应用大全》(excel home 编著)--学习摘抄笔记1

    第1章.excel简介 1.   "人类自古以来就有处理数据的要求,文明程度越高时,需要处理的数据就越复杂,而且处理要求更高,速度也要求越快.各种应用工具应运而生--.." 2.  ...

  5. C语言程序设计摘抄笔记2

    2020/7/16 在C语言中,&有三种作用,分别如下: 取地址.单目运算符.用来取一个变量的地址. 比如 int i, *p; p = &i;//这里的&作用是取变量i的地址 ...

  6. C语言程序设计摘抄笔记3

    2021/3/5 17:31 优先级排序为:算术运算bai符 > 关系运算符 > 赋值运算. 算术运算符中,乘法运算符[*].除法运算符[/].取余运算符[%]属于优先级第三级,加法运算符 ...

  7. 《redis入门指南》摘抄笔记

    原因:当服务器内存有限时,如果大量地使用缓存键且生存时间设置得过长就会导致Redis占满内存:另一方面如果为了防止Redis占用内存过大而将缓存键的生存时间设得太短,就可能导致缓存命中率过低并且大量内 ...

  8. 多对一,多对多RNN例子(摘抄笔记)

    原文地址 1.创建一对多,可以使用RepeatVector(...)实现. 注意,return_sequences是一个布尔值,用于决定是返回输出序列中的最后一个输出还是全部序列: model = S ...

  9. Objective-C Reflection(Objective-C 反射机制)实用随笔笔记(持续更新)

    前言:本篇文章就"Objective-C 反射机制"使用方面进行叙述,不会涉及太多理论论述,因为"Objective-C 反射机制"理论论述在网上搜索一大把,本 ...

  10. 【JavaScript 学习笔记】创建对象

    2019独角兽企业重金招聘Python工程师标准>>> 因为最近一直在读<JavaScript高级程序设计>,深感从前对JavaScript的了解实在过于肤浅,所以打算顺 ...

最新文章

  1. Java中当对象不再使用时,不赋值为null会导致什么后果 ?
  2. TP3.2的删除缓存与引入第三方库的问题(二)
  3. python【数据结构与算法】选数问题(选不相连最大值——DP)
  4. P1468 派对灯 Party Lamps(BIG 模拟)
  5. 在.NET开发面向Oracle数据库的应用程序
  6. nasa 开源_NASA公开数据,白宫新员工以及更多开源新闻
  7. FPGA学习笔记---任务(task) 和函数 (function)
  8. Ubuntu+Docker+Tensorflow+GPU安装
  9. 测试管理中的一个问题—功能点覆盖还是功能测试点覆盖
  10. 计算机文献影印版,计算机网络 参考文献
  11. python病毒攻击代码_用python写的简单病毒(无害) -
  12. Windows7Windows10兼容红色警戒
  13. LTE相关协议2——下行峰值速率计算
  14. 营业执照识别/发票识别在供应链与物流智能移动解决方案
  15. Windows家庭版添加本地组策略编辑器的方法
  16. 荣之学:跨境电商和淘宝哪个好?
  17. 总线揭密 串行传输VS并行传输
  18. 2013华为工作之电信客服上线
  19. JAVA获取网页中的电影下载地址小程序
  20. 孙陶然:有能力的第二个标准是业绩好

热门文章

  1. 经验总结 | PBS系统的使用
  2. 西安电子科技大学超级计算机,西安电子科技大学超级计算机投入使用
  3. 关于vmware无法访问互联网
  4. 华罗庚黄金分割优选法
  5. springcloud阿里巴巴五大组件
  6. .计算机自动关机或重启,电脑自动关机或重启怎么治
  7. ES集群不通,日志报[node-3] not enough master nodes discovered during pinging (found [[Candidate{node={node-3
  8. unity使用videoplayer播放视频黑屏问题解决方案
  9. guid分区怎么装win7_gpt分区无法安装win7原因分析及解决方法(完美解决)
  10. 在线编辑Word——插入内容控件