Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@
@interface NativeNitroModules () <RCTTurboModuleWithJSIBindings>
@end

// Captured once when RN decorates this module at startup; lets any Nitro
// HybridObject reach sibling RN modules on iOS via +sharedModuleRegistry.
static RCTModuleRegistry* gNitroSharedModuleRegistry = nil;

/**
* NativeNitroModules implementation for the new architecture.
* This uses `installJSIBindingsWithRuntime:` to install the `global.NitroModulesProxy` into the JS Runtime.
Expand All @@ -31,9 +35,21 @@ @implementation NativeNitroModules {
bool _didInstall;
NSString* _Nullable _errorMessage;
std::weak_ptr<react::CallInvoker> _callInvoker;
__weak RCTModuleRegistry* _moduleRegistry;
}
RCT_EXPORT_MODULE(NitroModules)

- (RCTModuleRegistry*)moduleRegistry {
return _moduleRegistry;
}
- (void)setModuleRegistry:(RCTModuleRegistry*)moduleRegistry {
_moduleRegistry = moduleRegistry;
gNitroSharedModuleRegistry = moduleRegistry;
}
+ (nullable RCTModuleRegistry*)sharedModuleRegistry {
return gNitroSharedModuleRegistry;
}

- (void)installJSIBindingsWithRuntime:(jsi::Runtime&)runtime {
// 1. Get CallInvoker we cached statically
std::shared_ptr<react::CallInvoker> callInvoker = _callInvoker.lock();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,30 @@ - (void*)runtime;
- (std::shared_ptr<react::CallInvoker>)jsCallInvoker;
@end

// Captured when RN decorates this module; lets any Nitro HybridObject reach
// sibling RN modules on iOS via +sharedModuleRegistry.
static RCTModuleRegistry* gNitroSharedModuleRegistry = nil;

/**
* NativeNitroModules implementation for the old architecture.
* This uses `RCTBridge` to grab the `jsi::Runtime` and `react::CallInvoker`.
*/
@implementation NativeNitroModules
@implementation NativeNitroModules {
__weak RCTModuleRegistry* _moduleRegistry;
}
RCT_EXPORT_MODULE(NitroModules)

- (RCTModuleRegistry*)moduleRegistry {
return _moduleRegistry;
}
- (void)setModuleRegistry:(RCTModuleRegistry*)moduleRegistry {
_moduleRegistry = moduleRegistry;
gNitroSharedModuleRegistry = moduleRegistry;
}
+ (nullable RCTModuleRegistry*)sharedModuleRegistry {
return gNitroSharedModuleRegistry;
}

RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(install) {
try {
// 1. Cast RCTBridge to a RCTCxxBridge (ObjC)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,27 @@
// Created by Marc Rousavy on 07.10.24.
//

// RCTModuleRegistry + the moduleRegistry property that RN injects into bridge modules.
#import <React/RCTBridgeModule.h>

#ifdef RCT_NEW_ARCH_ENABLED

// New Architecture uses the Codegen'd Spec (TurboModule)
#import <NitroModulesSpec/NitroModulesSpec.h>
@interface NativeNitroModules : NSObject <NativeNitroModulesSpec>
@property (nonatomic, weak) RCTModuleRegistry *moduleRegistry;
/// The RCTModuleRegistry RN injected into this module, captured so any Nitro
/// HybridObject can reach sibling RN modules on iOS (analog of Android's applicationContext).
+ (nullable RCTModuleRegistry *)sharedModuleRegistry;
@end

#else

// Old Architecture is an untyped RCTBridgeModule
#import <React/RCTBridgeModule.h>
@interface NativeNitroModules : NSObject <RCTBridgeModule>
@property (nonatomic, weak) RCTModuleRegistry *moduleRegistry;
/// See above.
+ (nullable RCTModuleRegistry *)sharedModuleRegistry;
@end

#endif