Ste*_*eve 6 mach-o objective-c objective-c-runtime
这个人想出了一个非常简洁的工具来生成类依赖图 - 但是,它依赖于解析你的源代码并寻找#import指令.
这很整洁,但我有很多问题.其中最重要的是它不考虑导入的导入,也不考虑前缀标题,也不考虑导入所引用的文件中的类是否实际被使用.
我想做更类似的事情class-dump并检查存储在Mach-O文件中的Objective-C元数据,以生成类依赖关系的内存中表示.
我不想从头开始做这个,所以我想知道:
已经完成了吗?
从来没听说过。
是否有一个开源库可以为我提供提取此信息所需的基础工具?
类转储的核心是libMachObjC它完全满足您的要求,即解析所有类/方法/ivars 等等。API非常干净,应该很容易使用。
如果你有这方面的经验,我想要完成的事情是否可行?
不幸的是,不能,因为有些类没有声明真正的类,而是使用id它。例如,以下是可以从 UIKit 的类转储中提取的信息:
@interface UITableView : UIScrollView <NSCoding>
{
int _style;
id <UITableViewDataSource> _dataSource;
id _rowData;
...
Run Code Online (Sandbox Code Playgroud)
ivar_rowData类型信息是id,但如果您在运行时检查,您将看到它_rowData是该类的实例UITableViewRowData。此信息不存在于 Mach-O 二进制文件中,因此您无法找到UITableView和之间的关系UITableViewRowData。这同样适用于方法参数。