Cocoapods系列教程一 - 入门

开场

对于这个东西估计绝大多数的童鞋应该都不陌生了,不过这里还是稍微对大家唠唠嗑,可能对于那些没用过的童鞋也有可能是一种帮助呢,我们要一视同仁对吧。 对于Cocoapods是个什么东西估计大家多少听过了,可能有些童鞋没有用过,但是多少也听过了。如果没听过的童鞋就听我唠一句嗑:

Cocoapods是一个框架依赖管理的一个管理工具,主要是用来管理框架一些开源库在项目中的引用。简而言之就是用来管理你的项目中对开源框架或自己公司子模块的依赖。

当然作为使用者来说,入门教程简单的要死。但是作为一个开发人员不能只满足于当前的步伐,而应该不断进取,要做到能想Cocoapods提交项目,并且在自己项目中熟练应用该工具的程度。特别是如果一个大的公司来说的话,就有可能进行模块化开发了。对于国内很多公司还是在用OC来说的话,Cocoapods应该还是一个不错的模块管理的工具。

当然第一篇文章来点简单的,主要是正对使用者来进行讲解的。

安装

当然,刚开始说这说那也没什么卵用,不如直接开始。要使用这个工具,首先当然应该是安装这个工具啦。其实安装这个就一句话的事情:

$ sudo gem install cocoapods

但是在Mac OS X EL Capitan(10.11)中就会出现Operation not permitted - /usr/bin/pod的错误,当我遇到这个错误的时候我整个人是拒绝的,可是遇到问题还是得解决嘛。后来发现了两个解决方案。

方案一

$ mkdir -p $HOME/Software/ruby
$ export GEM_HOME=$HOME/Software/ruby
$ gem install cocoapods
[...]
1 gem installed cocoapods  
$ export PATH=$PATH:$HOME/Sofware/ruby/bin
****

方案一中主要是将GEM的安装路径进行修改,将GEM的默认安装路径修改成了$HOME/Software/ruby这个目录,然后再进行安装,最后将安装路径添加到PATH下,这样可以不用带完整的路径进行运行命令。

方案二

$ gem install cocoapods -n ~/Software/ruby

方案二中使用了gem的自带参数-n—–即指明安装的路径,如果要使用这种的话,也需要将该路径加入PATH下才可以不用带完整的路径进行运行命令。

个人建议是使用第一种,将GEM的安装路径进行修改。这样不需要每次都用-n命令进行指定路径。

就此,关于安装Cocoapods暂时应该就没有什么问题了。如果还有什么问题的童鞋可以留言。

初次使用

关于使用我这里主要分为两个部分,一个部分是关于命令的层次来说的,一部分是关于Podfile的层次来说的。当然对于简单的使用用起来也非常简单。不过刚开始就来一个简单的吧。

就比如我们最常用的AFNetworkingSDwebImage以及iOS-Echarts来说的话,只需在项目名.xcodeproj的目录下创建一个Podfile的文件,然后打开文件,填入一下内容:

platform:ios,'7.1'  
pod 'SDWebImage', '~>3.7'  
pod 'AFNetworking'  
pod 'iOS-Echarts'  

然后保存,并且打开一个命令行,跳转到Podfile的目录直接运行pod install即可。 当然,你会看到你的目录下回多了目录Pods, 文件Podfile.lock以及文件项目名.xcworkspace。当然以后你打开项目就再也不是xcodeproj的文件了,而是wxcworkspcace的文件。然后你打开项目就会看到除了你的项目外,下面多了一个Pods的一个项目。就此,对于你项目需要依赖的AFNetworkingSDwebImage的依赖了。非常简单对吧? 当然如果你只是想简单的使用Cocoapods,估计到这一步就完全够了。

对于一个进步青年或者是对于一个使用复杂的场景来说的话,对于Podfile的深入了解还是有一定帮助的。

深入至Podfile

