为什么要使用Carthage

CocoaPods是已存在很长时间的Cocoa依赖管理器, 那么为什么要创建Carthage呢?

  1. CoaoaPods是一套整体解决方案,我们在Podfile中指定好我们需要的第三方库。然后CocoaPods就会进行下载,集成,然后修改或者创建我们项目的workspace文件,这一系列整体操作。
  2. 相比之下,Carthage就要轻量很多,它也会有一个叫做Cartfile描述文件,但Carthage不会对我们的项目结构进行任何修改,更不多创建 workspace。它只是根据我们描述文件中配置的第三方库,将他们下载到本地,然后用xcodebuild构建成framework文件。然后由我们自己将这些库集成到项目中。

Carthage和Cocoapods比较

Cocoapods有如下优点:

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

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

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

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

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

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

③ 每次干净编译都会把所有第三方库都重新编译一次;

Carthage的优点:

① 使用Carthage的话,所有的第三方库依赖,除非是更新的需要,不然平常干净编译Project,它是不需要再次编译的,大大加快平常编译及Archive 的时间;

② 它是去中心化的,没有中心服务器. 这意味着每次配置和更新环境,只会去更新具体的库,而不会有一个向中心服务器获取最新库的索引这么个过程,如此又省了很多时间;

③ CocoaPods无缝集成!一个项目可同时使用两套包管理工具, 当前 CocoaPods管理主要Framework的配置下, 将少量其他Framework交给了Carthage管理, 二者可以和谐地共存;

Carthage的不足:

① 库不如CocoaPods丰富:尽管很多库不需要声明并改造就直接可以被 Carthage用,但依然有大量CocoaPods能用的库不支持;

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

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

Carthage的安装

  1. 安装brew

    安装Carthage之前,需要安装brew,进入官网有详细安装步骤。

    • 获取Homebrew

      打开终端,输入以下命令:

      /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    • 获取最新版本

      在终端输入命令:brew update。

      注意:如果遇到Error: The /usr/local directory is not writable.错误,就执行以下命令sudo chown -R $(whoami):admin /usr/local,再更新。

    • 其他brew命令

      brew install git // 使用brew安装软件
      brew uninstall wget // 使用brew卸载软件
      brew search /wge*/ // 使用brew查询软件,其中/wge*/是个正则表达式,需要包含在/中
      brew list // 列出已安装的软件
      brew home // 用浏览器打开brew的官方网站
      brew info // 显示软件信息
      brew deps // 显示包依赖
  2. 安装Carthage

    安装brew之后,就可以安装Carthage了。

    在终端运行

    brew install carthage

    安装之后,查看版本

    carthage version

Carthage的使用

  • 进入项目所在文件夹
cd ~/路径/项目文件夹
  • 创建一个空的Cartfile文件
touch Cartfile
  • 使用Xcode打开该文件
open -a Xcode Cartfile
  • 编辑Cartfile(ps:本篇以导入RxSwift3.0为例子)
github "ReactiveX/RxSwift" ~> 3.0
  • Cartfile格式说明

    • 依赖源Dependency origin

      Carthage支持两种类型的源,一个是github,另一个是git。

      github表示依赖源,告诉Carthage去哪里下载文件。依赖源之后

      跟上要下载的库,格式为Username/ProjectName``git关键字

      后面跟的是资料库的地址,可以是远程的URL地址,使用git://,

      http://, ssh://,或者是本地资料库地址。

    • 依赖版本号Dependency Version

      告诉Carthage使用哪个版本,这是可选的,不写默认使用最新版本

      1. == 1.0 表示使用1.0版本
      2. = 1.0 表示使用1.0或更高的版本

      3. ~> 1.0 表示使用版本1.0以上但是低于2.0的最新版本,如1.1,1.7
  • 运行Carthage

    保存并关闭Carfile文件,回到终端,执行以下命令:

    carthage update

    当命令执行完毕,在Cartfile文件同级别的文件夹中生成一个名为

    Carthage文件夹和Cartfile.resolved文件。打开Carthage

    文件夹,可以看到一个文件夹Build。

    注意:此处如果失败,可以查找相关解决办法。

  • 添加Frameworks到项目中

    点击项目名称->target->General,在最底部找到Linked Frameworks and Libraries。将上一步运行完之后的framework添加进来。

    目的是告诉Xcode链接这个framework到项目中,允许你在代码中使用。

    下一步选择菜单上的Build Phases,并添加一个新的Run Script,并添加以下命令:

/usr/local/bin/carthage copy-frameworks

点击Input Files下面的 + 号为每一个framework添加条目。

$(SRCROOT)/Carthage/Build/iOS/RxSwift.framework
$(SRCROOT)/Carthage/Build/iOS/RxBlocking.framework
$(SRCROOT)/Carthage/Build/iOS/RxCocoa.framework
$(SRCROOT)/Carthage/Build/iOS/RxTest.framework

