From c10e0af8ffd01ae2d2cae9434d142c8d9e386569 Mon Sep 17 00:00:00 2001 From: khanhduytran0 Date: Sun, 11 Sep 2022 21:58:11 +0700 Subject: [PATCH] Various fixes, some cleanup Fixes: - dlopen gets hooked no matter if installed in /Applications or container - Jailbroken IPA installation always looked for /usr/lib/jvm instead of the internal one - Metal returned 0 physical devices, caused all renderers to be broken - Zink renderer tried to load VirGL stuff --- Natives/JavaLauncher.m | 4 ++-- Natives/LauncherPreferences.h | 4 ---- Natives/LauncherPreferences.m | 2 +- Natives/LauncherPreferencesViewController2.h | 5 ----- Natives/egl_bridge.m | 4 ++-- Natives/main.m | 5 +++++ Natives/main_hook.m | 2 +- Natives/utils.h | 2 +- entitlements_ipa.xml | 10 ++++++++++ 9 files changed, 22 insertions(+), 16 deletions(-) diff --git a/Natives/JavaLauncher.m b/Natives/JavaLauncher.m index 78eee735..2ead8d9b 100644 --- a/Natives/JavaLauncher.m +++ b/Natives/JavaLauncher.m @@ -99,7 +99,7 @@ void init_loadCustomJvmFlags() { } NSString* environmentFailsafes(int minVersion) { - NSString *jvmPath = getenv("POJAV_DETECTEDJB") ? @"/usr/lib/jvm" : [NSString stringWithFormat:@"%s/jvm", getenv("BUNDLE_PATH")]; + NSString *jvmPath = getenv("POJAV_PREFER_EXTERNAL_JRE") ? @"/usr/lib/jvm" : [NSString stringWithFormat:@"%s/jvm", getenv("BUNDLE_PATH")]; NSString *javaHome = nil; NSString *jre8Path = [NSString stringWithFormat:@"%@/java-8-openjdk", jvmPath]; @@ -130,7 +130,7 @@ int launchJVM(NSString *username, id launchTarget, int width, int height, int mi NSString *javaHome_pre = getPreference(@"java_home"); if (![javaHome_pre hasPrefix:@"/"]) { - javaHome_pre = [NSString stringWithFormat:@"%s/jvm/%@", getenv("POJAV_DETECTEDJB") ? "/usr/lib" : getenv("BUNDLE_PATH"), javaHome_pre]; + javaHome_pre = [NSString stringWithFormat:@"%s/jvm/%@", getenv("POJAV_PREFER_EXTERNAL_JRE") ? "/usr/lib" : getenv("BUNDLE_PATH"), javaHome_pre]; } // We handle unset JAVA_HOME right there diff --git a/Natives/LauncherPreferences.h b/Natives/LauncherPreferences.h index 711ba25e..1fa92689 100644 --- a/Natives/LauncherPreferences.h +++ b/Natives/LauncherPreferences.h @@ -1,9 +1,5 @@ #import -#define JRE8_HOME_JB @"/usr/lib/jvm/java-8-openjdk" -#define JRE16_HOME_JB @"/usr/lib/jvm/java-16-openjdk" -#define JRE17_HOME_JB @"/usr/lib/jvm/java-17-openjdk" - void loadPreferences(BOOL reset); id getPreference(NSString* key); NSMutableDictionary* getDictionary(NSString *type); diff --git a/Natives/LauncherPreferences.m b/Natives/LauncherPreferences.m index 89599438..020bee95 100644 --- a/Natives/LauncherPreferences.m +++ b/Natives/LauncherPreferences.m @@ -116,7 +116,7 @@ void loadPreferences(BOOL reset) { setDefaultValueForPref(envPrefDict, @"allocated_memory", [NSNumber numberWithFloat:roundf(([[NSProcessInfo processInfo] physicalMemory] / 1048576) * 0.25)]); setDefaultValueForPref(prefDict, @"debug_logging", @(CONFIG_RELEASE != 1)); setDefaultValueForPref(prefDict, @"arccapes_enable", @YES); - setDefaultValueForPref(envPrefDict, @"java_home", @""); + setDefaultValueForPref(envPrefDict, @"java_home", @"java-8-openjdk"); setDefaultValueForPref(envPrefDict, @"renderer", @"auto"); fillDefaultWarningDict(); setDefaultValueForPref(prefDict, @"a7_allow", @NO); diff --git a/Natives/LauncherPreferencesViewController2.h b/Natives/LauncherPreferencesViewController2.h index f983eda1..053fb43f 100644 --- a/Natives/LauncherPreferencesViewController2.h +++ b/Natives/LauncherPreferencesViewController2.h @@ -1,10 +1,5 @@ #import -#define JRE8_NAME_JB @"Java 8" -#define JRE16_NAME_JB @"Java 16" -#define JRE17_NAME_JB @"Java 17" -#define JRE8_NAME_SB @"Java 8 (sandbox)" - @interface LauncherPreferencesViewController2 : UITableViewController @end diff --git a/Natives/egl_bridge.m b/Natives/egl_bridge.m index 48c7e4bf..44cb51c9 100644 --- a/Natives/egl_bridge.m +++ b/Natives/egl_bridge.m @@ -226,11 +226,11 @@ jboolean pojavInit_OpenGL() { NSString *renderer = @(getenv("POJAV_RENDERER")); JNI_LWJGL_changeRenderer(renderer.UTF8String); BOOL isAuto = [renderer isEqualToString:@"auto"]; - if ([renderer isEqualToString:@"libOSMesa.8.dylib"]) { + /* if ([renderer isEqualToString:@"libOSMesa.8.dylib"]) { config_renderer = RENDERER_VIRGL; setenv("GALLIUM_DRIVER", "virpipe", 1); loadSymbolsVirGL(); - } else if (isAuto || [renderer isEqualToString:@ RENDERER_NAME_GL4ES]) { + } else */ if (isAuto || [renderer isEqualToString:@ RENDERER_NAME_GL4ES]) { config_renderer = RENDERER_MTL_ANGLE; setenv("POJAV_RENDERER", RENDERER_NAME_GL4ES, 1); loadSymbols(); diff --git a/Natives/main.m b/Natives/main.m index 34daa222..81e80aef 100644 --- a/Natives/main.m +++ b/Natives/main.m @@ -116,6 +116,11 @@ void init_logDeviceAndVer(char *argument) { regLog("[Pre-Init] %s with iOS %s (Unjailbroken)", deviceHardware, deviceSoftware); } + NSString *jvmPath = [NSString stringWithFormat:@"%s/jvm", getenv("BUNDLE_PATH")]; + if (![fm fileExistsAtPath:jvmPath]) { + setenv("POJAV_PREFER_EXTERNAL_JRE", "1", 1); + } + regLog("[Pre-init] Entitlements availability:"); printEntitlementAvailability(@"com.apple.developer.kernel.extended-virtual-addressing"); printEntitlementAvailability(@"com.apple.developer.kernel.increased-memory-limit"); diff --git a/Natives/main_hook.m b/Natives/main_hook.m index 9b1c103d..73ff7638 100644 --- a/Natives/main_hook.m +++ b/Natives/main_hook.m @@ -26,7 +26,7 @@ int hooked_open(const char *path, int oflag, ...) { } void init_hookFunctions() { - if (getenv("POJAV_DETECTEDJB")) { + if (getenv("POJAV_PREFER_EXTERNAL_JRE")) { // In this environment, libawt_xawt is not available/X11 only. // hook dlopen to use our libawt_xawt rebind_symbols((struct rebinding[1]){{"dlopen", hooked_dlopen, (void *)&orig_dlopen}}, 1); diff --git a/Natives/utils.h b/Natives/utils.h index 734d7a95..2f9fa34c 100644 --- a/Natives/utils.h +++ b/Natives/utils.h @@ -47,7 +47,7 @@ #define RENDERER_NAME_GL4ES "libgl4es_114.dylib" #define RENDERER_NAME_MTL_ANGLE "libtinygl4angle.dylib" -#define RENDERER_NAME_VK_ZINK "libOSMesa.8.dylib" +#define RENDERER_NAME_VK_ZINK "libOSMesaOverride.dylib" #define SPECIALBTN_KEYBOARD -1 #define SPECIALBTN_TOGGLECTRL -2 diff --git a/entitlements_ipa.xml b/entitlements_ipa.xml index 864cd6e9..d0fcea7c 100644 --- a/entitlements_ipa.xml +++ b/entitlements_ipa.xml @@ -16,5 +16,15 @@ com.apple.private.security.no-container + + + com.apple.security.iokit-user-client-class + + IOSurfaceRootUserClient + AGXDeviceUserClient + AGXSharedUserClient + AGXCommandQueue + AGXDevice +