本文读者需具备的知识:cocoaPods相关概念及常用命令。
今天初次使用cocoaPods(下面我就称其为可可豆好了),为其在OS X 10.11系统下的安装折腾了半天,衰x10^n。。。
先反省一下关键点:[1]版本兼容性;[2]解决问题的思路!!!
系统更新(因为代码中使用了XCode 7的新特性,而XCode需要10.11系统)后,一上来:
sudo gem install cocoapods //不要sudo应该也可以
然后,提示需要ruby2.2.2以上的ruby版本……(而在10.10系统下没这个提示,why?)
然后按照http://blog.csdn.net/lissdy/article/details/9191351的做法,更新了ruby。
先列出可用版本(命令略,下同),又在ruby官网看到,当前最新稳定版是2.3.1,稳定版,听起来就让人放心,于是更新到2.3.1。
然而,最新的稳定版就好吗?事实再次证明这一真理:适合的才是最好的!!而我想当然地选择最新稳定版,就是给自己设了第一个坑。。。
ruby更新完成之后,再安装可可豆,安装成功,会看到安装的是1.0.1版本,仿佛看到了胜利的曙光……
然后cd到项目路径,并执行:
pod install //可加上--no-repo-update参数,表示不更新可可豆的本地repo,
……竟然找不到pod命令?
可可豆版本不对?卸载之,再重新安装0.39.0的版本(公司有前辈用这个版本,总错不了)
然后……还是不行!于是这样折腾了好几个来回。
发现,当可可豆版本是1.0.1的时候,pod install命令会发生错误:
The dependency `SDWebImage (= 3.7.4)` is not used in any concrete target.
……
刚开始也没管这个错误,就以为可可豆只能选0.39.0的版本了。后来搜索知道,这是因为新版的可可豆Podfile格式发生了变化,需要每个第三方库指定target。那我还真是只能选0.39.0的版本了,合作的项目总不能随便改配置文件吧……
使用0.39.0的版本,照错依旧。再去搜索,看到一个安装ruby的时候有一个 --default 参数,起初还以为是按照默认设置安装,后来才注意到,这表示将安装的ruby版本设置为默认版本。
对于已安装的ruby:
rvm use 2.3.1 --default
然后,pod命令起作用了!!
原来pod的运行跟ruby版本息息相关。可惜我当时还没意识到这一点。。。
接着发现,pod install命令虽然能被系统识别,发生了莫名其妙的错误:
先是警告:
Unable to load a specification for the plugin `/Users/xxx/.rvm/gems/ruby-2.3.1@global/gems/cocoapods-deintegrate-1.0.0`
看到ruby-2.3.1这个字眼,就以为跟ruby版本很大关系,实际上是ruby版本的问题,但问题不在这个警告,其实它只是个警告,还是黄色,而不是红色,表示警告不是很严重……我却把这个警告当成了问题的重点,这是跳进的第二个坑。
然后再搜,找着帖子试了试,还是不行。。。其实,根本问题是在警告下面的一个error:
### Error
```
NoMethodError - undefined method `to_ary' for #<Pod::Specification name="AFNetworking">
当初没注意这个error。。。也许因为这个error是黑色字体不显眼?我只能自嘲。。。
反而更注意下面很多行发现不了什么的log:
/Users/xxx/.rvm/gems/ruby-2.3.1@global/gems/cocoapods-0.39.0/lib/cocoapods/resolver/lazy_specification.rb:14:in `method_missing'
/Users/xxx/.rvm/gems/ruby-2.3.1@global/gems/cocoapods-0.39.0/lib/cocoapods/resolver.rb:64:in `flatten'
/Users/xxx/.rvm/gems/ruby-2.3.1@global/gems/cocoapods-0.39.0/lib/cocoapods/resolver.rb:64:in `block in resolve'
.......
然后,请教公司前辈,才正确定位错误,就是上面的error
参考https://github.com/CocoaPods/CocoaPods/issues/4345,得到思路:
ruby2.3.1下使用cocoaPods有问题,需要先卸载可可豆,再更换ruby版本为2.2.x(当然我这里最低就是2.2.2),然后重新安装可可豆。
这就是所有问题的关键所在!而我就在真相入口周围一圈一圈地绕,就是避开了真相的大门!!我为什么没选ruby 2.2.x??!!我为什么没选ruby 2.2.x??!!我为什么没选ruby 2.2.x??!!
教训:【1】遇到问题不要想当然,某一步有过个选择的时候若不确定,可以使用“穷举法”,每个选择都去试一下,里面就有一个是对的。【2】分析错误时,不要又想当然,只抓住片面,导致思路跑偏。要把错误信息全局、仔细地看清楚,抓住错误根本所在。【3】不要在一个点上死磕,自己经过必要的尝试还是找不到有效的解决办法时,就要及时向别人请教,不要脸皮太薄,导致无谓地浪费了过多时间。