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. Android开源工具库

    一.依赖注入DI 通过依赖注入降低View.服务.资源简化初始化,事件绑定等反复繁琐工作 1. AndroidAnnotations(Code Diet) android高速开发框架 项目地址:htt ...

  2. 利用mongodb开发lbs应用实践【转】

    近期作为突击队员,与同事一起突击构建了一个简单的lbs系统.当前比较主流的做法是使用mongodb,因为其已经封装了常用的lbs基本操作(如查找附近的人),功能非常强大,对于开发周期只有一周的项目,m ...

  3. [RxJS] Drag and Drop example

    Improving our mouse drag event Our mouse drag event is a little too simple. Notice that when we drag ...

  4. iOS类初始化

    类继承下来的初始化有三种: +(void)load: +(void)initialize: -(instancetype)init:   +(void)load:会自动调用(也可手动调用),只要有引用 ...

  5. 关于C语言中运算符优先级的一次错误

    好久没碰编程了,最近有点闲,又拾起来.做了个简单的网络测试程序,测试的时候发现有条语句老是获取不到结果.如下: if(portnumber=atoi(argv[1])>65535) portnu ...

  6. dom+bom

    一.判断最大值和最小值,注:arr为数组 最大值:Math.max.apply(null, arr); 最小值:Math.min.apply(null, arr);   二.BOM 打开新页面和关闭打 ...

  7. 判断是否为闰年(bool)

    bool为布尔型,只有一个字节,取值false和true #include<iostream>using namespace std;int main(){ int year; bool ...

  8. 自动构建工具Ant的使用-笔记

    第一:什么是Ant? Apache Ant是一个基于Java的生成工具.据最初的创始人James Duncan Davidson的介绍,这个工具的名称是another neat tool(另一个整洁的 ...

  9. js判断手机浏览器操作系统和微信浏览器的方法

    做手机端的前端开发,少不了对手机平台的判断.如,对于app下载,就要判断在Android平台下就显示Android下载提示:在iOS平台下就显示iOS下载提示. 今天就为大家介绍一下用js判断手机客户 ...

  10. Xamarin.iOS - 利用Settings插件与EAIntroView制作App的欢迎界面

    Xamarin.iOS - 利用Settings插件与EAIntroView制作App的欢迎界面 关于欢迎界面 很多App第一次启动都会有一个欢迎界面,欢迎界面往往决定这用户对App的第一映像,所以欢 ...