首先我们了解一下Podfile.lock:
当我们用cocoapod管理第三方库的时候,
在第一次运行pod install
时会自动生成一个Podfile.lock
文件,Podfile.lock
文件主要包含三个块:PODS、DEPENDENCIES、SPEC CHECKSUMS,用来记录每个pod的版本号、依赖的其他库和每个库对应的podspec.json文件的 checksum(SHA-1算法)。通过这些信息可以确保多人协作的时候,大家使用的是相同版本的第三方库。Podfile.lock 中会标注项目当前依赖库的准确版本,其中包括了项目在 Podfile 中直接标注使用的库,以及这些库依赖的其他库。这样的好处是当你跟小伙伴协同开发时,你的小伙伴同步了你的 Podfile.lock 文件后,他执行
pod install
会安装 Podfile.lock 指定版本的依赖库,这样就可以防止大家的依赖库不一致而造成问题。因此,CocoaPods 官方强烈推荐把 Podfile.lock 纳入版本控制之下。但是,Podfile.lock 并不是一成不变的,当你修改了 Podfile 文件里使用的依赖库或者运行pod update
命令时,就会生成新的 Podfile.lock 文件。
总结:podfile.lock,原来是用来锁定项目依赖库版本的文件
pod install 和pod update区别:
pod
install:
使用pod install
,你只会安装 Podfile 中新改变的东西,并且会:优先遵循 Podfile 里指定的版本信息;其次遵循 Podfile.lock 里指定的版本信息来安装对应的依赖库。比如:下面在 Podfile 里没指定 AFNetworking 的版本,但是 Podfile.lock 里指定了 AFNetworking 的版本是 3.0.1,那么即使现在有最新的 4.0.1,最终也会安装 3.0.1。但是如果 Podfile 里指定了 AFNetworking 版本是 4.0.1,那么则会安装 4.0.1,并更新 Podfile.lock 里的信息。pod
update:
使用pod update
,你会根据 Podfile 的规则更新所有依赖库,不会理睬现有的 Podfile.lock,而是根据安装依赖库的情况生成新的 Podfile.lock 文件。当运行pod update PODNAME时, CocoaPods将尝试查找PODNAME更新的pod版本, 会忽略掉Podfile.lock中已经存在的版本.如果直接运行pod update, 没有指定PODNAME, CocoaPods会把Podfile中所有的pod都更新到最新版本.(如果已经是最新版本了, 则不更新)
所以当有需求是只改变某一个第三方库的版本,而其余的库不变的时候就可以直接修改Podfile.lock里面的版本,然后执行pod install
补充:
pod outdated:当运行pod outdated时, CocoaPods将列出所有比Podfile.lock(每个pod当前安装的版本)中, 已经列出的版本更新的pod版本. 这意味着如果你在这些pod上运行pod update PODNAME, 它将会把指定的pod更新到最新版本.
pod repo update 的工作就是更新pod资源目录,也就是master下的资源,简单说 如果有一个第三方库发布了一个最新的版本,如果你不执行pod repo update,那么你的本地是不会知道有一个最新版本的,还会一直以你本地的资源目录为准。那么你永远都拿不到这个库的最新版本。
使用pod update是默认会执行一遍pod repo update ,所以会发现如果你的pod库引用多了,每次pod update都很慢,网络如果不好更是经常会断掉,就是因为你在更新pod时,也更新了资源目录pod update --no-repo-update
这条命令表示只根据本地目录更新库,不需要拉取远程
pod setup
命令会将远程索引库拷贝到本地,生成本地索引库,通过pod search
生成检索的索引文件(以json的形式存在,key对应的是框架名称,value对应的是框架索引文件),pod search 是在本地索引库中而不是远程索引库搜索,根据框架名搜到描述文件,pod install 就会根据描述文件中的真实源码地址去下载框架源码。