summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Bingner <sam@bingner.com>2019-10-23 23:26:45 -1000
committerSam Bingner <sam@bingner.com>2019-10-23 23:26:45 -1000
commit907d20416333ce7a16953cafc2b938a1758f2bee (patch)
treed2449ab401c4092181faa115446d95721c8baeb3
parent0bcec9f6b28c56aa9333bf78dcd322c25afb858e (diff)
Update sbreload to avoid strange apple(?) bug
-rw-r--r--data/uikittools/1_uicache.diff (renamed from data/uikittools/uicache.diff)97
-rw-r--r--data/uikittools/2_sbreload.diff43
-rw-r--r--data/uikittools/_metadata/version2
-rw-r--r--data/uikittools/ldrestart-jbd.diff3
4 files changed, 125 insertions, 20 deletions
diff --git a/data/uikittools/uicache.diff b/data/uikittools/1_uicache.diff
index 02828f4ed..8a01dd2e3 100644
--- a/data/uikittools/uicache.diff
+++ b/data/uikittools/1_uicache.diff
@@ -650,7 +650,7 @@ diff -urN uikittools/uicache.mm uikittools+uicache/uicache.mm
/* Modified BSD License {{{ */
/*
* Redistribution and use in source and binary
-@@ -38,13 +48,14 @@
+@@ -38,13 +48,16 @@
/* }}} */
#import <Foundation/Foundation.h>
@@ -669,10 +669,12 @@ diff -urN uikittools/uicache.mm uikittools+uicache/uicache.mm
+#import <getopt.h>
+#import <launch.h>
+#import <objc/runtime.h>
++#import <crt_externs.h>
++#import <xpc/xpc.h>
#include "csstore.hpp"
-@@ -81,6 +92,12 @@
+@@ -81,6 +94,12 @@
@end
@@ -685,7 +687,7 @@ diff -urN uikittools/uicache.mm uikittools+uicache/uicache.mm
@interface LSApplicationWorkspace : NSObject
+ (id) defaultWorkspace;
- (BOOL) registerApplication:(id)application;
-@@ -89,16 +106,188 @@
+@@ -89,16 +108,188 @@
- (BOOL) registerApplicationDictionary:(id)application;
- (BOOL) installApplication:(id)application withOptions:(id)options;
- (BOOL) _LSPrivateRebuildApplicationDatabasesForSystemApps:(BOOL)system internal:(BOOL)internal user:(BOOL)user;
@@ -695,15 +697,15 @@ diff -urN uikittools/uicache.mm uikittools+uicache/uicache.mm
+@interface MCMAppDataContainer
++(id)containerWithIdentifier:(NSString*)identifier createIfNecessary:(bool)create existed:(bool*)existed error:(NSError*)error;
+-(NSURL*)url;
++@end
++
++@interface FBSSystemService
+++(id)sharedService;
++-(void)sendActions:(NSSet*)actions withResult:(id)result;
@end
-int main(int argc, const char *argv[]) {
- NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-+@interface FBSSystemService
-++(id)sharedService;
-+-(void)sendActions:(NSSet*)actions withResult:(id)result;
-+@end
-+
+typedef enum {
+ None = 0,
+ RestartRenderServer = (1 << 0), // also relaunch backboardd
@@ -731,7 +733,9 @@ diff -urN uikittools/uicache.mm uikittools+uicache/uicache.mm
+ }
+ return [NSString pathWithComponents:[[path pathComponents] subarrayWithRange:NSMakeRange(0, 3)]];
+}
-+
+
+- Class $LSApplicationWorkspace(objc_getClass("LSApplicationWorkspace"));
+- LSApplicationWorkspace *workspace($LSApplicationWorkspace == nil ? nil : [$LSApplicationWorkspace defaultWorkspace]);
+bool appIsRegistered(NSString *path)
+{
+ @autoreleasepool {
@@ -743,7 +747,9 @@ diff -urN uikittools/uicache.mm uikittools+uicache/uicache.mm
+ return false;
+ }
+}
-+
+
+- if (kCFCoreFoundationVersionNumber > 1000) // this API is on iOS 7 but invaliding the icon cache is harder there
+- if ([workspace respondsToSelector:@selector(_LSPrivateRebuildApplicationDatabasesForSystemApps:internal:user:)]) {
+bool unregisterPath(NSString *path)
+{
+ @autoreleasepool {
@@ -823,7 +829,7 @@ diff -urN uikittools/uicache.mm uikittools+uicache/uicache.mm
+ };
+ }
+ }
-+ if (![workspace registerApplicationDictionary:dict]) {
++ if (![[$LSApplicationWorkspace defaultWorkspace] registerApplicationDictionary:dict]) {
+ fprintf(stderr, "Error: registerApplicationDictionary failed for %s\n", path.lastPathComponent.UTF8String);
+ return false;
+ }
@@ -838,9 +844,7 @@ diff -urN uikittools/uicache.mm uikittools+uicache/uicache.mm
+ fprintf(stderr, "Usage: %s [-hrv] [[-p | -u] /Applications/App.app]]\n", getprogname());
+ exit(EXIT_FAILURE);
+}
-
-- Class $LSApplicationWorkspace(objc_getClass("LSApplicationWorkspace"));
-- LSApplicationWorkspace *workspace($LSApplicationWorkspace == nil ? nil : [$LSApplicationWorkspace defaultWorkspace]);
++
+pid_t launch_get_job_pid(const char * job)
+{
+ launch_data_t resp;
@@ -869,9 +873,7 @@ diff -urN uikittools/uicache.mm uikittools+uicache/uicache.mm
+ launch_data_free(resp);
+ return pid;
+}
-
-- if (kCFCoreFoundationVersionNumber > 1000) // this API is on iOS 7 but invaliding the icon cache is harder there
-- if ([workspace respondsToSelector:@selector(_LSPrivateRebuildApplicationDatabasesForSystemApps:internal:user:)]) {
++
+int standard_uicache(void)
+{
+ @autoreleasepool {
@@ -880,7 +882,7 @@ diff -urN uikittools/uicache.mm uikittools+uicache/uicache.mm
if (![workspace _LSPrivateRebuildApplicationDatabasesForSystemApps:YES internal:YES user:NO])
fprintf(stderr, "failed to rebuild application databases");
return 0;
-@@ -226,12 +415,188 @@
+@@ -226,12 +417,247 @@
system("killall -SIGCONT SpringBoard");
}
@@ -896,6 +898,32 @@ diff -urN uikittools/uicache.mm uikittools+uicache/uicache.mm
+ }
+}
+
++pid_t pidOfCydia(void) {
++ launch_data_t request = launch_data_new_string(LAUNCH_KEY_GETJOBS);
++ launch_data_t response = launch_msg(request);
++ launch_data_free(request);
++ __block pid_t pid=-1;
++
++ if (response == NULL || launch_data_get_type(response) != LAUNCH_DATA_DICTIONARY) return -1;
++
++ xpc_dictionary_apply((xpc_object_t)response, ^bool(const char *key, xpc_object_t value) {
++ if (xpc_get_type(value) == XPC_TYPE_DICTIONARY) {
++ const char *program = xpc_dictionary_get_string(value, "Program");
++ if (program && strcmp(program, "/Applications/Cydia.app/Cydia") == 0) {
++ pid = (pid_t)xpc_dictionary_get_int64(value, "PID");
++ if (verbose) fprintf(stderr, "Found Cydia running with PID: %d\n", pid);
++ return false;
++ }
++ }
++ return true;
++ });
++
++ if (pid>0) {
++ return pid;
++ }
++ return -1;
++}
++
+int optimized_uicache(void) {
+ __block int rv=0;
+ NSMutableDictionary *registered = [NSMutableDictionary new];
@@ -911,6 +939,39 @@ diff -urN uikittools/uicache.mm uikittools+uicache/uicache.mm
+ if (verbose) fprintf(stderr, "Updating %s\n", appPath.lastPathComponent.UTF8String);
+ registered[appPath] = @YES;
+ }
++ pid_t cydia_pid;
++ if ([found[2] isEqualToString:@"Cydia.app"] &&
++ (cydia_pid = pidOfCydia()) > 0) {
++ // We are in cydia and trying to refresh it - this will kill it. Let's schedule it for later.
++ if (verbose) fprintf(stderr, "Waiting to refresh Cydia...\n");
++ pid_t pid = fork();
++ if (pid == 0) {
++ setpgrp();
++ signal(SIGHUP, SIG_IGN);
++ signal(SIGPIPE, SIG_IGN);
++ fclose(stdin);
++ freopen("/dev/null", "a", stderr);
++ freopen("/dev/null", "a", stdout);
++ pid = fork();
++ if (pid == 0) {
++ while (kill(cydia_pid, 0)==0) {
++ sleep(1);
++ }
++ const char *uicache = (*_NSGetArgv())[0];
++ execl(uicache, uicache, "-vvvvvvv", NULL);
++ fprintf(stderr, "Unable to exec\n");
++ fflush(stderr);
++ exit(-1);
++ }
++ exit(0);
++ } else if (pid > 0) {
++ int stat;
++ waitpid(pid, &stat, 0);
++ return;
++ } else {
++ fprintf(stderr, "Unable to fork\n");
++ }
++ }
+ if (!registerPath(appPath)) rv++;
+ }
+ };
diff --git a/data/uikittools/2_sbreload.diff b/data/uikittools/2_sbreload.diff
new file mode 100644
index 000000000..88dcd40f4
--- /dev/null
+++ b/data/uikittools/2_sbreload.diff
@@ -0,0 +1,43 @@
+diff --git a/sbreload.m b/sbreload.m
+index e36134f..85b8e17 100644
+--- a/sbreload.m
++++ b/sbreload.m
+@@ -49,6 +49,7 @@
+ #define FLAG_PLATFORMIZE (1 << 1)
+ #include <dlfcn.h>
+ #include <objc/runtime.h>
++#include <xpc/xpc.h>
+
+ @interface FBSSystemService
+ +(id)sharedService;
+@@ -143,16 +144,26 @@ void platformizeme() {
+ case kCFNumberLongType:
+ case kCFNumberLongLongType:
+ CFNumberGetValue(cfr, kCFNumberLongLongType, &n);
+- r = launch_data_alloc(LAUNCH_DATA_INTEGER);
+- launch_data_set_integer(r, n);
++ if (kCFCoreFoundationVersionNumber >= 1443.00) {
++ r = (launch_data_t)xpc_int64_create(n);
++ } else {
++ // This hangs forever if I call it on new iOS???
++ r = launch_data_alloc(LAUNCH_DATA_INTEGER);
++ launch_data_set_integer(r, n);
++ }
+ break;
+ case kCFNumberFloat32Type:
+ case kCFNumberFloat64Type:
+ case kCFNumberFloatType:
+ case kCFNumberDoubleType:
+ CFNumberGetValue(cfr, kCFNumberDoubleType, &d);
+- r = launch_data_alloc(LAUNCH_DATA_REAL);
+- launch_data_set_real(r, d);
++ if (kCFCoreFoundationVersionNumber >= 1443.00) {
++ r = (launch_data_t)xpc_double_create(d);
++ } else {
++ // Not sure if this hangs, but added to be safe
++ r = launch_data_alloc(LAUNCH_DATA_REAL);
++ launch_data_set_real(r, d);
++ }
+ break;
+ default:
+ r = NULL;
diff --git a/data/uikittools/_metadata/version b/data/uikittools/_metadata/version
index 9ea63dbcc..645377eea 100644
--- a/data/uikittools/_metadata/version
+++ b/data/uikittools/_metadata/version
@@ -1 +1 @@
-1.1.13
+1.1.15
diff --git a/data/uikittools/ldrestart-jbd.diff b/data/uikittools/ldrestart-jbd.diff
index 43f66a693..014f7d5c1 100644
--- a/data/uikittools/ldrestart-jbd.diff
+++ b/data/uikittools/ldrestart-jbd.diff
@@ -2,7 +2,7 @@ diff --git a/ldrestart.cpp b/ldrestart.cpp
index a6d6cb6..c9a3b33 100644
--- a/ldrestart.cpp
+++ b/ldrestart.cpp
-@@ -34,6 +34,30 @@
+@@ -34,6 +34,31 @@
#define FLAG_PLATFORMIZE (1 << 1)
#include <dlfcn.h>
@@ -20,6 +20,7 @@ index a6d6cb6..c9a3b33 100644
+
+const char *skip[] = {
+ "jailbreakd",
++ "science.xnu.substituted",
+ "com.saurik.substrated",
+ "com.apple.MobileFileIntegrity",
+ "com.openssh.sshd.",