Cocoa的依赖管理器,我们已经有了CocoaPods,非常好用,那么为什么还要创建这样一个项目呢?本文翻译自Carthage的Github的README.md,带大家来了解一下这个工具有何不同之处。

Carthage的目标是用最简单的方式来管理Cocoa第三方框架。

基本的工作流如下:

  1. 创建一个Cartfile,包含你希望在项目中使用的框架的列表

  2. 运行Carthage,将会获取列出的框架并编译它们

  3. 将编译完成的.framework二进制文件拖拽到你的Xcode项目当中

Carthage编译你的依赖,并提供框架的二进制文件,但你仍然保留对项目的结构和设置的完整控制。Carthage不会自动的修改你的项目文件或编译设置。

Carthage与CocoaPods的不同

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

首先,CocoaPods默认会自动创建并更新你的应用程序和所有依赖的Xcode workspace。Carthage使用xcodebuild来编译框架的二进制文件,但如何集成它们将交由用户自己判断。CocoaPods的方法更易于使用,但Carthage更灵活并且是非侵入性的。

CocoaPods的目标在它的README文件描述如下:

…为提高第三方开源库的可见性和参与度,创建一个更中心化的生态系统。

与之对照,Carthage创建的是去中心化的依赖管理器。它没有总项目的列表,这能够减少维护工作并且避免任何中心化带来的问题(如中央服务器宕机)。不过,这样也有一些缺点,就是项目的发现将更困难,用户将依赖于Github的趋势页面或者类似的代码库来寻找项目。

CocoaPods项目同时还必须包含一个podspec文件,里面是项目的一些元数据,以及确定项目的编译方式。Carthage使用xcodebuild来编译依赖,而不是将他们集成进一个workspace,因此无需类似的设定文件。不过依赖需要包含自己的Xcode工程文件来描述如何编译。

最后,我们创建Carthage的原因是想要一种尽可能简单的工具——一个只关心本职工作的依赖管理器,而不是取代部分Xcode的功能,或者需要 让框架作者做一些额外的工作。CocoaPods提供的一些特性很棒,但由于附加的复杂性,它们将不会被包含在Carthage当中。

安装Carthage

Carthage提供OS X平台的pkg安装文件,你可以从Github的最新release中找到,按照引导一步步安装即可。

如果你想安装最新的开发版本(可能存在稳定性和兼容性的问题),你只需要clone本仓库的master分支,然后运行make install.

添加框架到应用程序

安装完Carthage后,你能够使用它来添加框架到你的项目。注意Carthage只支持动态框架,而后者只存在于iOS 8以上(以及任意版本的OS X)。

开始使用:

  1. 创建一个Cartfile,将你想要使用的框架列在里面

  2. 运行carthage update,将获取依赖文件到一个Carthage.checkout文件夹,然后编译每个依赖

  3. 在你的应用程序target的“General”设置标签中的“Embedded Binaries”区域,将框架从Carthage.build文件夹拖拽进去。

在这个过程当中,Carthage将创建一些build artifacts,其中最重要的是Cartfile.lock文件,里面将列出每个框架的具体版本,确保你提交了这个文件到版本控制工具里面(如Git、SVN),因为每个用到项目的人都需要它来编译相同版本的框架。

完成上面的步骤并提交你的修改,项目的其他用户就只需要获取该仓库并执行carthage bootstrap就能使用你所添加的框架。

添加框架到单元测试或另一个框架

使用Carthage添加框架到任意目标的方法,和添加到应用程序差不多。主要的不同在于框架是如何设置并链接到Xcode的。

因为非应用程序目标没有“Embedded Binaries”设置区域,你需要将编译完成后的框架拖拽到“Link Binaries With Libraries”的区域里。

在某些稀有案例中,你也许会想要复制每个依赖到已编译的项目中(比如,在外部框架中嵌入依赖,或确保依赖在测试工具中正常显示)。想要达到这个目的,你需要创建一个新的“Copy Files”编译选项和“Frameworks”组,然后将框架的引用添加到里面。

升级框架

如果你改动了你的Cartfile,或者你想升级到框架的最新版本(服从于你指定的需求版本),执行carthage update命令可以达到目的。

让你的框架支持Carthage

Carthage只正式支持动态框架,动态框架能够在任何版本的OS X上使用,但只能在iOS 8及以上版本使用。

因为Carthage拥有非中心化的包列表,以及没有项目指定的编译设置,大多数框架应该能自动编译。

分享你的Xcode schemes

Carthage将只从你的.xcodeproj中标记为已分享的Xcode schemes来编译。如果你想检查编译是否成功,执行carthage build --no-skip-current命令,然后检查Carthage.build文件夹。

如果当执行命令但有scheme没有被编译,打开Xcode并确定对应scheme被标记为“Shared”,以便Carthage能够发现它。

解决编译失败

如果你在执行carthage build --no-skip-current时编译失败,尝试执行xcodebuild -scheme SCHEME -workspace WORKSPACE build 或xcodebuild -scheme SCHEME -project PROJECT build(将其中的大写单词换成你项目的对应名称),然后观察是否有相同的失败发生,这应该能生成足够的失败信息来解决问题。

稳定版发布的标签

