From 86310d7d71319b9afb314aab197d22ec168891f1 Mon Sep 17 00:00:00 2001 From: staturnz <118011249+staturnzz@users.noreply.github.com> Date: Wed, 13 Nov 2024 19:31:00 -0600 Subject: [PATCH] Add Apex and Amethyst, support userspace reboot based on the installed jailbreak --- .../ZBCommunitySourcesTableViewController.m | 18 +++++++++++++ Zebra/ZBDevice.h | 5 +++- Zebra/ZBDevice.m | 25 ++++++++++++++++++- 3 files changed, 46 insertions(+), 2 deletions(-) diff --git a/Zebra/Tabs/Home/Community Sources/ZBCommunitySourcesTableViewController.m b/Zebra/Tabs/Home/Community Sources/ZBCommunitySourcesTableViewController.m index 38cdfc5d3a..0f4a9eb2e8 100644 --- a/Zebra/Tabs/Home/Community Sources/ZBCommunitySourcesTableViewController.m +++ b/Zebra/Tabs/Home/Community Sources/ZBCommunitySourcesTableViewController.m @@ -196,6 +196,24 @@ - (NSArray *)utilitySources { @"url" : @"https://ellekit.space/", @"icon": @"https://ellekit.space/CydiaIcon.png"}]; break; + + case ZBJailbreakAmethyst: + [result addObject:@{@"type": @"utility", + @"name": @"Procursus", + @"url" : @"https://apt.procurs.us/", + @"icon": @"https://apt.procurs.us/CydiaIcon.png"}]; + break; + + case ZBJailbreakApex: + [result addObject:@{@"type": @"utility", + @"name": @"Procursus", + @"url" : @"https://apt.procurs.us/", + @"icon": @"https://apt.procurs.us/CydiaIcon.png"}]; + [result addObject:@{@"type": @"utility", + @"name": @"Odyssey Repo", + @"url" : @"https://repo.theodyssey.dev/", + @"icon": @"https://repo.theodyssey.dev/CydiaIcon.png"}]; + break; default: diff --git a/Zebra/ZBDevice.h b/Zebra/ZBDevice.h index a8dfa05eb3..abbc4f0224 100644 --- a/Zebra/ZBDevice.h +++ b/Zebra/ZBDevice.h @@ -41,7 +41,9 @@ typedef NS_ENUM(NSUInteger, ZBJailbreak) { ZBJailbreakMineekJB64, ZBJailbreakMineekJB, ZBJailbreakBakera1n, - ZBJailbreakP0insettia + ZBJailbreakP0insettia, + ZBJailbreakAmethyst, + ZBJailbreakApex }; typedef NS_ENUM(NSUInteger, ZBBootstrap) { @@ -75,6 +77,7 @@ NS_ASSUME_NONNULL_BEGIN + (NSString *)debianArchitecture; + (nullable NSString *)packageManagementBinary; + (NSString *)path; ++ (BOOL)supportsUserspaceReboot; + (void)hapticButton; diff --git a/Zebra/ZBDevice.m b/Zebra/ZBDevice.m index 1c2796df56..7a5a63f745 100644 --- a/Zebra/ZBDevice.m +++ b/Zebra/ZBDevice.m @@ -76,6 +76,24 @@ + (BOOL)needsSimulation { #endif } ++ (BOOL)supportsUserspaceReboot { + // all detectable iOS 14+ jailbreaks support userspace reboots + if (@available(iOS 14, *)) { + if (self.jailbreak != ZBJailbreakUnknown && self.jailbreak != ZBJailbreakSimulated) { + return YES; + } + } + + switch (self.jailbreak) { + case ZBJailbreakCheckra1n: + case ZBJailbreakChimera: + case ZBJailbreakOdyssey: + case ZBJailbreakAmethyst: return YES; + default: break; + } + return NO; +} + + (BOOL)isSlingshotBroken:(NSError *_Nullable*_Nullable)error { #if TARGET_OS_SIMULATOR return NO; //Since simulated devices don't have su/sling, it isn't broken! @@ -247,7 +265,7 @@ + (void)restartSpringBoard { + (void)restartDevice { if (![self needsSimulation]) { - if (@available(iOS 15, *)) { + if ([self supportsUserspaceReboot]) { // Try userspace reboot NSLog(@"[Zebra] Trying userspace reboot"); if ([ZBCommand execute:@"launchctl" withArguments:@[@"reboot", @"userspace"] asRoot:YES]) { @@ -345,7 +363,10 @@ + (ZBJailbreak)_jailbreak { @"/.installed_g0blin": @(ZBJailbreakG0blin), @"/.installed_p0insettia": @(ZBJailbreakP0insettia), @"/cores/binpack/.installed_overlay": @(ZBJailbreakBakera1n), + @"/.installed_amethyst": @(ZBJailbreakAmethyst), + @"/.installed_apex": @(ZBJailbreakApex) }; + NSDictionary *jailbreakInstalledDirs = @{ @"/binpack": @(ZBJailbreakCheckra1n), @"/electra": @(ZBJailbreakElectra), @@ -439,6 +460,8 @@ + (NSString *)jailbreakName { case ZBJailbreakMineekJB: return @"mineekJB"; case ZBJailbreakBakera1n: return @"bakera1n"; case ZBJailbreakP0insettia: return @"p0insettia"; + case ZBJailbreakAmethyst: return @"Amethyst"; + case ZBJailbreakApex: return @"Apex"; } }