cocoapods-project-hmap
cocoapods-project-hmap copied to clipboard
pod install 时卡死,内存飙升
如下图,终端输出 generate method of post install hook context override
之后就一直卡住,活动监视器显示 ruby 进程所占用的内存持续飙升 11 ~ 19.95 GB,直到被系统杀死。

CocoaPods 版本:1.11.2 MacOS 版本:12.0.1 Ruby 版本:ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-darwin19] hmap 版本:1.0.4
我这边没有相同版本的 Mac 去还原你的环境,在其他条件相同的情况下并没有复现你说的问题,猜想这样的问题可能是多个插件间的方法交换导致的递归循环,麻烦列下你环境下安装的其他 CocoaPods 插件,因为所有的插件都会随着 CocoaPods 命令的调用一起加载到当前的 Ruby 进程,部分插件代码不需要依赖 Podfile 里面的插件声明就已经生效了,比如那些方法交换。
调试来看是崩溃在recursively_add_dependent_headers_to_hmap
的过程中,如果pod的依赖树比较深(十几级的深度),执行递归遍历时就会遇到类似问题。
似乎缺乏合适的退出递归条件
@blastmann 可以提供一个 demo 吗
我有空模拟创建一个看看,但从代码上看最好不要直接递归,我调整了一下代码逻辑,按照以下逻辑可以比较快地跑完:
- 优先一次遍历生成所有的pod hmap generator,通过字典缓存
- 递归合并aggregate target依赖到的pod,当遇到缓存时应该直接退出一次递归
- 生成hmap
确实这样处理可以