Carthage 的使用——iOS第三方库的管理

PS:本文旨在介绍Carthage的使用,为初学者提供一个Carthage学习的入口,高手如不喜欢请绕行~

在项目中究竟是使用Carthage管理第三方库,还是使用CoocaPods管理第三方库?如果是个人独立开发,看自己的喜好了;如果是团队开发,以团队成员商量结果为准。

Carthage是什么?

  • 主页:Carthage:https://github.com/Carthage/Carthage
  • 目标:Carthage旨在使用最简单的方式来管理Cocoa等第三方框架。
  • 原理:自动将第三方框架编译为动态库(Dynamic framework)。
  • 优点:Carthage为用户管理第三方框架和依赖,但不会自动修改项目文件或构建设置,开发者可以完全控制项目结构和设置。
  • 缺点:只支持iOS 8.0+,不能用来开发iOS 8.0以前的项目。

Carthage与CocoaPods的区别

  • 1、Cocoapods通过创建一个更集中的生态系统来提高第三方开源库的可维护性和参与度,而Carthage强调尽可能灵活的将任务委托给Xcode和Git;
    2、Cocoapods在使用中会自动创建和更新workspace、依赖和Pod项目并进行整合;
    3、Carthage在使用中不需要创建和继承相应的workspace和project,只需要依赖打包好的framework文件即可。
    总结:Cocoapods的方法更加简单粗暴容易使用,而Carthage则更灵活且对项目没有侵入性。
  • CocoaPods项目还必须具有Podspec文件,其中包括有关该项目的元数据,并指出如何构建它。Carthage用于Xcode构建依赖关系,而不是将它们集成到单个工作空间中,它没有类似的规范文件。
  • Cocoapods有一个中心仓库,而Carthage是去中心化的,没有中心服务器也就避免了可能因中心节点错误而带来的失败,也减少了维护,即Carthage每次配置和更新环境,只会去更新具体的库,所需时间更短。
  • Carthage存在的一些缺陷:
    1、支持Carthage的第三方库依然不如CocoaPods丰富;
    2、仅支持iOS 8.0+;
    3、在使用的过程中无法查看第三方库源码。

Carthage的安装

安装Carthage有多种选择:

  • pkg文件:下载并运行Carthage.pkg最新版本的文件,然后按照屏幕上的说明进行操作。
  • Homebrew:可以使用Homebrew安装Carthage
    1、安装Homebrew,在终端运行:/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)",这条指令运行结束后,Homebrew就安装完成了,具体可以查看官网(https://brew.sh);
    2、安装Carthage,在终端运行:brew update,等待运行结束后,接着运行:brew install carthage,这样Carthage就安装完成了。
    注意:如果以前安装过Carthage,则应先删除/Library/Frameworks/CarthageKit.framework
  • 源代码:只需要克隆master存储库的分支,然后在终端进入到项目目录下运行make install即可,这需要Xcode 8.3(Swift 3.1)支持。

Carthage的使用

1、新建一个iOS工程(使用Xcode8.3.3创建)
CartHageDemo文件目录.png
2、使用Carthage安装第三方库:

1、先进入到项目所在的文件夹
$ cd ~/Path/CartHageDemo
2、创建一个空的Cartfile文件(两种方式)
(1)使用终端创建:
$ touch Cartfile
(2)使用文本文件创建:
创建一个名为Cartfile的文件,并保存到项目目录下
3、编辑Cartfile文件,例如要安装MBProgressHUD框架
github "jdg/MBProgressHUD" ~> 1.0.0
4、保存并关闭Cartfile文件,使用Carthage安装框架
$ carthage update

carthage安装.png

到此为止,MBProgressHUD就已经安装到项目中了
CartHageDemo安装第三方库后的文件目录.png

对比上面的文件目录,发现多了三个文件:

  • Cartfile文件:是开发者自己维护的,添加删除第三方库等;
  • Cartfile.resolved文件:运行carthage update命令后,Cartfile在项目目录中创建了一个名为Cartfile.resolved的文件。该文件精确地为每个版本指定了依赖项,并列出所有依赖关系(甚至是嵌套的依赖项);
  • Carthage文件夹:打开Carthage文件夹可以看到,里面包含两个文件夹:
    (1)Checkouts目录:从github获取的源代码;

    (2)Build目录:编译出来的.framework二进制代码库。
    Carthage文件目录.png
3、配置项目
  • 打开项目,点击Target -> General -> Link Library with Libraries选择Carthage/Build目录中导入的framework
    配置项目(1).png

    配置项目(2).png
4、添加编译脚本
  • 点击Target -> Build Phases -> “+” -> New Run Script Phase
    添加编译脚本(1).png
  • 展开Run Script
    1、在shell下面输入:/usr/local/bin/Carthage copy-frameworks
    2、在Input Files中加入:$(SRCROOT)/Carthage/Build/iOS/MBProgressHUD.framework
    3、在Output Files中加入:$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/MBProgressHUD.framework
    添加编译脚本(2).png

5、在项目中使用

#import <MBProgressHUD/MBProgressHUD.h>

其他

  • 卸载Carthage:通过Homebrew 安装的可以使用$ brew uninstall Carthage进行卸载;
  • 更新第三方框架:
    1、更新多个框架:修改Carfile文件,并重新执行$ carthage update
    2、更新某个框架:$ Carthage update 具体的框架名称
  • Carthage语法:
    Cartfile 遵循 Ordered Graph Data Language 语法。

1、GitHub的库(GitHub.com和GitHub Enterprise都使用github关键字指定):

github "ReactiveCocoa/ReactiveCocoa" # GitHub.com
github "https://enterprise.local/ghe/desktop/git-error-translations" # GitHub Enterprise

2、其它 git 库

git "https://enterprise.local/desktop/git-error-translations2.git"

3、只支持二进制文件的 frameworks

binary "https://my.domain.com/release/MyFramework.json"

4、版本号

github "jdg/MBProgressHUD"  // 不显示指定版本号,永远获取最新的版本
github "jdg/MBProgressHUD" == 1.0   // “1.0版本”
github "jdg/MBProgressHUD" ~> 1.0.0 // “1.0及以上的兼容版本<2.0”
github "jdg/MBProgressHUD" >= 1.0   // “大于等于 1.0 的版本”
"some-branch-or-tag-or-commit" //特定的分支、tag、或者提交

注意:目前不是所有的第三方库都支持Carthage管理,在使用前请先到GitHub查询是否支持Carthage管理。

Carthage传送门:https://github.com/Carthage/Carthage
CarthageDemo传送门(本文中的演示Demo):https://github.com/XiaoSongWolf/CarthageDemo

写在最后:当今社会竞争中想要脱颖而出,人必须有一技之长,而且万里挑一。 每个人都有不同的选择,有时一个正确的选择比奋斗本身更重要。 做你喜欢的事情,做你擅长的事情。 没有七十二变,岂能大闹天宫?

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

推荐阅读更多精彩内容