6

这个人想出了一个非常简洁的工具来生成类依赖图——然而,它依赖于解析你的源代码和寻找#import指令。

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

我想做一些更类似于class-dump并检查存储在 Mach-O 文件中的 Objective-C 元数据以生成类依赖项的内存表示。

我宁愿不从头开始这样做,所以我想知道:

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

3 回答 3

3

它已经完成了吗?

从来没听说过。

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

类转储的核心是libMachObjC完全按照您的意愿进行操作,即解析所有类/方法/ivars 等等。API 很干净,应该很容易使用。

如果您在此类事情上有经验,那么我要完成的工作是否可行?

不幸的是,没有,因为有些类没有声明真正的类,而是使用id。例如,以下是可以从 UIKit 的类转储中提取的信息:

@interface UITableView : UIScrollView <NSCoding>
{
    int _style;
    id <UITableViewDataSource> _dataSource;
    id _rowData;
    ...

_rowDataivar 类型信息是,id但如果您在运行时检查,您将看到这_rowDataUITableViewRowData该类的一个实例。UITableView此信息不存在于 Mach-O 二进制文件中,因此您无法找到和之间的关系UITableViewRowData。这同样适用于方法参数。

于 2011-08-29T12:00:53.067 回答
2

这是一个依赖于 mach.o 文件中的信息的解决方案,并根据该信息生成图依赖关系:https ://github.com/PaulTaykalo/objc-dependency-visualizer在此处输入图像描述

于 2015-11-26T22:10:28.353 回答
1

它已经完成了吗?

是的 - 但我不能推荐一个好的公共实施

是否有一个开源库可以为我提供提取这些信息所需的基础工具(一个检查 Mach-O 文件并创建其中包含的 Objective-C 信息的外观的库 - 这样我就可以迭代所有类、它们的方法、属性、ivars 等,并扫描对其他类的引用)我认为 class-dump 的源代码将是一个很好的起点。

大多数用例将受益于使用 objc 运行时工具objc/...而不是检查二进制文件。

如果您在此类事情上有经验,那么我要完成的工作是否可行?

是的。我使用 objc 运行时做了类似的事情。

我需要克服哪些障碍?

这在很大程度上取决于您想要的详细程度......如果您没有找到这样的实现,则执行时间,但我认为如果您在 objc 运行时中搜索更深奥的功能,您会找到一些选项;也许您会在(开放)语言绑定或桥梁中找到一个?

如果您最终自己编写了一个,您可以使用 获取注册的 objc 类objc_getClassList,然后从那里访问您想要的属性/信息。

于 2011-08-28T06:15:00.683 回答