严格来讲,build phase对项目运行来说不是必须的,但是,这巧妙的解决了APP因为使用的frameworks包含二进制图像的iOS模拟器在提交APP Store时会被自动拒绝的问题。

carthage copy-frameworks命令剔除了额外的框架。

command + B编译项目,编译成功之后就可以愉快地使用了。

import RxSwift
import RxCocoa

致谢

如果发现有错误的地方,欢迎评论,谢谢!

参考链接:Carthage

Carthage的安装和使用的更多相关文章

  1. Carthage入门篇-安装和使用

    在iOS开发过程中,用到最多的三方库管理工具也许是Cocoapods.Cocoapods会自动为你创建一个workspace,然后自动将你要用到的三方库集成到Project中,而整个过程,你只需要对P ...

  2. IOS Carthage安装、使用

    一.Carthage的安装和使用1.安装homebrew后输入如下命令 $ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercont ...

  3. 攻城利器 —— Carthage简单介绍

    01 Carthage简单介绍 主页:https://github.com/Carthage/Carthage.git 作者:Justin Spahr-Summers等 版本:0.18 目标:用最简单 ...

  4. carthage 简单使用步骤

    brew install carthage切至项目目录:cd xxx创建Cartfile文件vi Cartfile填写依赖git "https://xxxxx" "mas ...

  5. Cocoa包管理器之Carthage详解及CocoaPods中心化+Carthage的二进制化

    上篇博客详细的聊了CocoaPods的相关内容,今天我们就来介绍另一个Cocoa的包管理器Carthage.在上家公司用Swift开发工程时,用的就是Carthage.Carthage诞生于14年11 ...

  6. Carthage 不知不觉用到了

    Carthage 是什么? 这个问题我们简单点一句话总结: 你知道什么事CocoaPods吧,我相信只要是做iOS的都知道,Carthage 的属性和作用和我们常用的CocoaPods都是一样的,这样 ...

  7. cocoapods 安装使用详解

    http://blog.csdn.net/showhilllee/article/details/38398119 http://www.jianshu.com/p/1222dd6c4271  删除 ...

  8. Mac&Appium&Python自动化测试-Appium安装

    基础配置 1.JAVA和Git就不用多说了 2.Brew,也就是homebrew,它是MacOSX上的软件包管理工具,它就等同于linux上的apt-get.yum,如果没有安装,可以通过如下命令安装 ...

  9. Swift开发iOS应用过程中的问题和解决记录

    虚拟机里安装OSX+XCode开发环境 用真机的请直接跳过这个部分. 主要是在VitrualBox里安装mac系统和xcode,参考这篇教程,VirtualBox的版本是4.3.18 r96156,O ...

随机推荐

  1. 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率

    隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数(TODO) 隐马尔科夫模型HMM(四)维特比算法 ...

  2. 《孵化twitter》读书笔记

    寒假在家看完了第一本书——<孵化twitter:从蛮荒到IPO的狂野旅程>.在2014上半年,尝试看了该书的英文原版,奈何自己英语太菜,实在看不懂.这次有了中文版,就决定要看看.该书对于我 ...

  3. Node.js安装和配置

    今天有时间开始要研究Node.js了,项目的需要,先把环境正好,初次接触,把安装和配置过程记录下来,以备不时之需.言归正传. 1.打开NodeJS的官网,下载和自己系统相配的NodeJS的安装程序,包 ...

  4. 网页标题(title)动态改变

    这是一只小白的突发奇想,实验多次终于有所效果.想要实现什么效果呢, 如图所示 :    要实现这个效果,大体需要两步. 第一,如何像打印似的一个一个字显示文字.要实现这个效果有多种方法.在这里我所运用 ...

  5. sql 注入命令大全

    1.判断有无注入点 ; and 1=1 and 1=2 2.猜表一般的表的名称无非是admin adminuser user pass password 等.. and 0<>(selec ...

  6. EF架构~Migration数据迁移的执行顺序

    回到目录 对于单个分支项目来说,只要你生成一个migration的版本,就会有一个时间戳文件的对应,而在update-database时,会从最小的时间开始,一直执行到当前版本的migration,而 ...

  7. 宠物收养场 Treap

    宠物收养场 时间限制: 1 Sec  内存限制: 128 MB 题目描述 凡凡开了一间宠物收养场.收养场提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠 ...

  8. 简单轻量级的一套JS 类库(RapidDevelopmentFramework.JS)

    1.最近好久没有更新自己的博客了,一直在考虑自己应该写一些什么.4.2日从苏州回到南京的路上感觉自己的内心些崩溃和失落,我就不多说了? 猛然之间我认为自己需要找一下内心的平衡.决定开发属于自己一套快速 ...

  9. 利用wamp配置虚拟主机

    第一步:打开wamp--Apache--httpd.conf找到# Virtual hosts 一行,把其下面的一行中的#去掉.

  10. 后端对数组json_encode,前端遍历输出

    echo json_encode($get_city_lists); <script type="text/javascript"> function get_city ...