From 078c541dda3fe2165556deb5592f9ea4dd9ea2f0 Mon Sep 17 00:00:00 2001 From: viatearz Date: Sat, 30 May 2026 11:33:31 +0800 Subject: [PATCH] fix: ignore Unity keyboard initialization error --- .../Controls/PTFakeTouch/NSObject+Swizzle.m | 16 ++++++++++++++++ PlayTools/PlaySettings.swift | 3 +++ 2 files changed, 19 insertions(+) diff --git a/PlayTools/Controls/PTFakeTouch/NSObject+Swizzle.m b/PlayTools/Controls/PTFakeTouch/NSObject+Swizzle.m index 6796b2b7..e50200fb 100644 --- a/PlayTools/Controls/PTFakeTouch/NSObject+Swizzle.m +++ b/PlayTools/Controls/PTFakeTouch/NSObject+Swizzle.m @@ -201,6 +201,15 @@ + (NSArray *)hook_GCMouse_mice { return @[]; } ++ (void)hook_Unity_KeyboardDelegate_Initialize { + @try { + [self hook_Unity_KeyboardDelegate_Initialize]; + } + @catch (NSException *exception) { + NSLog(@"Caught exception: %@, reason: %@", exception.name, exception.reason); + } +} + // Hook for UIUserInterfaceIdiom // - (long long) hook_userInterfaceIdiom { @@ -353,6 +362,13 @@ + (void)load { [objc_getClass("GCMouse") swizzleClassMethod:@selector(current) withMethod:@selector(hook_GCMouse_current)]; [objc_getClass("GCMouse") swizzleClassMethod:@selector(mice) withMethod:@selector(hook_GCMouse_mice)]; } + + // Delay a frame to wait for some frameworks (such as UnityFramework) to load + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.01 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ + if ([[PlaySettings shared] ignoreUnityKeyboardInitializationError]) { + [objc_getClass("KeyboardDelegate") swizzleClassMethod:NSSelectorFromString(@"Initialize") withMethod:@selector(hook_Unity_KeyboardDelegate_Initialize)]; + } + }); } @end diff --git a/PlayTools/PlaySettings.swift b/PlayTools/PlaySettings.swift index b034a1f4..a5f945b4 100644 --- a/PlayTools/PlaySettings.swift +++ b/PlayTools/PlaySettings.swift @@ -97,6 +97,8 @@ let settings = PlaySettings.shared @objc lazy var disableBuiltinMouse = settingsData.disableBuiltinMouse @objc lazy var blockSleepSpamming = settingsData.blockSleepSpamming + + @objc lazy var ignoreUnityKeyboardInitializationError = settingsData.ignoreUnityKeyboardInitializationError } struct AppSettingsData: Codable { @@ -131,4 +133,5 @@ struct AppSettingsData: Codable { var resizableAspectRatioWidth = 0 var resizableAspectRatioHeight = 0 var blockSleepSpamming = false + var ignoreUnityKeyboardInitializationError = false }