一. CocoaPod相关介绍
每种语言发展到一个阶段,就会出现相应的依赖管理工具,例如 Java 语言的 Maven,nodejs 的 npm。随着 iOS 开发者的增多,业界也出现了为 iOS 程序提供依赖管理的工具,它的名字叫做:CocoaPods。CocoaPods项目的源码 在 Github 上管理。该项目开始于 2011 年 8 月 12 日,经过多年发展,现在已经成为 iOS 开发事实上的依赖管理标准工具。开发 iOS 项目不可避免地要使用第三方开源库,CocoaPods 的出现使得节省设置和更新第三方开源库的时间
- 使用CocoaPods
在以前,开发项目需要用到第三方开源库的时候,需要:
- 把开源库的源代码复制到项目中
- 添加一些依赖框架和动态库
- 设置-ObjC,-fno-objc-arc等参数
- 管理他们的更新
在使用CocoaPods后,我们只需要把用到的开源库放到一个名为Podfile的文件中,然后执行pod install就可以了,Cocoapods就会自动将这些第三方开源库的源码下载下来,并且为我们的工程设置好响应的系统依赖和编译参数。
- CocoaPods原理
CocoaPods原理是将所有的依赖库都放到另一个名为 Pods的项目中,然后让主项目依赖Pods项目,这样,源码管理工作都从主项目移到 Pods项目中。Pods项目最终会编译成一个名为 libPods.a的文件,主项目只需要依赖这个.a文件即可
- Ruby相当于一个环境, 系统默认有个版本的Ruby环境,尽量别安装其他的软件在系统的Ruby上,隔离好
- Gem相当于Ruby的包管理工具。类似于node下的npm, 用来安装类似CocoaPods这样的软件
- Rvm是Ruby的版本管理工具, 用来安装, 切换Ruby环境
- CocoaPods是负责管理iOS项目中第三方框架。CocoaPods的项目源码在Github上管理。项目从2011年8月12日开始,CocoaPods的出现使得我们可以节省设置和更新第三方开源库的时间
二.准备安装
1. 更换gem软件源
因为旧的软件源rubygems.org被屏蔽了,所以要更换.
移除旧的软件源:
$ gem sources --remove https://rubygems.org/
添加新的软件源:
$ gem sources -a https://gems.ruby-china.com/
为了验证你的软件源是不是RubyChina,可以用以下命令查看:
$ gem sources -l
只有在终端中出现下面文字才表明你上面的命令是成功的:
*** CURRENT SOURCES ***
https://gems.ruby-china.com/
2. 更新gem本身(指定版本的话, 在后面加版本号如: gem update --system 2.7.6)
sudo gem update --system
接下来输入系统密码就可以安装了,输入密码时不会显示的,输完回车就行了
- 更多Gem和Rvm命令可以参考:
Gem和Rvm命令
三.开始安装CocoaPods
接下来就可以安装CocoaPods了
1. 安装gem下的某个包(例如cocoapod)
如果这个命令报以下错:sudo gem install cocoapods
就更换以下命令:
安装过程如下:sudo gem install -n /usr/local/bin cocoapods
安装完后你可以输入下面的命令查看是否成功,当前CocoaPods版本为1.0.0
pod --version
安装完成后就可以使用pod开头的命令了
2. 设置仓库
就是把所有上传到cocoapods的第三方框架下载每个版本和网络地址以及一些其他描述信息到本地,因为服务器在国外所以比较蛋疼
执行以下命令:
pod setup
出现Setting up CocoaPods master repo (这个提示是正在安装的提示),说明Cocoapods在将它的信息下载到~/.cocoapods里
cd 到该目录里,用du -sh *命令来查看文件大小,每隔几分钟查看一次,这个目录最终大小是100多M,就是完成了
cd ~/.cocoapods
du -sh *
仓库里装的东西如下:
出现 Setup completed 表示安装成功!为了确定CocoaPods是否能正常使用,可以用CocoaPods的搜索功能验证一下。在终端中输入:
$ pod search AFNetworking
如果能搜索到AFNetworking库,就说明大功告成啦!
- 如果报错:Unable to find a pod with name, author, summary, or description matching
AFNetworking
执行如下步骤:
1:pod repo remove master
2:cd ~/.cocoapods/repos
3:git clone --depth 1 https://github.com/CocoaPods/Specs.git master
4:rm ~/Library/Caches/CocoaPods/search_index.json
5:pod search afnetworking
执行完之后就可以正常搜索了。
- 如果你的网速比较好,安装完成了,请直接跳到 --> 四.使用CocoaPods
网速不好,老是报错的看这里!
之前我也尝试过使用CocoaPods的镜像索引使用国内的镜像,但是没有效果,oschina的应该是因为人流量访问大,所以设置了验证码,而gitcafe马上要停止服务了,所以没办法了
一直报错,503、argumenterror , syntax error on line 4, col 0: min:0.29.0
等等,都是你的网络原因导致的
这就要手动下载配置,可以在上面的oschina和gitcafe链接中下载,也可以在github上下载(不过比较慢)
更新一个手动下载到本地的方法!!!
采用国内的免费服务器同步后下载:链接
下载完成后你可以输入
pod setup
然后control+c 中断,目的是让他帮你创建文件夹
当然你也可以手动创建文件夹,但是文件夹是隐藏的所以你需要在Finder页面使用快捷键command + shift + .
随后在Finder点击 前往>前往文件夹 中前往文件,输入下面指令
~/.cocoapods
对比一下可以发现我们下载的文件和安装后的文件只是改了一下文件名,把最外面的文件改为master,然后扔到~/.cocoapods/repos文件夹下就完成设置了
下载进度说明:
下载中如果不放心,可以新建一个终端窗口分别输入下面两条命令查看下载了多少,下载完成的文件大小如下(2016.5.25日下载的文件)
cd ~/.cocoapods
du -sh *
四.使用CocoaPods
1. 创建Podfile文件
方法1:
使用cd命令到你项目所在目录,然后在当前目录下执行pod init命令创建Podfile
$ pod init
你会发现当前目录下面多了一个Podfile文件
使用Xcode打开Podfile文件,进行编辑
方法2:
使用cd命令到你项目所在目录,然后在当前目录下执行vim Podfile命令,就会在终端中编辑Podfile文件
vim Podfile
进入Podfile后输入 i 编辑状态(可以查看左下角有个INSERT),进入输入下面命令
platform :ios, '9.3'
use_frameworks!
target 'Test' do
pod 'SDWebImage', '~>3.7.6'
pod 'Masonry', '~>1.0.0'
end
- platform 是平台
- ios, '9.3' 是指定所支持系统和最低版本
- Test 填写你的target名称,pod 后面的就是你需要的框架,'~>后面就是指定的版本',不指定默认下载最新的
- Podfile里面的命令一定要按照这个格式,否则会报错 isnot usedin any concrete target
写完后按Esc 然后:wq 意思是保存并退出
2. 下载第三方库
接着执行以下命令就会把Podfile文件里的第三方库下载到当前文件夹下,并且创建.xcworkspace
pod install
出现Pod installation Complete! There are 3 dependencies......就表示下载成功
接下来就可以打开Test(target名).xcworkspace文件编写你的程序了
如果当前项目已经存在Podfile文件,就cd到Podfile文件所在的文件夹执行以下命令更新第三方库:
$ pod update
常用命令
重新安装Podfile里的全部库
pod install
更新Podfile里的全部库
pod update
更新Podfile里的指定库
pod update 库名
更新本地仓库
pod repo update
从本地已有仓库重新安装当前项目中的所有库(不更新本地仓库)
pod install --verbose --no-repo-update
从本地已有仓库更新当前项目中的所有库(不更新本地仓库)
pod update --verbose --no-repo-update
- 如果想要知道cocoapods导入的框架的版本,可以使用xcode打开podfile.lock文件
- 其他问题可以参考:
Cocoapods的pod search无法搜索到类库的解决办法
CocoaPods更新第三方库出错的解决办法