cocoapods从安装到使用

什么是cocoapods

CocoaPods是一个用来帮助我们管理第三方依赖库的工具。它可以解决库与库之间的依赖关系,下载库的源代码,同时通过创建一个Xcode的workspace来将这些第三方库和我们的工程连接起来,供我们开发使用。这么说可能还不是很理解,当我们开发iOS应用时,会经常使用到很多第三方开源类库,比如JSONKit,AFNetWorking等等。可能某个类库又用到其他类库,所以要使用它,必须得另外下载其他类库,而其他类库又用到其他类库,A依赖B,B又依赖C......。总之笔者的意思,手动一个个去下载所需类库十分麻烦。另外一种常见情况是,你项目中用到的类库有更新,你必须得重新下载新版本依赖库,然后一个个重新加入到项目中,费时费力,操作繁琐且容易出错。如果能有什么工具能代替我们手工去解决这些依赖和更新问题,那我们开发效率将如有神助。这就是CocoaPods的作用。
总而言之,使用CocoaPods的目的是让我们能自动化的、集中的、直观的管理第三方开源库。

cocoapods安装

0.升级/安装Ruby环境
CocoaPods 是使用 Ruby 实现的,可以通过 gem 命令来安装。MAC 中一般自带 Ruby 环境,如果没有请参考 Ruby 官方文档来安装 Ruby 环境。也可参考 如何在Mac OS X上安装 Ruby运行环境

  • sudo gem update --system

1.查看现有Ruby镜像源是否为taobao.org

  • $gem sources -l

2.通过以上命令,如果打印的当前Ruby镜像源是https://rubygems.org/ 那么需要使用以下命令移除然后替换为淘宝的镜像源(如果是且仅是https://ruby.taobao.org/ 直接跳转到第4步骤):
你或许会好奇问,为什么需要把https://rubygems.org/替换为https://ruby.taobao.org/,因为https://rubygems.org/在国外,如果我们不替换为淘宝镜像源,那么cocoapods的安装将是非常慢,所以,强烈建议将默认的 RubyGems 源替换为淘宝的 RubyGems 镜像,这样速度要快很多,更多信息可以参考 RubyGems 镜像 - 淘宝网

3.验证新源是否存在,注意,不是i是list的首字母l

  • gem sources -l
    终端显示如下代表替换成功!
*** CURRENT SOURCES ***
http://ruby.taobao.org/

4.安装CocoaPods
4.1. $sudo gem install cocoapods
这个命令默认安装的应该是最新版本,如果想安装指定版本的cocoapods,请使用以下命令:

  • $sudo gem install cocoapods -v 1.0.1
    备注:如果苹果系统升级到OS X EL Capitan(或者更高版本的macOS系统),以上命令无效,使用如下命令:
  • $sudo gem install -n /usr/local/bin cocoapods
  • sudo xcode-select --switch /Applications/Xcode.app(可有可无)

注意: 直接运行sudo gem install cocoapods可能会报如下错误ERROR: While executing gem ... (Gem::FilePermissionError) You don't have write permissions for the /usr/bin directory. 说我们没有管理员权限,如果你是管理员,同时也在命令前面加了sudo,不要犹豫,此时我们也需要使用sudo gem install -n /usr/local/bin cocoapods这个命令,而非sudo gem install cocoapods `

4.2.将 CocoaPods Specs repository复制到你电脑上~/.cocoapods目录下
备注:"~"代表用户绝对目录的收起状态,展开为:/Users/userName,"."开头的代表是隐藏文件

  • $pod setup

执行以上命令后,需要一点时间来完成,耐心等待。如果安装失败那么 ~/.cocoapods 里面是空的,就需要以下两个命令重新setup。

  • pod repo remove master
  • pod setup
    pod setup 命令本质上是从https://github.com/CocoaPods/Specs.git这个地址下载podspec仓库到本地~/.cocoapods目录。

备注:卸载 CocoaPods 可以使用以下命令:sudo gem uninstall cocoapods
如果执行以上卸载命令报如下错误:ERROR: While executing gem ... (Gem::FilePermissionError) You don't have write permissions for the /usr/bin directory.,此时我们也是需要变更下卸载的目录,命令如下sudo gem uninstall -n /usr/local/bin cocoapods

