一、CocoaPods简介
在iOS开发过程中我们时常会用到一些大神在Github上边开源的三方库,如果说只用一个两个三方库的话还好说,手动将三方库拖进工程里边配置好就可使用了,但是使用的三方库多了怎么办?更何况有些三方库用手动操作的话光配置这一块就要花费好多时间。对于我们程序猿来讲时间可是最宝贵的。 所以呢,这时候如果你使用CocoaPods的话会给你剩好多时间的。
那么什么是CocoaPods呢?CocoaPods就是一个用来帮助我们管理第三方依赖库的工具。它可以解决库与库之间的依赖关系,下载库的源代码,同时通过创建一个Xcode的workspace来将这些第三方库和我们的工程连接起来,供我们开发使用。
二、为什么需要CocoaPods?
举个例子来说明一下CocoaPods的优点:
虽然我现在是一个小白,但是只要努力终究会有成为大牛的那一天的嘛!嘿嘿.....所以我现在就假设自己某一天成了一位大牛啦!并且呢写了一个三方开源框架名字叫XiaoBaiFramework,接着呢又有一个心思缜密大白发现了这个框架使用之后他感觉,哎呦这个框架不错哦,可是有些地方大白觉着还不太完美,所以大白呢就以XiaoBaiFramework这个框架为基础又开发了一个名字叫DaBaiFramework的框架。
后来小黑又发现了大白的DaBaiFramework这个框架感觉不错所以脑洞大开就有以DaBaiFramework这个框架为基础开发了一个名为XiaoHeiFramework的框架。于是乎呢,你有一天发现了小黑的XiaoHeiFramework这个框架,你感觉这个框架简直就是完美!不行,我要往我的工程里边使用它。于是你把小黑的XiaoHeiFramework导入工程后,编译了一下发现报错了,原因是:"XiaoHeiFramework" not found,于是你就看小黑框架的使用说明发现要使用这个框架你必须导入大白的DaBaiFramework,然后你按照提示导入了大白的DaBaiFramework,一编译,啊!咋又错了呢?一看原因:"DaBaiFramework" not found,然后你在看小白的使用说明发现使用这个框架你必须导入小白的XiaoBaiFramework框架,所以最后你又按照提示导入了XiaoBaiFramework才平息了这场战争。
如果出现这种情况怎么办呢?在没有CocoaPods的情况下你只能按照上边的例子一步步去解决问题,但是如果使用CocoaPods的话你只需要将你要使用的XiaoHeiFramework这个框架导入即可,剩下所需的框架cocoaPods会帮你摆平。
三、CocoaPods的安装
我相信看了上边的一大堆解释之后,你应该多少了解一些cocoaPods了吧!那么下边就赶紧进入主题吧!
安装前奏:
CocoaPods是一个软件或者说一个工具,它是以一个可执行文件存在你的Mac电脑上边的,不过Mac是默认不安装CocoaPods的,所以你想让你的Mac拥有这个可执行文件,就必须安装。CocoaPods是用ruby写的程序被分成了若干个gem包,安装CocoaPods一般要通过Mac自带的ruby环境安装,也就是gem。但是gem被我大天朝给用墙给堵住了所以我们就需要改造一下gem,让它拥有一个翻墙的能力。其实让gem拥有一个翻墙的能力很简单的,一个VPN就能搞定,但是并不是所有人都有VPN的啊。所以这个时候淘宝gem就做了一个镜像,淘宝每过几分钟,通过他的方法就讲gem的另一端数据完全拷贝到淘宝的服务器上边了,这样淘宝就模拟了一个镜像,而这个镜像中就有我们需要的CocoaPods的可执行程序。
安装进行曲:
gem ruby 配置
打开终端输入 gem source -l (注释 :此处是字母L的小写)后回车
然后终端会输出:
继续在终端输入下图的命令然后回车:
继续在终端输入下图的命令回车:
最后再次在终端输入gem source -l (注释 :此处是字母L的小写)后回车查看镜像是否替换成功。
注释:如果gem太老,可以尝试如下命令升级gem
升级成功后会出现提示:
gem ruby 配置完成后,它就拥有了一个伪翻墙的能力了。
在具备翻墙能力并且翻墙成功后,就可以通过淘宝的镜像来安装CocoaPods了。
在终端输入:
注释:如果输入上边的命令出现问题的话可以试试:
紧接着会提示PassWord:此时你只需要输入你的Mac电脑的开机密码(密码输入的时候和输入结束后不会显示你的输入结果的,所以请细心点啦!)然后回车,就开始进行安装了,可能安装过程比较慢,耐心等待一下吧!截止到这里CocoaPods的安装工作就完成了。
四、CocoaPods的使用
要想使用CocoaPods,需要将地三方库的索引信息下载到本地,否则CocoaPods没有办法完成地三方库信息的搜索和下载。安装CocoaPods成功之后可以选择如下方法中的一种方法进行初始化工作。
方案一:直接初始化
在终端输入命令行:pod setup ,然后回车
在执行该命令的时候回终端会输出"Setting up CocoaPods master repo"的提示,然后可能得需要等待很长时间,因为此时CocoaPods再将它的信息下载到~/.cocoaPods 目录下。
也可以在终端中输入如下命令进行查看当前下载进度:
先输入cd ~/.cocoapods 回车
在输入 du -sh *
以上工作完成后就可以顺利使用CocoaPods了。下面就简单说下使用吧!
新建pod file的几种方式:
方式一:安装一个CocoaPods快速管理插件可以快速创建一个podfile文件(如下图),Product->CocoaPods->Create/Edit Podfile.
方式二:在终端中用命令行直接创建
方式三:新建Xcode工程后关闭工程,打开终端输入cd 工程根路径(可以在敲完空格后,选中工程的根文件夹拖入到终端中,即生成工程的根路径。如:)然后回车,继续在终端中输入vim podfile。此命令会自动在工程根路径下创建podfile文件,并使用vim编辑工具打开此文件,输入i即进入到vim对podfile文件的插入状态,输入格式如下:
platform,'8.0'
pod ‘SDWebImage’,’~>3.6’
退出vim 操作,先按ESC在敲wq保存退出。podfile创建工作完成。
以上任选一种方式将podfile创建好之后就开始解析podfile文件,为xcode项目安装指定的地三方库。用终端打开工程后输入pod install完成三方库的下载。下载完成就可以使用三方库了。
五、安装可能会遇到的问题
1>、可能有时候安装的时候会在pod setup这一步失败,这里也有个解决方案,大家可以参考一下。(参考链接地址:http://www.cocoachina.com/bbs/read.php?tid-193398.html)
这里只进行一个补充:
可能按照上边说的去操作你会找不见/.cocoaPods/repos这个文件夹,因为它是隐藏的所以你可以在终端用一下几行代码将其隐藏或者显示:
1.显示隐藏文件夹
defaults write com.apple.finder AppleShowAllFiles -bool true(输完第一行回车再输第二行)
killall Finder
2.隐藏文件夹
defaults write com.apple.finder AppleShowAllFiles -bool false (输完第一行回车再输第二行)
killall Finder
还有就是上边提到的master文件夹最好是自己去找一个装有最新版本的cocoaPods的Mac本上拷贝一下,或者想办法找到和自己xcode上那个版本的cocoaPods相匹配的master文件夹最好。替换之后需要从安装cocoaPods失败的地方重新开始按照步骤操作一下。
2>、
3>、
这个错误是因为你的Podfile文件没有创建到项目目录下,可以检测一下你的项目路径是否正确。
4>、
解决方法:如果是访问github出错的话,需要配置一下你Mac上的DNS服务器。有时候不知道为何缘故,其它的DNS服务器解析github就是不太好用,所以只需将你的DNS服务器这改成8.8.8.8就可以了。
配置的具体步骤为:Mac上的偏好设置->网络->高级->DNS->点击+添加8.8.8.8
5>、
解决方法:
在终端中输入如下图两行代码:
如果输出http.postbuffer=24288000,就ok了。
6>、在pod install 的时候,可以生成要导入的第三方库,但是其头文件却找不到,证明你的文件是有缺失的,这是因为Target设置没有完成。
解决方法:
产生此错误的原因是项目Target中需要设置的一些配置,CocoaPods也做了默认的设置,如果两个设置结果不一致,就会造成问题。
如果想要使用CocoaPods中的设置,就需要分别在你的项目中定义PODS_ROOT 和 other Linker Flags的地方,把他们的值用$(inherited)替换掉。进入终端,执行pod update,然后错误就没有了。
还有一种操作比较简单但是比较粗暴的方法:
点击项目文件project.xcodeproj,右键显示包内容,用文本编辑器打开project.xcodeproj,删除OTHER_LDFLAGS的地方,保存,执行pod update ,错误没了。
如果在编辑podfile时候有警告的话可以试试往podfile里边加下面一句代码即可消除。
六、cocoaPods的卸载
更多问题可以参考链接:http://www.jianshu.com/p/9fd6d9ddf4ca
七、补充说明
如果有错误的地方希望各位前辈们能够赐教,我好及时纠正。谢谢!