使用Objective-C元数据生成类依赖图

Ste*_*eve 6 mach-o objective-c objective-c-runtime

这个人想出了一个非常简洁的工具来生成类依赖图 - 但是,它依赖于解析你的源代码并寻找#import指令.

这很整洁,但我有很多问题.其中最重要的是它不考虑导入的导入,也不考虑前缀标题,也不考虑导入所引用的文件中的类是否实际被使用.

我想做更类似的事情class-dump并检查存储在Mach-O文件中的Objective-C元数据,以生成类依赖关系的内存中表示.

我不想从头开始做这个,所以我想知道:

  • 它已经完成了吗?
  • 是否有一个开源库,它将为我提供提取此信息所需的基础工具(一个库,它检查Mach-O文件并创建包含在其中的Objective-C信息的外观 - 这样我可以迭代所有类,它们的方法,属性,ivars等,并扫描对其他类的引用)我认为class-dump的源代码是一个很好的起点.
  • 如果你有这方面的经验,我正在努力实现可行性吗?
  • 我需要克服哪些障碍?

0xc*_*ced 3

已经完成了吗?

从来没听说过。

是否有一个开源库可以为我提供提取此信息所需的基础工具?

类转储的核心是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。这同样适用于方法参数。