Hook 麦克风API遇到的问题

###在做一个tweak,用于检测麦克风API的调用情况,遇到一些问题不知道怎么解决,麻烦各位指教!先谢谢各位前辈大神啦!

想达到的效果是:每当有app需要使用麦克风,就弹框提醒用户,并让用户选择允许访问或者是拒绝。

这个Tweak的注入对象是“com.apple.avfoundation”,下面是我的代码:

遇到的问题是:

  1. 第24行“%orig;”,如果不注释掉,录音app会崩溃;
  2. 注释掉第24行代码之后,按说这个被hook的方法应该已经没办法执行原来的功能,录音功能应该没办法执行了。然而在app内按下录音按钮,UIALertController弹出成功(如下图),但是录音功能却还可以正常运作,没有像预想的一样被拦截下来。

不明白的是,为什么第24行“%orig”会导致程序崩溃呢?
而且注释掉第24行之后,tweak里面已经没有“%orig”了,为什么录音功能还可以正常实现?
如果hook这个方法不太合适的话,有没有其他方法比较合适呢?

期待各位的回复,谢谢!

你在block里面执行了原来的代码,肯定是要崩溃的。
我估计是他原来代码对传入的参数obj进行了修改,导致你在block里面无法操作原对象

###问题解决了

功能最终实现,但是hook的目标是另外一个方法(- (void)requestRecordPermission:)。
上面崩溃的原因有两个,一是因为%orig忘记写参数;更重要的原因是"-(void) performSelector:withObject"的第二个参数是一个block,参数是block的话要把block的返回类型和参数写上(参考了snakeninny SNSNinja)。