cocoapods 一次升级操作

背景

pods repo仓库是同事下载到本地的,有次开发需要升级阿里云视频sdk,但是网络不太好,pod repo update 总失败,专门升级个别库也有问题,去pods repo 库 执行git pull 也无用,所以,重新下载pods repo仓库到本地

手动下载pods repo 库的方法

  • 1.访问

https://github.com/CocoaPods/Specs,然后将Specs项目fork到自己的github账户上

  • 2.下载GitHub Desktop, 然后clone Specs项目。

  • 3.将clone的Specs项目的文件夹改名为master,然后拖到/Users/用户名/.cocoapods/repos目录下。

  • 4.运行pod setup

解释:pod setup的本质就是将https://github.com/CocoaPods/Specs上的Specs项目clone到/Users/用户名/.cocoapods/repos目录下。若此目录下已有Specs项目,则会将项目更新到最新的状态。由于Specs很大,容易导致pod setup失败。这时就需要我们手动安装Specs。若直接从github上下载zip文件,由于缺少git文件,会导致cocoa pods不使用。若用git clone,由于文件过大,容易导致失败。但是使用GitHub Desktop软件,则会提高clone的成功率,并且会给出clone的进度。

关于podfile 和 podfile.lock 中 库的版本问题

一直使用新的版本

//不用指定版本
pod 'SSZipArchive'

指定版本

pod 'SSZipArchive'

其他版本的原理

'> 0.1' 高于0.1的任何版本
'>= 0.1' 版本0.1或更高版本
'< 0.1' 低于0.1的任何版本
'<= 0.1' 版本0.1或更低的版本
除了逻辑运算符,还有一种运算符:

'~> 0.1.2' 版本0.1.2和0.2版本之间的任意版本,不包括0.2和比0.2更高的版本
'~> 0.1' 版本0.1和版本1.0之间的任意版本,不包括1.0和比1.0更高的版本
'~> 0' 版本0或比版本0更高的版本,这基本上和不指定版本号的效果是一样的。
  • 举例
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的版本  
pod 'AFNetworking', '~>0.1'     //使用大于等于0.1但小于1.0的版本  
pod 'AFNetworking', '~>0'     //高于0的版本,写这个限制和什么都不写是一个效果,都表示使用最新版本 

使用本地文件夹内的一个库

前提是本地的库是可供pods管理的,也就是该库中要有xxx.podspec

然后执行pod install后 本地的库会管理在pods - Development pods 下

关于pods中相关文件

Podfile

CocoaPods是用ruby实现的,因此Podfile文件的语法就是ruby的语法。
podfile是一个说明文件,用以描述管理一个或者多个Xcode project的target的依赖库。这个文件应该且必须被命名为Podfile

podspec文件

后缀名为podspec(cocoapods specification)的文件是cocoapods的说明文件,该文件为Pods依赖库的描述文件,每个Pods依赖库必须有且仅有那么一个描述文件。该文件包括依赖库的名字、版本、描述、license、author、source、platform等信息。

Podfile.lock

这是 CocoaPods 创建的最重要的文件之一。它记录了需要被安装的 pod 的每个已安装的版本。如果你想知道已安装的 pod 是哪个版本,可以查看这个文件。推荐将 Podfile.lock 文件加入到版本控制中,这有助于整个团队的一致性。Objc中国
Podfile.lock文件最大得用处在于多人开发。当团队中的某个人执行完pod install命令后,生成的Podfile.lock文件就记录下了当时最新Pods依赖库的版本,这时团队中的其它人check下来这份包含Podfile.lock文件的工程以后,再去执行pod install命令时,获取下来的Pods依赖库的版本就和最开始用户获取到的版本一致。如果没有Podfile.lock文件,后续所有用户执行pod install命令都会获取最新版本的依赖库,这就有可能造成同一个团队使用的依赖库版本不一致,这对团队协作来说绝对是个灾难!在这种情况下,如果团队想使用当前最新版本的依赖库,有两种方案:

1.更改Podfile,使其指向最新版本的依赖库;
2.执行pod update命令;
当执行pod install 命令时,首先会根据Podfile文件指定的内容,安装依赖库,如果有Podfile.lock文件而且对应的Podfile文件未被修改,则会根据Podfile.lock文件指定的版本安装。
每次更新了Podfile文件时,都需要重新执行pod install命令,以便重新安装Pods依赖库。
当执行pod update命令时,如果Podfile中指定的依赖库版本不是写死的,当对应的依赖库有了更新,无论有没有Podfile.lock文件,都会去获取Podfile文件描述的允许获取到的最新依赖库版本。

关于pods一些命令原理

pod repo update

先说一下pod官方库

终端 cd ~/.cocoapods/repos/

进入该文件夹下可以发现一个master/文件夹,继续进Specs/,会发现很多很多以数字命名的文件夹,这里其实就是官方管理所有pod库的一个资源库,如果一直cd,进到最底层,会发现其实到最后是每一个库的.podspec.json,这里涉及到.podspec是一个什么东西,以及关于pod库的制作,可以自行查阅资料。

我们平时开发pod update或者pod install , 这里其实 pod的工作就是根据pod库名在master/Specs/中找到对应的库,若指定版本则找到指定版本的podspec,否则找最高版本的podspec,找到后根据podsepc文件中的配置下载指定的库资源。

那么pod repo update 的工作就是更新pod资源目录,也就是master下的资源,简单说 如果有一个第三方库发布了一个最新的版本,如果你不执行pod repo update,那么你的本地是不会知道有一个最新版本的,还会一直以你本地的资源目录为准。那么你永远都拿不到这个库的最新版本。

可能有些人会问了,我平时从来不会用pod repo update也可以拿到最新的库,那是因为在使用pod update是默认会执行一遍pod repo update ,所以会发现如果你的pod库引用多了,每次pod update都很慢,网络如果不好更是经常会断掉,就是因为你在更新pod时,也更新了资源目录

pod update 工作流程 :
先拉取远程最新目录,再根据目录中的资源重新更新一遍pod

如果你的podfile中每个库都指定了版本还好,如果没有,那么每次都是拉一遍最新库, 这时候就要用到命令

pod update --no-repo-update
这条命令表示只根据本地目录更新库,不需要拉取远程

再说一下有些时候会引用一些私有库 , pod repo update 会把 ~/.cocoapods/repos/这个目录下所有的资源库目录都更新一遍,有时候不想更新master,只想更新某个具体的私有库怎么办。。命令。。。强大而又实用

pod repo update ~/.cocoapods/repos/***/
需要更新哪个就指定哪个文件夹就可以了

关于pods中的一些问题

cocoaPods was not able to update the master repo

先删除全局的缓存:
sudo rm -fr ~/Library/Caches/CocoaPods/
sudo rm -fr ~/.cocoapods/repos/master/

终极大招
sudo rm -fr Pods/

再执行
sudo gem install cocoapods
pod setup

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

推荐阅读更多精彩内容