CocoaPods 是一个负责管理 iOS 项目中第三方开源库的工具。CocoaPods 的项目源码在 GitHub( https://github.com/CocoaPods )上管理。
开发 iOS 项目不可避免地要使用第三方开源库,在使用第三方库时,除了需要导入源码,集成这些依赖库还需要我们手动去配置,还有当这些第三方库发生了更新时,还需要手动去更新项目,这就显得非常麻烦。
而 CocoaPods 的出现使得我们可以节省设置和更新第三方开源库的时间,通过 CocoaPods,我们可以将第三方的依赖库统一管理起来,配置和更新只需要通过简单的几行命令即可完成。
CocoaPods 的原理
CocoaPods 的原理是将所有的依赖库都放到另一个名为 Pods 的项目中,然后让主项目依赖 Pods 项目,这样就把源码管理工作从主项目移到了 Pods 项目中。
- 第三方库会被编译成 .a 静态库或者 .framwork 的动态链接库供我们真正的工程使用。
- CocoaPods 会将所有的第三方库以 target 的方式组成一个名为 Pods 的工程,该工程就放在刚才新生成的 Pods 目录下。整个第三方库工程会生成一个名称为 libPods.a 的静态库供我们的工程使用。
- 对于资源文件,CocoaPods 提供了一个名为 Pods-resources.sh 的 bash 脚本,该脚本在项目每次编译的时候都会执行,将第三方库的各种资源文件复制到目标目录中。
- 原来的工程设置已经被更改了,这时候我们直接打开原来的工程文件去编译就会报错。我们的工程和第三方库所在的 Pods 工程会被以一个新生成的 workspace 的形式组织和管理,方便我们直观的管理工程和第三方库。
- CocoaPods 通过一个名为 Pods.xcconfig 的文件来在编译时设置所有的依赖和参数。
CocoaPods 的核心组件
CocoaPods 是用 Ruby 写的,并划分成了若干个 Gem 包。
与 CocoaPods 相关的两个目录:
~/.CocoaPods/repos/
:这个目录存储远端的 podspec 文件到本地。master 是所有第三方的 podspec 索引文件。其它的是我们自定义的 podspec 索引文件。~/Library/Caches/CocoaPods/
:这个目录就是缓存文件的存储目录。
CocoaPods 在解析执行过程中最重要的几个包的路径分别是:CocoaPods/CocoaPods、CocoaPods/Core 和 CocoaPods/Xcodeproj。
- CocoaPods/CocoaPods:这是面向用户的组件,每当执行一个 pod 命令时,这个组件将被激活。它包括了所有实用 CocoaPods 的功能,并且还能调用其它 Gem 包来执行任务。
- CocoaPods/Core:Core Gem 提供了与 CocoaPods 相关的文件(主要是 Podfile 和 Podspecs)的处理。
- Podfile:该文件用于配置项目所需要的第三方库,它可以被高度定制。
- Podspecs:该文件描述了一个库将怎样被添加进工程中。.podspec 文件可以标识该第三方库所需要的源码文件、依赖库、编译选项,以及其他第三方库需要的配置。
- CocoaPods/Xcodeproj:这个包负责处理工程文件,它能创建以及修改 .xcodeproj 文件和 .xcworkspace 文件。它也可以作为一个独立的包使用,当你要编写修改项目文件的脚本时,可以考虑使用 CocoaPods/Xcodeproj。
- Gem 是一个管理 Ruby 库和程序的标准包,它通过 RubyGem(如 http://rubygems.org/ )源来查找、安装、升级和卸载软件包,非常的便捷。如果 Gem 的版本过低就会导致 CocoaPods 安装失败;
- 所有的 Gem 包会被安装到
/[Ruby root]/lib/ruby/gems/[ver]/
目录下,其中包括了 cache、doc、gems、specifications 4 个目录,cache 下放置下载的原生 Gem 包,gems 下则放置解压过的 Gem 包。当安装过程中遇到问题时,可以进入这些目录,手动删除有问题的 Gem 包,然后重新安装。
国内镜像库
https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git