添加自定义 dylib 文件后,我的 theos tweak 停止工作
My theos tweak stops working after adding a custom dylib file to it
我使用 Theos 创建了一个简单的调整,它向应用 window 添加了一个黄色的 UIView(没有什么特别的),并且它工作得很好。然后我制作了一个 dylib 文件(称为 AlertLib),其中包含一个 class(也称为 AlertLib),使用一种方法:显示一个简单的 UIAlertView
。我将 AlertLib.dylib 复制到 /opt/theos/lib 文件夹,将 AlertLib.h 复制到 /opt/theos/include 文件夹。
我的 Makefile 看起来是这样的:
export ARCHS = armv7 arm64
export TARGET = iphone:clang:latest:8.0
include $(THEOS)/makefiles/common.mk
TWEAK_NAME = YellowSquare
YellowSquare_FILES = Tweak.xm
YellowSquare_FRAMEWORKS = UIKit Foundation
YellowSquare_LDFLAGS = -lAlertLib
include $(THEOS_MAKE_PATH)/tweak.mk
after-install::
install.exec "killall -9 SpringBoard"
并且 Tweak.xm 文件看起来是这样的:
#import "AlertLib.h"
%hook AppDelegate
- (void) applicationDidBecomeActive:(UIApplication *) application
{
static dispatch_once_t once;
dispatch_once(&once, ^{
UIView *yellowSquareView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
yellowSquareView.backgroundColor = [UIColor yellowColor];
UILabel *tweakLabel = [[UILabel alloc] initWithFrame:yellowSquareView.bounds];
tweakLabel.backgroundColor = [UIColor clearColor];
tweakLabel.text = @"TWEAK";
tweakLabel.font = [UIFont systemFontOfSize:25];
tweakLabel.textAlignment = NSTextAlignmentCenter;
[yellowSquareView addSubview:tweakLabel];
UIWindow *window = [UIApplication sharedApplication].keyWindow;
yellowSquareView.center = window.center;
[window addSubview:yellowSquareView];
[[AlertLib sharedInstance] showAlert];
});
%orig;
}
%end
之后我编译了这个调整,并将它安装到设备上,没有错误。但是,现在调整不起作用,即没有在应用程序 window 上添加黄色视图,也没有显示任何警报。如何正确嵌入自定义 dylib 文件进行调整?
根据外观判断,我的赌注是 AlertLib
未安装在设备上。如果 "NOT WORKING" 意味着应用程序崩溃,情况就是如此。
如果可能的话,我想请求 "NOT WORKING" 和编译的 dylib 的详细定义。
我通过将自定义库作为子项目添加到我的调整中解决了我的问题。
我在我的 tweak 的根目录中 运行 命令 /opt/theos/bin/nic.pl
,并从列表中选择 library。它是作为子项目自动添加的。然后我将需要的文件添加到我的库中,它起作用了。
我使用 Theos 创建了一个简单的调整,它向应用 window 添加了一个黄色的 UIView(没有什么特别的),并且它工作得很好。然后我制作了一个 dylib 文件(称为 AlertLib),其中包含一个 class(也称为 AlertLib),使用一种方法:显示一个简单的 UIAlertView
。我将 AlertLib.dylib 复制到 /opt/theos/lib 文件夹,将 AlertLib.h 复制到 /opt/theos/include 文件夹。
我的 Makefile 看起来是这样的:
export ARCHS = armv7 arm64
export TARGET = iphone:clang:latest:8.0
include $(THEOS)/makefiles/common.mk
TWEAK_NAME = YellowSquare
YellowSquare_FILES = Tweak.xm
YellowSquare_FRAMEWORKS = UIKit Foundation
YellowSquare_LDFLAGS = -lAlertLib
include $(THEOS_MAKE_PATH)/tweak.mk
after-install::
install.exec "killall -9 SpringBoard"
并且 Tweak.xm 文件看起来是这样的:
#import "AlertLib.h"
%hook AppDelegate
- (void) applicationDidBecomeActive:(UIApplication *) application
{
static dispatch_once_t once;
dispatch_once(&once, ^{
UIView *yellowSquareView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
yellowSquareView.backgroundColor = [UIColor yellowColor];
UILabel *tweakLabel = [[UILabel alloc] initWithFrame:yellowSquareView.bounds];
tweakLabel.backgroundColor = [UIColor clearColor];
tweakLabel.text = @"TWEAK";
tweakLabel.font = [UIFont systemFontOfSize:25];
tweakLabel.textAlignment = NSTextAlignmentCenter;
[yellowSquareView addSubview:tweakLabel];
UIWindow *window = [UIApplication sharedApplication].keyWindow;
yellowSquareView.center = window.center;
[window addSubview:yellowSquareView];
[[AlertLib sharedInstance] showAlert];
});
%orig;
}
%end
之后我编译了这个调整,并将它安装到设备上,没有错误。但是,现在调整不起作用,即没有在应用程序 window 上添加黄色视图,也没有显示任何警报。如何正确嵌入自定义 dylib 文件进行调整?
根据外观判断,我的赌注是 AlertLib
未安装在设备上。如果 "NOT WORKING" 意味着应用程序崩溃,情况就是如此。
如果可能的话,我想请求 "NOT WORKING" 和编译的 dylib 的详细定义。
我通过将自定义库作为子项目添加到我的调整中解决了我的问题。
我在我的 tweak 的根目录中 运行 命令 /opt/theos/bin/nic.pl
,并从列表中选择 library。它是作为子项目自动添加的。然后我将需要的文件添加到我的库中,它起作用了。