CocoaPods

805 阅读3分钟

pod install

  • Podfile.lock中记录了实际安装的第三方库的版本号,Podfile.lock需要提交git,保证团队内所有人引用的第三方库版本一致。
  • 在Podfile中增加或删除某个pod后,使用的是pod install,而不是pod update。
  • 例如podfile中pod: A (注意,没有指定版本号), podfile.lock中A库的版本号是1.0,而现在A库的最近版本已经是1.1了,执行pod install并不会更新A库的版本。应该执行pod update。这一点还需要验证一下。当运行pod install,它只解析Podfile.lock中尚未列在其中的pod的依赖库. 对于已经在Podfile.lock中列出的pod, Podfile.lock不会尝试检查是否有更新的版本.

pod update

  • pod update PODNAME, CocoaPods将尝试查找PODNAME更新的pod版本, 会忽略掉Podfile.lock中已经存在的版本.
  • 如果直接运行pod update, 没有指定PODNAME, CocoaPods会把Podfile中所有的pod都更新到最新版本.(如果已经是最新版本了, 则不更新)
  • 注意执行pod update的时候XCODE要完全退出

pod repo update

pod repo update更新的其实是:~/.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
这条命令表示只根据本地目录更新库,不需要拉取远程
参考文档:
www.jianshu.com/p/2f815a609…
www.cocoachina.com/articles/24…