使用CocoaPods来管理iOS程序的依赖和搭建服务

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/
3 sudo gem sources -l

 

命令执行完后显示如下:

peachtekiMacBook-Air:taobao2013 peach$ sudo gem sources -l
Password:
*** CURRENT SOURCES ***
 
http://ruby.taobao.org/
 
那说明就ok啦,接下来开始真正安装。
 
1 sudo gem update  
2  
3 sudo gem install cocoapods
1  
1 pod setup

 

安装完后,cocoaPods会有一个master仓库,存放了大多数iOS依赖库的spec文件,地址是

 

1 ~/.cocoapods/repos/master

 

其实cocoaPods就是根据spec的配置去得到所依赖的文件,然后自动配置xcode项目

 

比如我现在有一个工程叫testview,我需要开发一些http请求的功能,需要依赖ASIHTTPRequest库,那该怎么做呢。

 

进入项目目录/Users/peach/work/code/testview,然后vi 编辑Podfile文件,内容如下:

1 platform :ios, '5.0'
2  
3 pod 'jastor'
4 pod 'JSONKit'
5 pod 'ASIHTTPRequest'  #其实只需要这个库就够了
6 pod 'ETFramework'

 

这是一个最简单的pod配置文件了,如果你想要使自己的项目使用cocoaPods来管理依赖,就必须在项目下面建立一个Podfile文件,然后执行

 

1 pod install

 

运行完毕后,项目中会多出一个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

 

可以看到:

 

01 Pod::Spec.new do |s|
02   s.name     = 'ASIHTTPRequest'
03   s.version  = '1.8.1'
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'
06   s.author   = { 'Ben Copsey' => 'ben@allseeing-i.com' }
07   s.license  = 'New BSD License'
08   s.source   = { :git => 'https://github.com/pokeb/asi-http-request.git', :tag => 'v1.8.1' }
09  
10   s.description = %{
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
14     applications.
15  
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.
20   }
21  
22   s.subspec 'Core' do |core|
23     core.source_files = 'Classes/*.{h,m}'
24     core.ios.dependency 'Reachability' #, '~> 2.0', '>= 2.0.4'
25     core.ios.frameworks   = 'MobileCoreServices''CFNetwork''CoreGraphics'
26  
27     core.osx.exclude_files = '**/*ASIAuthenticationDialog*'
28     core.osx.frameworks   = 'SystemConfiguration''CoreServices'
29  
30     core.libraries = 'z.1'
31   end
32  
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'
38   end
39  
40   s.subspec 'CloudFiles' do |cfs|
41     cfs.source_files = 'Classes/CloudFiles/*.{h,m}','Classes/S3/ASINSXMLParserCompat.h'
42     cfs.dependency 'ASIHTTPRequest/Core'
43   end
44  
45   s.subspec 'S3' do |s3s|
46     s3s.source_files = 'Classes/S3/*.{h,m}'
47     s3s.dependency 'ASIHTTPRequest/Core'
48   end
49 end

 

这就是ASIHTTPRequest的spec配置文件,有一行配置:

1 s.source   = { :git => 'https://github.com/pokeb/asi-http-request.git', :tag => 'v1.8.1' }

表示cocoaPods会去这个git地址下载依赖文件。如果想要看看是否有其他库,可以执行

 

1 pod search jsonkit

来搜索,比如jsonkit为库名

 

更多的Podfile和spec文件配置可见官网:

http://cocoapods.org/

 

以上是最简单的使用cocoaPods的方式,那么如果我开发了一个公共库,如何通过cocoaPods提供给别人呢。

首先你得把你的代码放到一个地方,比如https://github.com/minipeach/ETFramework

然后你需要写一个spec配置文件,来告诉cocoaPods代码地址和如何设置依赖:

 

 

01 Pod::Spec.new do |s|
02   s.name         = "ETFramework"
03   s.version      = "0.0.1"
04   s.summary      = "ETFramework ETFramework"
05   s.homepage     = "https://github.com/minipeach/ETFramework"
06   s.license      = { :type => 'MIT', :file => 'LICENSE' }
07   s.author       = { "peach" => "minipeach@qq.com" }
08   s.source       = { :git => "https://github.com/minipeach/ETFramework.git"}
09   s.source_files = 'ETFramework/ETFramework/*.{h,m}'
10 end

 

以上也是一个比较简单的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库了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值