这是一套用于分析iOS应用Mach-O文件依赖关系的工具,可以帮助开发者了解应用的动态库依赖情况,优化启动性能。
- 自动监控指定目录,检测新安装的iOS应用
- 分析应用的Mach-O文件依赖关系
- 生成可视化的依赖关系图
- 识别未被使用的动态库
- 统计非系统动态库的引用次数
该工具包含两个主要脚本:
- mach_o_dependency_analyzer.py: Mach-O文件依赖分析核心模块
- app_monitor.py: 应用监控模块,用于自动检测新安装的应用
在使用前,请确保安装以下依赖:
# 安装Python依赖
pip install macholib graphviz watchdog
# 安装Graphviz (用于生成依赖图)
brew install graphviz监控指定目录,当有新的应用安装时自动分析:
python app_monitor.py <目标目录> [应用名称]参数说明:
<目标目录>: 必填,要监控的目录路径[应用名称]: 可选,指定要匹配的应用名称
示例:
# 监控iPhone 16 pro的模拟器目录下的LoadAFDemo_Example.app应用
sudo python3 app_monitor.py /Users/zhangsan/Library/Developer/CoreSimulator/Devices/C56B0070-9569-49C7-92C5-EF465D5CEFAB/data/Containers/Bundle/Application LoadAFDemo_Example.app启动后工具后,打开 Xcode 运行 LoadAFDemo_Example.app,工具会自动分析并打开浏览器。
直接分析指定目录中的Mach-O文件依赖关系:
python mach_o_dependency_analyzer.py <应用目录> <输出HTML文件> [--main <主可执行文件>]参数说明:
<应用目录>: 要分析的应用目录路径<输出HTML文件>: 输出的HTML报告文件路径--main: 可选,指定主可执行文件(相对于应用目录)
示例:
# 分析Runner.app的依赖关系
python sudo python mach_o_dependency_analyzer.py /path/to/Payload/Runner.app ./outputs/xianyu-outputs.html --main /path/to/Payload/Runner.app/Runner分析完成后,工具会生成一个HTML报告,包含:
- 依赖关系可视化图表
- 未被依赖的动态库列表
- 非系统动态库引用次数统计
HTML报告会自动在浏览器中打开,也可以手动打开查看。
- 需要有足够的权限访问应用目录
- 分析大型应用可能需要较长时间
- 确保Graphviz正确安装,否则无法生成依赖图
Q: 为什么有些依赖关系没有显示?
A: 工具默认过滤了系统库和Swift标准库,以减少图表复杂度。
Q: 如何判断哪些库可以移除?
A: 查看"未被依赖的动态库"列表,这些库可能是冗余的,但请在移除前确认它们确实不被使用。
这个README文件全面介绍了工具的功能、安装方法、使用说明和注意事项,用户可以根据文档快速上手使用这两个脚本。