CocoaPods的安装使用和常见问题

一、什么是CocoaPods

CocoaPods是iOS项目的依赖管理工具,该项目源码在Github上管理。开发iOS项目不可避免地要使用第三方开源库,CocoaPods的出现使得我们方便的管理这些第三方开源库。
在使用CocoaPods之前,开发项目需要用到第三方开源库的时候,我们需要
1.把开源库的源代码复制到项目中
2.添加一些依赖框架和动态库
3.设置-ObjC,-fno-objc-arc等参数
4.管理他们的更新
在使用CocoaPods后,我们只需要把用到的开源库放到一个名为Podfile的文件中,然后执行pod install.Cocoapods就会自动将这些第三方开源库的源码下载下来,并且为我们的工程设置好响应的系统依赖和编译参数。

二、CocoaPods的原理

CocoaPods的原理是将所有的依赖库都放到另一个名为Pods的项目中,然后让主项目依赖Pods项目,这样,源码管理工作都从主项目移到了Pods项目中。Pods项目最终会编译成一个名为libPods.a的文件,主项目只需要依赖这个.a文件即可。

三、CocoaPods的安装

CocoaPods可以方便地通过Mac自带的RubyGems安装。
打开Terminal,然后键入以下命令:
$ sudo gem install cocoapods
但是,在终端中敲入这个命令之后,会发现半天没有任何反应。
这是因为ruby的软件源rubygems.org因为使用亚马逊的云服务,被我天朝屏蔽了,需要更新一下ruby的源,用ruby-china的Ruby镜像来访问cocoapods,过程如下:

$ gem sources -l (查看当前ruby的源)
$ gem sources --remove https://rubygems.org/
$ gem sources -a https://gems.ruby-china.com/
$ gem sources -l

只有在终端中出现下面文字才表明你上面的命令是成功的:
*** CURRENT SOURCES ***

查询当前gem版本
$ gem -v
如果gem太老,可以尝试用如下命令升级gem
$ sudo gem update --system
升级成功后会提示: RubyGems system software updated

然后重新执行安装下载命令
$ sudo gem install cocoapods
这时候应该没什么问题了

ps:如果提示报错如下:

ERROR:  While executing gem ... (Errno::EPERM)
    Operation not permitted - /usr/bin/fuzzy_match

那么替换安装命令为:(OS X 10.11以后版本可能会出现)
$ sudo gem install -n /usr/local/bin cocoapods

接下来进行安装,执行:
$ pod setup

Terminal会停留在 Setting up CocoaPods master repo 这个状态一段时间,是因为要进行下载安装,而且目录比较大,需要耐心等待一下.如果想加快速度,可使用cocoapods的镜像索引.

想知道自己有没有安装完成,可以在终端输入以下命令:
$ pod --version
显示出版本就说明成功了。

删除.cocoapods目录,重新下载pod更新:
按照以下格式:
获取pod的路径:$ which pod
删除pod$ sudo rm -rf

$ cd ~/.cocoapods/
$ sudo -rm -rf ~/.cocoapods/

删除rubygems相关cocoapods的包
查看rubygems的本地程序包
$ gem list

*** LOCAL GEMS ***

activesupport (5.0.0.1, 4.2.7.1)
bigdecimal (1.2.6)
bundler-unload (1.0.2)
CFPropertyList (2.3.3)
claide (1.0.1, 1.0.0, 0.9.1)
cocoapods (1.1.1, 1.0.1, 0.38.2)
cocoapods-core (1.1.1, 1.0.1, 0.38.2)
cocoapods-deintegrate (1.0.1)
cocoapods-downloader (1.1.2, 1.1.1, 0.9.3)
cocoapods-plugins (1.0.0, 0.4.2)
cocoapods-search (1.0.0)
cocoapods-stats (1.0.0, 0.5.3)
cocoapods-trunk (1.1.1, 1.0.0, 0.6.4)
cocoapods-try (1.1.0, 0.4.5)
colored (1.2)
concurrent-ruby (1.0.2)
escape (0.0.4)
executable-hooks (1.3.2)
fourflusher (2.0.1, 0.3.2)
fuzzy_match (2.0.4)
gem-wrappers (1.2.7)
gh_inspector (1.0.2)
i18n (0.7.0)
io-console (0.4.3)
json (1.8.1)
minitest (5.4.3)
molinillo (0.5.3, 0.4.5, 0.3.1)
nanaimo (0.1.0)
nap (1.1.0, 0.8.0)
netrc (0.7.8)
power_assert (0.2.2)
psych (2.0.8)
rake (10.4.2)
rdoc (4.2.0)
rubygems-bundler (1.4.4)
rvm (1.11.3.9)
test-unit (3.0.8)
thread_safe (0.3.5)
tzinfo (1.2.2)
xcodeproj (1.4.0, 1.3.0, 0.26.3)