5.查看CocoasPods版本

  • pod --version

完毕之后这个文件夹大概有 100多M,到这里你已经成功安装了CocoaPods!

关于pod setup执行非常慢的问题

如果是第一次执行pod setup命令,你会发现进度慢的可怜,有时候等半天(真的是半天)都没有什么反应,解决办法请参考这篇文章。其给出的解决办法就是通过终端执行以下两个命令

cd ~/.cocoapods/repos
git clone https://github.com/CocoaPods/Specs.git

然后可以用pod repo命令查看信息。也可以用pod repo update 命令更新repo.
究其原因,因为pod setup命令的本质就是把github上CocoaPods上的Specs拷贝到repos目录下,并改名成master。

关于通过pod search 命令找不到三方库的问题

安装完pod后,我们通常会通过pod search XXX命令查看某个库是否支持pod方式集成。比如

pod search MJRefresh

然而,很不巧,终端有可能会给出下面的提示,其意为在本地repo的master中找不到匹配的库文件MJRefresh:


Snip20161213_6.png

但是我们明明已经下载好了master,且master内容有559.3MB,如下:

Snip20161213_8.png

有可能你会怀疑我们master进行pod setup的时候遗漏了一部分文件或者某个环节出了问题。其实不是的,我们只需要在终端执行以下命令问题即可解决。

rm ~/Library/Caches/CocoaPods/search_index.json

无疑,此命令就是移除我们本地的search_index.json文件。该文件是根据~/.cocoapods/repos下的master生成的与之对应的检索文件。
然后我们在终端再次pod search XXX命令。这个命令执行时间可能会久一点。原因在于:我们刚才移除了search_index.json文件,而pod search 命令会先查看有无search_index.json文件,如果不存在该文件,会自动根据master文件夹生成一个新的search_index.json文件,耐心等待,直到出现以下界面。

Snip20161213_4.png

然后执行pod search XXX,我们就能search到匹配的库文件(当然前提是我们search的三方库支持pod)

如果你查看~/Library/Caches/CocoaPods/目录,发现系统自动给我们生成了search_index.json文件。
关于pod search XXX 找不到第三方库的问题,这篇文章也有介绍。

cocoapods使用

1.使用search命令搜索类库名,如果能搜到,那么代表该依赖库支持pods的方式集成,反之不能。

  • $ pod search AFNetworking

2.创建Podfile文件,最好把Podfile创建在项目根目录下(也就是和我们项目的XXX.xcodeproj文件同目录)
$vim Podfile
3.在 Podfile中添加我们需要依赖的库名和版本号,如下

 platform :ios, '8.0'
# Uncomment this line if you're using Swift
 use_frameworks!
pod 'AFNetworking', '~> 3.0'

注意:你是否还在使用touch 命令创建podfile文件?你是否还在手动配置podfile文件中的target。从今以后,你可以使用cd命令切换到工程根目录下,然后使用pod init 方法在当前目录下快捷的创建一个podfile文件,并且podfile文件已经根据当前目录中的工程名称进行了配置。如下图:


使用pod init 命令创建podfile文件
pod init 命令不仅会创建pod file文件,还会对podfile进行配置

PS:上面说过,最好把podfile文件放在工程根目录下,其实Podfile文件也可以不放在工程的根目录下。如果podfile文件放在非根目录下,需要做的是在Podfile中指定后缀名为.xcodeproj的文件的路径。因为默认情况下,podfile文件是要和.xcodeproj文件处于同一个目录下的,正因为.xcodeproj文件处于项目的根目录下,所以我们经常把podfile放在根目录下,这才是建议大家把podfile放在根目录的原因。如果非要把podfile文件放在非根目录下。我们就需要在Podfile文件头部指定.xcodeproj文件的路径,如下图:

然后执行pod install --verbose --no-repo-update 命令,AFNetworking就安装得到项目中了,如下图:
和Pod file在根目录下时不同,当Podfle不在根目录下时候,Pods文件夹、Podfile.lock、.xcworkspace都不在根目录下。也就是说,Pods文件夹、Podfile.lock、.xcworkspace到底在哪个目录下,取决于Podfile在哪个目录,即,Pods文件夹、Podfile.lock、.xcworkspace永远和Podfile同目录。

