我有一个tweak工程,用宏切开部分功能的端口号编译了2个tweak,第二个编译出来的tweak将文件名改了下,同时安装到手机里,但是只有一个tweak被加载了,另一个没被加载!
求解?由于我开发了2个版本(开发版,用户版,可单独安装也可同时安装),所以需要2个tweak
求打神帮忙!万分感谢!
我有一个tweak工程,用宏切开部分功能的端口号编译了2个tweak,第二个编译出来的tweak将文件名改了下,同时安装到手机里,但是只有一个tweak被加载了,另一个没被加载!
求解?由于我开发了2个版本(开发版,用户版,可单独安装也可同时安装),所以需要2个tweak
求打神帮忙!万分感谢!
没被加载的那个tweak里的dylib叫什么?
如果叫xxx.dylib,那么ssh过去,然后
grep xxx.dylib /var/log/syslog
看看有没有什么输出
X-Ys-iPhone-6:~ root# grep x1.dylib /var/log/syslog
May 13 09:36:00 X-Ys-iPhone-6 SpringBoard[1256]: MS:Notice: Loading: /Library/MobileSubstrate/DynamicLibraries/x1.dylib
May 13 09:36:00 X-Ys-iPhone-6 SpringBoard[1256]: MS:Notice: Loading: /Library/MobileSubstrate/DynamicLibraries/x12.dylib
说明被加载了,但是我hook了- (void)applicationDidFinishLaunching:(id)arg1方法,在其中打印了一些数据,也用CFMessagePortCreateLocal创建了通信端口(端口号用宏切开的)
结果就是,x1.dylib打印了数据,x12.dylib没打印数据,App1向x1.dylib发消息正常,App2向x12.dylib发消息失败且客户端CFMessagePortRef变量为空,说明服务端创建失败。但是单独安装x1.deb或x2.deb都没有问题(2个都是App+Tweak)! 邪了门了?求解
X-Ys-iPhone-6:~ root# grep APWINDOW_PORT_NAME /var/log/syslog
May 13 09:36:09 X-Ys-iPhone-6 SpringBoard[1256]: APWINDOW_PORT_NAME=com.x1.window.port
//x12端口号没打印
X-Ys-iPhone-6:~ root# grep applicationDidFinishLaunching /var/log/syslog
May 13 09:36:03 X-Ys-iPhone-6 SpringBoard[1256]: applicationDidFinishLaunching
//只打印了一次
以下是部分源码
%hook SpringBoard
(void)applicationDidFinishLaunching:(id)arg1
{
NSLog(@“applicationDidFinishLaunching”);
%orig;
NSLog(@“APWINDOW_PORT_NAME=%s”,APWINDOW_PORT_NAME); //此处APWINDOW_PORT_NAME为宏,同时安装只被打印了一次
CFMessagePortRef localMessagePortRef = CFMessagePortCreateLocal(NULL, CFSTR(APWINDOW_PORT_NAME), windowMessageCallBack, NULL, NULL);
if(rocketbootstrap_cfmessageportexposelocal(localMessagePortRef) != 0)
{
NSLog(@“CFMessagePortRef create error !”);
return;
}
CFRunLoopSourceRef runLoopSourceRef = CFMessagePortCreateRunLoopSource(NULL, localMessagePortRef, NULL);
CFRunLoopRef runLoopRef = CFRunLoopGetCurrent();
CFRunLoopAddSource(runLoopRef, runLoopSourceRef, kCFRunLoopDefaultMode);
CFRelease(runLoopSourceRef);
CFRelease(localMessagePortRef);
}
%end
是不是函数的命名之类冲突了?
你grep的是x1.dylib,为什么会输出x12.dylib的内容?
我新建了一个工程把代码拷进去,然后编译一个版本就可以了
你
grep x12.dylib /var/log/syslog
看看是什么输出
我直观感觉还是哪里冲突了