做为一个iOS开发者,时不时就要与一些好用的框架或者库打交道,而且大多数还是国外的地址,访问相当慢,所以也就引发了一系列贼慢的问题,该篇文章就来好好总结下解决方案
一、更换gem源
// 查看现有的源
gem source -l
我之前换过淘宝的源,在这里就会显示【 http://ruby.taobao.org/ 】
*** CURRENT SOURCES ***
http://ruby.taobao.org/
但是现在淘宝源已经不再维护了,所以需要换为目前国内还在维护的【ruby-china】,如果之前没换过则默认为【https://rubygems.org/ 】,这个是国外的,对于我们来说也是比较慢的,所以也得将其更换掉
// 移除
gem sources --remove http://ruby.taobao.org/
// 添加 ruby-china 的源
gem sources --add https://gems.ruby-china.com
二、更换pod repo源
我相信目前大部分友友的这个repo的源还是【 https://github.com/CocoaPods/Specs.git 】,因为一开始我们安装 pod 的时候执行了【pod setup】而这个是默认为我们安装的是国外的源。其实这个setup只是将CocoaPods/Specs通过git克隆到本地,所以我们也可以如此
这里需要注意一点,就是存放的位置是固定的
~/.cocoapods/repos/
如果没有这个目录请自行创建,已经有的就不用自己再去创建了
mkdir -p ~/.cocoapods/repos/
执行【pod repo】可以查看当前仓库的信息
pod repo
如果这里有多个文件夹,则会显示多条信相关息
- Type: git (unknown)
- URL: https://github.com/CocoaPods/Specs.git
- Path: /Users/lxf/.cocoapods/repos/master
好,我们开始更换pod repo源,这里我选用国内【git.coding.net】上的Specs,也有其它国内的,需要的话自行搜索吧,这里就以coding上的Specs为例
// 将当前国外的创建移除
pod repo remove master
// 将Coding上的通过git克隆到本地并修改文件夹的名字为master
git clone https://git.coding.net/CocoaPods/Specs.git ~/.cocoapods/repos/master
如图所示,正在下载 pod repo源【这里请大家忽略本人的网速,带宽不给力,不然咻咻咻的就搞定了】
最后需要update一下
pod repo update
* 注意点:* 在每一个项目中创建的podfile文件的第一行都要填写下面这行source命令。这个可能会面临着使用的第三方库不是最新的问题,比如gitHub上面某个第三方的库已经是3.0了,结果只能下载使用2.x的,这个自己衡量吧。当然也可以自己在Coding上面新建一个工程将CocoaPods/Specs同步到你自己的仓库然后来使用~
补充
// 可以暂时使用我仓库里的Specs,更新时间为:2017-6-25
https://git.oschina.net/LinXunFeng/Specs.git
如果不知道怎么弄的话就按下面这种方式去搞吧,我试了几个国内免费的仓库,只有oschina的可以将gitHub上的Specs导入成功,接下来部署公钥,点击文章按要求去做,最后执行
// 注意YourUserName要改为你自己在码云上的用户名
git clone git@git.oschina.net:YourUserName/Specs.git ~/.cocoapods/repos/master
这样的话就很快了,本人是4M小水管,所以400多k已经很不错了。这样就可以保证下载下来的第三方库是最新的!!!
三、提示 git 版本问题,更改homebrew为国内源
这个不是必须的,只做额外补充~~
手贱升级了一下Cocoapods,然后就提示 git 版本问题,具体情况请往下看~
升级git
在升级完Cocoapods后,不论执行什么pod命令都提示git版本问题
// 比如这些命令
pod repo | pod setup | pod install
// git版本问题,使用当前CocoaPods需要git版本在1.8.5以上
[!] You need at least git version 1.8.5 to use CocoaPods
查看当前git版本
git --version
好吧,当前git版本也是很旧了,换换换~
git version 1.8.4.2
这里我们用Homebrew来帮我们升级git。但是,这里先不急着升级,我们先把Homebrew的源换成国内的清华镜像源
cd "$(brew --repo)"
git remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git
// 更新本地的镜像
brew update
更新完毕会提示 Already up-to-date. 接着再更新git就好了
brew install git
解决报错问题
Error: Another active Homebrew update process is already in progress.
Please wait for it to finish or terminate it to continue.
Warning: git 2.13.1 is already installed, it's just not linked.
You can use `brew link git` to link this version.
这里按它要求一步步操作即可
四、pod repo update的理解
1.问题:
三个人共同维护一个项目时,Podfile也是共同维护一份。有一天一个人,升级了Podfile中某个库的版本,比如SnapKit升级到了4.0.0, pod ‘SnapKit’, ‘~> 4.0.0’。然后,你更新了最新的Podfile,跑了一下pod install
为了解决这个异常可能尝试一下:
(1)是不是Podfile和Podfile.lock 文件不同步?删掉.lock文件再pod install一次,仍然报错。
(2)是不是SnapKit没有4.0.0版本?pod search snapKit一下,版本存在。
如果被我猜中了,证明你把焦点放在了异常前三行,而忽略了最关键的信息:None of your spec sources contain a spec satisfying the dependencies: SnapKit , SnapKit (= 4.0.0)。
这句话的意思是说:你spec资源中不包含SnapKit的4.0.0的配置信息。这里面有个关键词,spec资源和配置信息。
2、pod repo update
简单来说,pod repo update命名是用来更新本地cocoapods的spec资源配置信息。
安装完cocoapods后,在用户根目录下有个隐藏文件夹,/Users//.cocoapods,里面是cocoapods收录的所有库的配置信息,
/Users//.cocoapods/repos/master/Specs/。
比如SnapKit,内部分版本包含多个文件夹,每个文件夹内包含一个配置文件,比如SnapKit.podspec.json。
报错的原因就是,Podfile中SnapKit的版本更新到了4.0.0但是本地.cocoapods下找不到相应的配置文件
然后按照提示,执行pod repo update,这个执行之后非常慢.pod repo update实际是更新整个.cocoapods下的所有库.
附带一张 cocoapods 结构图