比如在你使用AFNetworking是在是2.6.3的版本情况下封好API,但是在你Podfile中对于AFNetworking的定义还是为pod 'AFNetworking',突然有一天AFNetworking升级为3.0+了。那时候估计你的心里就是:当时我就懵逼了。因为在3.0中移除了AFHTTPRequestOperationManager等一些类,一旦你重新执行的pod update的话,你的程序估计就再也怎么编译不过了。如果你不熟悉Cocoapods的话,估计你就真的的懵逼了。

在第一次pod install后,会生成Podfile.lock文件,这个文件会把所有第三方库的当前版本给lock住,意思就是只要不修改Podfile,那所有第三方库的版本都会停留在当前版本。不管某个库是否升级,自己或是同伴执行pod install都只会下载被lock住的版本。使用pod update 才会更新到最新版。

不过有了这篇教程的一些讲解,妈妈再也不用担心你的作业了。 这部分主要讲解一下Podfile
的一些参数和使用的讲解,对于一些使用场景会非常有帮助的。

pod

首先先来讲讲最核心的pod关键字吧。关于pod的使用在上面可以看得出来是pod '框架名' 参数。 当然对于前面两个pod '框架名'是固定的,没上面好说,参数的话,这里主要讲参数。 参数一: 版本号 从上面可以看得出SDWebImage就接了版本号。不过版本号可以是大于、小于、等于等。当然具体的可以是'> 3.7', '>= 3.7', '< 3.7', '3.7'以及'~> 3.7'。关于普通的就没什么好说了,最后一个~>指的是正对最后一位来说。如使用'~> 3.7.4',意味着'>= 3.7.4'并且'< 3.8.0'的意思。 参数二:地址Cocoapods可以指定某一个git的目录或者是本地的目录。有的时候我们希望一直用某一个版本最新的版本,即使没有打版本的话,我们可以直接后面接上:git => 'https://github.com/gowalla/AFNetworking.git'

当然除了这种情况外,还有可能是如果是我们自己开发的私有库,并且在开发阶段的情况下,可能就希望开发模式进行引用,则可以使用path参数::path => '~/Documents/AFNetworking'参数三:tag、branche、commit 有的时候我们希望引用有一个tag,branch或者是comit的内容的话可以使用这个参数,分别用 :branch => 'branch名':tag => 'tag名':commit => '提交号'。 参数四:inhibit*all*warnings!对于博主来说,一个项目中很多warnings是非常难以忍受的。不知道小伙伴们会不会有这种感觉,自然这个参数是用来避免那些第三方框架中带来的warnings。博主很喜欢他。

platform这个参数是只依赖的库希望在哪个平台被编译。 一句话带过吧,直接使用platform :ios, '7.0'。说希望采用iOS7.0的进行编译。之前有个同事没有指定只写了platform后面都没有了,然后一直怎么编译都编译不通过。当时我不知道,一直以为他在某个环节出错了。后来才知道,如果在platform后面没有跟东西的话,默认是在iOS4.3,OSX 10.6,tvOS 9.0以及watchOS 2.0的情况下编译的。很多库都是从6.0或者7.0才开始支持的,自然编译不通过。所以小伙伴们记得要注意这点,后面要跟上具体的platform的参数。

target这个是指定具体的配置是适配在哪个target,这里的target值得就是Xcode中的target。如果对于一些项目中你的不同target引用的框架不同的话,可以采用这个进行区分。

target "ShowsApp" do  
  pod 'ShowsKit'
  target "ShowsTV" do
    pod "ShowTVAuth"
  end
end  

use_frameworks!

这个指明编译成动态库,而不是静态库,特别是在使用Swift库的过程中,特别需要使用这句。不过他会把所有项目的编译动态库,这一点有点不好。不过在使用Swift库的过程中就没办法了。

source

这个参数是指Cocoapods从哪些仓库(Spec)中获得框架的源代码,如果在结合使用开源库以及自己私有库的情况下,这个参数还是非常有意义的。博主之前在用到自己私有库的情况下就不懂这点,最后查了好久资料才知道的。只需要在Podfile文件开头列出你需要引用库的所有仓库地址即可。

