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
其他
卸载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及以上的兼容版本= 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
写在最后:当今社会竞争中想要脱颖而出,人必须有一技之长,而且万里挑一。 每个人都有不同的选择,有时一个正确的选择比奋斗本身更重要。 做你喜欢的事情,做你擅长的事情。 没有七十二变,岂能大闹天宫?