From de267d1714b77f45e89e448274449b8dcd577bc5 Mon Sep 17 00:00:00 2001 From: wwwcg Date: Mon, 4 Nov 2024 16:01:47 +0800 Subject: [PATCH] refactor(ios): add delegate method for remote debugging (#4109) update hippy demo --- .../HippyDemo.xcodeproj/project.pbxproj | 50 +++++++++---------- .../HippyDemoViewController.h | 0 .../HippyDemoViewController.m | 8 ++- .../HippyDemo/{myview => MyViewDemo}/MyView.h | 0 .../HippyDemo/{myview => MyViewDemo}/MyView.m | 0 .../{myview => MyViewDemo}/MyViewManager.h | 0 .../{myview => MyViewDemo}/MyViewManager.mm | 0 .../TurboBaseModule.h | 0 .../TurboBaseModule.mm | 0 .../TurboConfig.h | 0 .../TurboConfig.m | 0 framework/ios/base/bridge/HippyBridge.h | 3 +- framework/ios/base/bridge/HippyBridge.mm | 3 ++ .../ios/base/bridge/HippyBridgeDelegate.h | 7 +++ .../ios/base/executors/HippyJSExecutor.mm | 5 +- 15 files changed, 45 insertions(+), 31 deletions(-) rename framework/examples/ios-demo/HippyDemo/{RenderPage => }/HippyDemoViewController.h (100%) rename framework/examples/ios-demo/HippyDemo/{RenderPage => }/HippyDemoViewController.m (96%) rename framework/examples/ios-demo/HippyDemo/{myview => MyViewDemo}/MyView.h (100%) rename framework/examples/ios-demo/HippyDemo/{myview => MyViewDemo}/MyView.m (100%) rename framework/examples/ios-demo/HippyDemo/{myview => MyViewDemo}/MyViewManager.h (100%) rename framework/examples/ios-demo/HippyDemo/{myview => MyViewDemo}/MyViewManager.mm (100%) rename framework/examples/ios-demo/HippyDemo/{turbomodule => TurboModuleDemo}/TurboBaseModule.h (100%) rename framework/examples/ios-demo/HippyDemo/{turbomodule => TurboModuleDemo}/TurboBaseModule.mm (100%) rename framework/examples/ios-demo/HippyDemo/{turbomodule => TurboModuleDemo}/TurboConfig.h (100%) rename framework/examples/ios-demo/HippyDemo/{turbomodule => TurboModuleDemo}/TurboConfig.m (100%) diff --git a/framework/examples/ios-demo/HippyDemo.xcodeproj/project.pbxproj b/framework/examples/ios-demo/HippyDemo.xcodeproj/project.pbxproj index 42f8c8ae76d..ca3cf00f81b 100644 --- a/framework/examples/ios-demo/HippyDemo.xcodeproj/project.pbxproj +++ b/framework/examples/ios-demo/HippyDemo.xcodeproj/project.pbxproj @@ -126,24 +126,12 @@ 0632A691275B124491E38EA7 /* HippyDemo */ = { isa = PBXGroup; children = ( - EF558AABDC113B410B8ED69C /* AppDelegate.h */, - 6094F1F80FD70F9F9853EE15 /* AppDelegate.m */, - 427F60D1B98DA953328F4E71 /* DemoBaseViewController.h */, - 4708C41E8571123282E2B806 /* DemoBaseViewController.m */, - 80D715362B1A0B0DCEAA813D /* DemoNavigationViewController.h */, - 16348E2DEBFF10ADD6FCF7A9 /* DemoNavigationViewController.m */, - 6045C301C6CFDC6C2E87AA66 /* IconUtils.h */, - 17AB7FB6346FE861C9D953F5 /* IconUtils.m */, 177A9E8373F2682A9A831991 /* Info.plist */, - D2EE3455BE6DD7D2ADA20093 /* main.m */, - DDD052D2760E830B1E0095EA /* UIViewController+Title.h */, - C412B5D210F1E3359523628C /* UIViewController+Title.m */, - 4CF6648308C60D57DD274D30 /* HomePage */, - DE44248AB3BFFAAE044EAB9E /* myview */, - 73EF815F203E15B86205DFC3 /* PageManager */, - 57D9249C5EA211061816F73B /* RenderPage */, - 09FA8898DDD429EC19584446 /* SettingsPage */, - 529ECDFF8342B9C9D950B1FA /* turbomodule */, + 71EA01A72CD87C0500ED4D29 /* Others */, + DE44248AB3BFFAAE044EAB9E /* MyViewDemo */, + 28C2DA6A96B596294158B364 /* HippyDemoViewController.h */, + 9EB0CD5FCC3F38E3C7DC5E00 /* HippyDemoViewController.m */, + 529ECDFF8342B9C9D950B1FA /* TurboModuleDemo */, ); path = HippyDemo; sourceTree = ""; @@ -193,7 +181,7 @@ path = HomePage; sourceTree = ""; }; - 529ECDFF8342B9C9D950B1FA /* turbomodule */ = { + 529ECDFF8342B9C9D950B1FA /* TurboModuleDemo */ = { isa = PBXGroup; children = ( C629FDE26F7B6DBC976FB63A /* TurboBaseModule.h */, @@ -201,16 +189,28 @@ 041D598BDAC3735B5A06ECE7 /* TurboConfig.h */, 46034630F6D4A25199673157 /* TurboConfig.m */, ); - path = turbomodule; + path = TurboModuleDemo; sourceTree = ""; }; - 57D9249C5EA211061816F73B /* RenderPage */ = { + 71EA01A72CD87C0500ED4D29 /* Others */ = { isa = PBXGroup; children = ( - 28C2DA6A96B596294158B364 /* HippyDemoViewController.h */, - 9EB0CD5FCC3F38E3C7DC5E00 /* HippyDemoViewController.m */, + D2EE3455BE6DD7D2ADA20093 /* main.m */, + EF558AABDC113B410B8ED69C /* AppDelegate.h */, + 6094F1F80FD70F9F9853EE15 /* AppDelegate.m */, + 09FA8898DDD429EC19584446 /* SettingsPage */, + 73EF815F203E15B86205DFC3 /* PageManager */, + 4CF6648308C60D57DD274D30 /* HomePage */, + 6045C301C6CFDC6C2E87AA66 /* IconUtils.h */, + 17AB7FB6346FE861C9D953F5 /* IconUtils.m */, + 427F60D1B98DA953328F4E71 /* DemoBaseViewController.h */, + 4708C41E8571123282E2B806 /* DemoBaseViewController.m */, + 80D715362B1A0B0DCEAA813D /* DemoNavigationViewController.h */, + 16348E2DEBFF10ADD6FCF7A9 /* DemoNavigationViewController.m */, + DDD052D2760E830B1E0095EA /* UIViewController+Title.h */, + C412B5D210F1E3359523628C /* UIViewController+Title.m */, ); - path = RenderPage; + name = Others; sourceTree = ""; }; 73EF815F203E15B86205DFC3 /* PageManager */ = { @@ -253,7 +253,7 @@ name = Frameworks; sourceTree = ""; }; - DE44248AB3BFFAAE044EAB9E /* myview */ = { + DE44248AB3BFFAAE044EAB9E /* MyViewDemo */ = { isa = PBXGroup; children = ( 16E50FF2E97E0CF6CD4B1EE1 /* MyView.h */, @@ -261,7 +261,7 @@ 73A859BDC9C3189E38FD082F /* MyViewManager.h */, 834EC46509EC221C787A9F23 /* MyViewManager.mm */, ); - path = myview; + path = MyViewDemo; sourceTree = ""; }; F3C07E1B41FBB8BA0834C6BC /* fonts */ = { diff --git a/framework/examples/ios-demo/HippyDemo/RenderPage/HippyDemoViewController.h b/framework/examples/ios-demo/HippyDemo/HippyDemoViewController.h similarity index 100% rename from framework/examples/ios-demo/HippyDemo/RenderPage/HippyDemoViewController.h rename to framework/examples/ios-demo/HippyDemo/HippyDemoViewController.h diff --git a/framework/examples/ios-demo/HippyDemo/RenderPage/HippyDemoViewController.m b/framework/examples/ios-demo/HippyDemo/HippyDemoViewController.m similarity index 96% rename from framework/examples/ios-demo/HippyDemo/RenderPage/HippyDemoViewController.m rename to framework/examples/ios-demo/HippyDemo/HippyDemoViewController.m index a72feaec16d..d45f35c7006 100644 --- a/framework/examples/ios-demo/HippyDemo/RenderPage/HippyDemoViewController.m +++ b/framework/examples/ios-demo/HippyDemo/HippyDemoViewController.m @@ -129,7 +129,7 @@ - (void)runHippyDemo { delegate:self]; } - // // Config whether jsc is inspectable, Highly recommended setting, + // Config whether jsc is inspectable, Highly recommended setting, // since inspectable of JSC is disabled by default since iOS 16.4 [bridge setInspectable:YES]; _hippyBridge = bridge; @@ -203,6 +203,12 @@ - (BOOL)shouldStartInspector:(HippyBridge *)bridge { return bridge.debugMode; } +- (NSURL *)inspectorSourceURLForBridge:(HippyBridge *)bridge { + // You can customize to any url. + // By default, we resolve the devtools address from the debug url passed to the bridge. + return bridge.debugURL; +} + #pragma mark - Optional - HippyMethodInterceptorProtocol diff --git a/framework/examples/ios-demo/HippyDemo/myview/MyView.h b/framework/examples/ios-demo/HippyDemo/MyViewDemo/MyView.h similarity index 100% rename from framework/examples/ios-demo/HippyDemo/myview/MyView.h rename to framework/examples/ios-demo/HippyDemo/MyViewDemo/MyView.h diff --git a/framework/examples/ios-demo/HippyDemo/myview/MyView.m b/framework/examples/ios-demo/HippyDemo/MyViewDemo/MyView.m similarity index 100% rename from framework/examples/ios-demo/HippyDemo/myview/MyView.m rename to framework/examples/ios-demo/HippyDemo/MyViewDemo/MyView.m diff --git a/framework/examples/ios-demo/HippyDemo/myview/MyViewManager.h b/framework/examples/ios-demo/HippyDemo/MyViewDemo/MyViewManager.h similarity index 100% rename from framework/examples/ios-demo/HippyDemo/myview/MyViewManager.h rename to framework/examples/ios-demo/HippyDemo/MyViewDemo/MyViewManager.h diff --git a/framework/examples/ios-demo/HippyDemo/myview/MyViewManager.mm b/framework/examples/ios-demo/HippyDemo/MyViewDemo/MyViewManager.mm similarity index 100% rename from framework/examples/ios-demo/HippyDemo/myview/MyViewManager.mm rename to framework/examples/ios-demo/HippyDemo/MyViewDemo/MyViewManager.mm diff --git a/framework/examples/ios-demo/HippyDemo/turbomodule/TurboBaseModule.h b/framework/examples/ios-demo/HippyDemo/TurboModuleDemo/TurboBaseModule.h similarity index 100% rename from framework/examples/ios-demo/HippyDemo/turbomodule/TurboBaseModule.h rename to framework/examples/ios-demo/HippyDemo/TurboModuleDemo/TurboBaseModule.h diff --git a/framework/examples/ios-demo/HippyDemo/turbomodule/TurboBaseModule.mm b/framework/examples/ios-demo/HippyDemo/TurboModuleDemo/TurboBaseModule.mm similarity index 100% rename from framework/examples/ios-demo/HippyDemo/turbomodule/TurboBaseModule.mm rename to framework/examples/ios-demo/HippyDemo/TurboModuleDemo/TurboBaseModule.mm diff --git a/framework/examples/ios-demo/HippyDemo/turbomodule/TurboConfig.h b/framework/examples/ios-demo/HippyDemo/TurboModuleDemo/TurboConfig.h similarity index 100% rename from framework/examples/ios-demo/HippyDemo/turbomodule/TurboConfig.h rename to framework/examples/ios-demo/HippyDemo/TurboModuleDemo/TurboConfig.h diff --git a/framework/examples/ios-demo/HippyDemo/turbomodule/TurboConfig.m b/framework/examples/ios-demo/HippyDemo/TurboModuleDemo/TurboConfig.m similarity index 100% rename from framework/examples/ios-demo/HippyDemo/turbomodule/TurboConfig.m rename to framework/examples/ios-demo/HippyDemo/TurboModuleDemo/TurboConfig.m diff --git a/framework/ios/base/bridge/HippyBridge.h b/framework/ios/base/bridge/HippyBridge.h index 784e1ff3e71..b21b9767ca8 100644 --- a/framework/ios/base/bridge/HippyBridge.h +++ b/framework/ios/base/bridge/HippyBridge.h @@ -388,8 +388,7 @@ HIPPY_EXTERN NSString *HippyBridgeModuleNameForClass(Class bridgeModuleClass); @property (nonatomic, assign) BOOL debugMode; /// Debug URL for devtools -/// TODO: debugURL not working ? -@property (nonatomic, strong, readonly) NSURL *debugURL; +@property (nonatomic, strong, nullable, readonly) NSURL *debugURL; /// Sets whether the context is inspectable in Web Inspector. /// Default value is NO. diff --git a/framework/ios/base/bridge/HippyBridge.mm b/framework/ios/base/bridge/HippyBridge.mm index 62e8de82d4a..18a34b57bef 100644 --- a/framework/ios/base/bridge/HippyBridge.mm +++ b/framework/ios/base/bridge/HippyBridge.mm @@ -231,6 +231,9 @@ - (instancetype)initWithDelegate:(id)delegate _bundleURLs = [NSMutableArray array]; _shareOptions = [NSMutableDictionary dictionary]; _debugMode = [launchOptions[@"DebugMode"] boolValue]; + if (_debugMode) { + _debugURL = bundleURL; + } _enableTurbo = !!launchOptions[@"EnableTurbo"] ? [launchOptions[@"EnableTurbo"] boolValue] : YES; _engineKey = executorKey.length > 0 ? executorKey : [NSString stringWithFormat:@"%p", self]; HippyLogInfo(@"HippyBridge init begin, self:%p", self); diff --git a/framework/ios/base/bridge/HippyBridgeDelegate.h b/framework/ios/base/bridge/HippyBridgeDelegate.h index da1fad1a15e..881a749b785 100644 --- a/framework/ios/base/bridge/HippyBridgeDelegate.h +++ b/framework/ios/base/bridge/HippyBridgeDelegate.h @@ -54,6 +54,13 @@ */ - (BOOL)shouldStartInspector:(HippyBridge *)bridge; +/** + * Ask delegate URL for web inspector (devtools) + * + * To use remote debugging, must implement this method. + */ +- (NSURL *)inspectorSourceURLForBridge:(HippyBridge *)bridge; + /** * Get code cache, not working for Javascriptcore engine * diff --git a/framework/ios/base/executors/HippyJSExecutor.mm b/framework/ios/base/executors/HippyJSExecutor.mm index 9c9fa7928db..6b39a5f293c 100644 --- a/framework/ios/base/executors/HippyJSExecutor.mm +++ b/framework/ios/base/executors/HippyJSExecutor.mm @@ -754,8 +754,8 @@ - (NSString *)completeWSURLWithBridge:(HippyBridge *)bridge { return @""; } HippyDevInfo *devInfo = [[HippyDevInfo alloc] init]; - if (bridge.debugURL) { - NSURL *debugURL = bridge.debugURL; + if ([bridge.delegate respondsToSelector:@selector(inspectorSourceURLForBridge:)]) { + NSURL *debugURL = [bridge.delegate inspectorSourceURLForBridge:bridge]; devInfo.scheme = [debugURL scheme]; devInfo.ipAddress = [debugURL host]; devInfo.port = [NSString stringWithFormat:@"%@", [debugURL port]]; @@ -771,7 +771,6 @@ - (NSString *)completeWSURLWithBridge:(HippyBridge *)bridge { } NSString *deviceName = [[UIDevice currentDevice] name]; NSString *clientId = HippyMD5Hash([NSString stringWithFormat:@"%@%p", deviceName, bridge]); - return [devInfo assembleFullWSURLWithClientId:clientId contextName:bridge.contextName]; }