Skip to content

Commit 26c71d8

Browse files
cipolleschifacebook-github-bot
authored andcommitted
Use RCTDependencyProvider in RCTAppDelegate
Summary: ## This Change: This change uses the `RCTDependencyProvider` protocol created before, breaking the dependency between the RCTAppDelegate and codegen. ## Context React Native has a last temporal dependency on Codegen in the React-RCTAppDelegate pod. The RCTAppDelegate has the responsibility to provide various dependencies to react native, like third party components and various modules. ReactCodegen is generated when the user create the project, while React-RCTAppDelegate eists in React Native itself. This dependency means that we cannot prepare prebuilt for iOS for React Native because when we would have to create prebuilds, we would need the React Codegen, but we can't create a React codegen package that will fit all the apps, because React Codegen can contains App Specific modules and components and apps might have different dependencies. ## Changelog: [iOS][Breaking] - Use the RCTDependencyProvider in the RCTAppDelegate, breaking the dependency with Codegen Differential Revision: D66074438
1 parent d31ffe6 commit 26c71d8

File tree

5 files changed

+14
-30
lines changed

5 files changed

+14
-30
lines changed

packages/react-native/Libraries/AppDelegate/RCTAppDelegate.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
@protocol RCTComponentViewProtocol;
1818
@class RCTRootView;
1919
@class RCTSurfacePresenterBridgeAdapter;
20+
@protocol RCTDependencyProvider;
2021

2122
NS_ASSUME_NONNULL_BEGIN
2223

@@ -70,6 +71,7 @@ NS_ASSUME_NONNULL_BEGIN
7071
@property (nonatomic, strong, nullable) NSString *moduleName;
7172
@property (nonatomic, strong, nullable) NSDictionary *initialProps;
7273
@property (nonatomic, strong, nonnull) RCTRootViewFactory *rootViewFactory;
74+
@property (nonatomic, strong) id<RCTDependencyProvider> dependencyProvider;
7375

7476
/// If `automaticallyLoadReactNativeWindow` is set to `true`, the React Native window will be loaded automatically.
7577
@property (nonatomic, assign) BOOL automaticallyLoadReactNativeWindow;

packages/react-native/Libraries/AppDelegate/RCTAppDelegate.mm

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#import <react/renderer/graphics/ColorComponents.h>
2020
#import "RCTAppDelegate+Protected.h"
2121
#import "RCTAppSetupUtils.h"
22+
#import "RCTDependencyProvider.h"
2223

2324
#if RN_DISABLE_OSS_PLUGIN_HEADER
2425
#import <RCTTurboModulePlugin/RCTTurboModulePlugin.h>
@@ -34,14 +35,6 @@
3435
#endif
3536
#import <react/nativemodule/defaults/DefaultTurboModules.h>
3637

37-
#if __has_include(<ReactCodegen/RCTThirdPartyComponentsProvider.h>)
38-
#define USE_OSS_CODEGEN 1
39-
#import <ReactCodegen/RCTThirdPartyComponentsProvider.h>
40-
#else
41-
// Meta internal system do not generate the RCTModulesConformingToProtocolsProvider.h file
42-
#define USE_OSS_CODEGEN 0
43-
#endif
44-
4538
using namespace facebook::react;
4639

4740
@interface RCTAppDelegate () <RCTComponentViewFactoryComponentProvider, RCTHostDelegate>
@@ -236,18 +229,14 @@ - (Class)getModuleClassFromName:(const char *)name
236229

237230
- (id<RCTTurboModule>)getModuleInstanceFromClass:(Class)moduleClass
238231
{
239-
return RCTAppSetupDefaultModuleFromClass(moduleClass);
232+
return RCTAppSetupDefaultModuleFromClass(moduleClass, self.dependencyProvider);
240233
}
241234

242235
#pragma mark - RCTComponentViewFactoryComponentProvider
243236

244237
- (NSDictionary<NSString *, Class<RCTComponentViewProtocol>> *)thirdPartyFabricComponents
245238
{
246-
#if USE_OSS_CODEGEN
247-
return [RCTThirdPartyComponentsProvider thirdPartyFabricComponents];
248-
#else
249-
return @{};
250-
#endif
239+
return self.dependencyProvider ? self.dependencyProvider.thirdPartyFabricComponents : @{} ;
251240
}
252241