Carthage使用语义化标签来发布稳定版本。如1.2.0,如带有字母则是不受支持的版本(如1.2-alpha-1).

CarthageKit

大多数carthage命令行工具的功能都封装在一个名为CarthageKit的框架中。

如果你希望将Carthage作为另一个工具的一部分,或者希望扩展Carthage的功能,可以看看CarthageKit的源码,检查API是否符合你的需求。

总结安装方法:

1.首先安装brew,已经安装了的忽略

http://brew.sh/index_zh-cn.html

2. 安装Carthage

brew install carthage

3.添加依赖库

carthage bootstrap

参考链接

http://www.jianshu.com/p/a7c6ee5d4ad9

安装Cocoa 新的依赖管理工具Carthage的更多相关文章

  1. Cocoa 新的依赖管理工具:Carthage

    昨天搞了一下pod的安装 因为之前我都是在使用pod来进行第三方库的管理 但是拿到项目之后 竟发现这个前辈是用Carthage 说真的在这之前我从来没有用过这个玩意因为我感觉用POD已经很好了啊 很方 ...

  2. Composer : php依赖管理工具

    原始时代 我记得在当时用php的时候还没有composer,只有个pear,但是不好用呀,还不如直接在互联网上到处复制代码了,更快更不容易出错,当时也没有github这么好的社区工具了 总结如下 代码 ...

  3. composer php依赖管理工具

    #composer是什么 Composer 是 PHP 的一个依赖管理工具.它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们. composer出现之前我们php项目依赖管理大部分都是手动 ...

  4. Go 包依赖管理工具 —— govendor

    govendor 是一个基于 vendor 机制实现的 Go 包依赖管理命令行工具.与原生 vendor 无侵入性融合,也支持从其他依赖管理工具迁移,可以很方便的实现同一个包在不同项目中不同版本.以及 ...

  5. 有用PHP依赖管理工具Composer新手教程

    PHP依赖管理工具Composer新手教程 Composer 是 PHP 的一个依赖管理工具.它同意你申明项目所依赖的代码库,它会在你的项目中为你安装他们. 依赖管理 Composer 不是一个包管理 ...

  6. golang多个项目时如何配置GOPATH,使用gb包依赖管理工具,不同项目配置不同的GOPATH的

    golang多个项目时如何配置GOPATH,使用gb包依赖管理工具,不同项目配置不同的GOPATH的 1:执行脚本setGoPath.sh#!/bin/bashif [[ $GOPATH =~ .*$ ...

  7. IOS开发依赖管理工具CocoaPods

    CocoaPods IOS开发依赖管理工具 CocoaPods is a dependency manager for Swift and Objective-C Cocoa projects. It ...

  8. PHP依赖管理工具Composer入门

    作者: JeremyWei | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明 网址: http://weizhifeng.net/manage-php-dependency-wi ...

  9. Ubuntu 和 Redhat / Fedora 服务管理命令对比表(附Fedora16新的服务管理工具systemctl )

    以 apache/httpd 服务作为例子 任务 Red Hat / Fedora Ubuntu Ubuntu (with sysv-rc-conf or sysvconfig) 立即启动/停止某服务 ...

随机推荐

  1. 关机相关(shutdown,reboot)

    慣用的關機指令: shutdown 由於Linux的關機是那麼重要的工作,因此除了你是在主機前面以tty7圖形介面來登入系統時, 不論用什麼身份都能夠關機之外,若你是使用遠端管理工具(如透過piett ...

  2. How does CCFileUTils::fullPathForFilename work

    OverView The purpose of this document is show you how does function CCFileUtils::fullPathForFilename ...

  3. 【转】开发者分享如何创造一款优秀的iOS游戏——2013-08-25 17

    http://game.dapps.net/gamedev/experience/889.html 创造出<Temple Run>的夫妻团队在高峰时期每天能够获得"好几万&quo ...

  4. 判断URL是否存在

    判断URL是否存在   判断网址是否存在,可以使用下面方面处理.如果HttpStatusCode为OK,说明网址存在.

  5. iOS tableview 静态表布局纪录

    今天使用了tableview静态表布局,纪录如下 1:使用tableview 静态表,必须是UITableViewController 2:Content 中选择 Static Cells 如下图 3 ...

  6. oracle report err:REP-2103 PL/SQL formula returned invalid value or no value

    好多年没用report builder做报表了,最近又开始接触这玩意了,今天修改一个report,调试半天没发现逻辑问题,一直报REP-2103: Column 'CF_report_line_po' ...

  7. jquery操作iframe中的js函数

    关键字:jquery操作iframe中的js函数 1.jquery操作iframe中的元素(2种方式) var tha = $(window.frames["core_content&quo ...

  8. php生成验证码图片

    0:效果图 1:index.php用来生成验证码图片 <?php session_start(); header ('Content-Type: image/png'); $image=imag ...

  9. SQL 有父标识的 递归查询

    递归查询,临时表的高级应用 WITH temp AS ( --父项 SELECT * FROM Ar_Area WHERE Ar_Parent = UNION ALL --递归结果集中的下级 SELE ...

  10. Android出现Read-only file system 解决方法

    操作AVD文件系统上的文件时遇到"... Read-only file system". 解决办法: 将AVD sdcard挂载为读写权限: 在doc下执行:adb -s emul ...