cocoapods相关整理:
一. 安装Ruby + CocoaPods
使用Homeview安装ruby
1.brew install ruby(安装最新版的ruby)
2.ruby --version(ruby版本)
3.curl -SSL https://get.rvm.io | bash -s stable(RVM 是一个便捷的多版本 Ruby 环境的管理和切换工具.安装它,官网:https://rvm.io/)
4.rvm get stable(rvm更新)
5.rvm --version(rvm版本)
6.sudo gem update --system(gem更新)
7.gem sources --remove https://rubygems.org/(移除之前的源)
8.gem sources --add https://gems.ruby-china.com/(设置新的源)
9.gem sources -l(查看当前源)
10.gem --version(gem版本)
安装cocoapods
1.sudo gem install -n /usr/local/bin cocoapods(安装cocoapods)
2.pod setup(安装本地库)
3.pod repo update(更新本地库)
4.pod --version(pod版本)
卸载cocoapods
sudo gem uninstall -n /user/local/bin cocoapods
二. pod命令
1.pod init:初始化
2.pod install:安装库
3.pod update:更新库
4.pod search XXX:查找所需三方库
5.gem install cocoapods --pre:更新Cocoapods
6.pod env:查看已经安装的cocoapods版本
7.pod outdated:查看Podfile文件中的依赖库的最新版本
三. pod install 和 pod update的区别
- pod install:会去检查podfile.lock是否已经包含该库,如果包含则继续判断是否指定版本,如果指定版本就去检查podfile.lock中保存的版本是否与新指定的相同,相同则跳过,不相同则更新,如果没有指定版本则不检查更新直接跳过,如果不包含该库则去下载该库并将版本保存在podfile.lock文件中。每次当pod install 命令运行,并下载安装新的pods的时候,他会在Podfile.lock中为每个pod写入它安装的版本。此文件跟踪每一个已安装的版本,并且锁定这些版本。当运行pod install 的时候它仅仅解析那些Podfile.lock中位列出的依赖关系。对于Podfile.lock中列出的pods,它仅仅会下载指明的版本,不会去检查是否有新版本可用。对于Podfile.lock中未列出的pods,他会搜索与Podfile中内容相匹配的版本 (例如 pod 'MyPod', '~>1.2')。
- pod update:这个命令会忽略Podfile.lock中的记录,直接去找符合Podfile文件中的该依赖库的约束版本(无约束的话就是最新版本)。一般在你想要更新pods到一个新的版本的时候使用。当运行pod update PODNAME时,CocoaPods将尝试查找PODNAME的更新版本,而不考虑Podfile.lock中列出的版本。 它会将pod更新为可能的最新版本(只要它与Podfile中的版本限制相匹配)。如果运行pod更新没有pod名称,CocoaPods将更新您Podfile中列出的每个pod到最新的版本。
四. pod install 和 pod update的使用场景
- pod install使用场景:
a.新创建工程,第一次引入pod库时
b.修改了Podfile文件,添加或删除了所依赖的pod库时。
c.团队中新人拉取工程后获取pod库时。
d.团队中,不同开发者要同步对pod库的依赖时(有人改变了依赖关系,删除或增加pod时。还有就是有人执行了pod update,此时他的Podfile.lock文件中的跟踪版本就已经变更,此时,其他人只要pod install就能更新为和Podfile.lock文件中的版本。还有就是如果Podfile和Podfile.lock的记录相冲突,Podfile文件中指定了低于Podfile.lock中记录的版本。会以Podfile文件为准,并在获取成功后更新Podfile.lock文件。) - pod update使用场景:更新pods版本的时候使用。
五. podfile指定版本号
'> 0.1' Any version higher than 0.1 0.1以上
'>= 0.1' Version 0.1 and any higher version 0.1以上,包括0.1
'< 0.1' Any version lower than 0.1 0.1以下
'<= 0.1' Version 0.1 and any lower version 0.1以下,包括0.1
In addition to the logic operators CocoaPods has an optimisicoperator ~>:
'~> 0.1.2' Version 0.1.2 and the versions up to 0.2, not including 0.2 and higher 0.2以下(不含0.2),0.1.2以上(含0.1.2)
'~> 0.1' Version 0.1 and the versions up to 1.0, not including 1.0 and higher 1.0以下(不含1.0),0.1以上(含0.1)
'~> 0' Version 0 and higher, this is basically the same as not having it. 0和以上,等于没有此约束
六. Podfile.lock文件
- Podfile.lock文件存储了已经安装的依赖库的版本。
- 当我们第一次运行Podfile时,如果对依赖库不指定版本的话,cocoapods会安装最新的版本,同时将pods的版本记录在Podfile.lock文件中。这个文件会保持对每个pod已安装版本的跟踪,并且锁定这些版本。再执行pod install的话,只会处理没有记录在Podfile.lock中的依赖库,会查找匹配Podfile中描述的版本。对于已经记录在Podfile.lock的依赖库,会下载Podfile.lock文件中记录的版本,而不会检查是否有更新。当然,如果你约束了pods的版本的话,会按照你指定的版本进行安装,同时也会更新Podfile.lock记录的信息。
- Podfile.lock内部
PODS:
- Masonry (1.1.0)
DEPENDENCIES:
- Masonry (~> 1.1.0)
SPEC REPOS:
trunk:
- Masonry
SPEC CHECKSUMS:
Masonry: 678fab65091a9290e40e2832a55e7ab731aad201
PODFILE CHECKSUM: 7a5a6c829f4d2252e3e3d116ab9757a3b270ed8a
COCOAPODS: 1.9.3
七. Cocoapods原理
是将所有的依赖库都放到另一个名为Pods的项目中, 然而让主项目依赖Pods项目,这样,源码管理工作任务从主项目移到了Pods项目中,Pods项目最终会编译成一个名为libPods.a的文件, 主项目只要依赖这个.a文件即可,对于资源文件, CocoaPods提供了一个名为Pods-resources.sh的bash脚步, 该脚本在每次项目, 编译的时候都会执行,将第三方库的各种资源文件复制到目标目录中,CocoaPods通过一个名为Pods.xcconfig的文件在编译设置所有的依赖和参数。
八. Cocoapods下载原理
s.source = { :git => '[git@gitlab.xxx.net](https://links.jianshu.com/go?to=mailto%3Agit%40gitlab.xxx.net):ios-thirdpartservice/xxxreact.git', :tag => '1.0.0' }
当使用Cocoapods导入私有库时,Cocoapods先是根据以上链接找到对应的git仓库,然后根据:tag => ‘1.0.0’定位到对应tag的提交版本,如果没有注明Pod依赖库版本则定位到最后一次的提交,然后在这次提交中检索后缀为.podspec的文件(文件可以随便命名)。然后根据Podspec中的s.source_files找到需要导入的代码文件,并通过其他的的数据找到对应的配置文件或资源文件等。最后,将其下载到本地项目中。
九. 指定repo镜像
pod repo remove master
pod repo add master https://gitee.com/mirrors/CocoaPods-Specs (gitee镜像)
pod repo update
或者:
pod repo remove master
pod repo add master https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git
pod repo update
在podfile文件中加上相应的source:
source 'https://gitee.com/mirrors/CocoaPods-Specs.git'
或者:
source 'https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git'
网友评论