关于Carthage的小知识

什么是Carthage

Carthage和CocoaPods都是用来管理第三方库,与CocoaPods相比Carthage更加轻量一些,它是由Swift编写的,所以在纯Swift项目中更为便利

A simple, decentralized dependency manager for Cocoa
一个简单、松散的依赖管理者
这个是Carthage Github上的描述

简单对比Carthage与Cocoapods

  • Carthage用xcodebuild 构建框架(framework)的二进制文件,但是并没有将他们整合到用户项目中。Cocoapods的目的是让用户使用起来更简单,而 Carthage 则是更灵活,减少对项目的侵入性
  • Cocoapods项目还必须具有所谓的podspec文件,其中包括有关项目的元数据,并指定应如何构建它。Carthage使用xcodebuild去构建依赖,而不是将它们集成到单个工作区中,它没有类似的规范文件,但你的依赖项必须包含到自己的 Xcode 项目中,该项目描述了如何构建其产品

安装Carthage

  • 安装Homebrew
    • 如果你已经安装了可以跳过这一步
    • 更新最新版本
    • 如果你没有安装,可以参考这里Mac 安装homebrew并更新到最新版本
brew update

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

  • 安装Carthage
brew install carthage
  • 查看Carthage版本
carthage version

在项目中使用Carthage

  • 进入项目所在文件夹
  • 创建Cartfile文件
  • 打开Cartfile文件
  • 编辑Cartfile文件,添加依赖库
cd 项目文件夹路径
touch Cartfile
open Cartfile
github "Alamofire/Alamofire" == 4.5
git "https://enterprise.local/desktop/git-error-translations2.git"
binary "/absolute/path/MyFramework.json"

Cartfile文件

  • 格式
    • 使用 github 关键字指定 GitHub 存储库(GitHub.com 和 GitHub Enterprise)
    • 其他 git 存储库使用 git 关键字指定
    • 仅作为已编译的二进制文件 .frameworks 提供的依赖项使用 binary 关键字和 https:// 链接,file:// 链接,或没有方案的相对或绝对路径,返回二进制项目规范
  • 版本要求
    • >= 1.0 指“1.0 及以上版本”。
    • ~> 1.0 指“1.x 版本”
    • == 1.0 指“版本为 1.0”
    • "some-branch-or-tag-or-commit" 特指 git 对象(git rev-parse 任何内容都被允许)。
      Note:二进制源 不支持这种形式。
      如果没有指定任何版本,任何版本的依赖都将被允许(默认使用最新版本)。
  • 保存关闭Cartfile,运行Carthage
carthage update --platform iOS

运行命令后,一个叫Cartfile.resolved的文件将会被创建到 Cartfile 同级目录下。此文件准确指定了每个依赖项选择的版本,并列出了所有依赖项(甚至是嵌套的版本)。

Cartfile.resolved.png

强烈建议将该文件加入到版本控制中,告知其他开发者,当前使用的版本。

虽然 Cartfile.resolved 文件是人类可读和可扩展的,但你不能修改它。文件的格式非常严格,列出依赖项的顺序对于构建过程很重要。

Carthage 文件夹

  • Build
    包含对应平台编译好的Framework
  • Checkouts
    包含编译 framework 所使用的源代码(除非你使用 submodules ,否则不要修改这里的代码,carthage updatecarthage checkout 会覆盖这里的代码,清除你的修改)。

在"Carthage/Build/iOS"文件夹中会生成 .framework 文件。

在项目中使用Carthage

  • 在Carthage -> Build中找到需要的framework
  • 将framework拖拽到Xcode 工程的Linked Frameworks and Libraries
  • 进入工程的 target -> Build Phases,点击 +,添加New Run Script Phase输入一下脚本
/usr/local/bin/carthage copy-frameworks

在 Input Files 下添加要使用的框架的路径

$(SRCROOT)/Carthage/Build/iOS/XXXX.framework

将复制框架的路径添加到 Output Files

$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/XXX.framework
  • 为什么需要指定 Output Files
    • 使用 Carthage 来管理第三方库,在编译并运行 App 的时候,会有一个阶段叫:Carthage Copy Frameworks。这个阶段通过跑一个脚本的形式把所有依赖的第三方库都复制到 App 的目录里。

    • 这个阶段通常会花 1~x 秒不等,这取决于你的 App 依赖的第三方库数量。默认情况下,每次你 Build & Run 的时候,都会进行一次这个操作——尽管你的第三方库没有任何改变。

    • 所以我们需要指定 Output Files,在 Output Files 指定输出文件的情况下,Xcode 只会在 framework 发生更改时去进行 copy framework 操作,这样就节省了时间。

更新库

1、在carthage文件里面把有指定版本的库更新到想要的版本,如无指定版本可忽略
2、调用命令更新库

  • 全部更新
carthage update --platform iOS
  • 更新制定库
carthage update XXX --platform iOS


最后的话

虽然说Carthage是纯Swift编写,但个人感觉还是觉得CocoaPods更加便利快捷,特别是在国内。
在实际项目中Carthage升级或加库经常各种报错,有可能是本人学艺未精,经过万般折腾,本人还是会首选CocoaPods作为第三方库管理工具



参考文章
Carthage 新手教程
版权所有,如需转载请联系作者并注明出处

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