用CocoaPods做iOS程序的依赖管理
2016-05-23 10:42
267 查看
用CocoaPods做iOS程序的依赖管理
发表于 2014-05-25 14:09文章目录
1. 文档更新说明
2. CocoaPods
简介
3. CocoaPods
的安装和使用介绍
3.1. 安装
3.2. 使用
CocoaPods 的镜像索引
3.3. 使用
CocoaPods
3.4. 查找第三方库
3.5. 关于
Podfile.lock
4. 为自己的项目创建
podspec 文件
5. 使用私有的
pods
6. 不更新
podspec
6.1. 生成第三方库的帮助文档
7. 原理
文档更新说明
2012-12-02 v1.0 初稿2014-01-08 v1.1 增加设置 ruby 淘宝源相关内容
2014-05-25 v2.0 增加国内 spec 镜像、使用私有 pod、podfile.lock、创建 spec 文件等内容
2015-09-03 v2.1 优化排版,调整一些描述方式,使文章更易读懂。
2015-12-21 v2.2 将淘宝的镜像修改成 https 的。
CocoaPods 简介
每种语言发展到一个阶段,就会出现相应的依赖管理工具,例如 Java 语言的 Maven,nodejs 的 npm。随着 iOS 开发者的增多,业界也出现了为 iOS 程序提供依赖管理的工具,它的名字叫做:CocoaPods。CocoaPods项目的源码 在 Github 上管理。该项目开始于 2011 年 8 月 12 日,经过多年发展,现在已经成为 iOS 开发事实上的依赖管理标准工具。开发 iOS 项目不可避免地要使用第三方开源库,CocoaPods 的出现使得我们可以节省设置和更新第三方开源库的时间。
我在开发猿题库客户端时,使用了 24 个第三方开源库。在没有使用 CocoaPods 以前,我需要:
把这些第三方开源库的源代码文件复制到项目中,或者设置成 git 的 submodule。
对于这些开源库通常需要依赖系统的一些 framework,我需要手工地将这些 framework 分别增加到项目依赖中,比如通常情况下,一个网络库就需要增加以下 framework: CFNetwork, SystemConfiguration, MobileCoreServices, CoreGraphics, zlib。
对于某些开源库,我还需要设置
-licucore或者
-fno-objc-arc等编译参数
管理这些依赖包的更新。
这些体力活虽然简单,但毫无技术含量并且浪费时间。在使用 CocoaPods 之后,我只需要将用到的第三方开源库放到一个名为 Podfile 的文件中,然后执行
pod install。
CocoaPods 就会自动将这些第三方开源库的源码下载下来,并且为我的工程设置好相应的系统依赖和编译参数。
CocoaPods
的安装和使用介绍
安装
安装方式异常简单 , Mac 下都自带 ruby,使用 ruby 的 gem 命令即可下载安装:$ sudo gem install cocoapods $ pod setup |
sudo gem update --system |
gem sources --remove https://rubygems.org/ gem sources -a https://ruby.taobao.org/ gem sources -l |
pod setup在执行时,会输出
Setting up CocoaPods master repo,但是会等待比较久的时间。这步其实是 Cocoapods 在将它的信息下载到
~/.cocoapods目录下,如果你等太久,可以试着 cd 到那个目录,用
du -sh *来查看下载进度。你也可以参考本文接下来的
使用 cocoapods 的镜像索引一节的内容来提高下载速度。
使用
CocoaPods 的镜像索引
所有的项目的 Podspec 文件都托管在https://github.com/CocoaPods/Specs。第一次执行
pod setup时,CocoaPods 会将这些
podspec索引文件更新到本地的
~/.cocoapods/目录下,这个索引文件比较大,有 80M 左右。所以第一次更新时非常慢,笔者就更新了将近
1 个小时才完成。
一个叫 akinliu 的朋友在 gitcafe 和 oschina 上建立了
CocoaPods 索引库的镜像,因为 gitcafe 和 oschina 都是国内的服务器,所以在执行索引更新操作时,会快很多。如下操作可以将 CocoaPods 设置成使用 gitcafe 镜像:
pod repo remove master pod repo add master https://gitcafe.com/akuandev/Specs.git pod repo update |
https://gitcafe.com/akuandev/Specs.git替换成
http://git.oschina.net/akuandev/Specs.git即可使用 oschina 上的镜像。
使用 CocoaPods
使用时需要新建一个名为 Podfile 的文件,以如下格式,将依赖的库名字依次列在文件中即可platform :ios pod 'JSONKit', '~> 1.4' pod 'Reachability', '~> 3.0.0' pod 'ASIHTTPRequest' pod 'RegexKitLite' |
cd "your project home" pod install |
使用 CocoaPods 生成的 .xcworkspace 文件来打开工程,而不是以前的 .xcodeproj 文件。
每次更改了 Podfile 文件,你需要重新执行一次
pod update命令。
查找第三方库
你如果不知道 cocoaPods 管理的库中,是否有你想要的库,那么你可以通过 pod search 命令进行查找,以下是我用 pod search json 查找到的所有可用的库:$ pod search json -> AnyJSON (0.0.1) Encode / Decode JSON by any means possible. - Homepage: https://github.com/mattt/AnyJSON - Source: https://github.com/mattt/AnyJSON.git - Versions: 0.0.1 [master repo] -> JSONKit (1.5pre) A Very High Performance Objective-C JSON Library. - Homepage: https://github.com/johnezang/JSONKit - Source: git://github.com/johnezang/JSONKit.git - Versions: 1.5pre, 1.4 [master repo] // ... 以下省略若干行 |
关于 Podfile.lock
当你执行pod install之后,除了 Podfile 外,CocoaPods 还会生成一个名为
Podfile.lock的文件,Podfile.lock 应该加入到版本控制里面,不应该把这个文件加入到
.gitignore中。因为
Podfile.lock会锁定当前各依赖库的版本,之后如果多次执行
pod install不会更改版本,要
pod update才会改
Podfile.lock了。这样多人协作的时候,可以防止第三方库升级时造成大家各自的第三方库版本不一致。
CocoaPods 的这篇 官方文档 也在
What is a Podfile.lock一节中介绍了
Podfile.lock的作用,并且指出:
This file should always be kept under version control.
为自己的项目创建 podspec 文件
我们可以为自己的开源项目创建podspec文件,首先通过如下命令初始化一个
podspec文件:
pod spec create your_pod_spec_name |
your_pod_spec_name.podspec的文件,然后我们修改其中的相关内容即可。
具体步骤可以参考这两篇博文中的相关内容:
《如何编写一个 CocoaPods 的 spec 文件》
《Cocoapods 入门》。
使用私有的 pods
我们可以直接指定某一个依赖的podspec,这样就可以使用公司内部的私有库。该方案有利于使企业内部的公共项目支持 CocoaPods。如下是一个示例:
pod 'MyCommon', :podspec => 'https://yuantiku.com/common/myCommon.podspec' |
不更新 podspec
CocoaPods 在执行pod install和
pod update时,会默认先更新一次
podspec索引。使用
--no-repo-update参数可以禁止其做索引更新操作。如下所示:
pod install --no-repo-update pod update --no-repo-update |
生成第三方库的帮助文档
如果你想让 CococaPods 帮你生成第三方库的帮助文档,并集成到 Xcode 中,那么用 brew 安装 appledoc 即可:brew install appledoc |
原理
大概研究了一下 CocoaPods 的原理,它是将所有的依赖库都放到另一个名为 Pods 项目中,然后让主项目依赖 Pods 项目,这样,源码管理工作都从主项目移到了 Pods 项目中。发现的一些技术细节有:Pods 项目最终会编译成一个名为 libPods.a 的文件,主项目只需要依赖这个 .a 文件即可。
对于资源文件,CocoaPods 提供了一个名为 Pods-resources.sh 的 bash 脚本,该脚本在每次项目编译的时候都会执行,将第三方库的各种资源文件复制到目标目录中。
CocoaPods 通过一个名为 Pods.xcconfig 的文件来在编译时设置所有的依赖和参数。
愿大家玩得开心~
相关文章推荐
- 监控利器--nagios
- iOS 企业版 安装失败 原因
- iOS动态性(二):运行时runtime初探(强制获取并修改私有变量,强制增加及修改私有方法等)
- iOS 第三方库 留着有用
- iOS ShareSDK 新浪微博分享sos package or sign error
- iOS 创建Git 提交到GitHub 简明讲解配步骤图
- iOS开发~iOS9中iPad横屏时cell不正常显示
- 精仿百思不得姐客户端应用iOS源码
- 精仿百思不得姐客户端应用iOS源码
- IOS开发中深拷贝与浅拷贝
- iOS View的Frame和bounds之区别,setbounds使用(深入探究)
- iOS开发插件推荐(1):利用神插件injectionforxcode倍增你的开发效率
- iOS开发-简单的循环结构分析
- iOS开发-简单的循环结构分析
- iOS中字迹动画效果
- iOS 三种录制视频方式
- 小结 iOS 中的 copy
- 【代码笔记】iOS-设置textView或者label的行间距方法
- 【代码笔记】iOS-设置textView或者label的行间距方法
- iOS RSA 加密解密及签名验证