iOS SpringBoardServices获得UIApplication

时间:2013-05-07 07:12:06

标签: ios iphone-privateapi

使用otool -tV SpringBoardServices命令,我能够在SpringBoardServices框架二进制文件中获取C函数..

我可以看到SBFrontmostApplicationDisplayIdentifier这将给我最重要的应用程序的ID。这个id可以用于获取UIApplication吗?最终,我想获得最顶级的视图消费触摸事件及其类型如UIButton等?

任何帮助表示感谢。

1 个答案:

答案 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

  • 我猜UIApplication对象永远不会留下进程空间。实际上,Springboard中存在SBApplication类(继承自SBDisplay)是对此的间接证实。

<强>观

  • 尝试查看BackboardService

  • 尝试查看SpringboardService中的所有API

  • 我会试图解决与Display相关的任何问题。

P.S。我很乐意看到解决方案,因为我不知道有任何API可以让我们看到第三方应用UI。