当我们app 组件化之后,一个app会包含各种不同的版本组件,而主工程变成一个壳子,用Podfile文件依赖了各种不同的组件, 然后我们的app完成了一次版本迭代上线(一定要等到这个版本提交到市场上线之后进行封版本,如果app还没上线,提前封版本,版本可能不稳定需要改动,会造成不必要的重复劳动)之后,我们需要对主工程封版本,但是每次封版本的时候都需要主工程相对应的组件的版本,相对应版本的组件又依赖其他版本组件(我光描述起来都非常绕了),如果我们手动通过spec管理肯定非常麻烦,又如果我们直接把全部的组件都写在podfile中,那我们每次的时候回溯(我们现在在开发2.0版本,想回到1.0版本)的时候,都需要首先记录之前app版本中对应的全部组件的版本,然后再在podfile中写上对应的组件版本号,如果组件特别多,需要回溯多次,这样也是非常痛苦的。那有没有最简单一句命令一个执行操作一分钟一步到位回溯之前的版本的方法呢?这个时候我们就需要依靠podfile.lock文件进行版本管理。
Podfile.lock 是啥
Podfile.lock 是在第一次运行 pod install 时生成的,Podfile.lock 中会标注项目当前依赖库的准确版本,其中包括了项目在 Podfile 中直接标注使用的库,以及这些库依赖的其他库。这样的好处是当你跟小伙伴协同开发时,你的小伙伴同步了你的 Podfile.lock 文件后,他执行 pod install 会安装 Podfile.lock 指定版本的依赖库,这样就可以防止大家的依赖库不一致而造成问题。因此,CocoaPods 官方强烈推荐把 Podfile.lock 纳入版本控制之下。
所以如果我们用Podfile.lock 文件进行版本管理,只需要在主工程(就是那个壳子)中把Podfile.lock 纳入版本控制之下(也就是把主工程对应的Podfile.lock文件上传到gitlab),并且主工程中的 Podfile文件一定不要指定版本号, 然后把app 每次封版本的时候在gitlab打上相应的版本号tag,每次我们想回溯之前版本 只需要切换到当时的tag,然后执行 pod install (千万不能执行pod upodate)就可以了 就是这么简单。
为什么我必须强调回溯的时候不能执行pod upodate。
协同开发时需要注意使用 pod install 和 pod update 的区别:使用 pod install,你只会安装 Podfile 中新改变的东西,并且会:优先遵循 Podfile 里指定的版本信息;其次遵循 Podfile.lock 里指定的版本信息来安装对应的依赖库。比如:下面在 Podfile 里没指定 iRate 的版本,但是 Podfile.lock 里指定了 iRate 的版本是 1.11.1,那么即使现在有最新的 1.11.4,最终也会安装 1.11.1。但是如果 Podfile 里指定了 iRate 版本是 1.11.3,那么则会安装 1.11.3,并更新 Podfile.lock 里的信息。
使用 pod update,你会根据 Podfile 的规则更新所有依赖库,不会理睬现有的 Podfile.lock,而是根据安装依赖库的情况生成新的 Podfile.lock 文件。
网友评论