iOS CocoaPods 详解

每种语言发展到一个阶段,就会出现相应的依赖管理工具,例如 Java 语言的 Maven,nodejs 的 npm。随着 iOS 开发者的增多,业界也出现了为 iOS 程序提供依赖管理的工具,它的名字叫做:CocoaPods。CocoaPods项目的源码 在 Github 上管理。该项目开始于 2011 年 8 月 12 日,经过多年发展,现在已经成为 iOS 开发事实上的依赖管理标准工具。开发 iOS 项目不可避免地要使用第三方开源库,CocoaPods 的出现使得节省设置和更新第三方开源库的时间

使用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的安装
1> ruby 的软件源 rubygems.org因为使用亚马逊的云服务,被屏蔽,需要更新一下ruby的源,执行如下指令
$ gem sources -l     // 查看当前ruby的源
$ gem sources --remove https://rubygems.org/     // 移除当前ruby的源
$ gem sources -a https://ruby.taobao.org/     // 设置淘宝ruby的源
$ gem sources -l     // 再次查看当前ruby的源
如果Terminal输出:

*** CURRENT SOURCES ***

https://ruby.taobao.org/
就证明ruby的软件源已经设置OK了
iOS CocoaPods 详解_第1张图片

2> 设置gem为最新版本
如果gem太老,可以尝试用如下命令升级gem
$ sudo gem update —system
升级成功后会提示: Latest version currently installed. Aborting.
iOS CocoaPods 详解_第2张图片

3> 执行安装 CocoaPods 命令
OS X 10.11 升级,虽然官方声称只是一个小的升级,但对于开发者而言,cocoapods需要重新安装,但按照以前的安装方式,在Terminal输入以下命令
$ sudo gem install cocoapods
iOS CocoaPods 详解_第3张图片
如果报以下错误:
ERROR:  While executing gem ... (Errno::EPERM)
          Operation not permitted - /usr/bin/xcodeproj
解决方案1:
$ sudo nvram boot-args="rootless=0"
$ sudo reboot
重启之后, 执行这个命令检查
$ sudo gem install cocoapods -V
如果依旧有错误,使用第二个方案

解决方案2:
$ sudo gem install -n /usr/local/bin cocoa pods
$ pod setup
下载时间两个多小时,才完成
iOS CocoaPods 详解_第4张图片
注 : $ pod setup 在执行时,会输出 Setting up CocoaPods master repo,但是会等待比较久的时间。这步其实是 Cocoapods 在将它的信息下载到 ~/.cocoapods目录下,如果你等太久,可以试着 cd 到那个目录,用du -sh *来查看下载进度
$ cd ~/.cocoapods
$ du -sh *


4> Cocoapods的使用
在 工程根目录 的统计目录下创建一个 Podfile 文件
iOS CocoaPods 详解_第5张图片
注 : 不能写成别的名字,也可以自己在工程根目录里面直接新建

Podfile 文件的格式内容一般如下 : 
platform :ios, '7.0'

project 'Test1/Test1.xcodeproj'

target 'Test1' do
  pod 'AFNetworking', '~> 2.5.3'
end
iOS CocoaPods 详解_第6张图片
cd 进入到 Podfile 文件所在的目录中,执行指令
$ pod install
注 : 1> pod install 指令执行完成之后会生成 xcworkspace 文件,以后使用.xcworkspace文件来打开工程,而不是使用以前的.xcodeproj文件
       2> 每次更改了Podfile文件,都需要重新执行一次 $ pod update 命令

5> 查找第三方库
如果不知道 cocoaPods 管理的库中,是否有你想要的库,那么可以通过 pod search 命令进行查找,如 : 
$ pod search AFNetworking
iOS CocoaPods 详解_第7张图片

6> 关于 Podfile.lock
当执行 $ pod install 之后,除了 Podfile 外,CocoaPods 还会生成一个名为Podfile.lock的文件,Podfile.lock 应该加入到版本控制里面,不应该把这个文件加入到 .gitignore 中。因为 Podfile.lock会锁定当前各依赖库的版本,之后如果多次执行 pod install 不会更改版本,要 $ pod update 才会改Podfile.lock了。这样多人协作的时候,可以防止第三方库升级时造成大家各自的第三方库版本不一致

常见问题
1> The dependency `AFNetworking ` is not used in any concrete target

库没有指定target,它不知道用在哪里,所以就给报错,添加 target 相关信息就可以

2> [!] Could not automatically select an Xcode project. Specify one in your Podfile like so:
    project 'path/to/Project.xcodeproj'
在Podfile文件里指定下工程目录就行,如 :
......  
xcodeproj 'Portfolio/Portfolio.xcodeproj'   
......  

3> [!] `xcodeproj` was renamed to `project`. Please update your Podfile accordingly.
iOS CocoaPods 详解_第8张图片
查看 Podfile 文件,若有类似 xcodeproj 'MyProj/MyProj.xcodeproj' 这样的信息,替换成 project 'MyProj/MyProj.xcodeproj'

4> Unable to find a specification for `xxxxx (~> 1.x.x)` depended upon by Podfile.
当在 update或 install时会遇到这个问题,只需要把当前Pod的目录清理一下就行执行如下指令
$ pod repo remove master
$ pod setup
setup 成功后执行 install或 update即可

5> [!] Unable to find a pod with name, author, summary, or description matching `AFNetworking`

执行
$ rm ~/Library/Caches/CocoaPods/search_index.json
之后再执行 查询指令
$ pod search AFNetworking



你可能感兴趣的:(IOS)