iOS开发进阶 - 使用Carthage管理iOS第三方库
移动端访问不佳,请访问我的个人博客
最近在研究Swift,一不小心发现一个好的的管理iOS第三方库Carthage,就跟第一次使用CocoaPods时一样兴奋不已,在研究了大半天后终于能用了,使用起来还是很方便的,比起CocoaPods有不足也有优点,两个配合起来用也是很爽的^ - ^
初识Carthage
最近在用Swift3.0做项目,想导入一些支持Swift3.0的第三方库来使用,就想到Alamofire,看README时发现了一个新的名词Carthage,What?,这是个什么东西,居然也可以用它来管理第三方库,之前都没见到过,赶紧百度了一下补充了下知识:
Carthage:迦太基(地中海地区古城),好吧这是百度百科的解释,至于为什么用这个单词,我也不太清楚,可能比较屌吧,看下图你就知道它是用来干什么的了:
Carthage的目标是用最简单的方式来管理Cocoa第三方框架
是的,你没看错,它可以用来管理第三方库Alamofire,然后查了一下,还有很多第三方库都可以用它来管理,跟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.0
github "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。最后希望大家看到这篇博客能学到东西,大家有问题可以提出来,谢谢大家的阅读~~
参考链接
iOS开发进阶 - 使用Carthage管理iOS第三方库的更多相关文章
- iOS开发进阶
<iOS开发进阶>基本信息作者: 唐巧 出版社:电子工业出版社ISBN:9787121247453上架时间:2014-12-26出版日期:2015 年1月开本:16开页码:268版次:1- ...
- iOS开发进阶(唐巧)读书笔记(一)
如何提高iOS开发技能 1.阅读博客:https://github.com/tangqiaoboy/iOSBlogCN 40多位iOS开发博主的博客地址 2.读书:每年阅读一本高质量的iOS开发书籍 ...
- 《iOS开发进阶》书籍目录
第一部分:iOS开发工具 第二部分:iOS开发实践 第10章 理解内存管理 10.1 引用计数 10.1.1 什么是引用计数,原理是什么 10.1.2 我们为什么需要引用计数 10.1.3 不要向已经 ...
- iOS开发进阶之 UIWebView
刚接触IOS开发1年多,现在对于混合式移动端开发越来越流行,因为开发成本上.速度上都比传统的APP开发要好,混合式开发是传统模式与PC网页端相结合的模式.那么提到了 APP的混合模式开发,在Andro ...
- 【原】iOS开发进阶(唐巧)读书笔记(二)
第三部分:iOS开发底层原理 1.Objective-C对象模型 1.1 isa指针 NSObject.h部分代码: NS_ROOT_CLASS @interface NSObject <NSO ...
- iOS开发进阶--1.多线程简介
学习是由已知的知识模型推理未知的知识模型的的过程. 本文适合学习完objective-c基础,想进一步提高做iOS开发的同学阅读. 在说线程的时候,我们先看看进程. 1.进程 每一个运行在系统中的应用 ...
- iOS 使用 socket 即时通信(非第三方库)
其实写这个socket一开始我是拒绝的. 因为大家学C 语言和linux基础时肯定都有接触,客户端和服务端的通信也都了解过,加上现在很多开放的第三方库都不需要我们来操作底层的通信. 但是来了!!! 但 ...
- iOS开发技巧 - Size Class与iOS 8多屏幕适配(一)
0. 背景: 在iOS开发中,Auto Layout(自动布局)能解决大部分的屏幕适配问题. 但是当iPhone 6和iPhone 6 Plus发布以后, Auto Layout已经不能解决复杂的屏幕 ...
- IOS开发中制作属于自己的静态库.a、资源库.bundle、.framework
一.什么是库 库实际上是一种代码共享的方式,主要用于代码重用和源码隐藏,通常分为动态库和静态库. 静态库:链接时完整的拷贝至可执行文件中,被多次使用就有多份冗余拷贝. 动态库:链接时不复 ...
随机推荐
- 3D游戏引擎〇 開始
游戏循环: 初始化:运行一些主要的初始化操作,如内存分配,资源获取.从磁盘载入数据等. 进入游戏循环:进入主游戏循环.用户不断地运行动作,知道退出主循环为止. 读取玩家输入:处理玩家输入,或将其存储到 ...
- 在odl中怎样实现rpc
opendaylight作为sdn主要开源项目,採用osgi框架.已经得到非常多厂商的支持.氦版本号也公布在即. 以下介绍一下在odl中怎样实现rpc. odl使用yang作为model模型定义文件. ...
- 【BZOJ1822】[JSOI2010]Frozen Nova 冷冻波 几何+二分+网络流
[BZOJ1822][JSOI2010]Frozen Nova 冷冻波 Description WJJ喜欢“魔兽争霸”这个游戏.在游戏中,巫妖是一种强大的英雄,它的技能Frozen Nova每次可以杀 ...
- HTML5标签(语义化)
HTML语义化是什么? HTML语义化是指根据内容的结构化,选择合适的标签.举个例子:之前所有的都用div, span等标签实现页面结构,而这些标签都没有实际的意义, 而新的HTML5标签<he ...
- HTML、DOM和JS的了解
1.HTML.JS.以及DOM的关系的关系说明 关于HTML.JS.以及DOM的关系一直很迷惑,虽然一直听人说,但并未理解. 偶然间,忽然懂了这三者之间的关系. 举例吧: HTML就是最终的页面,是一 ...
- T420 开启麦克风
买来之后一直没注意过麦克风的问题,今天基友们群视频,才发现我的机器是哑的 打开录音设备,发现没有设备 重装驱动无果 打开BIOS,在安全选项——IO/Access中将Microphone 设为 Ena ...
- 【Python算法】列表中的 append 比 insert 效率高的实质
append 与 insert 对比: # append 操作 >>> count = 10**5 >>> nums = [] >>> for i ...
- docker在团队中的实践 How To Install Docker In CentOS
" 预发布机器(centos-6.5),给每个同学都开通了ssh这个机器是大家一起共用的,稍后导些数据下来.后续 项目上线,产品测试,都是在这上面进行. 目前在一个物理机 " 3 ...
- 【转】Spring AOP 实现原理与 CGLIB 应用
AOP(Aspect Orient Programming),作为面向对象编程的一种补充,广泛应用于处理一些具有横切性质的系统级服务,如事务管理.安全检查.缓存.对象池管理等.AOP 实现的关键就在于 ...
- 【我的Android进阶之旅】 Android Studio插件之Jenkins插件介绍
一Jenkins插件功能介绍 1Jenkins任务列表 2切换Jenkins分组 3构建Jenkins任务 4进入构建Jenkins任务的页面 5进入最后一次构建Jenkins任务的页面 6增加Jen ...