如何使用carthage使用教程管理iOS依赖库

支持原创,更多内容欢迎关注作者博客:
Carthage 功能主要是处理各个项目之间的依赖关系,如果没有 Carthage,要管理自己项目所依赖的其他项目,需要组织好一堆依赖库,并且编译最新的或者满足要求的依赖库,如果有更新也需要手动去获取和组织。在程序员看来,这个过程就太过复杂了。我们需要一个工具来为我们自动管理依赖,处理重复性的工作,解放我们的双手。
在了解 Carthage 之前,Cocoapods 一直是我们的首选项目管理方式,他的管理过程为:
1、在项目根目录生成一个基于 OGDL 的 podfile 文件。
2、安装 Cocoapods,更新依赖库。
3、使用 Cocoapods 为你自动生成的 workspace 来进行开发。
在使用了 Cocoapods 之后,你必须使用他为你生成的 workspace 来进行代码的编译和运行发布。有没有感觉被隐瞒了很多事情,这样并不是最直接使用 xcodebuild 工具来进行编译的方式,这样也会让人感到有种被过度绑架的感觉。不就是管理项目依赖,何必要做的这么麻烦。
在了解的最常用的 Cocoapods 的项目管理方式之后 ,我们可以想一下,我们真正想要的管理依赖库需要用到的流程应该是怎样:
1、将本项目的依赖库全部组织起来。
2、挨个更新代码,并编译最新版本的依赖库库,生成 framework 文件。
3、将文件挨个加入到本项目中,再运行本项目。
正因为 Cocoapods 的管理方式过于 “强势” ,Carthage 便应运而生了。它几乎就是按着我们真正需要的管理方式和和我们交互。这也让依赖的管理更为透明,可定制化更高。
这也是我弃用 Cocoapods ,转而使用 Carthage 来管理依赖的主要原因。
1、创建 Cartfile 文件,用来确定哪些依赖库、以及依赖库的版本号。
2、在程序根目录执行 carthage update,这一步骤,会将依赖库 down 到 Carthage/Checkouts 文件夹,并依次编译。
3、从 Carthage/Build 文件夹中,将需要的 framework 拖入 taget 对应的&Linked Frameworks and Libraries 目录中去。
4、在项目的&Build Phases 目录下,增加一项&New Run Script Phase 脚本,填入如下脚本:
/usr/local/bin/carthage copy-frameworks
5、在 Input Files 中,加入如下库文件路径例如:
$(SRCROOT)/Carthage/Build/iOS/Box.framework
$(SRCROOT)/Carthage/Build/iOS/Result.framework
$(SRCROOT)/Carthage/Build/iOS/ReactiveCocoa.framework
各种命令:
archive : Archives a built framework 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
update : Update and rebuild the project’s dependencies
version : Display the current version of Carthage
各个目录:
Cartfile:OGDL 描述的文件。用来告知 Carthage 需要什么标准的库。
Carthage/Build:依赖项目编译后的 framework 库文件位置。
Carthage/Checkouts:导出的依赖库。
Cartfile.resolved:执行carthage 之后,生成的文件,告知用户下载的依赖库究竟是什么版本的。
Cartfile.private:会被 carthage 管理起来,但是并不存在于主工程目录下。这个比较适合于管理测试依赖库。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:14096次
排名:千里之外
原创:29篇
(4)(4)(3)(10)(3)(3)(2)(1)(1)(3)(2)ios依赖管理工具:Carthage - 简书
下载简书移动应用
写了90638字,被719人关注,获得了1383个喜欢
ios依赖管理工具:Carthage
今天准备自学一下swift,就去github上找一下好的swift开源项目学习一下。 ,发现它用的是Carthage,所以就顺便学习用一下。
优点:Carthage创建的是去中心化的依赖管理器。它没有总项目的列表,这能够减少维护工作并且避免任何中心化带来的问题(如中央服务器宕机)。
缺点:项目的发现将更困难,用户将依赖于Github的页面或者类似的代码库来寻找项目。
下面两篇是别人写的Carthage的介绍
然后我自己简单的说一下使用吧!
安装CarthageCarthage提供OS X平台的pkg安装文件,你可以从Github的最新中找到,按照引导一步步安装即可。
开始使用Carthage
用xcode创建一个新的swift项目,保存到桌面上。
用终端cd到你的项目文件夹
创建一个Cartfile,将你想要使用的框架列在里面
运行carthage update,将获取依赖文件到一个Carthage.checkout文件夹,然后编译每个依赖
在你的应用程序target的“General”设置标签中的“Embedded Binaries”区域,将框架从Carthage.build文件夹拖拽进去。
请我撸个串吧
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
被以下专题收入,发现更多相似内容:
主要收录如下内容:
1.学习总结
2.开发中实战技巧
3.架构搭建、自定义UI控件等
由于专题的主要目的是实用而本人又是从...
· 0人关注
请我撸个串吧
选择支付方式:Carthage - 一个简单、去集中化的Cocoa依赖管理器 - 推酷
Carthage - 一个简单、去集中化的Cocoa依赖管理器
项目源址:
想到iOS/OS X项目的依赖管理,第一个想到的一定是大名鼎鼎的CocoaPods。下面是Carthage介绍里面的讲述两者的不同之处:
CocoaPods (默认)自动建立和更新一个Xcode workspace,用来管理你的项目和所有依赖。Carthage使用xcodebuild来编译出二进制库,剩下的集成工作完全交给开发人员。
CocoaPods使用起来方便,Carthage更加灵活并且对现有项目没有太多的侵略性。
CocoaPods希望建立一个生态系统,可以更加方便的发现和集成第三方代码库。Carthage希望变成一个去中心化的依赖管理系统,不提供中心化的项目列表,减少维护成本和单点失败的概率。不过这样给开发人员寻找项目带来不便。
CocoaPods的项目需要配置podspec文件,包含了项目和第三方库的信息。Carthage并不使用类似的配置文件,第三方库的依赖关系是通过Xcode项目来配置的。
安装Carthage
1. 直接下载安装包:
, 不过文件host在amazon S3上面,我尝试过几次未果。。。
brew update
brew install carthage
编译第三方库
1. 创建Cartfile列出你要使用的第三方库信息, 下面是一个简单的例子
构造两个库:ReactiveCoca 2.3.1版本及以上,Mantle 1.x版本
# 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)
2. Run carthage update
carthage update
3. 这时会生成如下的文件目录
|-Carthage
|-------Mantle.framework
|---------Versions
|-----------A
|-------------Headers
|-------------Modules
|-------------Resources
|-------ReactiveCocoa.framework
|---------Versions
|-----------A
|-------------Headers
|-------------Modules
|---------------ReactiveCocoa.swiftmodule
|-------------Resources
|-------Mantle.framework
|---------Headers
|---------Modules
|---------_CodeSignature
|-------ReactiveCocoa.framework
|---------Headers
|---------Modules
|-----------ReactiveCocoa.swiftmodule
|---------_CodeSignature
|---Checkouts
|-----libextobjc
|-------Configuration
|---------Base
|-----------Configurations
|-----------Targets
|---------Mac OS X
|---------iOS
|-------Tests
|-------extobjc
|-------extobjc.xcodeproj
|---------project.xcworkspace
|---------xcshareddata
|-----------xcschemes
|-----xcconfigs
|-------Base
|---------Configurations
|---------Targets
|-------Mac OS X
|-------iOS
Carthage/Checkouts目录:从github获取的源代码
Carthage/Build目录:编译出来的Framework二进制代码库
4. 打开项目,在项目的某个Target -& Build Phases -& Link Library with Libraries,将Carthage/Build目录中希望导入的Framework库拖拽进去。
5. 添加编译的额外脚本,点击“+” -& New Run Script Phase
/usr/local/bin/carthage copy-frameworks
添加&Input Files&
$(SRCROOT)/Carthage/Build/iOS/Mantle.framework
$(SRCROOT)/Carthage/Build/iOS/ReactiveCocoa.framework
6. 在项目中使用第三方库
#import &AppDelegate.h&
#import &ReactiveCocoa/ReactiveCocoa.h&
#import &Mantle/Mantle.h&
@interface AppDelegate ()
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
NSArray *array = @[@&a&,@&b&];
NSLog(@&%@&, [array mtl_firstObject]);
return YES;
7. 运行项目,查看输出
2015-05-06 11:14:56.858 CarthageProject[3733:227021] a
大功告成!
Carthage使用了一种极为精简的方式来管理第三方库,将源码编译成Framework的二进制文件,然后让开发人员来负责library的管理、导入等等。比起CocoaPods减少了对现有项目的侵入性,使用起来也挺方便。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致Cocoa的依赖管理器,我们已经有了CocoaPods,非常好用,那么为什么还要创建这样一个项目呢?本文翻译自Carthage的Github的README.md,带大家来了解一下这个工具有何不同之处。Carthage的目标是用最简单的方式来管理Cocoa第三方框架。基本的工作流如下:创建一个Cartfile,包含你希望在项目中使用的框架的列表运行Carthage,将会获取列出的框架并编译它们将编译完成的.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当中。安装CarthageCarthage提供OS X平台的pkg安装文件,你可以从Github的最新release中找到,按照引导一步步安装即可。如果你想安装最新的开发版本(可能存在稳定性和兼容性的问题),你只需要clone本仓库的master分支,然后运行make install.添加框架到应用程序安装完Carthage后,你能够使用它来添加框架到你的项目。注意Carthage只支持动态框架,而后者只存在于iOS 8以上(以及任意版本的OS X)。开始使用:创建一个Cartfile,将你想要使用的框架列在里面运行carthage update,将获取依赖文件到一个Carthage.checkout文件夹,然后编译每个依赖在你的应用程序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命令可以达到目的。让你的框架支持CarthageCarthage只正式支持动态框架,动态框架能够在任何版本的OS X上使用,但只能在iOS 8及以上版本使用。因为Carthage拥有非中心化的包列表,以及没有项目指定的编译设置,大多数框架应该能自动编译。分享你的Xcode schemesCarthage将只从你的.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是否符合你的需求。授权协议Carthage使用MIT开源协议授权发布。iOS开发进阶 - 使用Carthage管理iOS第三方库 - 推酷
iOS开发进阶 - 使用Carthage管理iOS第三方库
最近在研究 Swift ,一不小心发现一个好的的管理iOS第三方库 Carthage ,就跟第一次使用 CocoaPods 时一样兴奋不已,在研究了大半天后终于能用了,使用起来还是很方便的,比起 CocoaPods 有不足也有优点,两个配合起来用也是很爽的^ - ^
最近在用 Swift3.0 做项目,想导入一些支持 Swift3.0 的第三方库来使用,就想到
,看 README 时发现了一个新的名词 Carthage ,What?,这是个什么东西,居然也可以用它来管理第三方库,之前都没见到过,赶紧百度了一下补充了下知识:
Carthage:迦太基(地中海地区古城),好吧这是百度百科的解释,至于为什么用这个单词,我也不太清楚,可能比较屌吧,看下图你就知道它是用来干什么的了:
Carthage的目标是用最简单的方式来管理Cocoa第三方框架
是的,你没看错,它可以用来管理第三方库
,然后查了一下,还有很多第三方库都可以用它来管理,跟 CocoaPods 一样可以用来管理第三方库,看了一下它的崛起时间大概是iOS8之后 Swift 出来的时候,与现在流行的 CocoaPods 不同,它是一个去中心化的解决方案。 CocoaPods 的方法更易于使用,但 Carthage 更灵活并且是非侵入性的。
大家都知道 Swift 是支持动态库的,所以 Carthage 应势而生,它没有总项目的列表,这能够减少维护工作并且避免任何中心化带来的问题)。不过,这样也有一些缺点,就是想修改第三方库源码的话很费劲,还需要重新编译打包。
安装和使用Carthage
首先到 github 上Download或者Clone Git 或者使用 HomeBrew (没有安装的可以自行百度去装一个)安装~
brew update #先更新brew install carthage #安装Carthage
当你安装好Carthage后,在终端执行来判断是否安装成功:
carthage version
即可看到当前的 Carthage 版本, 当我写这篇文章的时候, Carthage 的版本为0.18(还是很年轻的嘛) 。
现在,你已经安装好了 Carthage ,接下来就是在你的项目中使用carthage了:
vim Cartfile #创建一个叫Cartfile的文件
输入你想要编译成Framework的 Swift 第三方库,比如说 SnapKit 和 Alamofire ,如下所示:
github &Alamofire/Alamofire& ~& 4.0
#支持Swift3.0github &SnapKit/SnapKit& ~& 3.0 #支持Swift3.0
github代表源,而后面的就是用户名和版本库的名字,而”~&” 后面是版本号哈!
保存退出,执行:
carthage update --platform iOS #因为是打包iOS的所以后面加iOS,有的库支持mac、watch的话会打几个包
之后会发现在跟目录下多出了 Carthage 文件夹和 Cartfile.resolved 文件。进入 Carthage/Checkouts 下可以看到刚刚得到的 Alamofire 和 SnapKit ,如下图所示:
现在打开你的项目,点击 project ,选择 target , 再选择上方的 General ,将需要的 framework 文件拖到 Linked frameworks and Binaries 内:
然后这是很重要的一步,点击 Build Phrase tab 选项,添加相应的 run script :
/usr/local/bin/carthage copy-frameworks$(SRCROOT)/Carthage/Build/iOS/你的framework
然后就可以去项目里面 import 你得第三方库了~~可以愉快的使用了,不过有一点要吐槽一下 build 的速度真是有点慢- . -
CocoaPods的优势与劣势
使用方便,除编写 Podfile 以外其他几乎都是自动完成;
软件包数量多,主流支持;
支持 iOS 8 Framework,当然也支持旧的静态编译;
开发者使用比较简单,但是如果创建兼容 CocoaPods 的库,就会相对繁琐一些(尽管有了命令行)~
每次clean后都得重新编译,编译比较耗时,Archive也会变慢;
每次更新环境都需要连接到中心仓库,比较耗时~
Carthage的优势与劣势
build一次后就能在项目里面使用,增加编译速度;
可以与 CocoaPods 无缝集成;
它是去中心化的,没有中心服务器,这意味着每次配置和更新环境,只会去更新具体的库,而不会有一个向中心服务器获取最新库的索引这么个过程,如此一来,又省了很多时间;
不会影响你的项目配置的,相对 CocoaPods 而言更加独立,Carthage 使用的是一种非侵入性的哲学;
库依然不如 CocoaPods 丰富:尽管很多库不需要声明并改造就直接可以被 Carthage 用,但依然有大量 CocoaPods 能用的库不支持,我相信时间能解决这个问题;
只支持 Framework,所以是 iOS 8 Only 了,随着时间推移,这个也不会是问题;
无法在 Xcode 里定位到源码:如果你在写代码过程中,想跳转到一个第三方库去看具体的实现,这是无法办到的,Carthage 的配置只能让你看到一个库的头文件~
我觉得不管怎样,好不好用,做为iOS程序员我们都应该去尝试的了解一下它,通过它去学到更多的东西,至于什么第三方库用 CocoaPods ,什么去用 Carthage ,我觉得一些比较稳定大的库可以用 Carthage ,而一些变动比较大,自己还有可能去修改的库我们肯定首选 CocoaPods 。最后希望大家看到这篇博客能学到东西,大家有问题可以提出来,谢谢大家的阅读~~
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致

我要回帖

更多关于 carthage 教程 的文章

 

随机推荐