移除跟cocoapods相关的程序包

cocoapods (1.1.1, 1.0.1, 0.38.2)
cocoapods-core (1.1.1, 1.0.1, 0.38.2)
cocoapods-deintegrate (1.0.1)
cocoapods-downloader (1.1.2, 1.1.1, 0.9.3)
cocoapods-plugins (1.0.0, 0.4.2)
cocoapods-search (1.0.0)
cocoapods-stats (1.0.0, 0.5.3)
cocoapods-trunk (1.1.1, 1.0.0, 0.6.4)
cocoapods-try (1.1.0, 0.4.5)

移除程序包:
$ sudo gem uninstal cocoapods -v 1.1.1
输出:
Successfully uninstalled cocoapods-1.1.1
$ sudo gem uninstall cocoapods-core -v 1.1.1
输出:
Successfully uninstalled cocoapods-core-1.1.1
然后安装指定版本的Cocoapods:
$ sudo gem install cocoapods -v 0.38.2
安装成功后验证版本
$ pod --version

报错Error installing pods:activesupport requires Ruby version >= 2.2.2
ruby版本太低,查看当前mac的ruby版本
$ ruby -v
输出ruby 1.8.7,现在需要使用RVM对Ruby进行升级,RVM是Ruby版本管理器,包括Ruby的版本管理和Gem库管理(gemset),现在我们先安装RVM:
$ curl -L get.rvm.io | bash -s stable
等一会儿安装成功RVM后:
$ source ~/.bashrc
$ source ~/.bash_profile
查看是否安装正常:
$ rvm -v
完成后,用RVM升级Ruby,可以先列出所有的ruby版本:
$ rvm list known
安装ruby 2.3.0
$ rvm install 2.3.0
安装完成之后查看是否安装成功:
$ ruby -v

最后当然重新执行pod setup,过一段时间后提示setup completed,在终端中输入 pod list,展示出安装列表.
// 实在不行master也移除了吧$ pod repo remove master

四、Cocoapods的使用

方法(一)、
进入工程所在的目录(工程根目录)
执行命令 touch Podfile
这句是说新建一个名为Podfile的文件(不能写成别的名字,也可以自己在工程根目录里面直接新建)

然后对改文件进行编辑,执行命令 open -e Podfile
第一次执行这个命令,会有一个空白文件打开,可以先放在一边.
Podfile文件的格式应该如下:

platform :ios, ‘8.0’
use_frameworks!

target ‘对应工程名’ do
  pod 'AFNetworking', '~> 3.1.0'
  pod 'SDWebImage', '~> 4.0.0-beta2'
  pod 'Masonry', '~> 1.0.2'
  pod 'MJExtension', '~> 3.0.13'
  pod 'ReactiveCocoa', '~> 2.5’
end

需要注意的几点:platform那一行,ios三个字母都要小写,而且与前面的冒号之间不能有间隔,后面的版本号也可以不写,但是有些开源库对版本是有要求的,比如要在8.0以上才能运行,遇到这样的开源库就需要写上版本号。

platform下面就是Cocoapods需要集成的开源库,根据你的需要确定集成那些库。

