使用otool -tV SpringBoardServices
命令,我能够在SpringBoardServices
框架二进制文件中获取C函数..
我可以看到SBFrontmostApplicationDisplayIdentifier
这将给我最重要的应用程序的ID。这个id可以用于获取UIApplication吗?最终,我想获得最顶级的视图消费触摸事件及其类型如UIButton等?
任何帮助表示感谢。
答案 0 :(得分:3)
这不是一个真正的答案,而只是对这个问题的一些想法。
C vs Objective C API
一般来说,有两种类型的API:C API(如SBFrontmostApplicationDisplayIdentifier)和目标C API。
我相信所有的C API都只适用于原始类型(字符串,整数等)。我没有看到任何返回Objective C对象的C API。
SBFrontmostApplicationDisplayIdentifier返回id(只是一个字符串)。例如,首选项应用程序的“com.apple.Preferences”。
我相信你会有更好的运气寻找可以返回任何类型物品的Objective C API
进程间通信
没有简单的方法来在进程之间传输对象(特别是指向其他对象的复杂对象,指向其他对象等)。如果你考虑一下,UIApplication对象可以引用一半的应用程序。唯一的方法是在一端序列化一切,在另一端反序列化。
考虑到与对象序列化相关的问题,大多数API需要进行进程间通信,将大多数关键信息的简单结构传递给对方。我在逆向工程iOS二进制文件时看到了这种模式。
<强>的UIApplication 强>
<强>观强>
尝试查看BackboardService
尝试查看SpringboardService中的所有API
我会试图解决与Display相关的任何问题。
P.S。我很乐意看到解决方案,因为我不知道有任何API可以让我们看到第三方应用UI。