[iOS开发]Carthage安装和使用教程

一 Carthage简单介绍

主页: https://github.com/Carthage/Carthage.git
作者: Justin Spahr-Summers等
版本: 0.31
目标: 用最简单的方式来管理Cocoa第三方框架
性质: 第三方框架管理工具(类似于cocoapods) Carthage为用户管理第三方框架和依赖,但不会自动修改项目文件和生成配置,把对项目结构和设置的控制权交给用户。
原理 自动将第三方框架编程为Dynamic framework(动态库)
限制 仅支持iOS8+。它只支持框架,所以不能用来针对iOS8以前的系统版本进行开发

二 Carthage的安装和使用

  • 直接下载Carthage.pkg安装包,安装运行
    Carthage.pkg下载

  • 如果使用的XCode为7.0+版本,那么也可以使用下面的方法来安装

1 安装homebrew*

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

2 升级brew

$ brew update

3 使用brew来安装

$ brew install carthage
installCarthage.png

4 查看版本

   $ carthage version

三 Carthage的使用

​1 先进入到项目所在文件夹

 $ cd 项目路径

​2 创建一个空的Carthage文件

$ touch Cartfile

​3 编辑cartfile文件,例如要安装AFN框架

GitHub库可在cartfile文件添加以下内容,指定GitHub的关键字:

github  "AFNetworking/AFNetworking" 

或者填写其他git源,指定git关键词:

​git "https://github.com/AFNetworking/AFNetworking.git"

4 保存并关闭cartfile文件,使用cartfile安装框架

$ carthage update --platform iOS

注: 不追加参数会编译出 iOS、OSX、tvos多个framework

installAFN.png

注2: 如果失败的话,先用Xcode打开你的项目,Product > Scheme > Manage Schemes 在新窗口中,勾选上 Shared,点击 Close。在终端再次执行这个命令

Shared.png

5 打开Carthage 查看生成的文件目录

$ open Carthage
Carthage文件夹目录.png
  • 执行安装依赖命令后的文件夹结构
# 执行文件多出三个文件

Cartfile # 存放需要安装的依赖列表

Cartfile.resolved # 自动生成的依赖关系文件,需提交到git
# 确保提交的项目可以使用完全相同的配置与方式运行启用, 跟踪项目当前所用的依赖版本号

Carthage # 自动生成的Carthage目录 (不需要提交到 Git)
# 目录下有两个文件夹:Build  Checkouts
# Build  存放编译后的文件,包括 iOS/Mac/tvOS/watchOS对应的framework
# Checkouts  存放从git拉取的依赖库源文件

​6 配置项目

​打开项目,点击Target -> Build Phases -> Link Library with Libraries选择Carthage/Build目录中要导入的framework

addFramework.png

7 添加编译的脚本

(该脚本文件保证在提交归档时会对相关文件和dSYMs进行复制)

​(1)点击Build Phases,点击“+” -> New Run Script Phase

NewRunScriptPhase.png

​(2)添加添加脚本 /usr/local/bin/Carthage copy-frameworks

​(3)添加"Input Files" $(SRCROOT)/Carthage/Build/iOS/AFNetworking.framework

runScript.png

8 在项目中使用第三方库

#import <AFNetworking/AFNetworking.h>

其它:

​卸载Carthage:$ brew uninstall Carthage

​更新第三方框架:
​更新多个框架:修改Cartfile文件,并重新执行 $ carthage update
更新某个框架:$ carthage update 具体的框架名称

carthage update  # 修改了Cartfile文件,并重新编译
carthage update  Alamofire  # 仅更新Alamofire框架
carthage update --platform ios  # 仅编译iOS平台的framework
carthage bootstrap    # 从本地库重新编译依赖

四 Carthage优缺点

