CocoaPods使用

前言

在iOS项目中使用第三方类库可以说是非常常见的事 , 但是要正确地配置 和更新他们有时候是非常繁琐的事情 , 幸运的是CocoaPods是一个很好的解决方案.

介绍

CocoaPods是OS X和iOS下的一个第三类库管理工具 , 通过CocoaPods工具我们可以为项目添加被称为“Pods”的依赖库 (这些类库必须是CocoaPods本身所支持的) , 并且可以轻松管理其版本.

Cocoapods意义体现在两个方面.
第一 : 在引入第三方库时它可以自动为我们完成各种各样的配置 , 包括配置编译阶段、连接器选项、甚至是ARC环境下的-fno-objc-arc配置等.
第二 : 使用CocoaPods可以很方便地查找新的第三方库 , 这些类库是比较"标准的" , 而不是网上随便找到的 , 这样可以让我们找到真正好用的类库.


安装

要想使用CocoaPods工具 首先我们要先下载安装 , 而在下载安装CocoaPods之前 我们要先有它的运行环境 Ruby.
MAC 的OS X自带Ruby , 但是我们使用之前 还是要更新一下为好 , 避免版本过低导致安装失败 .

1.更新Ruby环境

首先我们要先查看Ruby的版本 在终端输入以下命令:
ruby -v
你会看到例如这样的信息 :

ruby 2.0.0p643 (2015-02-25 revision 49749) [x86_64-darwin14.4.0]

从这条信息中我们可以得知当前Ruby的版本号 以及更新日期 , 通过这些信息 我们可以检验接下来的更新是否成功了.
下面我们开始更新Ruby , 在终端输入以下命令:
gem update —system
如果执行后出现类似这样的提示 那说明你没有足够的权限去操作:

