ios - 链接第 3 方框架时,theos tweak 未加载到应用程序中

标签 ios jailbreak theos

我正在使用 theos 将第三个框架链接到我的测试调整中,它除了日志之外什么都不做,似乎在链接框架之后,tweak.dylib 根本没有加载到应用程序中。如果我在 makefile 中注释掉框架,调整效果很好。任何想法?谢谢

makefile关于框架的内容很简单:

ARCHS = arm64

include $(THEOS)/makefiles/common.mk

ADDITIONAL_OBJCFLAGS = -fobjc-arc

TWEAK_NAME = WebServerTest
WebServerTest_FILES = Tweak.xm


WebServerTest_CFLAGS += -F./Frameworks
WebServerTest_LDFLAGS += -F./Frameworks -framework GCDWebServers

include $(THEOS_MAKE_PATH)/tweak.mk

after-install::
    install.exec "killall -9 SpringBoard"

tweak.xm 非常简单:

%ctor {
    NSLog(@"Staring up tweak...");
    %init();
}

所以如果我在上面注释掉

WebServerTest_CFLAGS += -F./Frameworks

WebServerTest_LDFLAGS += -F./Frameworks -framework GCDWebServers

调整工作正常:

Aug 13 10:06:20 iOS-Dev SpringBoard(WebServerTest.dylib)[10378] <Notice>: Staring up tweak...

但是,如果我开始链接框架,则根本不会加载 WebServerTest.dylib

我在 lldb cmd image list 中手动检查了一个测试应用程序,它显示 WebServerTest.dylib 根本没有加载

有什么想法吗?或者我如何开始调试错误?因为我不确定可能的原因在哪里。

环境:iOS 12.0,unc0ver 3.1.0

otool -l WebServerTest.dylib | fgrep -A5 LC_LOAD_DYLIB

表演

--
          cmd LC_LOAD_DYLIB
      cmdsize 72
         name @rpath/GCDWebServers.framework/GCDWebServers (offset 24)
   time stamp 2 Thu Jan  1 08:00:02 1970
      current version 1.0.0
compatibility version 1.0.0
--

好像是用了@rpath,我能理解,但是我可以把这个框架嵌入到tweak.dylib中,这样它就可以自动加载了吗?

最佳答案

无论您将 GCDWebServers.framework 放在哪里,dyld 都不会寻找它。有几种方法可以解决这个问题。

您可以修补 GCDWebServersLC_ID_DYLIB 命令以包含绝对路径 - 您可能希望为此查看 man install_name_tool .

或者您可以将一些-rpath 标志添加到您的LDFLAGS。具体来说,如果您的 GCDWebServers 位于 /mypath/GCDWebServers.framework/GCDWebServers,您将添加:

-rpath /mypath/

或者,如果您想在 dylib 旁边放置 GCDWebServers.framework,无论绝对路径如何,您都应该能够使用:

-rpath @loader_path/

有关详细信息,请参阅 man dyldman ld

关于ios - 链接第 3 方框架时,theos tweak 未加载到应用程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57470368/

相关文章:

ios - NSMutableDictionary setValue :forKey failing sometimes

ios - 链接到 AFNetworking iOSOpenDev 的问题

ios - 在我的应用程序中录制音频错误

iOS10 UNNotificationServiceExtension 未调用

ios - 如何在快速执行之间停止GCD

ios - 如何使用私有(private)系统 API?

ios - 越狱设备上的调试服务器

iOS 在越狱设备上录制电话音频

ios - 如何在我的应用程序中实现 UITapGestureRecognizer

objective-c - 在 theos 中挂接 IVAR 错误