同一tweak工程编译两个版本的tweak只加载了一个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

看看是什么输出
我直观感觉还是哪里冲突了