ERROR:  While executing gem ... (Gem::FilePermissionError) 
You don‘t have write permissions for the 
/Library/Ruby/Gems/2.0.0 directory.`

这时我们可以使用以下命令去完成更新:
sudo gem update —system
如果你的Ruby版本是最新的 那么你将看到

Updating installed gems
Nothing to update

现在更新成功Ruby后 我们就可以开始下载安装CocoaPods了 , 但在开始前 我们还需要做一步操作 , 更改Ruby的镜像 :
安装CocoaPods时我们要访问cocoapods.org,该网站可能被我们大天朝墙了,这样下载安装可能会是灰常慢的,不过我们可以用淘宝的Ruby镜像来访问该网站 , 具体操作如下:
gem sources --remove https://rubygems.org/
等有反应之后再输入以下命令
gem sources -a https://ruby.taobao.org/
通过以上2个命令 我们先移除原有的镜像 再添加淘宝的镜像 这样就完成了更改 , 为了确保更改成功 在终端输入一下命令可以查看当前镜像:
gem sources -l

2.安装CocoaPods

在终端输入执行: sudo gem install cocoapods 开始下载安装.

注意 : 这个时候会提示你输入密码 . PS:在终端输入密码不会有提示 , 光标也不会移动 , 一定要注意!


使用

这里我们说一些平时常用的使用方法 , 例如搜索、安装、更新、删除等操作 .

1.搜索库

使用CocoaPods搜索的命令如下:
pod search 你要搜索的库名(支持模糊查询)
举个例子
pod search afnetworking
我们搜索AFNetworking库 , 只要CocoaPods支持的库都可以搜索到 , 搜索成功后终端会返回这个库的所有类库版本和描述信息 , 以及在Podfile中配置的写法 , 下面我们来看一下搜索返回的信息:

Pods搜索AFNetworking

如果你搜索的库不存在 则会提示 :

Pods搜索的内容不存在

下面还有一大坨相关搜索到的库的信息这里就不一一列举了.
在这些信息中 我们一会要用到的就是这一句 :
pod 'AFNetworking', '~> 3.0.4'

这句话后面我们要添加到Podfile文件中 , 那么什么是Podfile呢?
这里我们介绍一下 , Podfile是CocoaPods重要的组件之一 , 该文件用于配置项目所需要的第三方库,它可以被高度定制 . 其实你也可以把它看成一张购物清单 , 我们所需要的库的都列在这个清单上 , CocoaPods就会根据这个清单上的库去做相应的操作 .

实例 :

  pod ‘AFNetworking’      //不显式指定依赖库版本,表示每次都获取最新版本
  pod ‘AFNetworking’, ‘2.0’     //只使用2.0版本
  pod ‘AFNetworking’, ‘> 2.0’     //使用高于2.0的版本
  pod ‘AFNetworking’, ‘>= 2.0’     //使用大于或等于2.0的版本
  pod ‘AFNetworking’, ‘< 2.0’     //使用小于2.0的版本
  pod ‘AFNetworking’, ‘<= 2.0’     //使用小于或等于2.0的版本
  pod ‘AFNetworking’, ‘~> 0.1.2’     //使用大于等于0.1.2但小于0.2的版本
  pod ‘AFNetworking’, ‘~>0.1’     //使用大于等于0.1但小于1.0的版本
  pod ‘AFNetworking’, ‘~>0’     //高于0的版本,写这个限制和什么都不写是一个效果,都表示使用最新版本
2.安装库

安装库之前 我们首先要创建一个Podfile文件 , 然后在Podfile文件中添加我们要安装的库信息 , 最后在终端执行安装命令 , 下面我们一步一步来讲 (这里我们演示的是终端下的操作流程) :

  1. 找到你想要使用CocoaPods工程的根目录
  2. 使用终端命令进入该目录 : cd 你的目录地址
  3. 进入到该目录后 终端输入 : vim Podfile 来创建Podfile文件
  4. 接下来就进入了Podfile文件的编辑模式 , 这时我们只需要把我们要添加的库的配置信息写进去就可以了 , 当然还是建议直接复制粘贴 避免手打出现错误.
  5. 配置信息添加好后 , 点击键盘ESC键 退出编辑模式 , 然后输入保存并退出的命令 : :wq 就结束Podfile文件的编辑了 (如果不想用终端操作 也可以通过记事本打开Podfile文件添加信息) .
  6. 此时我们会发现我们工程根目录下会多出一个名为Podfile的文件 , 打开后你会看到刚刚你添加的库配置信息 , 现在有了一个配置好的Podfile文件后 我们就可以执行最后一步操作了 , 执行安装命令:
    pod install

这时CocoaPods会根据Podfile文件中配置的信息去下载安装相应的库. 就算你需要用到一万个库 也只需要这一行命令就可以全部自动下载安装配置完成 是不是很方便呢 ?

工程根目录下的Podfile文件

还有一点要说明一下 , 当你第一次使用CocoaPods安装库时 , 会在你工程的根目录生成一个与你工程名相同的包 .
以后你必须要通过这个.xcworkspace文件来打开你的工程 .
你必须要通过这个.xcworkspace文件来打开你的工程 .
必须要通过这个.xcworkspace文件来打开你的工程 .
[重要的事重复三遍]

如果你依然点错的话..
"( *・ω・)✄╰ひ╯ 那么我们可以聊聊人生

.xcworkspace文件
使用CocoaPods的工程目录
3.更新库

要想更新已经安装好的库 其实非常简单 只需要一行命令就可以搞定 :
pod update
CocoaPods会自动根据Podfile文件中的配置信息对可以更新的库进行更新操作 .

终端更新操作
4.删除库

如果我们安装好的库不想要了 怎么办呢 ? 非常简单 , 我们只需要在Podfile文件中删除对应的库的配置信息 (为了演示 我注释掉了它) , 然后再执行一次安装命令就可以了

注释掉的配置信息
再次执行安装命令
5.移除CocoaPods

假如我们的工程不想再使用CocoaPods了 那么我们怎么将安装好的CocoaPods从我们的工程中移除呢?

  1. 删除工程文件夹下的Podfile、Podfile.lock及Pods文件夹
  2. 删除xcworkspace文件
  3. 使用xcodeproj文件打开工程,删除Frameworks组下的Pods.xcconfig及libPods.a引用
  4. 在工程设置中的Build Phases下删除Check Pods Manifest.lock及Copy Pods Resources
Build Phases下

高级使用

以上所描述的是最常用的基础使用方法 , 下面为扩展的高级使用

多个target中使用相同的Pods依赖库

比如 , 名称为CocoaPodsDemo的target和Second的target都需要使用FMDB、SDAutoLayout、AFNetworking三个Pods依赖库 , 可以使用link_with关键字来实现 , 将Podfile写成如下方式:

    link_with 'CocoaPodsDemo', 'Second'
    platform :ios
    pod 'SDAutoLayout', '~> 1.3'
    pod 'FMDB'
    platform :ios, '7.0' //库支持的IOS最低版本
    pod 'AFNetworking', '~> 3.0'
不同的target使用完全不同的Pods依赖库

CocoaPodsTest这个target使用的是FMDB、SDAutoLayout、AFNetworking三个依赖库,但Second这个target只需要使用YYKit这一个依赖库,这时可以使用target关键字,Podfile的描述方式如下:

    target :'CocoaPodsDemo' do
    platform :ios
    pod 'SDAutoLayout', '~> 1.3'
    pod 'FMDB'
    platform :ios, '7.0'
    pod 'AFNetworking', '~> 3.0'
    end
    target :'Second' do
    pod 'YYKit'
    end
Podfile.lock文件的作用

在使用CocoaPods , 执行完pod install之后 , 会生成一个Podfile.lock文件 . 这个文件看起来跟我们关系不大 , 实际上绝对不应该忽略它.
该文件用于保存已经安装的Pods依赖库的版本 , 通过CocoaPods安装了FMDB、SDAutoLayout、AFNetworking三个Pods依赖库以后对应的Podfile.lock文件内容如下:

Podfile.lock文件内容

Podfile.lock文件最大得用处在于多人开发 , 当团队中的某个人执行完pod install命令后 , 生成的Podfile.lock文件就记录下了当时最新Pods依赖库的版本 , 这时团队中的其它人check下来这份包含Podfile.lock文件的工程以后 , 再去执行pod install命令时 , 获取下来的Pods依赖库的版本就和最开始获取到的版本一致 . 如果没有Podfile.lock文件,后续所有用户执行pod install命令都会获取最新版本的AFNetworking , 这就有可能造成同一个团队使用的依赖库版本不一致,这对团队协作来说绝对是个灾难!

鉴于Podfile.lock文件对团队协作如此重要 , 我们需要将它添加到版本管理中.

更新

关于1.1.0版本的一些小改动 , 在1.1.0之前的版本就不做介绍了 , 语法和1.1.0是由区别的 所以更新了 cocoaPods之后还是需要做一些细微的修改.
主要是修改你的Podfile 文件 如下示例:

platform :ios, '7.0'

target 'cocoaPodTest' do

pod 'AFNetworking', '~> 3.1.0'

end

结构如下:

platform 的意思是系统支持的最低版本

target是你的工程名

do开始 

你pod的库
你pod的库
你pod的库
你pod的库

end结束

我是LEE , 一枚有信仰的果粉Coder , 如果喜欢记得关注哦 亲 ~ 么了个哒 

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

推荐阅读更多精彩内容