CocoaPods是什么?
当你开发iOS应用时,会经常使用到很多第三方开源类库,比如JSONKit,AFNetWorking等等。可能某个类库又用到其他类库,所以要使用它,必须得另外下载其他类库,而其他类库又用到其他类库,“子子孙孙无穷尽也”,这也许是比较特殊的情况。总之就是,手动一个个去下载所需类库十分麻烦。另外一种常见情况是,你项目中用到的类库有更新,你必须得重新下载新版本,重新加入到项目中,十分麻烦。如果能有什么工具能解决这些恼人的问题,那将“善莫大焉”。所以,你需要 CocoaPods。
CocoaPods应该是iOS最常用最有名的类库管理工具了,上述两个烦人的问题,通过cocoaPods,只需要一行命令就可以完全解决,当然前提是你必须正确设置它。重要的是,绝大部分有名的开源类库,都支持CocoaPods。所以,作为iOS程序员,掌握CocoaPods的使用是必不可少的基本技能了。
如何下载和安装CocoaPods?
在安装CocoaPods之前,首先要在本地安装好Ruby环境,当然mac电脑一般自带mac,可忽略此步骤。如果没有请自行google。
然后下一步开始安装CocoaPods,由于安装需要用到ruby源,但是系统默认的是官方源,在天朝你懂的,为了更迅速的安装,我们增加淘宝源,然后删除官方源=.=
1 |
sudo gem sources -a http://ruby.taobao.org/ |
2 |
sudo gem sources --remove https://rubygems.org/ |
命令执行完后显示如下:
peachtekiMacBook-Air:taobao2013 peach$ sudo gem sources -l
Password:
*** CURRENT SOURCES ***
http://ruby.taobao.org/
那说明就ok啦,接下来开始真正安装。
3 |
sudo gem install cocoapods |
安装完后,cocoaPods会有一个master仓库,存放了大多数iOS依赖库的spec文件,地址是
1 |
~/.cocoapods/repos/master |
其实cocoaPods就是根据spec的配置去得到所依赖的文件,然后自动配置xcode项目
比如我现在有一个工程叫testview,我需要开发一些http请求的功能,需要依赖ASIHTTPRequest库,那该怎么做呢。
进入项目目录/Users/peach/work/code/testview,然后vi 编辑Podfile文件,内容如下:
这是一个最简单的pod配置文件了,如果你想要使自己的项目使用cocoaPods来管理依赖,就必须在项目下面建立一个Podfile文件,然后执行
运行完毕后,项目中会多出一个testview.xcworkspace文件,用xcode打开,会发现多了一个pod子工程,包含了你要的依赖文件和一些其他的配置文件,其实这就是cocoapods帮你干的事情。你不需要手动从网上去下载然后复制依赖文件,这一切现在都自动化了。
也许你会好奇,install只会究竟干了什么事,ASIHTTPRequest这个库是从哪里下载的。
其实cocoaPods支持从svn,git多种代码仓库里拉取代码,我们可以看以下文件
1 |
cd /Users/peach/.cocoapods/repos/master/ASIHTTPRequest/1.8.1 |
1 |
cat ASIHTTPRequest.podspec |
可以看到:
02 |
s.name = 'ASIHTTPRequest' |
04 |
s.summary = 'Easy to use CFNetwork wrapper for HTTP requests, Objective-C, Mac OS X and iPhone.' |
05 |
s.homepage = 'http://allseeing-i.com/ASIHTTPRequest' |
07 |
s.license = 'New BSD License' |
08 |
s. source = { :git => 'https://github.com/pokeb/asi-http-request.git' , :tag => 'v1.8.1' } |
11 |
ASIHTTPRequest is an easy to use wrapper around the CFNetwork API that |
12 |
makes some of the more tedious aspects of communicating with web servers |
13 |
easier. It is written in Objective-C and works in both Mac OS X and iPhone |
16 |
It is suitable performing basic HTTP requests and interacting with |
17 |
REST-based services (GET / POST / PUT / DELETE). The included |
18 |
ASIFormDataRequest subclass makes it easy to submit POST data and files |
19 |
using multipart/form-data. |
22 |
s.subspec 'Core' do |core| |
23 |
core.source_files = 'Classes/*.{h,m}' |
24 |
core.ios.dependency 'Reachability' |
25 |
core.ios.frameworks = 'MobileCoreServices' , 'CFNetwork' , 'CoreGraphics' |
27 |
core.osx.exclude_files = '**/*ASIAuthenticationDialog*' |
28 |
core.osx.frameworks = 'SystemConfiguration' , 'CoreServices' |
30 |
core.libraries = 'z.1' |
33 |
s.subspec 'ASIWebPageRequest' do |ws| |
34 |
ws.source_files = 'Classes/ASIWebPageRequest/*.{h,m}' |
35 |
ws.libraries = 'xml2.2' |
36 |
ws.xcconfig = { 'HEADER_SEARCH_PATHS' => '"$(SDKROOT)/usr/include/libxml2"' } |
37 |
ws.dependency 'ASIHTTPRequest/Core' |
40 |
s.subspec 'CloudFiles' do |cfs| |
41 |
cfs.source_files = 'Classes/CloudFiles/*.{h,m}' , 'Classes/S3/ASINSXMLParserCompat.h' |
42 |
cfs.dependency 'ASIHTTPRequest/Core' |
45 |
s.subspec 'S3' do |s3s| |
46 |
s3s.source_files = 'Classes/S3/*.{h,m}' |
47 |
s3s.dependency 'ASIHTTPRequest/Core' |
这就是ASIHTTPRequest的spec配置文件,有一行配置:
1 |
s. source = { :git => 'https://github.com/pokeb/asi-http-request.git' , :tag => 'v1.8.1' } |
表示cocoaPods
会去这个git地址下载依赖文件。如果想要看看是否有其他库,可以执行
来搜索,比如jsonkit为库名
更多的Podfile和spec文件配置可见官网:
http://cocoapods.org/
以上是最简单的使用cocoaPods的方式,那么如果我开发了一个公共库,如何通过cocoaPods提供给别人呢。
首先你得把你的代码放到一个地方,比如https://github.com/minipeach/ETFramework
然后你需要写一个spec配置文件,来告诉cocoaPods代码地址和如何设置依赖:
02 |
s.name = "ETFramework" |
04 |
s.summary = "ETFramework ETFramework" |
05 |
s.homepage = "https://github.com/minipeach/ETFramework" |
06 |
s.license = { : type => 'MIT' , : file => 'LICENSE' } |
08 |
s. source = { :git => "https://github.com/minipeach/ETFramework.git" } |
09 |
s.source_files = 'ETFramework/ETFramework/*.{h,m}' |
以上也是一个比较简单的spec文件配置,那么用户如何下载安装并使用呢,一种是
在本地仓库目录新建,比如我这里是
1 |
/Users/peach/.cocoapods/repos/ test /ETFramework/0.0.1/ETFramework.podspec |
test只是我自己单独建的仓库名,其实也可以放到自带的master下(master下有个和ETFramework同名的库,先删掉哈),然后pod install的时候就会自动寻找到这里的配置进行安装。
当然,你不可能要求使用者都自己去新建这些spec文件,那有没有地方存放或者能够自动获取呢,答案是肯定的。
cocoapods官方默认支持的所有podspec都放在github上,地址为 https://github.com/CocoaPods/Specs,你也可以加入自定义的podspec库,以引入官方库中没有的podspec,添加自定义podspec库的方式为
$ pod repo add <repo name> <git repo url>
执行上条命令之后,pod便会将自定义的库clone到 ~/.cocoapods/<repo name>
你就可以很方便的管理你的spec库了