gpt4 book ai didi

ios - 使用公共(public)/非公共(public)/私有(private) API 在设备上获取顶级 UIWIndow/UIView

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:15:45 26 4
gpt4 key购买 nike

我正在尝试找出如何使用非公共(public)/私有(private) API 找到最顶层的 View ,是否有任何方法可以做到这一点(iOS 7.1.2)?

编辑:

可能我没说清楚,无论现在有什么应用程序处于事件状态(Facebook、whatsapp、游戏、锁屏、日历等),我都想获得最高的 View 。

最佳答案

选项

如果我没理解错的话,您想要在另一个应用程序的窗口之上显示一个 UIView。在应用程序沙箱中,您只能访问自己应用程序的窗口。然而,越狱将允许您执行此操作,但这并不简单。

为了在应用程序之上显示一个 View ,您有三个选择。您选择哪个选项取决于您要执行的操作。

  1. 将您的代码注入(inject)第三方应用
  2. 将您的代码注入(inject) SpringBoard
  3. 结合使用方法 1 和 2。

选项 1

如果您选择采用这种方式,您的代码将在每个第三方应用程序中运行。这允许您修改应用程序的 View 层次结构以显示您自己的窗口,甚至修改现有窗口。由于您的代码正在应用程序中运行,因此您只需调用即可获取关键窗口:

[[UIApplication sharedApplication] keyWindow]

选项 2

如果选择此选项,无论打开什么应用程序,您的代码都将运行。通过获取主窗口,您可以在任何内容上显示 UI,包括系统警报。我已将此示例发布到 GitHub rpendleton/tutorials/so-26032688 .该示例会在用户将手机从静音状态中取出时随时显示警报。检索 SpringBoard 窗口的代码是:

[[NSClassFromString(@"SBUIController") sharedInstance] window]

选项 3

第三个选项,也是您最终可能会使用的选项,是选项 1 和选项 2 的组合。在这种情况下,您会将代码注入(inject)第三方应用程序,然后与 SpringBoard 通信以决定需要做什么。通常,您的应用程序会与 SpringBoard 通信,然后 SpringBoard 可以将该信息中继到所需的应用程序。您也许可以直接在您的应用程序和第三方应用程序之间进行通信,但我还没有尝试过。

通讯

为了在您的应用程序和 SpringBoard/其他第三方应用程序之间进行通信,您需要使用消息传递系统。进行此通信的一种简单方法是通过名为 RocketBootstrap 的开源库。 .

截图

左侧的屏幕截图来 self 在 GitHub 上发布的示例,右侧的屏幕截图来 self 的一个调整 AppScan。虽然我在两者中都显示了警报,但您可以显示您想要的任何 View 。

Example 2 screenshots

关于ios - 使用公共(public)/非公共(public)/私有(private) API 在设备上获取顶级 UIWIndow/UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26032688/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com