253242
- (RCTRootViewFactory *)createRCTRootViewFactory

packages/react-native/Libraries/AppDelegate/RCTAppSetupUtils.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,14 @@
2525

2626
#import <ReactCommon/RCTTurboModuleManager.h>
2727

28+
@protocol RCTDependencyProvider;
29+
2830
// Forward declaration to decrease compilation coupling
2931
namespace facebook::react {
3032
class RuntimeScheduler;
3133
}
3234

33-
RCT_EXTERN id<RCTTurboModule> RCTAppSetupDefaultModuleFromClass(Class moduleClass);
35+
RCT_EXTERN id<RCTTurboModule> RCTAppSetupDefaultModuleFromClass(Class moduleClass, id<RCTDependencyProvider> dependencyProvider);
3436

3537
std::unique_ptr<facebook::react::JSExecutorFactory> RCTAppSetupDefaultJsExecutorFactory(
3638
RCTBridge *bridge,

packages/react-native/Libraries/AppDelegate/RCTAppSetupUtils.mm

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,7 @@
2727
// jsinspector-modern
2828
#import <jsinspector-modern/InspectorFlags.h>
2929

30-
#if __has_include(<ReactCodegen/RCTModulesConformingToProtocolsProvider.h>)
31-
#define USE_OSS_CODEGEN 1
32-
#import <ReactCodegen/RCTModulesConformingToProtocolsProvider.h>
33-
#else
34-
// Meta internal system do not generate the RCTModulesConformingToProtocolsProvider.h file
35-
#define USE_OSS_CODEGEN 0
36-
#endif
30+
#import "RCTDependencyProvider.h"
3731

3832
void RCTAppSetupPrepareApp(UIApplication *application, BOOL turboModuleEnabled)
3933
{
@@ -60,22 +54,20 @@ void RCTAppSetupPrepareApp(UIApplication *application, BOOL turboModuleEnabled)
6054
return [[RCTRootView alloc] initWithBridge:bridge moduleName:moduleName initialProperties:initialProperties];
6155
}
6256

63-
id<RCTTurboModule> RCTAppSetupDefaultModuleFromClass(Class moduleClass)
57+
id<RCTTurboModule> RCTAppSetupDefaultModuleFromClass(Class moduleClass, id<RCTDependencyProvider> dependencyProvider)
6458
{
6559
// private block used to filter out modules depending on protocol conformance
6660
NSArray * (^extractModuleConformingToProtocol)(RCTModuleRegistry *, Protocol *) =
6761
^NSArray *(RCTModuleRegistry *moduleRegistry, Protocol *protocol) {
6862
NSArray<NSString *> *classNames = @[];
69-
70-
#if USE_OSS_CODEGEN
63+
7164
if (protocol == @protocol(RCTImageURLLoader)) {
72-
classNames = [RCTModulesConformingToProtocolsProvider imageURLLoaderClassNames];
65+
classNames = dependencyProvider ? dependencyProvider.imageURLLoaderClassNames : @[];
7366
} else if (protocol == @protocol(RCTImageDataDecoder)) {
74-
classNames = [RCTModulesConformingToProtocolsProvider imageDataDecoderClassNames];
67+
classNames = dependencyProvider ? dependencyProvider.imageDataDecoderClassNames : @[];
7568
} else if (protocol == @protocol(RCTURLRequestHandler)) {
76-
classNames = [RCTModulesConformingToProtocolsProvider URLRequestHandlerClassNames];
69+
classNames = dependencyProvider ? dependencyProvider.URLRequestHandlerClassNames : @[];
7770
}
78-
#endif
7971

8072
NSMutableArray *modules = [NSMutableArray new];
8173

packages/react-native/Libraries/AppDelegate/React-RCTAppDelegate.podspec

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@ Pod::Spec.new do |s|
7676
s.dependency "React-nativeconfig"
7777
s.dependency "React-RCTFBReactNativeSpec"
7878
s.dependency "React-defaultsnativemodule"
79-
s.dependency "ReactCodegen"
8079

8180
add_dependency(s, "ReactCommon", :subspec => "turbomodule/core", :additional_framework_paths => ["react/nativemodule/core"])
8281
add_dependency(s, "React-NativeModulesApple")

0 commit comments

Comments
 (0)