通话时长 class

Call duration class

我正在寻找 class 来处理 UIView(或来电者姓名)的 iOS 8 , 所以我可以挂钩它并找到它的框架位置

到目前为止我尝试和发现的内容:

在 iOS 8 上,调用 UI 不再在 MobilePhone 或 SpringBoard 中运行。它实际上在一个单独的进程中运行 - InCallService.app。它的工作原理就像 MFMessageComposeViewController 我研究过 here。 MobilePhone 或 SpringBoard(不确定,这并不重要),显示,调用视图中所谓的远程视图控制器 - 它是一个显示在您的应用程序中的视图控制器,但它背后的实际逻辑在单独的进程中运行。

例如,当您显示 MFMessageComposeViewController 以从您的应用程序发送 SMS 消息时,您实际上使用了代理对象,该对象通过 XPC 连接到实际视图控制器代码运行的另一个进程。您的应用程序仅将用户输入发送到进程并显示它 returns 给您的结果 - 远程视图控制器通过 XPC 连接转发方法调用。您实际上对控制器没有任何控制权 - 您可以通过实现逻辑的 XPC 服务提供的非常有限的 API 来操纵它。

这些远程视图控制器的明显目的是安全。在 iOS 5 上没有任何内容,MFMessageComposeViewController 就像常规视图控制器一样实现。这意味着您可以对其进行逆向工程以在未经用户许可的情况下发送 SMS 消息。而这正是某些人所做的——AppStore 应用程序可以使用 this 代码静默发送 SMS 消息。从 iOS 6 开始,该代码需要 AppStore 无法拥有的特殊权利。 MessagesViewService.app 有它,通过其中的远程视图控制器 运行,您可以从 AppStore 应用程序发送 SMS 消息,但现在如果没有 UI 和用户交互,您将无法做到这一点。

与通话中相同UI。您可以通过调用然后终止 InCallService.app 进程来测试它 - 在调用视图中将消失。因此,为了改变某些东西,您需要挂钩 InCallService.app。不幸的是,我没有研究它来确切地告诉你需要挂钩哪些方法,但在这一点上它会非常容易。我建议您开始查看 PHInCallRootViewControllerPHInCallRootViewControllerActualPHCallParticipantsView。后者有一个非常有趣的方法 setSingleDurationTimerLabel:(id) 修改 _singleDurationTimerLabel ivar。它看起来像持续时间标签视图。