举个例子:
我要集成AFNetworking这个库类,需要在Cocoapods里面先搜索是否有需要的库,可以在Terminal中输入:
$ pod search AFNetworking
回车之后就可以看到和你搜索的关键字相关的一些库类,如图:

CocoaPods的安装使用和常见问题_第1张图片
图_search.png

其中第一个就是我们需要的,把pod ‘AFNetworking’, ‘~>3.1.0’
那一行复制到我们的Podfile文件中,保存修改。
然后在Terminal中执行 :
$ pod install
换个姿势:
$ pod install --verbose --no-repo-update

这样,AFNetworking就已经下载完成并且设置好了编译参数和依赖,以后使用的时候切记如下两点:
1.从此以后需要使用Cocoapods生成的 .xcworkspace文件来打开工程,而不是使用以前的.xcodeproj文件
2.每次更改了Podfile文件,都需要重新执行一次pod update命令

ps:当执行pod install之后,除了Podfile,还会生成一个名为Podfile.lock的文件,它会锁定当前各依赖库的版本,之后即使多次执行pod install也不会更改版本,只有执行pod update才会改变Podfile.lock.在多人协作的时候,这样可以防止第三方库升级时候造成大家各自的第三方库版本不一致。所以在提交版本的时候不能把它落下,也不要添加到.gitignore中.
(其中Podfile文件可以直接pod init 命令生成而且自带注释)

方法(二)、
在终端中进入(cd命令)你项目所在目录,然后在当前目录下,利用vim创建Podfile,运行:
$ vim Podfile

CocoaPods的安装使用和常见问题_第2张图片
实验_1.png

键盘输入 i,进入编辑模式:
"Podfile" [New File]变为-- INSERT --
在输入:

platform :ios, ‘8.0’
use_frameworks!

target ‘对应工程名’ do
  pod 'AFNetworking', '~> 3.1.0'
end

然后按Esc,并且输入“ :”号进入vim命令模式,然后在冒号后边输入wq
注意:键盘输入 :后,才能输入wq。回车后发现PodTest项目总目录中多一个Podfile文件
然后输入 pod install

五、常见问题

1.ArgumentError - invalid byte sequence in US-ASCII
原因:字符集错误
解决办法:
使用locale命令查看当前的字符集,如果都是zh,需要执行以下命令:
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
然后再使用locale命令查看,已经改过来了

2.当pod安装成功后import导入头文件不显示时可以用下面方法解决
选择Target -> Build Settings 菜单,找到\”User Header Search Paths\”设置项
新增一个值"${SRCROOT}",并且选择\”Recursive\”

3.升级Cocoapods
sudo gem install -n /usr/local/bin cocoapods --pre
更新完成后pod --version可能还是显示之前的版本,这是你只需要执行如下命令即可:sudo gem cleanup 这个命令行标示清除已安装过得所有pods旧版本,保留当前最新版本

Setting up CocoaPods master repo 
[!] /usr/bin/git clone https://github.com/CocoaPods/Specs.git master –depth=1 
Cloning into ‘master’… 
error: RPC failed; result=18, HTTP code = 200 
fatal: The remote end hung up unexpectedly 
fatal: early EOF 
fatal: index-pack failed

$ git config --global http.postBuffer 524288000
$ git config --list
重新执行:
$ pod setup

附:如何使用CocoaPods的镜像索引:

所有项目的Podspec文件都托管在https://github.com/CocoaPods/Specs,
第一次执行pod setup时,CocoaPods会将这些podspec索引文件更新到本地的~/.cocoapods目录下,
这个索引文件比较大,所以第一次更新时非常慢.
友好人士在国内的服务器建立了Cocoapods索引库的镜像,
所以执行索引跟新操作时候会快很多.具体操作方法如下:
$ pod repo remove master
$ pod repo add master https://gitcafe.com/akuandev/Specs.git
$ pod repo update
这是使用gitcafe上的镜像,将以上代码中的 https://gitcafe.com/akuandev/Specs.git 
替换成 http://git.oschina.net/akuandev/Specs.git 即可使用oschina上的镜像。

------整理

你可能感兴趣的:(CocoaPods的安装使用和常见问题)