这家伙提出了一个非常简洁的工具来生成类依赖图 - 但是,它依赖于解析源代码并查找#import
指令。
这很整洁,但我有很多问题。其中最重要的是它不考虑导入的导入,也不考虑前缀标题,也不考虑导入所引用的文件中的类是否实际被使用。
我想做更类似于class-dump
的事情,并检查存储在Mach-O文件中的Objective-C元数据,以生成类依赖关系的内存中表示。
我宁愿不从头开始这样做,所以我想知道:
答案 0 :(得分:3)
它已经完成了吗?
不是我知道的。
是否有一个开源库可以为我提供 我需要提取这些信息的基础工具吗?
class-dump的核心是libMachObjC
,它可以完全满足您的需求,即解析所有类/方法/ iv等等。 API很干净,应该很容易使用。
如果你有这方面的经验,那就是我想要的 完成可行吗?
不幸的是,不是因为某些类没有声明真正的类而是使用id
。例如,以下是可以从UIKit的类转储中提取的信息:
@interface UITableView : UIScrollView <NSCoding>
{
int _style;
id <UITableViewDataSource> _dataSource;
id _rowData;
...
_rowData
ivar类型信息为id
,但如果您在运行时检查,您会看到_rowData
是UITableViewRowData
类的实例。 Mach-O二进制文件中不存在此信息,因此您无法找到UITableView
和UITableViewRowData
之间的关系。这同样适用于方法参数。
答案 1 :(得分:2)
这是一个依赖于mach.o文件中信息的解决方案,并根据该信息生成图形依赖:https://github.com/PaulTaykalo/objc-dependency-visualizer
答案 2 :(得分:1)
是的 - 但我不能推荐一个好的公共实施它已经完成了吗?
是否有一个开源库,它将为我提供提取此信息所需的基础工具(一个库,它检查Mach-O文件并创建包含在其中的Objective-C信息的外观 - 这样我可以遍历所有类,它们的方法,属性,ivars等,并扫描对其他类的引用)我认为class-dump的源代码是一个很好的起点。
大多数用例都可以通过使用objc运行时工具objc/...
而不是检查二进制文件来获益。
如果你有这方面的经验,我正在努力实现可行性吗?
是肯定的。我使用objc运行时做了类似的事情。
我需要克服哪些障碍?
这在很大程度上取决于你想要的细节水平...如果你没有找到这样的实现,实现时间,但我想你会发现一些选项,如果你在objc运行时谷歌更多深奥的功能;也许你会在(开放)语言绑定或桥梁中找到一个?
如果你自己最终写了一个,你可以使用objc_getClassList
获得注册的objc课程,然后从那里访问你想要的属性/信息。