很多 iOS 项目都是基于特定版本的 CocoaPods,使用其他版本的 CocoaPods 执行 pod install
或 pod update
可能出现项目无法编译的问题。由于我们的电脑上很有可能使用了其他的版本,本文主要介绍如何解决这种多版本 CocoaPods 切换的问题。
可以通过 gem list --local | grep cocoapods
命令查看我们电脑上安装了哪些版本的 CocoaPods,并通过 pod --version
查看系统默认使用的那个版本。
$ gem list --local | grep cocoapods
cocoapods (1.5.3, 1.4.0, 1.2.0)
cocoapods-core (1.5.3, 1.4.0, 1.2.0)
cocoapods-deintegrate (1.0.2)
cocoapods-downloader (1.2.2)
cocoapods-plugins (1.0.0)
cocoapods-search (1.0.0)
cocoapods-stats (1.0.0)
cocoapods-trunk (1.3.1)
cocoapods-try (1.1.0)
$ pod --version
1.5.3
使用 Bundler
Bundler 是一个 Ruby 项目的管理工具,可以理解成为 Ruby 界的 "CocoaPods"。准确来说,CocoaPods 是借鉴了 Bundler 的思想和模式。由于 CocoaPods 本身也是一个 Ruby 项目,因此我们可以通过 Bundler 来管理我们要使用的 CocoaPods 版本,完整的步骤如下所示。
- 安装 Bundler,已经安装过的可以略过。打开 terminal 输入下面的命令。
gem install bundler
- 在 terminal 中进入到项目所在的根目录(即 Podfile 所在的目录)。
- 创建 Bundler 的配置文件 Gemfile,在 terminal 输入下面的命令即可。可以看到它跟 Podfile 的初始化指令
pod init
非常类似,Gemfile 和 Podfile 这两个文件名也非常类似。
bundle init
- 设置 CocoaPods 的版本。假如我们需要使用 1.4.0 的 CocoaPods,可以将 Gemfile 的内容设置为以下内容。可以看到它跟 Podfile 的配置风格
pod 'Mantle', '~>1.5'
非常类似。
source "https://rubygems.org"
gem 'cocoapods','1.4.0'
- 安装特定版本的 CocoaPods,已经安装过的可以略过。在 terminal 输入下面的指令。
bundle install
- 使用 Bundler 控制上一步安装的 CocoaPods 来安装我们所需的 Pods。除了有
bundle exec
这个前缀,其他和我们平时使用 pod 命令一样。若去掉bundle exec
这个前缀,运行的就是默认版本的 Cocoapods 了。
bundle exec pod install
讨论
有 文章 说可以通过下面的方式来指定运行 0.35.0 版本的 CocoaPods,但我使用 1.4.0 测试时无效,不确定是否是 CocoaPods 做了修改。如果大家有什么想法,也欢迎留言讨论。
pod _0.35.0_ install