From 35af416936a0a08fb0f748f057b4fd9688550a42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20=C5=BBelawski?= Date: Thu, 14 Aug 2025 17:37:38 +0200 Subject: [PATCH] feat(iOS): get TurboModules conforming to protocol --- .../React/Base/RCTTurboModuleRegistry.h | 1 + .../ios/ReactCommon/RCTTurboModuleManager.mm | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/packages/react-native/React/Base/RCTTurboModuleRegistry.h b/packages/react-native/React/Base/RCTTurboModuleRegistry.h index 8ad5d06af1164f..340757544925ef 100644 --- a/packages/react-native/React/Base/RCTTurboModuleRegistry.h +++ b/packages/react-native/React/Base/RCTTurboModuleRegistry.h @@ -22,5 +22,6 @@ * TurboModules to TurboModules is complete. */ - (id)moduleForName:(const char *)moduleName warnOnLookupFailure:(BOOL)warnOnLookupFailure; +- (id)getModulesConformingToProtocol:(Protocol *)protocol; - (BOOL)moduleIsInitialized:(const char *)moduleName; @end diff --git a/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm b/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm index 5168bbf415d1a7..ab0f769fdf0bca 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm +++ b/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm @@ -996,6 +996,24 @@ - (id)moduleForName:(const char *)moduleName warnOnLookupFailure:(BOOL)warnOnLoo return module; } +- (id)getModulesConformingToProtocol:(Protocol *)protocol{ + NSMutableArray *modules = [NSMutableArray new]; + + for (auto &pair : _moduleHolders) { + auto * moduleName = pair.first.c_str(); + Class moduleClass = [self _getModuleClassFromName:moduleName]; + + if ([moduleClass conformsToProtocol:protocol]) { + id module = [self moduleForName:moduleName]; + if (module) { + [modules addObject:module]; + } + } + } + + return modules; +} + - (BOOL)moduleIsInitialized:(const char *)moduleName { std::unique_lock guard(_moduleHoldersMutex);