[iOS开发]cocoapods安装及使用

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

多版本卸载

二. 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'
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,001评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,210评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,874评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,001评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,022评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,005评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,929评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,742评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,193评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,427评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,583评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,305评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,911评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,564评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,731评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,581评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,478评论 2 352