修订历史
Version | Date | Description |
---|---|---|
1.0 | 2017.4.3 | Init |
问题
问题的原因在于,有两个项目需要同步开发,其中老项目使用 0.39 版本的 CocoaPods,而新项目需要使用 1.0 以上版本的 CocoaPods。
解决方案
1. 升级 CocoaPods
因为本地安装的是 0.39,需要先升级:
$ sudo gem install cocoapods
$ pod setup
关于如何安装 CocoaPods,参考 用CocoaPods做iOS程序的依赖管理
安装成功:
➜ LightningMain git:(master) ✗ pod --version
1.2.1
➜ LightningMain git:(master) ✗
查看本地安装的 CocoaPods 版本列表:
➜ WeiboMain:note git:(dev_771) ✗ gem list cocoapods
*** LOCAL GEMS ***
cocoapods (1.2.1, 1.1.1, 0.39.0)
cocoapods-core (1.2.1, 1.1.1, 0.39.0)
cocoapods-deintegrate (1.0.1)
cocoapods-downloader (1.1.3, 0.9.3)
cocoapods-plugins (1.0.0, 0.4.2)
cocoapods-search (1.0.0, 0.1.0)
cocoapods-stats (1.0.0, 0.6.2)
cocoapods-trunk (1.2.0, 0.6.4)
cocoapods-try (1.1.0, 0.5.1)
➜ WeiboMain:note git:(dev_771) ✗
2. 安装 CocoaPods 0.39
CocoaPods 其实并不是覆盖安装,除非你显式的删除:
gem uninstall cocoapods
因为我之前执行过上一步,所以我还需要重新安装 CocoaPods 0.39:
sudo gem install cocoapods -v 0.39
安装成功:
➜ ~ pod --version
1.2.1
➜ ~ pod _0.39.0_ --version
0.39.0
安装后可以通过以下命令指定 CocoaPods 的版本:
pod _0.39.0_ install
3. 修改 CocoaPods 默认版本
到目前为止,CocoaPods 的默认版本是最新的 1.2.1,而老项目中写了很多脚本,所以我需要将默认的 CocoaPods 改为 0.39。
➜ ~ which pod
/Users/waterforest/.rvm/rubies/ruby-2.2.4/bin/pod
➜ ~ subl /Users/waterforest/.rvm/rubies/ruby-2.2.4/bin/pod
修改前:
require 'rubygems'
version = ">= 0"
if ARGV.first
str = ARGV.first
str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then
version = $1
ARGV.shift
end
end
gem 'cocoapods', version
load Gem.bin_path('cocoapods', 'pod', version)
修改后:
require 'rubygems'
version = "0.39"
if ARGV.first
str = ARGV.first
str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then
version = $1
ARGV.shift
end
end
gem 'cocoapods', version
load Gem.bin_path('cocoapods', 'pod', version)
修改成功:
➜ ~ pod --version
0.39.0
➜ ~ pod _1.2.1_ --version
1.2.1
➜ ~
在这个方案之前,我还使用过 alias 的方式,但是 alias 这个方案有两点问题:
- 默认的 pod alias 成了 pod _0.39.0_ 之后,无法使用 pod _1.2.1_ 来指定版本了,这意味着每一个版本都需要一个 alias
- 如果你写了大量的脚本,这些脚本在执行的时候并不会做 source ~/.bash_profile 或者 source ~/.zshrc 这样的默认操作