iOS SpringBoardServices获得UIApplication

Jai*_*ken 5 iphone-privateapi ios

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

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

任何帮助赞赏.

Vic*_*nin 3

这不是一个真正的答案,只是对这个问题的一些想法。

C 与 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 二进制文件进行逆向工程时正是看到了这种模式。

UI应用程序

  • 我猜测 UIApplication 对象永远不会离开进程空间。实际上Springboard中SBApplication类(继承自SBDisplay)的存在是对此的一种间接确认。

想法

  • 尝试查看 BackboardService

  • 尝试查看 SpringboardService 中的所有 API

  • 我会尝试寻找任何与显示相关的东西。

PS 我很想看到解决方案,因为我不知道有任何 API 可以提供对第 3 方应用程序 UI 的可见性。