背景简介
podfile文件是ios项目cocoapods组件化的入口文件
随着项目功能越来越大,依赖的业务组件和第三方组件也越来越多,同时需要支持siri/watch/实时活动(灵动岛)/widge
一个podfile经常堆积了很多组件,维护比较混乱
有没有办法将podfile进行拆分?
下面我们拿个简单的demo进行拆分示例
新建项目,创建一个简单的podfile文件
将这个Pofile拆分成Podfile和PodCommon
拆分方法
1.与Podfile文件同级目录,创建PodCommon文件
2. podfile引入PodCommon
3.编辑PodCommon文件
4.修改podfile文件
4. 执行pod install,依赖的库正常安装
至此,拆分功能正常可用了。不过细心的同学可以发现PodCommon并没有引入到Pods工程目录下,用xcode编辑不是很方便
我们接着往下看,如何将拆分出来的PodCommon文件关联到Pods工程
关联Pods工程
首选我们先弄清楚Podfile是如何关联到Pods工程
当执行pod install命令是执行cocoapods/command/install.rb的代码
然后跳转到installer的install方法中。
预处理
组件资源寻址
下载组件
校验targets
判断pod环境变量是否跳过pod project 文件的生成(默认false),调用integrate 生成pod project
继续一层层查看方法integrate,最终走到ProjectGenerator的generate!方法
generate!方法中调用了prepare,prepare又调用了project.add_podfile(podfile_path)
add_podfile方法是在pod project文件中添加一个PBXFileReference引用
至此,podfile如何添加到pods project的迷雾已经解开
依葫芦画瓢,我们只要在合适的地方调用project.add_podfile('../PodCommon'),是不是PodCommon就能引入到pods project下?
难点在于如何在pod文件查找到pods project对象
我们继续回到pod install指令中,看到有一个perform_post_install_actions的方法
在执行post_install方法时,创建了一个关联pods_project上下文对象context,然后执行HooksManager的post_install
我们可以在podfile中写入 post_install的hook方法,尝试拿一下pods_project对象,对用add_podfile方法, 注意'../PodCommon'地址是相对于pods_project工程的路径
修改podfile,执行pod install,大功告成,PodCommon文件成功关联上pods文件
本文属于原创,转载请备注原文链接