一、CocoaPods
CocoaPods
是什么?
CocoaPods
是一个负责管理iOS
项目中第三方开源库的工具。- 主页:https://github.com/CocoaPods
- 作者:
CocoaPods
团队 - 版本:1.4.0
- 性质:
CocoaPods
在引入第三方库时自动为我们完成各种配置(包括配置编译阶段、连接器选项、甚至是ARC
环境下的-fno-objc-arc
配置等);CocoaPods
可以很方便的查找第三方库,可以快速方便的寻找到优秀的第三方库以及它们的各种信息。 - 原理:
CocoaPods
的原理是将所有的依赖库都放到另一个名为Pods的项目中,然后让主项目依赖Pods
项目,这样,源码管理工作都从主项目移到了Pods
项目中。Pods
项目最终会编译成一个名为libPods.a
的文件,主项目只需要依赖这个.a
文件即可。 - 限制:会破坏文件结构,因为墙的原因有时会
pod install
失败,换成国内的源,导入第三方很慢,特别是大工程。
怎么使用 CocoaPods
导入项目
1、安装 `CocoaPods` (1)替换 `ruby` 源 (2)更新 `Gem` 版本 (3)安装 `CocoaPods` (4)更新 Podspec 索引文件
2、使用 CocoaPods
(1)新建 Podfile
文件
(2)编辑 Podfile
文件
(3)安装依赖开源库 或 更新第三方库
3、打开 xxx.xcworkspace
文件
让你的工程支持 CocoaPods
1、首先在 `github` 创建一个项目 2、在本地新建一个文件夹 3、新建一个 `Classes` 文件夹用来放我们需要支持的类 4、进入到有 `.git` 的文件夹内,生成 `{project}.podspec` 格式的文件 5、`podspec` 文件用 `xcode` 打开并配置一些需要的参数 6、创建 `Tag`,并推送到 `GitHub` 7、验证 `podspec` 文件,第一次提交会收到邮件,点击链接验证,提交完成。
CocoaPods 好处?
- 开发
iOS
项目不可避免地要使用第三方开源库,CocoaPods
的出现使得我们可以节省设置和更新第三方开源库的时间 - 在引入第三方库时它可以自动为我们完成各种各样的配置,包括配置编译阶段、连接器选项、甚至是
ARC
环境下的-fno-objc-arc
配置等
二、Carthage
Carthage 是什么?
- 主页:https://github.com/Carthage/Carthage.git
- 作者:Justin Spahr-Summers 等
- 版本:0.6.6
- 目标:用最简单的方式来管理
Cocoa
第三方框架 - 性质:使用
swift
编写。Carthage
编译你的依赖,并提供框架的二进制.framework
文件,但你仍然保留对项目的结构和设置的完整控制,Carthage
不会自动的修改你的项目文件或编译设置。是一个去中心化的Cocoa
依赖管理工具。 - 原理:自动将第三方框架编程为
Dynamic framework
(动态库) - 限制:仅支持
iOS8+
。它只支持框架,所以不能用来针对iOS8
以前的系统版本进行开发
怎么使用 Carthage 导入第三方库?
1、安装 `Carthage` 有三个方法 (1)直接下载安装包:地址,`dmg` 文件,直接打开安装 (2) 使用 `Homebrew` 安装,在终端运行: brew update brew install carthage (3) 使用 `Xcode` 运行最新的开发版,clone `Carthage` 的仓库到本地,`make install`
2、使用 Carthage
(1)终端切换到工程目录,输入命令,创建一个 Cartfile
文件: touch Cartfile
(2)使用任何编辑器(如 Xcode
、文本编辑、subtime line
)打开 Cartfile
文件,输入以下内容:github "SnapKit/SnapKit"
,然后保存关闭。
(3)使用终端:carthage update --platform iOS
(4)把 framework
加入你的项目:打开项目,选择 Targets -> CarthageDemo -> Build Phases ->
Link Binary With Libraries -> 点击 + 号 -> Add Other -> 找到 framework
添加
(5)现在点击 Build Phases
(还是在当前选项卡) 左上角的 + 号,选择 New Run Script Phase
,填写内容。完成。
让你的工程支持 Carthage
1、在已经写好的工程中。创建一个 `Framework` 2、配置你的 `Framework` (1)选择你的工程 (2)选择 `framework` 所在的 `Target` (3.选择 `Build Phases` (4)点击 `Header` 左下角的+号把你要暴露的头文件添加到 `Public` 里面(默认添加到 `Project` 里面,用鼠标把它拽过去) (5)在Compile source里面添加实现的.m文件 3、分享你的工程 (1)选择 `Manager Schemes`,勾上 `shared` (这样 `Carthage` 就可以编译你的工程) (2)安装好 `Carthage` 的前提,我们 `cd` 到项目文件夹,运行:`carthage build —no-skip-current` (3)完成
Carthage 好处?
- 通过Carthage可以将一部分不常变的库打包成framework,再引如到主工程,这样可以减少开发过程中的编译时间。
- 可以将一些编译时间很长的库打包成framework。
- 国内防火墙的缘故,有些库的下载慢到一定境界,这个时候,使用Carthage就是福音了。
- 同时可以优化CI的编译、打包时间。
三、Carthage 和 CocoaPods 的不同之处:
`CocoaPods` (默认)自动建立和更新一个 `Xcode workspace`,用来管理你的项目和所有依赖。`Carthage` 使用`xcodebuild` 来编译出二进制库,剩下的集成工作完全交给开发人员。 `CocoaPods` 使用起来方便,`Carthage` 更加灵活并且对现有项目没有太多的侵略性。 `CocoaPods` 希望建立一个生态系统,可以更加方便的发现和集成第三方代码库。`Carthage` 希望变成一个去中心化的依赖管理系统,不提供中心化的项目列表,减少维护成本和单点失败的概率。不过这样给开发人员寻找项目带来不便。 `CocoaPods` 的项目需要配置 `podspec` 文件,包含了项目和第三方库的信息。`Carthage` 并不使用类似的配置文件,第三方库的依赖关系是通过 `Xcode` 项目来配置的。
四、结论
选择这两个工具前,首先需要确定使用的第三库,是否支持 `Carthage` ,以这个为标准以下三种情况: 1、都支持 `Carthage`:使用 `Carthage`。 2、部分支持 `Carthage`:`Carthage` 和 `CocoaPods` 混合使用。 3、都不支持 `Carthage`:使用 `CocoaPods`。