CocoaPods的介绍、安装、使用和原理

目录

CocoaPods简介

1、CocoaPods 的安装

一、更换 Gem 的源
二、更新升级 Gem 版本
三、安装CocoaPods
四、更换repo镜像为国内服务器node

2、CocoaPods 的使用(图和文字有细微的出入)

一、新建 Podfile 文件
二、编辑 Podfile 文件
三、执行导入命令
四、第三方库更新git

3、遭遇到的问题

4、原理和说明

5、更多

一、pod install提速
二、关于Podfile文件编辑时,第三方库版本号的各类写法github


CocoaPods简介

每种语言发展到一个阶段,就会出现相应的依赖管理工具,例如Java语言的Maven,nodejs的npm。随着iOS开发者的增多,业界也出现了为iOS程序提供依赖管理的工具,它的名字叫作:CocoaPods。
CocoaPods项目的源码在Github上管理。该项目开始于2011年8月12日,通过多年发展,如今已经成为iOS开发事实上的依赖管理标准工具。开发iOS项目不可避免地要使用第三方开源库,CocoaPods的出现使得咱们能够节省设置和更新第三方开源库的时间。npm

在我开发猿题库客户端时,其使用了24个第三方开源库。在没有使用CocoaPods之前,我须要:安全

把这些第三方开源库的源代码文件复制到项目中,或者设置成git的submodule。
对于这些开源库一般须要依赖系统的一些framework,我须要手工地将这些framework一一增长到项目依赖中,好比一般状况下,一个网络库就须要增长如下framework: CFNetwork, SystemConfiguration, MobileCoreServices, CoreGraphics, zlib。
对于某些开源库,我还须要设置-licucore或者 -fno-objc-arc等编译参数管理这些依赖包的更新。
这些体力活虽然简单,但毫无技术含量而且浪费时间。在使用CocoaPods以后,我只须要将用到的第三方开源库放到一个名为Podfile的文件中,而后执行pod install。CocoaPods就会自动将这些第三方开源库的源码下载下来,而且为个人工程设置好相应的系统依赖和编译参数。ruby

1、CocoaPods 的安装

CocoaPods是用Ruby实现的,要想使用它首先须要有Ruby的环境。幸运的是OS X系统默认的已经能够运行Ruby了,所以咱们只须要执行如下命令。bash

一、更换 Gem 的源

Gem是一个管理Ruby库和程序的标准包,它经过Ruby Gem(如 http://rubygems.org/ )源来查找、安装、升级和卸载软件包服务器

// 1.移除掉原有的源(服务器在国外,速度较慢)
- gem sources --remove https://rubygems.org/
// 2.等有反应以后再敲入如下命令(添加国内的源,原先是 http://ruby.taobao.org/ ,如今淘宝上的ruby镜像换成https了)
- gem sources -a https://ruby.taobao.org/
// 3.验证是否替换成功
- gem sources -l

二、更新升级 Gem 版本

Gem是管理Ruby库和程序的标准包,若是它的版本太低也可能致使安装失败,解决方案天然是升级Gem,执行下述命令便可:网络

// 更新升级gem
- sudo gem update --system

 

三、安装CocoaPods
// 安装CocoaPods(OS X 10.11之前)
- sudo gem install cocoapods
// 安装CocoaPods(10.11后苹果升级了安全策略)
- sudo gem install -n /usr/local/bin cocoapods

 

四、更换repo镜像为国内服务器

全部的项目的Podspec文件都托管在https://github.com/CocoaPods/Specs。第一次执行pod setup时,CocoaPods会将这些podspec索引文件更新到本地的 ~/.cocoapods/目录下,这个索引文件比较大,有80M左右。因此第一次更新时很是慢,笔者(唐巧)就更新了将近1个小时才完成。
一个叫akinliu的朋友在gitcafe和oschina上创建了CocoaPods索引库的镜像,由于gitcafe和oschina都是国内的服务器,因此在执行索引更新操做时,会快不少。以下操做能够将CocoaPods设置成使用gitcafe镜像:工具

// 1.移除原有服务器
- pod repo remove master
// 2.添加境内服务器(建议使用第一个)
- pod repo add master https://gitcafe.com/akuandev/Specs.git
- pod repo add master http://git.oschina.net/akuandev/Specs.git(开源中国较慢)

 

 

 

2、CocoaPods 的使用(图和文字有细微的出入)

一、新建 Podfile 文件

使用时须要在你的项目根目录下新建一个名为Podfile的文件,将依赖的库名字依次列在文件中便可

//进入你的工程目录
$ cd /Users/peikua/Desktop/CocoaPodsDemo  
//建立Pods文件
$ touch Podfile

 

二、编辑 Podfile 文件

假设咱们想导入 AFNetworking ,进入http://cocoapods.org,搜索AFNetworking

 

 

 

 

三、执行导入命令

$ cd /Users/peikua/Desktop/CocoaPodsDemo 

$ pod install

 

 

 

 

pod install命令执行成功后,会看到工程目录下多出CocoaPodsTest.xcworkspace、Podfile.lock文件和Pods目录。再看看刚才执行完pod install命令打印出来的内容的最后一行:From now on use CocoaPodsDemo.xcworkspace.提示咱们从如今起,咱们须要使用CocoaPodsTest.xcworkspace文件来开发。

四、第三方库更新

只须要在Podfile文件中添加相应的第三方库信息,执行pod update命令便可。

 

 

 

3、遭遇到的问题

 

//之后使用CocoaPods过程当中出现了莫名其妙的问题,执行下面命令 
- sudo gem update --system
- sudo gem install cocoapods
- pod setup

 

,执行下面命令  
- sudo gem update --system
- sudo gem install cocoapods
- pod setup

4、原理和说明

一、第三方库会被编译成.a静态库供咱们真正的工程使用。

CocoaPods会将全部的第三方库以target的方式组成一个名为Pods的工程,该工程就放在刚才新生成的Pods目录下。整个第三方库工程会生成一个名称为libPods.a的静态库提供给咱们本身的CocoaPodsTest工程使用。
对于资源文件,CocoaPods提供了一个名为Pods-resources.sh的bash脚本,该脚本在每次项目编译的时候都会执行,将第三方库的各类资源文件复制到目标目录中。

二、咱们的工程和第三方库所在的工程会由一个新生成的workspace管理

为了方便咱们直观的管理工程和第三方库,CocoaPodsTest工程和Pods工程会被以workspace的形式组织和管理,也就是咱们刚才看到的CocoaPodsTest.xcworkspace文件。

三、原来的工程设置已经被更改了,这时候咱们直接打开原来的工程文件去编译就会报错,只能使用新生成的workspace来进行项目管理。
四、CocoaPods经过一个名为Pods.xcconfig的文件来在编译时设置全部的依赖和参数。

5、更多

一、pod install提速

每次执行pod installpod update的时候,cocoapods都会默认更新一次spec仓库。这是一个比较耗时的操做。在确认spec版本库不须要更新时,给这两个命令加一个参数跳过spec版本库更新,能够明显提升这两个命令的执行速度。

pod install --verbose --no-repo-update
pod update --verbose --no-repo-update
二、关于Podfile文件编辑时,第三方库版本号的各类写法
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的版本,至关于>=0.1.2而且<0.2.0
pod ‘AFNetworking’, ‘~>0.1′ //使用大于等于0.1但小于1.0的版本
pod ‘AFNetworking’, ‘~>0′ //高于0的版本,写这个限制和什么都不写是一个效果,都表示使用最新版本
相关文章
相关标签/搜索