ios - 如何在越狱调整中检测 AVCaptureSession 启动并获取哪个应用程序启动它?

标签 ios jailbreak avcapturesession tweak theos

基本上,我想知道什么时候向用户展示了相机画面,以及这是从哪个应用程序触发的。

我试图 Hook AVCaptureSession-(void)startRunning;

但是

SBApplication *topApp = [(SpringBoard *)[UIApplication sharedApplication] _accessibilityFrontMostApplication];

不工作。结果是调用 sharedApplication 返回 null。我也试过在 %c(SpringBoard)objc_getClass("SpringBoard") 上调用方法,但结果相同。

除此之外,钩子(Hook)仅在消息应用程序中打开相机时才起作用,尽管我在过滤器字典中指定了几个 bundle ,如 com.apple.springboardcom.facebook.Facebook

我做错了什么? AVCaptureSession API 是否被其他应用程序使用?

最佳答案

SpringBoard 类仅存在于 SpringBoard 进程中,因此 %c(SpringBoard)objc_getClass("SpringBoard") 将在任何其他进程中返回 nil。

要获取您正在挂接的应用程序的当前包名称,您可以使用 [[NSBundle mainBundle] bundleIdentifier]。您必须使用某种形式的 IPC/XPC 来发送此信息以及有关您想了解的 session 的其他信息。接收端可以是 SpringBoard 进程或个人守护进程,以免因额外任务而阻塞 SpringBoard。

至于您的问题“AVCaptureSession API 不是被其他应用程序使用了吗?”,可能某些应用程序使用其他类来捕获图像/视频,从而导致此 Hook 无用。作为一名越狱开发者,我和许多其他人一样发现,Apple 程序员并不遵守严格的编码风格。还可以有其他较低级别的函数来实现相同的目的,在这种情况下,您将需要做更多的工作,因为没有与 C 函数并行的类转储。

关于ios - 如何在越狱调整中检测 AVCaptureSession 启动并获取哪个应用程序启动它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23170884/

相关文章:

ios - IOS 中启动屏幕和初始屏幕之间的故障

ios - [NSOperationQueue mainQueue] 保证是串行的吗?

iphone - 这是使用 UIGestureRecognizer 之一处理手势的安全方法吗?

ios - 检测是否在越狱的 iDevice 中安装/卸载了另一个应用程序

ios - 在iOS 7中阻止传入的短信

ios - 模拟器中音频的 AVCaptureSession

ios-Apple Mach-O 链接器错误

ios - 检查应用程序是否有使用私有(private)框架的通知?

objective-c - iOS相机编程-如何快速获取静止图像使用AVCaptureVideoDataOutput和AVCaptureStillImageOutput案例

ios - AVCapture session 捕获图像 SWIFT