2012-05-07 4 views
1

iOS 5のクラスMPIncomingPhoneCallControllerのメソッドを呼び出して、呼び出しが来たときに何かする必要があります。私は使用しますMPIncomingPhoneCallControllerのメソッドをフックする方法は?

Class _$MPIncomingPhoneCallController = objc_getClass("MPIncomingPhoneCallController"); 

MSHookMessage(_$MPIncomingPhoneCallController, 
       @selector(updateLCDWithName:label:breakPoint:), 
      (IMP) &Hook_LCD, 
      "pre_"); 

updateLCDWithName:label:breakPoint:をフックするには失敗しました。

どうすればいいですか?

+0

あなたはクラスをフックしません。メソッドや関数をフックします。私はちょっとGoogleにお勧めし、MobileSubstrateの使い方に関するチュートリアルを探しますが、まずプログラミングの基礎についてもっと学びましょう。 PS:ここでobjc_getMetaClass()を使用する必要があります – YllierDev

+0

@YllierDevはい、そうです、私は関数をフックします。しかし、まずクラスを取得する必要があります。 objc_getMetaClass()はクラスメソッドをフックするために使用され、objc_getClassはメソッドをフックするために使用されます。 – dustdn

+1

objc_getClassはインスタンスメソッドに使用されます。混乱して申し訳ありませんが、私はあなたがクラスメソッドをフックしたいと思ったかどうか分かりません。とにかく、私は、あなたの微調整がSpringBoardに注入されている間にあなたがそれをフックしようとしていると仮定しています。あなたはこのクラスがかなり遅くロードされたSpringBoard用のプラグインであることを知る必要があります。そのプラグインがロードされた後でしかフックできません。 – YllierDev

答えて

1

フックしようとしているクラスは、着信があった場合にのみSpringBoardに読み込まれるIncomingCall.serviceBundleにあります。実際にロードされたタイミングを判断するには、SBPluginManager loadPluginBundle:をフックする必要があります。ロードされたバンドルがcom.apple.mobilephone.incomingcallになるまで待ちます。それだけであなたが望むものをフックできます。

関連する問題