2.使用install命令安装依赖库
pod install 2.1.如果安装依赖库且不希望更新CocoaPods的spec仓库 pod --verbose --no-repo-update
执行命令后,控制台会打印如下信息,分别分析依赖、下载依赖、安装依赖库AFNetworking、生成Pods工程、集成我们的项目和Pods工程(也就是生成名为XXX.xcworkspace的文件)。最后会在终端提醒,从现在起,我们该用后缀名为.xcworkspace的文件打开项目。

EricmatoMacBook-Pro:CocoaPodsDemo ericwang$ pod install
        Analyzing dependencies
        Downloading dependencies
        Installing AFNetworking (3.0)
        Generating Pods project
        Integrating client project

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

以上是用命令行的方式创建Podfile、编辑Podfile、安装依赖库。还有一种更方便的方式,就是使用CocoaPods插件。CocoaPods的安装和使用非常简单,和其他插件的安装一样,此处不再赘述。

CocoaPods常见问题

Podfile文件过期

问题摘自CocoaPods安装和使用教程

[!] Required version (UAAppReviewManager (from `../`)) not found for `UAAppReviewManager`.
        Available versions: 0.1.6

这里的意思大概是Podfile文件过期,类库有升级,但是Podfile没有更改。pod install只会按照Podfile的要求来请求类库,如果类库版本号有变化,那么将获取失败。但是 pod update会更新所有的类库,获取最新版本的类库。而且你会发现,如果用了 pod update,再用 pod install 就成功了。

那你也许会问,什么时候用 pod install,什么时候用 pod update 呢,我又不知道类库有没有新版本。好吧,那你每次直接用 pod update 算了。或者先用 pod install,如果不行,再用 $ pod update。但是如果我们在团队开发中,clone公司的项目到本地,此时我们应该直接用pod install,不建议用pod update (为了保持依赖库版本同步)。详情如下:

pod install :优先按照podfile.lock 中的依赖库信息更新pod依赖库。如果没有podfile.lock,再按照podfile中的依赖库信息更新pod依赖库。
pod update 直接按照podfile中的依赖库信息更新pod依赖库。

本地pod repo长时间未更新导致找不到最新版本的依赖库

如下图,从github上下载了一个别人的demo,执行pod install 命令后报一下错误:


原因在于我本地的pod仓库已经很久没有更新,本地并没有3.8.1版本的SDWebImage依赖库的说明文件(podSpec文件)。此时需要执行pod repo update命令过来更新本地的依赖库。如下图:

耐心等待...然后本地仓库更新完成,如下图:


最后执行pod search SEWebImage命令查看版本信息,发现已经有3.8.1这个版本了,如下图:



最后执行pod install 命令,pod 依赖库便可以成功安装,如下图:


找不到头文件

cocoapods导入一个第三方的库(开源库或者静态/动态库),然后导入这个库的头文件,编译报错,说某个头文件找不到。错误如下:

屏幕快照 2016-04-28 下午2.20.12.png

解决方案:
配置头文件的搜索路径,配置如下:
问题描述:使用cocoapods时,import某个头文件后, 找不到这个头文件中import的其他头文件。

问题原因:这是因为还没设置头文件的目录。

解决办法:在项目的Target的里设置一下,添加cocoapods头文件目录:目录路径直接写:${SRCROOT} ,后边选择recursive 。就可以了。

注意:必须选择recursive ,否则照样报错,recursive是递归查找的意思,如果在当前路径下找不到头文件,会去子路径下继续查找。

注意:是在 User Header Search Paths 里添加,不是上面的 Header Search Paths.

如图:


E1BE8808-66FF-416D-AA93-08BD1709BED0.jpg

文/VV木公子(简书作者)
PS:如非特别说明,所有文章均为原创作品,著作权归作者所有,转载转载请联系作者获得授权,并注明出处,所有打赏均归本人所有!

如果您是iOS开发者,或者对本篇文章感兴趣,请关注本人,后续会更新更多相关文章!敬请期待!

参考文章

CocoaPods安装和使用教程
CocoaPods安装和使用教程以及一些常见问题
2016 cocoapods的安装和使用以及版本升级遇到的问题

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容