本文侧重于 CocoaPods 的理论知识,帮助使用者更好的理解 CocoaPods 以便于更好的使用 CocoaPods。
整理内容来源于 唐巧 -《iOS开发进阶》,也推荐给大家。
1 CocoaPods 简介
1.1 简介:
CocoaPods 项目的源码 (http://github.com/CocoaPods/CocoaPods) 在 Github 上管理。项目于2011年8月开始,经过多年发展,已成为 iOS 开发事实上的依赖管理标准工具。CocoaPods 可以使我们节省设置和更新第三方开源库的时间。
不使用 CocoaPods 之前,我们开发项目使用第三方时基本上是:
- 1 把用到的第三方开源库的源代码文件复制到工程中,或者设置 git 的 submodule。
- 2 这些开源库通常需要依赖系统的一些 framework,需要手工将这些 framework 一一添加到工程中。比如一个网络库就需要增加 CFNetwork、SystemConfiguration 等framework。
- 3 对于某些开源库,还需要设置 -licucore 或者 -fno-objc-arc 等编译参数。
- 4 管理这些开源库的更新。
这种体力活虽然简单,但毫无技术含量并浪费时间。
使用 CocoaPods 之后,只需将用到的开源库放到一个名为 Podfile 的文件中,然后执行 pod install。CocoaPods 就会自动将这些开源库的源码下载,并为工程设置好相应的系统以来和编译参数。
1.2 原理:
CocoaPods 原理是将原有的依赖库都放到另一个名为 Pods 的项目中,然后让主项目依赖 Pods 项目,这样,源码管理工作都从主项目移到了 Pods 项目中。
技术细节:
- 1 Pods项目最终会编译成一个名为 libPods.a 的文件,主项目只需要以来这个 .a 文件即可。
- 2 对于资源文件, CocoaPods 提供了一个名为 Pods-resources.sh 的bash 脚本,该脚本在每次项目编译的时候都会执行,将第三方库的各种资源文件复制到目标目录中。
- 3 CocoaPods 通过一个名为 Pods.xconfig 的文件在编译时设置所有的依赖和参数。
2 CocoaPods 的安装和使用
2.1 CocoaPods 的安装
CocoaPods 的安装方式很简单, Mac 下都自带 ruby,使用 ruby 的 gem 命令即可下载安装:
> $ sudo gem install cocoapods
> $ pod setup
如果 gem 太老,可以尝试用如下的命令升级 gem:
> sudo gem update —system
另外,ruby 的软件源 rubygems.org 因为使用亚马逊的云服务,所以被屏蔽了,需要更新一下 ruby 的源,下面代码将官方的 ruby 源替换成国内淘宝的源:
> gem sources —remove https://rubygems.org/
> gem sources -a http://ruby.taobao.org/
> gem sources -l`
还有一点需要注意,pod setup 在执行时,会输出 Setting up CocoaPods master repo, 但会等待比较久的时间。这一步其实是 CocoaPods 在将它的信息下载到 ~/.cocoapods 目录下,如果等待太久,可以试着 cd 到那个目录,用 du -sh *
来查看下载进度。也可以参考下面提到的“使用 CocoaPods 的镜像索引” 内容来提高下载速度。
2.2 使用 CocoaPods 的镜像索引
所有项目的 Podspec 文件都托管在 https://github.com/CocoaPods/Specs.
第一次执行 pod setup 时,CocoaPods 会将这些 Podspec 索引文件更新到本地的 ~/.cocoapods/ 目录下,索引大约有 80MB 左右。所以第一次更新会比较慢。
一个叫 akinliu (http://akinliu.github.io/2014/05/03/cocoapods-specs-/) 在 gitcafe (http://gitcafe.com/) 和 oschina (http://www.oschina.net/) 上建立了 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 上的镜像。
2.3 使用 CocoaPods
使用时需要新建一个名为 Podfile 的文件,如以下格式,将依赖的库名字依次列在文件中即可:
> platform :ios
> pod JSONKit
,~>1.4
> …...
然后将编辑好的 Podfile 文件放到项目根目录中,执行命令:
> cd “your project home"
> pod install
现在,所有第三方库都已经下载完成并设置好了编译参数和依赖,你只需要记住以下两点即可:
- 1 使用 CocoaPods 生成的 *.xcworkspace 文件来打开工程,而不是以前的 *.xcodeproj 文件;
- 2 每次更改了 Podfile 文件,都需要重新执行一次 pod update 命令。
3 注意事项
3.1 关于 .gitignore
当你执行了 pod install
之后, 除了 Podfile 外, CocoaPods 还会生成一个名为 Podfile.lock 的文件,不应该把这个文件加入到 .gitignore 中。因为 Podfile.lock 会锁定当前各依赖库的版本,之后即使多次执行 pod install
也不会更改版本,只有执行 pod update
才会改变 Podfile.lock。在多人协作的时候,这样可以防止第三方库升级时做成大家各自的第三方库版本不一致。
CocoaPods 的一篇官方文档 (http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control) 也在 What is a Podfile.lock 一节中介绍了 Podfile.lock 的作用,并指出:
This file should always be kept under version control.
3.2 为自己的项目创建 podspec 文件
我们可以为自己的开源项目创建 podspec 文件,首先通过如下命令初始化一个 podspec 文件:
> pod spec create your_pod_spec_name
该命令执行之后,CocoaPods 会生成一个名为 your_pod_spec_name.podspec 的文件,然后我们修改其中的相关内容即可。
具体步骤可参考这两篇博客中的相关内容:《如何编写一个CocoaPods 的 spec 文件》(http://ishalou.com/blog/2012/10/16/how-to-create-a-cocoapods-spec-file/) 和《CocoaPods 入门》(http://studentdeng.github.io/blog/2013/09/13/cocoapods-tutorial/)。
3.3 使用私有的 pods
我们可以直接指定某一个依赖的 podspec,这样就可以使用企业内部的私有库。这样有利于使企业内部的公共项目支持 CocoaPods。如下:
> pod MyCommon
, :podspec => https://yuantiku.com/common/myCommon.podspec
3.4 不更新 podspec
CocoaPods 在执行 pod instal
l 和 pod update
时,会默认先跟新一次 podspec 索引。使用 --no-repo-update
参数可以禁止其做索引更新操作。如下:
> pod install --no-repo-update
> pod update --no-repo-update
3.5 生成第三方库的帮助文档
如果你想让 CocoaPods 帮你生成第三方库的帮助文档,并集成到 Xcode 中, 那么用 brew 安装 appledoc 即可:
> brew install appledoc
appledoc 最大的优点是可以将帮助文档集成到 Xcode 中,这样在工作时,按住 option 键单机方法名或类名,就可以显示出相应的帮助文档。
文章来源:摘自 唐巧 -《iOS开发进阶》