前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS - 如何解决 CocoaPods 安装慢的问题

iOS - 如何解决 CocoaPods 安装慢的问题

作者头像
JSCON简时空
发布2020-03-31 15:32:14
5.7K0
发布2020-03-31 15:32:14
举报
文章被收录于专栏:JSCON简时空

写在前面的

  • 目标人群:iOS开发初学者
  • 编程语言:Swift
  • 学习难度:初级
  • 类型:避免踩坑

如果你不是目标受众,请关闭本文节约时间

1、序言

为了学习 realm 的知识,我需要安装 realm 依赖包,不过在学习这方面只是之前,需要使用CocoaPods安装依赖;但是有使用过这个工具的朋友一定会被这个工具折腾过;最折腾的在于 pod update 时间过长,这篇文章就是解决这个问题的过程和最终方案;

2、原因分析

使用 CocoaPods 的同学第一步肯定是会遇到这个问题的,这是因为所有的项目的 podspec 文件都托管在 https://github.com/CocoaPods/Specs 上,在执行 pod setup时,CocoaPods 会将这些podspec索引文件 更新 到本地 ~/.cocoapods/ 目录下。

我们看一下 pod setup 期间具体干了什么事情:

代码语言:javascript
复制
> pod setup --verbose                                                          Setting up CocoaPods master repo
 $ /usr/local/bin/git remote set-url origin https://github.com/CocoaPods/Specs.git
 $ /usr/local/bin/git checkout masterUpdating spec repo `master`
 $ /usr/local/bin/git pull --ff-only

截图如下:

从上面可以看出 Specs 是一个 Github 仓库,所谓的更新,其实就是 git clone 官方仓库到本地的 ~/.cocoapods/repos/master 目录下,然后再执行 git pull --ff-only来 merge 最新的更新;

我们平时执行 pod repo add xxx https://github.com/xxxx/Specs.git 就会在这个目录下新增一个名字为 xxx 的 github 仓库了

理解了上面,就不难得知,用户之所以慢的原因就是 clone 这个仓库很慢导致的:这个官方仓库大约是 509.7M左右(后续肯定还会增加),问题是文件超级多,数量达到 83万 个左右;(本地下完之后,使用系统自带查看其大小的时候都得花半分钟时间)

文件数量多,在国内访问Github的速度又很慢,雪上加霜,这才导致 pod setup 压根儿没法进行啊;

3、解决方案

问题是找到了,怎么办呢?!

核心就是想办法把这个仓库下载下来,于是就有两种方案;

3.1、方案一:替换master仓库

这个方案在网上是提的最多的,凡是涉及到这个问题的,基本会建议通过命令更换成国内仓库地址(从官网clone过来),比如替换成 coding 上的镜像或者是 oschina 上的镜像

代码语言:javascript
复制
> pod repo remove master
//coding 上有每日更新的,建议使用这个
> pod repo add master https://git.coding.net/CocoaPods/Specs.git//或者用oschina,但是https 好像有问题,一直是403,所以用ssh的方式,这里需要到官网去配置ssh key
> pod repo add master https://git.oschina.net/akuandev/Specs.git

来自文章 CocoaPods详解之——使用篇

不知道什么原因,一旦我 remove 掉 master 之后再 add 回去的时候,cocoapods 会 很聪明地 会自动 add 自己官网的github 地址,而不是我们指定的地址!!!

估计我的版本是 1.0.1 ,而教程中的版本基本是 0.0.39+ ,所以方式可能不一样吧;

无论如何,这条路行不通;何况这种方案有一种风险就是 第三方库的更新没有官方及时,导致有些依赖可能会丢失,也是一种隐患;

3.2、方案二:手动下载官网repos

还是这篇iOS CocoaPods 安装笔记(持续更新)文章给出了一个思路:自己去下载官方 repo ,然后放到 ~/.cocoapods/repos/ 目录下即可;

自己下载有两种做法:

  1. 使用cd ~/.cocoapods/repos/ && git clone https://github.com/CocoaPods/Specs.git master,不过这种方式会因为下载文件太多,导致github直接断开连接;我试了好几次都这样,放弃了
  2. 真是命苦啊,于是跑到官网下载客户端 Github Desktop,然后用客户端保证下载的稳定性;如果这条路还不行的话,我真的是没有办法了;

好在毕竟是自家亲人,Github Desktop 下载自己的网站上资源的稳定性杠杠的,花费1个小时左右(看网速而定)就下载完毕了;

等等,这还没完!!

下载完毕之后,需要执行一步,pod setup,走一下过场,因为此时你已经下载完了,所以这个步骤基本不需要花费什么时间,静静地等他设置完毕即可;时间有可能还会有点长,但基本没问题

总算看到完成的状态了,泪流满面啊!!

4、使用注意事项

可见更新一次Repos是多么的伤人,所以不必每次在安装依赖的时候去检查官网的更新;因此使用 --no-repo-update 跳过这个检查过程:

代码语言:javascript
复制
> pod install --verbose --no-repo-update

这样安装依赖的速度就会提升很多,你可以每隔1个月再自己手动更新一次官网即可;

5. 总结

上面讲了这边多,我们总结一下使用 CocoaPods 的正确方式:

  1. 正常安装 CocoPods
  2. 去官网clone仓库放到 ~/.cocoapods/repos/master 目录下
  3. 重新执行 pod setup
  4. 后续安装依赖使用 pod install --verbose --no-repo-update 安装依赖

从发现问题到解决问题,花费了我近1天的时间,主要都是花费在 网络下载 - 下载失败 - 尝试重新下载 - 再失败 - 再下载… 这样的苦循环中,直到最后用官方的 Github Desktop才真正克隆出到本地;

这个 Specs 仓库是干嘛用的呢,说白了就是检测依赖关系使用的,类似于数据库对应的映射表;个人觉得这方面 Node.js 的包管理器 npm 做得比较好,所有的依赖查询通过官网就查询到,不需要用户自己下载官方这么大的一个包;

有时候真的不是你能力不够,实在是因为网络太差啊!!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-09-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JSCON简时空 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 写在前面的
  • 1、序言
  • 2、原因分析
  • 3、解决方案
    • 3.1、方案一:替换master仓库
      • 3.2、方案二:手动下载官网repos
      • 4、使用注意事项
      • 5. 总结
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档