Skip to content

Commit 2e9a376

Browse files
sota000facebook-github-bot
authored andcommitted
Add fabric option to the default app template.
Summary: Changelog: [internal] Added fabric option to the default app template. Use RCT_TM_FABRIC_ENABLED C++ flag to enable fabric. Reviewed By: sammy-SC Differential Revision: D33052956 fbshipit-source-id: 28313829c80abcf02baa521bdb0b70213c94a97f
1 parent 8ec0e69 commit 2e9a376

File tree

3 files changed

+34
-7
lines changed

3 files changed

+34
-7
lines changed

React/AppSetup/RCTAppSetupUtils.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@
3030

3131
@interface RCTAppSetupUtils : NSObject
3232
+ (void)prepareApp:(UIApplication *_Nonnull)application;
33-
+ (RCTRootView *_Nonnull)defaultRootViewWithBridge:(RCTBridge *_Nonnull)bridge
34-
moduleName:(NSString *_Nonnull)moduleName
35-
initialProperties:(nullable NSDictionary *)initialProperties;
33+
+ (UIView *_Nonnull)defaultRootViewWithBridge:(RCTBridge *_Nonnull)bridge
34+
moduleName:(NSString *_Nonnull)moduleName
35+
initialProperties:(nullable NSDictionary *)initialProperties;
3636

3737
#if RCT_TM_FABRIC_ENABLED
3838
+ (id<RCTTurboModule> _Nonnull)defaultModuleInstanceFromClass:(Class _Nonnull)moduleClass;

React/AppSetup/RCTAppSetupUtils.mm

+13-3
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#import "RCTAppSetupUtils.h"
99

1010
#if RCT_TM_FABRIC_ENABLED
11+
// Turbo Module
1112
#import <React/CoreModulesPlugins.h>
1213
#import <React/RCTDataRequestHandler.h>
1314
#import <React/RCTFileRequestHandler.h>
@@ -17,6 +18,9 @@
1718
#import <React/RCTJSIExecutorRuntimeInstaller.h>
1819
#import <React/RCTLocalAssetImageLoader.h>
1920
#import <React/RCTNetworking.h>
21+
22+
// Fabric
23+
#import <React/RCTFabricSurfaceHostingProxyRootView.h>
2024
#endif
2125

2226
#ifdef FB_SONARKIT_ENABLED
@@ -53,11 +57,17 @@ + (void)prepareApp:(UIApplication *)application
5357
#endif
5458
}
5559

56-
+ (RCTRootView *)defaultRootViewWithBridge:(RCTBridge *)bridge
57-
moduleName:(NSString *)moduleName
58-
initialProperties:(NSDictionary *)initialProperties
60+
+ (UIView *)defaultRootViewWithBridge:(RCTBridge *)bridge
61+
moduleName:(NSString *)moduleName
62+
initialProperties:(NSDictionary *)initialProperties
5963
{
64+
#if RCT_TM_FABRIC_ENABLED
65+
return [[RCTFabricSurfaceHostingProxyRootView alloc] initWithBridge:bridge
66+
moduleName:moduleName
67+
initialProperties:initialProperties];
68+
#else
6069
return [[RCTRootView alloc] initWithBridge:bridge moduleName:moduleName initialProperties:initialProperties];
70+
#endif
6171
}
6272

6373
#if RCT_TM_FABRIC_ENABLED

template/ios/HelloWorld/AppDelegate.mm

+18-1
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,17 @@
1010
#import <React/CoreModulesPlugins.h>
1111
#import <React/RCTCxxBridgeDelegate.h>
1212
#import <ReactCommon/RCTTurboModuleManager.h>
13+
#import <React/RCTFabricSurfaceHostingProxyRootView.h>
14+
#import <React/RCTSurfacePresenter.h>
15+
#import <React/RCTSurfacePresenterBridgeAdapter.h>
16+
17+
#import <react/config/ReactNativeConfig.h>
1318

1419
@interface AppDelegate () <RCTCxxBridgeDelegate, RCTTurboModuleManagerDelegate> {
1520
RCTTurboModuleManager *_turboModuleManager;
21+
RCTSurfacePresenterBridgeAdapter *_bridgeAdapter;
22+
std::shared_ptr<const facebook::react::ReactNativeConfig> _reactNativeConfig;
23+
facebook::react::ContextContainer::Shared _contextContainer;
1624
}
1725
@end
1826
#endif
@@ -24,7 +32,16 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(
2432
[RCTAppSetupUtils prepareApp: application];
2533

2634
RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
27-
RCTRootView *rootView = [RCTAppSetupUtils defaultRootViewWithBridge:bridge
35+
36+
#if RCT_TM_FABRIC_ENABLED
37+
_contextContainer = std::make_shared<facebook::react::ContextContainer const>();
38+
_reactNativeConfig = std::make_shared<facebook::react::EmptyReactNativeConfig const>();
39+
_contextContainer->insert("ReactNativeConfig", _reactNativeConfig);
40+
_bridgeAdapter = [[RCTSurfacePresenterBridgeAdapter alloc] initWithBridge:bridge contextContainer:_contextContainer];
41+
bridge.surfacePresenter = _bridgeAdapter.surfacePresenter;
42+
#endif
43+
44+
UIView *rootView = [RCTAppSetupUtils defaultRootViewWithBridge:bridge
2845
moduleName:@"HelloWorld"
2946
initialProperties:nil];
3047

0 commit comments

Comments
 (0)