EFPodsAnalyzer 是一个用来帮助我们梳理项目 CoaoaPods 库依赖关系的 Python 脚本,一个命令即可生成清晰的 Pods 依赖关系图,给我们的依赖整理 / 组件清理工作带来一定的帮助。
预览
Pods 库越多、依赖关系越复杂的库,越是用得到本工具,例如模块化后的项目;反之如果项目依赖很少,依赖关系非常简单的话,其实基本不需要本工具(当然你硬是要用我也不拦着)。我司某项目的依赖关系图大致如下,一坨:
环境
- Python 2.7
安装
下载本仓库,或执行如下命令将本仓库 Clone 到本地:
git clone git@github.com:EyreFree/EFPodsAnalyzer.git
使用
- 首先确保你的工程已进行
pod install
操作并成功生成了 Pods 目录; - 本仓库内容已完整下载到本地;
- 根据待分析项目的具体情况对依赖的库进行分类,并分别给出每个分类的正则对依赖的名称进行归类,然后将分类规则写到 EFPodsAnalyzer 根目录下的
config.json
文件中; - 执行如下命令进行依赖关系图的生成:
python [EFPodsAnalyzer.py 文件路径] [待分析项目的 Podfile 文件路径]
- 生成完成时会自动通过浏览器打开;如果浏览器木有反应的话,可以查看终端的输出,若有看到如下日志可手动打开生成的关系图文件:
Dependency graph generated: .../EFPodsAnalyzer/doc/index.html
若抛错的话请根据对应的错误信息进行处理,有其他问题欢迎 PR 或 Issue。
示例
这里我们以 Coding 的开源 iOS 客户端 为例,给大家演示一下完整的使用过程:
- 首先下载本仓库内容到本地;
- 然后下载 Coding iOS 端工程到本地,并进行
pod install
操作; - 因为这里 Coding 客户端的依赖基本没啥可归类的,都是第三方库;所以出于演示目的,这里我分为了「以 M 开头的库」、「以 Kit 结尾的库」和「其它」三类,对应的
config.json
如下:
{
"config": {
"categories": ["以 M 开头的库", "以 Kit 结尾的库", "其它"],
"categoryRegexes": ["^M.*)", ".*(Kit)$", ".*"]
}
}
- 关系图生成的命令如下:
python /Users/eyrefree/Documents/iOS_GitHub/EFPodsAnalyzer/EFPodsAnalyzer.py /Users/eyrefree/Documents/iOS_GitHub/Coding-iOS/Podfile
- 最后生成的依赖关系图如下:
也可以进行 在线预览:
- 点击上方的类目名可控制该类的显示和隐藏;
- 鼠标悬浮于节点上可显示节点名;
- 鼠标悬浮于两点之间的连线上可显示两节点之间的依赖关系。
计划
- 根据头文件引用进一步判断依赖是否需要移除;
- 根据类依赖关系进一步判断依赖是否需要移除。
其它
依赖图的展示使用了 ECharts 图表库和 xml2json 解析库,在此对这些项目的开发人员表示感谢!
作者
EyreFree, eyrefree@eyrefree.org
协议
EFPodsAnalyzer 基于 GPLv3 协议进行分发和使用,更多信息参见协议文件。