Justin
(Justin)
1
我测试37页的代码,发现在iphone iOS 7.1.1 下,其中按下Home键那段不执行… 不知道是否我写错了,还是在iOS7.1.1下有问题
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
%hook SpringBoard
-(void)applicationDidFinishLaunching: (id)application
{
NSLog(@"===========程序已经运行!!=============");//此行可以运行
%orig;
}
-(void)menuButtonDown:(id)down
{
NSLog(@"你按下了Home键!");//按下Home键多次,均没有运行
%orig;
}
%end
日志输出截取:
Jul 2 12:37:15 iphone SpringBoard[693] <Notice>: MS:Notice: Loading: /Library/MobileSubstrate/DynamicLibraries/tweaks_test01.dylib
Jul 2 12:37:15 iphone SpringBoard[693] <Warning>: ===========程序已经运行!!=============
Justin
(Justin)
3
我从iphone中 class-dump 了 SpringBoard.h SpringBoard.h.zip (4.43 KB) ,找到其中的定义:
- (void)menuButtonDown:(struct __GSEvent *)arg1;
- (void)_menuButtonDown:(struct __IOHIDEvent *)arg1;
于是我修改代码如下:
//-(void)menuButtonDown:(id)down //修改了这里
- (void)menuButtonDown:(struct __GSEvent *)arg1
{
NSLog(@"你按下了Home键!");//按下Home键多次,均没有运行
%orig;
}
可是执行依然没有效果。。。
书上的例子是在iOS 6以下的机子上测试的,在iOS 7上已经失效。具体的原因想必你也猜到了,所有的触摸事件由原来的GSEvent换成了IOHIDEvent,即触摸操作由GraphicsServices负责变成了由IOKit负责,这也暗示着iOS与OSX的进一步融合。至于你的问题,把要hook的函数改成
- (void)_menuButtonDown:(struct __IOHIDEvent *)arg1;
就可以触发了
Justin
(Justin)
5
十分感谢~!哎,自己都发现这个方法了,却没想到试试~~
一步之遥就能自己解决了,捶地!!:mad: