风行的博客

使用 CocoaPods 做依赖管理

CocoaPods - Get on with building your app, not duplicating code.

可以为 Cocoa 和 Swift 项目使用的第三方类库和我们自己的私有类库提供依赖管理,我们只需要告诉它要使用的类库名称和版本,然后再执行一条命令,它就会自动将这个类库的源码从 GitHub 上下载到本地,并且为工程设置好相应的系统依赖和编译项。使用 CocoaPods 可以大大节省我们在设置和更新类库时所花的时间。


准备工作

由于 CocoaPods 是用 Ruby 写的,并且主要用于管理 GitHub 上的第三方类库,所以在安装前需要有 Ruby 环境和 Git 环境。Git 环境可以通过下载 Xcode 中的 Command Line Tools 建立。Ruby 环境可以使用 Mac 系统默认提供的版本,也可以通过以下命令将它更新至最新版。

1
sudo gem update –system


为了提高下载速度,还需要将 Ruby 的源更改为 ruby-china

1
2
3
gem sources -a https://gems.ruby-china.org/  (添加)
gem sources -r https://rubygems.org/  (删除)
gem sources -l  (检查一下)


安装并使用 CocoaPods

  • 安装 CocoaPods
1
2
3
4
5
6
7
8
sudo gem install cocoapods (更新命令也是这个)

// 新版 OSX 安装时会报下面这个错,可另外指定 CocoaPods 的安装目录
ERROR:  While executing gem ... (Errno::EPERM) Operation not permitted - /usr/bin/xcodeproj

sudo gem install -n /usr/local/bin cocoapods
或者安装 pre release 版本
sudo gem install -n /usr/local/bin cocoapods --pre
  • 下载 CocoaPods 维护的所有 podspec 文件到"~/.cocoapods/repos/master/Specs"
1
pod setup

更新 spec 也用这个命令,podspec 文件主要用来描述依赖库的名称、版本、作者、下载地址等信息。通过 CocoaPods 下载第三方类库,其实就是根据我们指定的类库名称找到相关的 podspec,然后再根据 podspec 文件中指定的地址去下载。

  • 查看 CocoaPods 管理的依赖库信息
1
pod search 依赖库的名字
  • 新建 Podfile 文件,此文件用于配置项目所需要使用的依赖库
1
2
cd "项目根目录"
pod init
  • 打开 Podfile 文件,按下面内容配置依赖关系,Podfile 的更详细配置方法可参照官方文档
1
2
3
4
5
6
source 'https://github.com/CocoaPods/Specs.git'

platform :ios, '7.0'
inhibit_all_warnings!

pod 'AFNetworking', '2.5.1' 

上面内容的意思是,specs 文件由 CocoaPods 提供,项目需要使用支持 ios7.0 及以上的依赖库,并且为主 target 配置了 2.5.1 版本的 AFNetworking,并忽略依赖库中的所有警告。依赖库的版本号建议明确指定,这样可以避免更新依赖库后对现有工程造成影响,而且可以保证团队所有开发人员使用的版本一致。

如果你的项目有多个 target,那么需要按下面的方式配置 pod,否则依赖关系只能作用于主 target。

1
2
3
4
5
6
7
8
9
#Tests target 不仅使用主 target 的依赖库还需要添加自己的
target 'Tests' do
  pod "Tests 需要的依赖库"
end
#Tests target 不需要主 target 的依赖库
target 'Tests', :exclusive => true do
  pod "Tests 需要的依赖库"
end
  • 根据 Podfile 下载安装依赖库
1
pod install (添加或删除依赖库后也是通过此命令更新)

CocoaPods 会先更新相关 podspec 文件,然后自动为项目工程设置好相应的系统依赖和编译参数,当依赖库安装完成后,打开项目根目录,会发现多了以下文件及文件夹

  1. “.xcworkspace",以后必须通过此 workspace 打开项目。
  2. “Pods",CocoaPods 将 Profile 中配置的所有依赖库都下载到这里,并且将所有依赖库打包成单独的静态库供主项目使用。
  3. “Podfile.lock",用于保存已经安装的依赖库版本信息。如果在配置依赖库时没有明确指定版本,那么必须将此文件加入到版本控制中,否则有可能造成团队开发中不同成员使用的依赖库版本不一致。
  • 查看所下载的依赖库是否有新版本
1
pod outdated
  • 下载新版本(1.0版本前默认会更新本地 podspec 仓库)
1
pod update
  • 下载新版本,且不更新本地 podspec 仓库(速度会快很多)
1
pod update --no-repo-update
  • 将 CocoaPods 从项目中移除,并还原其对 Xcode 的配置修改(1.0 版本开始支持,以前需要用第三方提供的方式)
1
pod deintegrate

PS: 如果你使用的是 CocoaPods 1.0+,那么你可以下载 CocoaPods app 试一下,可以省去一些命令操作,并且在修改 Podfile 文件时,会有代码提示。


让自己的开源项目支持 CocoaPods

通过 CocoaPods 创建项目会让整个事情变的简单一些

1
pod lib create FMDBHelper

创建完成后项目根目录会包含以下文件及文件夹

  1. “.travis.yml",通过 travis-ci 做持续集成要用到的配置文件,一般情况下使用默认配置就可以,如果需要使用持续集成服务,还需要以 GitHub 帐号登录 travis-ci,并打开对应项目开关。
  2. “.gitignore",建议将 Pods 目录也加入到忽略范围
  3. “LICENSE",默认为 MIT
  4. “FMDBHelper.podspec",通过 Cocoapods 下载项目时要用到的项目配置文件。
  5. “README.md",通过 markdown 语法编写此文件,用于在 GitHub 上显示项目介绍。
  6. “Pod",将自己的开源代码和资源文件放到这里
  7. “Example",demo 工程,包含测试用的 target。

在 demo 工程中开发并测试

  • 将源代码和资源文件分别放到 Pod/Classes 和 Pod/Assets 目录下
  • 用 pod install 命令为 demo 工程安装依赖库,以后只要新增依赖库的代码或资源文件都需要更新
  • 开发测试完成后还需要修改 podspec 文件

将 podspec 发布到 CocoaPods 的 Git 库中

  • 向 CocoaPods 注册你的信息,需要输入邮箱(与 podspec 中写的一致)和名字,稍后还需要验证 email
1
pod trunk register bj_lijingcheng@163.com "lijingcheng"
  • 登录 GitHub,release 一版项目并打上标签,标签要与 podspec 中定义的一致
  • 检查 spec 文件是否合格
1
pod spec lint FMDBHelper.podspec
  • 检查并发布 spec 文件,以后需要升级也是用这个命令
1
pod trunk push FMDBHelper.podspec
  • 更新本地 spec
1
pod setup (稍后便可以在 ~/.cocoapods/repos/master/Specs 下看到你的开源项目了)


通过 CocoaPods 安装私有库

可以按官方指导来做,大致步骤与在 GitHub 上维护开源项目相似,区别如下:

  • 需要通过 Git 建立自己的 spec 仓库,并在 Podfile 文件中填加 source
  • 通过 pod repo add repo_name source_url 在 ~/.cocoapods/repos/ 目录下新建自己的 spec 仓库
  • 通过 pod repo push 命令将已经写好的 podspec 文件填加到 spec 仓库中
  • 在 Podfile 中可直接通过 pod repo_name 安装私有库
  • 以后私有库新增版本后需要打 tag 并修改 podspec 文件中的 version,然后再次更新 spec 仓库