From cad5335a73abdbd6deb1400ed452ccda7d4fec98 Mon Sep 17 00:00:00 2001 From: PlayDay <18056374+playday3008@users.noreply.github.com> Date: Wed, 8 Apr 2026 13:55:52 +0200 Subject: [PATCH] fix: prevent cleanup() from corrupting user preferences cleanup() runs after UID escalation to root. Writing to NSUserDefaults as root causes it to overwrite the app's preference plist, losing keys like "tweaks". This makes the "Load Tweaks" toggle appear enabled in the UI (storyboard default) while the actual preference is nil, so load_daemons() is silently skipped on subsequent boots. Move the restrap flag reset to ViewController before run_jailbreak() is called, where the process still runs as the mobile user and NSUserDefaults operates on the correct plist. --- socket/jailbreak.m | 3 --- socket/supporting files/ViewController.m | 5 +++++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/socket/jailbreak.m b/socket/jailbreak.m index 001fe8b..6bb58b5 100644 --- a/socket/jailbreak.m +++ b/socket/jailbreak.m @@ -20,9 +20,6 @@ void status(const char *str) { } void cleanup(void) { - [[NSUserDefaults standardUserDefaults] setObject:@"no" forKey:@"restrap"]; - [[NSUserDefaults standardUserDefaults] synchronize]; - flush_volume("/private/var"); flush_volume("/"); usleep(100000); diff --git a/socket/supporting files/ViewController.m b/socket/supporting files/ViewController.m index 8f9850c..911a2a5 100644 --- a/socket/supporting files/ViewController.m +++ b/socket/supporting files/ViewController.m @@ -110,6 +110,11 @@ - (IBAction)jb:(id)sender { uint32_t flags = JB_FLAG_RESPRING; if ([[[NSUserDefaults standardUserDefaults] stringForKey:@"tweaks"] isEqual:@"yes"]) flags |= JB_FLAG_TWEAKS; if ([[[NSUserDefaults standardUserDefaults] stringForKey:@"restrap"] isEqual:@"yes"]) flags |= JB_FLAG_BOOTSTRAP; + + // Reset restrap before UID escalation (NSUserDefaults breaks as root) + [[NSUserDefaults standardUserDefaults] setObject:@"no" forKey:@"restrap"]; + [[NSUserDefaults standardUserDefaults] synchronize]; + int ret = run_jailbreak(flags); dispatch_async(dispatch_get_main_queue(), ^{