【问题标题】:Call duration class通话时长类
【发布时间】:2015-01-21 21:44:44
【问题描述】:
我正在寻找为 iOS 8 处理呼叫持续时间 UIView(或呼叫者姓名)的类
, 所以我可以钩入它并找到它的框架位置
到目前为止我尝试并发现了什么:
我查找了 TelephonyUI private framework headers 类,经过这么多小时的挖掘和尝试,一无所获
在我看来它与 MobilePhone.app 有关,但也找不到任何东西
syslog 主要在Core Telephony Framework 下记录来自它的数据
【问题讨论】:
标签:
ios
objective-c
jailbreak
theos
【解决方案1】:
在 iOS 8 上,通话中 UI 不再在 MobilePhone 或 SpringBoard 中运行。它实际上在一个单独的进程中运行 - InCallService.app。它的工作原理就像MFMessageComposeViewController 我研究了here。 MobilePhone 或 SpringBoard(不确定,这并不重要),显示,所谓的远程视图控制器,用于通话视图 - 它是一个视图控制器,显示在您的应用程序中,但它背后的实际逻辑在单独的进程中运行。
例如,当您显示MFMessageComposeViewController 以从您的应用程序发送 SMS 消息时,您实际上是在使用代理对象,该对象通过 XPC 连接到另一个运行实际视图控制器代码的进程。您的应用程序仅将用户输入发送到进程并显示它返回给您的结果 - 远程视图控制器通过 XPC 连接转发方法调用。您实际上对控制器没有任何控制权 - 您可以通过 XPC 服务提供的非常有限的 API 来操作它,该 API 实现了逻辑。
这些远程视图控制器的明显目的是安全。在 iOS 5 上没有,MFMessageComposeViewController 的实现就像一个普通的视图控制器。这意味着您可以对其进行逆向工程以在未经用户许可的情况下发送 SMS 消息。这正是某些人所做的——AppStore 应用程序可以使用this 代码静默发送 SMS 消息。从 iOS 6 开始,该代码需要 AppStore 所没有的特殊权利。 MessagesViewService.app 拥有它,并且通过在其中运行的远程视图控制器,您可以从 AppStore 应用程序发送 SMS 消息,但现在您无法在没有 UI 和用户交互的情况下执行此操作。
与通话界面相同。您可以通过调用然后终止InCallService.app 进程来测试它 - 在调用视图中将消失。因此,为了更改某些内容,您需要挂钩 InCallService.app。不幸的是,我没有研究它来确切地告诉您需要挂钩哪些方法,但此时它会很容易。我建议您开始查看PHInCallRootViewController、PHInCallRootViewControllerActual 和PHCallParticipantsView。后者有一个非常有趣的方法setSingleDurationTimerLabel:(id),它修改了_singleDurationTimerLabel ivar。它看起来像持续时间标签视图。