diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index efb23181..53677bea 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -1371,7 +1371,7 @@ SPEC CHECKSUMS: fmt: 4c2741a687cc09f0634a2e2c72a838b99f1ff120 glog: fdfdfe5479092de0c4bdbebedd9056951f092c4f hermes-engine: 01d3e052018c2a13937aca1860fbedbccd4a41b7 - NitroModules: 3bb6f5df53f09431fb9257638f6b8707f788c076 + NitroModules: 90fea041cca2091fbacef9f78094bc59230b084f RCT-Folly: 02617c592a293bd6d418e0a88ff4ee1f88329b47 RCTDeprecation: b03c35057846b685b3ccadc9bfe43e349989cdb2 RCTRequired: 194626909cfa8d39ca6663138c417bc6c431648c diff --git a/packages/react-native-nitro-modules/NitroModules.podspec b/packages/react-native-nitro-modules/NitroModules.podspec index 2b64ac72..91e17c89 100644 --- a/packages/react-native-nitro-modules/NitroModules.podspec +++ b/packages/react-native-nitro-modules/NitroModules.podspec @@ -17,16 +17,20 @@ Pod::Spec.new do |s| # VisionCamera Core C++ bindings s.source_files = [ - "cpp/**/*.{h,c}", - "cpp/**/*.{hpp,cpp}", + # Shared C++ codebase + "cpp/**/*.{h,hpp}", + "cpp/**/*.{c,cpp}", + # iOS codebase + "ios/**/*.{h,hpp}", + "ios/**/*.{m,mm}", "ios/**/*.swift", - "ios/**/*.h", "ios/**/*.modulemap", ] s.public_header_files = [ "cpp/core/**/*.{h,hpp}", "cpp/threading/**/*.{h,hpp}", - "cpp/utils/**/*.{h,hpp}" + "cpp/utils/**/*.{h,hpp}", + "cpp/turbomodule/RegisterNativeNitroModules.hpp", ] s.pod_target_xcconfig = { diff --git a/packages/react-native-nitro-modules/cpp/turbomodule/RegisterNativeNitroModules.cpp b/packages/react-native-nitro-modules/cpp/turbomodule/RegisterNativeNitroModules.cpp new file mode 100644 index 00000000..60623207 --- /dev/null +++ b/packages/react-native-nitro-modules/cpp/turbomodule/RegisterNativeNitroModules.cpp @@ -0,0 +1,23 @@ +// +// RegisterNativeNitroModules.cpp +// DoubleConversion +// +// Created by Marc Rousavy on 21.06.24. +// + +#include "RegisterNativeNitroModules.hpp" +#include "NativeNitroModules.hpp" +#include +#include + +namespace margelo { + +void RegisterNativeNitroModules::registerNativeNitroModules() { + facebook::react::registerCxxModuleToGlobalModuleMap( + std::string(facebook::react::NativeNitroModules::kModuleName), + [&](std::shared_ptr jsInvoker) { + return std::make_shared(jsInvoker); + }); +} + +} diff --git a/packages/react-native-nitro-modules/cpp/turbomodule/RegisterNativeNitroModules.hpp b/packages/react-native-nitro-modules/cpp/turbomodule/RegisterNativeNitroModules.hpp new file mode 100644 index 00000000..b4b5bdeb --- /dev/null +++ b/packages/react-native-nitro-modules/cpp/turbomodule/RegisterNativeNitroModules.hpp @@ -0,0 +1,21 @@ +// +// RegisterNativeNitroModules.hpp +// DoubleConversion +// +// Created by Marc Rousavy on 21.06.24. +// + +#pragma once + +namespace margelo { + +class RegisterNativeNitroModules { +public: + /** + Registers the native NitroModules TurboModule into the React Runtime. + This can be called from Swift/Objective-C. + */ + static void registerNativeNitroModules(); +}; + +} // namespace margelo diff --git a/packages/react-native-nitro-modules/ios/turbomodule/NitroModuleOnLoad.mm b/packages/react-native-nitro-modules/ios/turbomodule/NitroModuleOnLoad.mm new file mode 100644 index 00000000..fed8ca10 --- /dev/null +++ b/packages/react-native-nitro-modules/ios/turbomodule/NitroModuleOnLoad.mm @@ -0,0 +1,23 @@ +// +// NitroModuleOnLoad.mm +// DoubleConversion +// +// Created by Marc Rousavy on 21.06.24. +// + +#import +#import "RegisterNativeNitroModules.hpp" + +@interface NitroModulesOnLoad : NSObject +@end + +@implementation NitroModulesOnLoad + ++ (void)load { + // When this Objective-C class is loaded, it registers the CxxTurboModule in the react module system. + // We need Objective-C here because these things do not get compiled out - meaning this will always be + // called when the app starts. + margelo::RegisterNativeNitroModules::registerNativeNitroModules(); +} + +@end