一、CocoaPods简介
CocoaPods manages library dependencies for your Xcode projects.
CocoaPods
是Mac OS X 和 iOS 应用程序开发的一个第三方库依赖的管理工具,你可以用它来 帮助集中导入、配置以及更新所用到的第三方。在这之前可以自己定义依赖关系,利用CocoaPods便可自动的配置编译选项。详细可参考以下:
CocoaPods官方指南地址 https://guides.cocoapods.org
CocoaPods项目的地址 https://github.com/CocoaPods/CocoaPods
这里很多未按照官方指南来写,比如是否将CocoaPods加入到代码版本控制中等等此类可做选择的操作。详细可亲阅官方指南。
二、CocoaPods安装
Mac (Mac< V10.11)下自带ruby,打开终端,使用ruby的gem命令即可下载安装CocoPods
$ sudo gem install cocoapods
$ pod setup
$ pod --version // check
注意:
- 如果gem的版本比较旧,可以尝试以下命令升级gem:
$ sudo gem update --system
- ruby的软件源rubygems.org因为使用亚马逊的云服务,所以被屏蔽了。所以更改ruby源,将官方的ruby源替换成国内的淘宝的ruby源。命令如下所示:
$ gem sources –remove https://rubygem.org $ gem sources –a http://ruby.taobao.org $ gem sources-l
然而,执行下载安装命令的时候可能仍会发生错误,因为后来淘宝停止基于HTTP协议的镜像服务,采用了HTTPS 协议。所以如果出现
$ gem sources –remove http://ruby.taobao.org
$ gem sources –a https://ruby.taobao.org
$ gem sources -l
Mac系统升级到10.11后,gem安装CocoaPods命令不好使,报错
$ sudo gem install –n/usr/local/bin cocoapods
另外,CocoaPods升级使用命令
$ sudo gem install cocoapods
或者你想回退CocoaPods版本
$ sudo gem install cocoapods --pre
三、使用CocoaPods集成三方依赖
项目集成CocoaPods
进入需要集成CocoaPods的项目目录,创建一个名为
Podfile
的文件,打开并添加所需三方依赖:# for example platform :ios, '9.0' # 最低iOS版本 target 'MyApp' do pod 'AFNetworking', '~> 3.0' pod 'FBSDKCoreKit', '~> 4.9' end
然后打开终端,切换至该目录,执行
pod install
进行安装,安装完成后,关闭工程,打开.xcworkspace工程运行,以后编辑都在该工程文件下进行。
三方框架的版本指定规则
”>1.0” 任何版本大于1.0的
“>=1.0” 版本号1.0以及任何版本大于1.0的
“<1.0”、”<= 1.0” 同理
“~>0.1.2” 版本号0.1.2的,以及0.1.2 至0.2之间的所有版本,但不包括0.2
“~>0.1” 版本号0.1的,以及0.1至1.0之间的所有版本,但不包括1.0
“~>0” 相当于没有指定
还可以通过多种形式指定需要集成的第三方,例如:
- 集成master分支的代码
pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git'
- 集成某一个分支的代码
pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git', :branch => 'dev'
- 集成某一个tag版本的代码
pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git', :tag => '3.1.1'
- 集成某一次提交的代码
pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git', :commit => '0f506b1c45'
更复杂的Podfile的编写可参考 https://guides.cocoapods.org/syntax/podfile.html#podfile
注意:
Podfile
文件不需要后缀名。建议用Xcode 编辑Podfile
文件。如果用的是rtf文本编辑或者其他编辑器,可能会添加额外的字符,这样执行pod install
会失败。书写不能出错。这些第三方是开发者利用CocoaPods工具将它们制作成CocoaPod。(有点拗口,个人理解:CocoaPods是一个项目,里面包含很多东西,包括使用的那些命令,这个可以看成是工具吧,它可以方便开发者集成三方框架,但是这些三方肯定是它们的开发者,将源码利用CocoaPods工具生成一些东西才能方便在项目中集成,而这些生成的所有东西也就称为CocoaPod。)
这些第三方都被作者上传到了github上,同时在生成CocoaPods的时候,有一个
.podspec
文件被“上传”到了一个Repo(库)里,这个是类似于“集成该第三方的描述文件”,执行安装命令的时候就是根据这个文件进行集成第三方到你的项目中的。(这些都是需要作者制作的)所有的第三方的
.podspec
文件都可以在https://github.com/CocoaPods/Specs这里看到。同时你也可以制作自己的CocoaPods上传供大家使用。稍后会介绍。所以在安装之前可以先使用
pod search
命令先查看需要导入的第三方是否存在
如果你的项目是新建的,那么可以通过以下方法快速集成CocoaPods
第一步像平常那样创建工程即可
打开终端切换到工程目录中
创建一个
Podfile
文件,当然可以使用pod init
初始化并自动生成一个Podfile
文件打开
Podfile
文件像上述方式添加依赖打开
.xcworkspace
工程文件编码
CocoaPods也可以整合到已经存在的
.xcworkspace
文件, 使用命令workspace 'MyWorkspace'
pod install
和pod update
的使用官方文档中有详细区分两种命令的用法
- 当需要添加一些新的第三方或者是移除一些第三方的时候使用
pod install
- 当需要更新一些已经安装的第三方的版本的时候使用
pod update
(详细可参考https://guides.cocoapods.org/using/pod-install-vs-update.html)
CocoaPods的命令尽在https://guides.cocoapods.org/terminal/commands.html#commands
四、使用原理解析 Podfile.lock
集成哪些第三方当然是依靠Podfile
文件中声明来,但除了这个关键文件,Podfile.lock
文件也是至关紧要的。Podfile.lock
文件是在第一次执行pod install
的时候生成的。例如:
pod 'RestKit'
在第一次执行pod install
的时候就会安装对应版本的RestKit
,同时生成Podfile.lock
文件,里面标明了这次安装的版本。合作开发中,当该项目需要在不同的机器上运行,那么执行pod install
的时候还是会根据Podfile.lock
文件标明的版本进行安装,并不会安装最新版本的RestKit
。除非更改了Podfile
文件的版本号而且同时执行了pod update
,这时会生成新的Podfile.lock
,可想而知,这时标明的是当前安装的版本。这就避免了开发双方导入的库版本不一样的情况。
更多参考:
【深入理解CocoaPods】https://objccn.io/issue-6-4/