分类
dev

About Cocoapods

关于安装Cocoapods

Cocoapods(后简称为pod)是一个Ruby程序, 当然可以在Gem里找到并安装.

但如果我们系统里有统一的包管理器Homebrew(后简称brew), 更应该经由它来安装, 这样也便于统一的管理版本, 以避免不同的包在不同的程序管理下的混乱局面.

通过brew安装pod就很简单:

brew install cocoapods

升级Cocoapods

随着Xcode及SDK的不断升级, Cocoapods也在跟着不断升级以适应项目生成.

所以我们一定要及时更新pod版本, 以免在Xcode升级后, 生成的xcodeprojpod有兼容问题.

如上所述, 通过brew安装的包, 也应该通过brew来管理版本, 升级也很简单:

# 先更新下brew的formula信息:
brew update
# 如果Cocoapods有可用更新上面的命令结果会展示出来.

# 想查看全部可更新的包:
brew outdated

# 更新Cocoapods
brew upgrade cocoapods

CDN

新的pod(1.9.x)已支持CDN加速, 不过目前也没用出速度区别来~

可以看到的改变在~/.cocoapods/repos/目录下,

  • 旧的 master仓库/trunk仓库 已经没了, 现在默认仓库名为cocoapods.
  • 新增一个trunk文件夹, 类别为CDN (https://cdn.cocoapods.org/), 此目录非git仓库.

实际使用下, pod install会从CDN读取以确定安装的库的版本.

也就是说, 库版本的确定现在的路径是:

Podfile.lock > CDN > cocoapods repo

如需更新必须使用pod update.

利用指定repo来加速

指定repo本是可以添加私有Spec仓库的.

例如我曾在某项目里用到:

Podfile:

source 'https://github.com/CocoaPods/Specs.git'
source 'https://github.com/blodely/LYSpecs.git'
source 'https://e.g.some.company.git.server/PrivateSpecs.git'

来指定除了官方仓库外, 还有自己的LYSpecs仓库(里面有一些未推到官方的libs), 和公司的私有库(包含一些模块化的库, 但仅限公司内部访问).

source就可以指定多来源.

pod仓库在GitHub, 对于国内用户来说访问速度不是特别友好, 特别是Spec仓库目录及文件众多, 克隆和拉取都很慢, 容易因网络波动断开.

这样我们就可以用一些国内的Cocoapods spec的镜像来作为源.

应用起来很简单:

# 在Podfile首行加上你所想用的镜像地址

# 清华源
source 'https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git' 

# 或者码云的源
source 'https://gitee.com/mirrors/CocoaPods-Specs.git'

# 或者其他

注意找信得过源哦!~

推荐没什么大问题的情况下, 大家都使用官方源.

关于Repo仓库

用过pod searchpod repo add, 可能会找到在路径~/.cocoapods/repos/下的一些仓库.

它们事实上就是一个git管理的仓库, 包含了所有被提上去的pod库的spec等信息.

所以当我们对一个项目的Podfile运行pod install命令时, 它会知道每一个pod库应该从哪去获取.

search的索引

pod的spec仓库如此复杂而缓慢, 搜索如果是直接从中进行, 那效率会太低.

所以pod的做法是, 根据仓库创建一个用于搜索的索引文件(index), 然后使用索引来搜索(pod search).

这个文件位于~/Library/Caches/CocoaPods/search_index.json.

当首次克隆完spec仓库后执行搜索时, 或是添加了新的spec仓库后执行搜索时, 它都会出现一个Creating search index for spec repo 'xxx'..的等待过程.

如若遇到索引文件不正确的情况无法search, 可以删除该index, 让pod重新生成一个, 来修复该问题.

Author

Luo Yu

luoyu@luoyu.space

Wednesday, July 8, 2020

Rick Luo

indie designer & developer.

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据