【译】Carthage的使用

简介

Cathage 一直致力于成为给 Cocoa 应用添加框架最简单的方式。
它的使用流程如下:

  1. 创建一个 Cathage ,在里面列出你的项目要使用的第三方框架;
  2. 运行 Cathage, Cathage 会获取并创建你列出的所有框架;
  3. 把生成的 .frameword 二进制文件拖到你的工程文件中。

Cathage 帮你创建第三方依赖、提供二进制的 framework 文件,并且不会改变你的项目架构和创建。 Cathage 在你使用的过程中并不会修改的你工程文件和你的项目设置。

Cathage 与 CocoaPods 的不同

CocoaPods 是存在已久的 Cocoa 的第三方依赖管理方式,在此基础上为什么还要使用 Cathage ?

首先,CocoaPods 会自动为你的应用与第三方依赖创建和更新一个 Xcode workspace;Carthage 使用 xcodebuild 创建二进制 framework ,添加和使用这此框架是用户自己操作的。CocoaPods 使用上更简单,而 Carthage 更灵活,耦合性更低。

从 CocoaPods 的 README 可以看出它有以下的目标:

通过创建一个集中式的生态系统使发现和管理第三方框架更便捷。

相反, Carthage 是一个非集中式的第三方管理工具。它在工程文件中没有集中的列表,这可以大大降低维护的难度,避免集中列表的一些错误导致的编译失败。然而,发现第三方框架也是一个麻烦的事情,用户必须要到 GitHub 的趋势页面去查找或者去类似的网站。

CocoaPods 的工程文件中一定要有 podspec 文件,在 podspec 文件中用户要填写元数据和它创建的方式。Carthage 用 xcodebuild 去创建第三方框架。它不会把你的第三方依赖放在一个单独的 workspace 中去管理,你写的第三方框架一定要包含自己的 Xcode 项目用来描述怎么去生成和使用。

总之,Carthage 的目标就是成为管理第三方框架第简单的工具,它可以在不使用 Xcode 的情况下完成它的任务,也不会让框架作者做额外的工作。但 CocoaPods 也确实提供了很多非常好而且 Carthage 介于成本考虑可能永远也不会有的功能。

安装 Carthage

安装 Carthage 有以下几种方法:

  • 通过安装程序安装:下载并运行 Carthage.pkg ,根据软件提示安装即可;
  • Homebrew安装:使用 brew install carthage 命令安装(注意:如果你安装过二进制版本的 Carthage,你要先删除 /Library/Frameworks/CarthageKit.framework);
  • 从GigHub源安装:如果你想安装最新版本(注意最新版可以不太稳定),直接克隆Carthage 在GigHub上的 master 分支,并运行 make install 即可,仅支持 Xcode 8.0及以上(Swift支持 2.3 版本,现在还不支持 3.0 以上的版本)。

为应用添加第三方框架

如果你安装了 Carthage ,你就可以为你的项目添加第三方框架了。注意 Carthage 只支持动态库,动态库只在 iOS 8 及以上才支持(任意版本的 OS X 都支持动态库)。

开始使用

针对 iOS, tvOS 或者 watchOS 的使用方法:

  1. 创建一个 Cartfile 并列出你想使用的第三方库;
  2. 使用 carthage update 命令,Carthage 就会把第三方框架更新到 Carthage/Checkouts 文件夹中,然后挨个编译;
  3. 在你的工程文件的 “General” 选项卡中,把你的框架从 Carthage/Build 文件夹拖到 “Linked Frameworks and Libraries” 区域内;
  4. 在你的工程文件 “Build Phases” 选项卡中,点 "+" 然后选择 “New Run Script Phase” 创建一个新的运行脚本来声明你的 shell(比如:bin/sh),把下面的内容粘贴到 shell 中:
/usr/local/bin/carthage copy-frameworks

然后在 “Input Files” 中添加你要使用的框架的路径,比如:

$(SRCROOT)/Carthage/Build/iOS/Box.framework
$(SRCROOT)/Carthage/Build/iOS/Result.framework
$(SRCROOT)/Carthage/Build/iOS/ReactiveCocoa.framework

当这些调试信息被复制到产品目录中, 无论你的应用停在哪个断点,Xcode 都能够 symbolicate 你的堆栈信息。这也能够让你用第三方的调试工具进行调试。

无论你的应用提交到 AppStore 还是打包测试,Xcode 都会复制这些文件到你应用的 .xcarchive 沙盒中 dSYMs 文件夹的子目录中。

升级第三方框架

如果你修改了 Cartfile 文件,或者你想使用第三方框架的最新版,只要再运行一次 carthage update 就行了。

如果你只是想更新某一个或者某几个,只要用空格隔开就行了,比如:

carthage update Box

或者

carthage update Box Result

Cartfile

Cartfile 是用来描述第三方框架的,它严格遵守 Ordered Graph Data Language 的语法,任何标准的 OGDL 工具都能解析它。

第三方框架声明分为两部分:基础部分和版本需求部分。

基础部分

如果使用 GigHub 的仓库(GitHub.com 或者 GitHub Enterprise),使用时必须加入 github 关键字,比如:

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

其他 git 仓库要加 git 关键字,如下:

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

版本需求

Carthage 支持以下几种版本声明:

  1. >= 1.0 大于等于版本 1.0
  2. ~> 1.0 兼容版本 1.0
  3. == 1.0 必须是版本 1.0
  4. some-branch-or-tag-or-commit 针对一个明确的 Git 项目

如果没有版本声明,就代表任何版本都可以使用。

兼容性是根据语义化版本规范确定的,任何大于或者等于版本 1.5.1 小于版本 2.0 的,都被认定 兼容于 1.5.1。

但是根据语义化版本规范,任何 0.x.y 的版本都会在运行中崩溃,所以0.x 的版本没有遵守语义化版本规范,如果你定义了 0.1.1 的版本,那么 兼容的版本就是 0.1.2,而不是 0.2。

Cartfile 示例

# Require version 2.3.1 or later
github "ReactiveCocoa/ReactiveCocoa" >= 2.3.1

# Require version 1.x
github "Mantle/Mantle" ~> 1.0    # (1.0 or later, but less than 2.0)

# Require exactly version 0.4.1
github "jspahrsummers/libextobjc" == 0.4.1

# Use the latest version
github "jspahrsummers/xcconfigs"

# Use the branch
github "jspahrsummers/xcconfigs" "branch"

# Use a project from GitHub Enterprise
github "https://enterprise.local/ghe/desktop/git-error-translations"

# Use a project from any arbitrary server, on the "development" branch
git "https://enterprise.local/desktop/git-error-translations2.git" "development"

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

推荐阅读更多精彩内容

  • Carthage v0.26.2(原文链接) Carthage的目标是用最简单的方式来管理Cocoa第三方框架。 ...
    iOSLee阅读 3,486评论 0 7
  • PS:本文旨在介绍Carthage的使用,为初学者提供一个Carthage学习的入口,高手如不喜欢请绕行~ 在项目...
    小松wolf阅读 5,875评论 5 9
  • 文档地址https://github.com/Carthage/Carthage release v0.20.0...
    指尖弹灰阅读 4,406评论 2 4
  • 从秦始皇算起,古往今来,历朝历代,不知涌现出了多少位皇帝。这些皇帝有的雄才大略,有的礼贤下士,有的睿智圣明,也有一...
    果昊妈妈阅读 414评论 0 0
  • 一大早大家都高兴地起来了。吃过早餐后,今天去新神洞游玩。洞里风景不错,就是呆久了点就会觉得很冷。廷键自已...
    紫彤阅读 264评论 0 0