Carthage的优点
​ 1)使用了CocoaPods的项目是高度集成的,而Carthage更灵活强调尽可能将任务委托给Xcode和Git。
​ CocoaPods在使用中会自动创建和更新workspace、依赖和Pod项目并进行整合;
​ Carthage在使用中不需要创建和集成相应的workspace和project,只需要依赖打包好的framework文件即可。
​ 总结一下,CocoaPods的方法更容易使用,而Carthage更灵活且对项目没有侵入性。
​ 2)CocoaPods相对来说功能要比Carthage多很多,因此也更复杂,而CocoaPods配置简单项目干净。
​ 3)CocoaPods有一个中心仓库,而Carthage是去中心化的,没有中心服务器也就避免了可能因中心节点错误而带来的失败,即Carthage每次配置和更新环境,只会去更新具体的库,时间更快。
4) Carthage 管理的依赖只需编译一次,项目干净编译时,不会再去重新编译依赖,节省时间
5) 与 CocoaPods 无缝集成,一个项目能同时拥有 CocoaPods 和 Carthage

Carthage的不足

  • 仅支持 iOS8 +
  • 它只支持框架,所以不能用来针对 iOS 8 以前的系统版本进行开发
  • 支持的 Carthage 安装的第三方框架和依赖不如 CocoaPods 丰富
  • 无法在 Xcode 里定位到第三方库源码

五 Carthage的工作过程说明

​ ① 创建一个Cartfile文件,在该文件中列出您想使用的框架
​ ② 运行Carthage,获取并编译Cartfile文件中列出的框架
​ ③ 把框架的二进制文件配置到项目中

六 关于版本指定

Carthage 支持以下几种版本指定方法:

= 1.0 代表 “最低 1.0版本”
~> 1.0 代表 “表示使用版本1.0以上但是低于2.0的最新版本,如1.5, 1.9”
== 1.0 代表 “必须是 1.0 版本”

"some-branch-or-tag-or-commit"指定一个 Git 对象 (任何被 git rev-parse 允许的)
如果没有版本要求,任何版本的依赖是允许的。

版本好的兼容性是根据语语义化版本控制决定的。这意味着任何大于或等于1.5.1版本,但小于2.0,将认为与1.5.1“兼容”。

Cartfile示例

# Require version 2.3.1 or later 最低2.3.1版本
github "ReactiveCocoa/ReactiveCocoa" >= 2.3.1

# Require version 1.x   必须1.x版本
github "Mantle/Mantle" ~> 1.0    # (大于或等于 1.0 ,小于 2.0)

# Require exactly version 0.4.1 必须0.4.1版本
github "jspahrsummers/libextobjc" == 0.4.1

# Use the latest version  使用最新版本
github "jspahrsummers/xcconfigs"

# Use the branch  使用git分支
github "jspahrsummers/xcconfigs" "branch"

# Use a project from GitHub Enterprise  使用一个企业项目,在 "development" 分支
github "https://enterprise.local/ghe/desktop/git-error-translations"

# Use a project from any arbitrary server, on the "development" branch  使用一个私有项目,在 "development" 分支
git "https://enterprise.local/desktop/git-error-translations2.git" "development"

# Use a local project   使用一个本地的项目
git "file:///directory/to/project" "branch"

七 Git 中忽略不需要提交到版本库的文件与文件夹

修改 .gitignore 文件,增加忽略 Carthage 文件夹就行了:

#Carthage
Carthage

八 Carthage的其他命令

 archive           Archives built frameworks into a zip that Carthage can use
 bootstrap         Check out and build the project's dependencies
 build             Build the project's dependencies
 checkout          Check out the project's dependencies
 copy-frameworks   In a Run Script build phase, copies each framework specified by a SCRIPT_INPUT_FILE environment variable into the built app bundle
 fetch             Clones or fetches a Git repository ahead of time
 help              Display general or command-specific help
 outdated          Check for compatible updates to the project's dependencies
 update            Update and rebuild the project's dependencies
 version           Display the current version of Carthage
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,294评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,780评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,001评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,593评论 1 289
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,687评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,679评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,667评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,426评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,872评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,180评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,346评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,019评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,658评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,268评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,495评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,275评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,207评论 2 352

推荐阅读更多精彩内容