如此认可,我很擅长调整开发,但我遇到了一个问题。我正在进行个人使用的调整,它涉及到多个进程,但是我在这些特定于进程的钩子之间共享变量时遇到了困难。例如,我的SpringBoard方法钩子能够设置静态变量的值,然后访问值集。但是特定于应用程序的方法钩子无法在SpringBoard方法的上下文中检索值集。该变量未初始化。
由于tweak库很常见,如何在一个进程的钩子的上下文中初始化“全局”库级变量,并在另一个进程的上下文中访问该值。
我的第一次尝试看起来像这样:
static BOOL isEnabled;
%hook FirstProcessFirstClass
- (void) methodInFirstProcessFirstClass {
isEnabled = YES;
%orig;
}
%end
%hook FirstProcessSecondClass
- (void) methodInFirstProcessSecondClass {
// This will be 1 if it occurs after methodInFirstProcessFirstClass
NSLog("isEnabled equals %d", isEnabled);
%orig;
}
%end
%hook SecondProcessClass
- (void) methodInSecondProcessClass {
// This is always going to be uninitialized (i.e., 0)
NSLog("isEnabled equals %d", isEnabled);
%orig;
}
%end
你得到的图片,我想在钩住的进程之间共享一个“全局变量”。谢谢你的幽默。 :/
答案 0 :(得分:1)
跨流程共享变量比仅拥有全局变量要复杂一些。您需要使用某种形式的IPC(进程间通信)来跨进程同步变量。由于你勾选了SpringBoard 和其他应用,你可以将SpringBoard设置为"服务器"这样它就可以在其他进程上发送变量的新状态。
您还可以使用%group
指令来根据您的调整实际挂钩的进程来应用挂钩,以便SpringBoard的挂钩仅在SpringBoard进程中处于活动状态而不在应用程序上处于活动状态。这不会有太大变化,但不会有不必要的钩子。