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