OSX 10.9使用cocoapods遇到的问题

cocoapods用于管理iOS项目库依赖,类似于nodejs的npm、java的maven、python的pip等工具,它基于ruby(ruby的配置和库管理向来让我很头痛)。

修改ruby源

要使用ruby,第一件事是更改ruby源,在国内,rubygems.org镜像基本处于不可用状态。这里改为淘宝提供的免费ruby镜像:

1
2
3
4
5
6
$ gem sources --remove https://rubygems.org/
$ gem sources -a https://ruby.taobao.org/
$ gem sources -l
*** CURRENT SOURCES ***

https://ruby.taobao.org

安装cocoapods

1
gem install cocoapods

生成Podfile

进入项目根目录,使用命令pod init生成默认的Podfile,如下:

1
2
3
4
5
6
7
8
9
10
# Uncomment this line to define a global platform for your project
# platform :ios, "6.0"

target "Weather" do

end

target "WeatherTests" do

end

期间可能遇到root账户不能使用pod命令的问题,这是因为较新版本的cocoapods限制了root账户,遇到这个问题不用四处查或者想让root也支持,直接切换到其他普通账户即可,我这里切换到账户sumory,su - sumory

尝试install

可能遇到的第一个问题,编码,不要忽视这个问题,不然后面可能会遇到莫名其妙的错误。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
sumory@sumory:/data/swift-project/Weather $ pod install
WARNING: CocoaPods requires your terminal to be using UTF-8 encoding.
See https://github.com/CocoaPods/guides.cocoapods.org/issues/26 for
possible solutions.

Analyzing dependencies
Downloading dependencies
Installing SCLAlertView (0.2.1)

――― MARKDOWN TEMPLATE ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――

### Report

* What did you do?

* What did you expect to happen?

* What happened instead?

...

解决:把Podfile的编码改为utf8,然后运行相关pod命令前export LANG=en_US.UTF-8,或者直接加到shell相关配置的地方都可以。

添加依赖并安装

以添加SCLAlertView(一个自定义的弹出框组件)为例,Podfile如下(注意这样写会引发错误):

1
2
3
4
5
6
7
8
9
10
11
12
# Uncomment this line to define a global platform for your project
# platform :ios, "6.0"

target "Weather" do

end

target "WeatherTests" do

end

pod 'SCLAlertView'

会遇到这个错误(那一大坨就不贴出来了,主要错误提示就是下面这个):

1
NoMethodError - undefined method `add_dependency' for nil:NilClass

解决:参考issue#1720,将Podfile修改为:

1
2
3
4
5
6
7
8
9
10
# Uncomment this line to define a global platform for your project
# platform :ios, "6.0"

target "Weather" do
pod 'SCLAlertView'
end

target "WeatherTests" do

end

出错原因可参看该issue评论。

至此再运行pod install即可成功。

1
2
3
4
5
6
7
8
sumory@sumory:/data/swift-project/Weather $ pod install
Analyzing dependencies
Downloading dependencies
Installing SCLAlertView (0.2.1)
Generating Pods project
Integrating client project

[!] From now on use `Weather.xcworkspace`.

总结

需注意以下几点(再次体会到npm才是用过的最优秀的包管理工具)

  • 安装时更换ruby源,不要浪费生命在GFW上
  • root账户问题
  • 编码问题要注意,这个与具体机器环境有关
  • 编写Podfile的规范等