source 'https://github.com/artsy/Specs.git'  
source 'https://192.168.0.90:8888/MySepcs/Specs.git'  

好了对于Podfile常用几个稍微拿出来说了一下,如果还有更深入不懂的情况下,可以查看Cocoapods Guide。 最后给一个官方的Demo吧.

# open source
source 'https://github.com/CocoaPods/Specs.git'

# my work
source 'https://github.com/Artsy/Specs.git'

target 'App' do

  pod 'Artsy+UIColors'
  pod 'Artsy+UIButtons'

  pod 'FLKAutoLayout'
  pod 'ISO8601DateFormatter', '0.7'
  pod 'AFNetworking', '~> 2.0'

  target 'AppTests' do
    pod 'FBSnapshotTestCase'
    pod 'Quick'
    pod 'Nimble'
  end
end  

命令行pod install 和 pod update

在使用·Cocoapods·的过程中,我们可能要更新或者是安装一个新的第三方框架。自然这里就避免不了要用这两个命令了。对于这两个命令来说,一个是在有新的第三方框架引入是运行,另一个是纯粹为了更新本地的第三框架。 对于二者的命令来说其参数都是大同小异的,这里大概讲解一下。

参数--no-repo-update

这个参数应该是大家最常用的参数之一,其主要的作用是用于在执行pod installpod update两条命令是而执行的pod repo update的操作。而pod repo update则是跟新本地已有的第三框框架。对于大多数情况下,我们只希望跟新当前项目的,并且这个操作执行的时间都是相对比较长,所以在执行这两条命令是,大多数人都添加了这个参数。

参数--verbose 和 --silent

这两个参数是用来控制pod命令的,而有些人不希望看到输出的情况下可以选择--silent。而对于在执行这两条命令的情况下如果出错了,则可能添加--verbose的参数能看到具体的出错信息。--verbose则是用来输出这两条命令执行过程中所包含的所有信息。对于大多数的Cocoapods的命令行来说都带有着两个参数。

其他的细节就不具体说了,大家可以通过help命令来进行查看详情。

结论

简单来说要使用Cocoapods只需通过三个步骤:安装、写Podfilepod install命令即可。

到此关于Cocoapods
作为使用者来说的大体内容就差不多这么多了。关于细节方面大家可以通过Cocoapods官网来进行查阅。在下一篇中,我将对Cocoapods作为一个贡献者或者制作一个私有库进行讲解。而可能在第三篇中会对在Cocoapods在项目进行模块化管理过程中的使用进行讲解,其中应该包含了在一个项目做同时使用私有库以及开源库之间引用以及如何进行管理各个模块进行大致描述。

tips

使用Cocoapods时卡在Setting up CocoaPods master repo
所有项目的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](https://gitcafe.com/akuandev/Specs.git)
$ pod repo update

这是使用gitcafe上的镜像,将以上代码中的 https://gitcafe.com/akuandev/Specs.git 替换成 http://git.oschina.net/akuandev/Specs.git 即可使用oschina上的镜像。

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

推荐阅读更多精彩内容

  • 项目组件化、平台化是技术公司的共同目标,越来越多的技术公司推崇使用pod管理第三方库以及私有组件,一方面使项目架构...
    swu_luo阅读 21,394评论 0 39
  • CocoaPods 是什么? CocoaPods 是一个负责管理 iOS 项目中第三方开源库的工具。CocoaPo...
    朝洋阅读 25,630评论 3 51
  • Ruby 安装 要安装cocospods 首先需要安装ruby,可以先安装xcode,再安装macport ,最后...
    山天大畜阅读 1,840评论 0 1
  • 一. CocoaPods的介绍 什么是CocoaPods?CocoaPods是一个负责管理iOS项目中第三方开源库...
    辉712阅读 3,908评论 0 7
  • 刚开完会,物业打电话说是我家暖气管线破了,楼下遭水淹了!怎么会,上周五才回家看了,一切都好着呀!没办法,家里没人不...
    篱落悠悠阅读 212评论 2 4