今天我到掉进Cocoapod的坑里去了!

前言

好久没有更新博客了,前段时间是在忙期末考。大学的考试考一科少一科啊,妈个鸡,学渣竟然有点怀念起考试的感觉了~暑假到了,在深圳开始了新的实习生活,实习的第一天,做的事无外乎是将项目 check out 下来,由于项目是使用 cocoapod 来对第三方库进行管理的,所以。。。。我的实习第一天就是一次又一次的掉进 cocoapod 的坑里,然后又一次又一次的往外爬。把自己今天的经验和大家分享一下吧。

1.0 以上版本的cocoapod的新变化

以前电脑里的 cocoapod 版本是 0.37,长久没有更新,这一次为了和同事开发的统一,我升级了 cocoapod,不升没事,一升一堆坑。

所依赖的 ruby 环境

1.0 版本以上的 cocoapod 安装所必须具有的ruby环境必须是2.2.2以上的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#查看当前ruby版本  
$ ruby -v
ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-darwin14]

#列出已知的ruby版本
$ rvm list known

#列出系统已经安装的ruby版本
$ rvm list

rvm rubies

=* ruby-2.0.0-p643 [ x86_64 ]

# => - current
# =* - current && default
# * - default

#安装ruby 2.2.3
$ rvm install 2.2.3

而当系统并存有两个 ruby 版本时,当要使用 cocoapod 时,记得切换到对应正确的版本。

如果指定的是 2.0.0 版本:

1
2
3
4
5
6
7
8
rvm rubies

=* ruby-2.0.0-p643 [ x86_64 ]
ruby-2.2.3 [ x86_64 ]

# => - current
# =* - current && default
# * - default

使用 cocoapod 会出现:

1
2
3
4
5
6
7
/Users/lz/.rvm/rubies/ruby-2.0.0-p643/lib/ruby/site_ruby/2.0.0/rubygems/dependency.rb:315:in `to_specs': Could not find 'cocoapods' (>= 0) among 22 total gem(s) (Gem::LoadError)
Checked in 'GEM_PATH=/Users/lz/.rvm/gems/ruby-2.0.0-p643:/Users/lz/.rvm/gems/ruby-2.0.0-p643@global', execute `gem env` for more information
from /Users/lz/.rvm/rubies/ruby-2.0.0-p643/lib/ruby/site_ruby/2.0.0/rubygems/dependency.rb:324:in `to_spec'

from /Users/lz/.rvm/rubies/ruby-2.0.0-p643/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_gem.rb:64:in `gem'
from /usr/local/bin/pod:22:in `<main>'

from /Users/lz/.rvm/gems/ruby-2.0.0-p643@global/bin/ruby_executable_hooks:15:in `eval'
from /Users/lz/.rvm/gems/ruby-2.0.0-p643@global/bin/ruby_executable_hooks:15:in `<main>'

需要将 ruby 指定为 2.2.2以上版本,例如:

1
rvm use 2.0 --current

如果需要重启 bash 时,cocoapod依然可用则需要:

1
rvm use 2.0 --default

Podfile 的变化

Podfile 是在项目目录下对第三方库的版本进行管理的文件。熟悉 cocoapod 的人对下面这些Podfile 的内容一点也不陌生:

1
2
3
4
5
6
7
8
9
10
11

platform :ios, ‘7.0’

pod 'AFNetworking', '~> 3.x'
pod 'Masonry', '~> 0.6.2'
pod 'FMDB'
pod 'MJRefresh'
pod 'SDWebImage'
pod 'BaiduMapKit'
pod 'EaseMobSDK', '~> 2.1.9'
pod 'SDAutoLayout', '~> 1.31'

但是当你输入:

1
pod install

会出现以下错误:

1
2
3
4
5

Analyzing dependencies
[!] The dependency `AFNetworking` is not used in any concrete target.

[!] Your Podfile has had smart quotes sanitised. To avoid issues in the future,you should not use TextEdit for editing it. If you are not using TextEdit, you should turn off smart quotes in your editor of choice.

因为 cocoapod 更新到 1.0.1 后,Podfile 格式发生了变化:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
platform :ios, ‘7.0’

target '你的项目名称' do

pod 'UMengAnalytics','~>3.6.6'
pod 'AFNetworking', '~> 3.x'
pod 'Masonry', '~> 0.6.2'
pod 'FMDB'
pod 'MJRefresh'
pod 'SDWebImage'
pod 'BaiduMapKit'
pod 'EaseMobSDK', '~> 2.1.9'
pod 'SDAutoLayout', '~> 1.31'
pod 'NimbusKit-AttributedLabel', '~> 1.0.0'

end

如果老的使用cocoapod的项目,在 Project->”Build Setting”->“Search Paths”->”Library search Paths” 底下会有这个:

新更新之后,这个库会改变命名,变成:

cocoapod 并不会帮你删除以前的 .a 文件,我们要手动在 Library search Paths 将他删除,不然运行时,会一直因为引用不到这个文件而一直报下面这个错误:

1
ld: library not found for -lPods

关于淘宝源

之前很多安装 cocoapod 的教程,都会推荐我们我们作如下操作:

1
2
3
4
5
6
7
#先更新gem,国内需要切换源
$ sudo gem update --system
$ gem sources --remove https://rubygems.org/
$ gem sources -a https://ruby.taobao.org/
$ gem sources -l
\*\*\* CURRENT SOURCES \*\*\*
https://ruby.taobao.org/

几个月前,在添加淘宝源时,我把 “https://ruby.taobao.org/” 改为 “http://ruby.taobao.org/”,为了避开 SSL 安全问题,但是现在利用 http 来更新 cocoapod 已经行不通了。会出现:

1
2
Error fetching http://ruby.taobao.org/:
bad response Not Found 404 (http://ruby.taobao.org/specs.4.8.gz)

因为:

所以,以后只能使用 httpscocoapod 进行更新了。

关于 OS X El Capitan 系统的坑

安装 cocoapod 时:

1
2
3
4
5
$ gem install cocoapods 

苹果系统升级 OS X EL Capitan 后改为 :

$ gem install -n /usr/local/bin cocoapods

关于 pod setup

由于天朝的墙墙墙,pod setup 更新的 速度会慢到你怀疑人生。你都不知道它是不是在更新。可以使用以下办法:

1
2
3
cd ~/.cocoapods
#进入cocoapods文件后在终端输入:
du -sh *

可以实时查看该文件的大小,来确定是否有在更新。

最后的话

接下来这段时间,博客还是会不定时更新吧,主要还是自己实习过程中碰到的一些问题。加油吧,好好积累,秋招干干干!