Skip to content

这是一套用于分析iOS应用Mach-O文件依赖关系的工具,可以帮助开发者了解应用的动态库依赖情况,优化启动性能。

License

Notifications You must be signed in to change notification settings

yidahis/LanuchTools

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

iOS应用依赖分析工具

这是一套用于分析iOS应用Mach-O文件依赖关系的工具,可以帮助开发者了解应用的动态库依赖情况,优化启动性能。

功能特点

  • 自动监控指定目录,检测新安装的iOS应用
  • 分析应用的Mach-O文件依赖关系
  • 生成可视化的依赖关系图
  • 识别未被使用的动态库
  • 统计非系统动态库的引用次数

工具组件

该工具包含两个主要脚本:

  1. mach_o_dependency_analyzer.py: Mach-O文件依赖分析核心模块
  2. 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报告,包含:

  1. 依赖关系可视化图表
  2. 未被依赖的动态库列表
  3. 非系统动态库引用次数统计

HTML报告会自动在浏览器中打开,也可以手动打开查看。

注意事项

  • 需要有足够的权限访问应用目录
  • 分析大型应用可能需要较长时间
  • 确保Graphviz正确安装,否则无法生成依赖图

常见问题

Q: 为什么有些依赖关系没有显示?
A: 工具默认过滤了系统库和Swift标准库,以减少图表复杂度。

Q: 如何判断哪些库可以移除?
A: 查看"未被依赖的动态库"列表,这些库可能是冗余的,但请在移除前确认它们确实不被使用。

这个README文件全面介绍了工具的功能、安装方法、使用说明和注意事项,用户可以根据文档快速上手使用这两个脚本。

About

这是一套用于分析iOS应用Mach-O文件依赖关系的工具,可以帮助开发者了解应用的动态库依赖情况,优化启动性能。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages