From e9f6427eea5e1938eca0bd9d42df1049b0bfa26c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Kwas=CC=81niewski?= Date: Mon, 21 Oct 2024 17:30:39 +0200 Subject: [PATCH] feat(iOS): introduce RCTUIConfiguratorProtocol --- .../Libraries/AppDelegate/RCTAppDelegate.h | 45 +-------------- .../AppDelegate/RCTUIConfiguratorProtocol.h | 56 +++++++++++++++++++ 2 files changed, 59 insertions(+), 42 deletions(-) create mode 100644 packages/react-native/Libraries/AppDelegate/RCTUIConfiguratorProtocol.h diff --git a/packages/react-native/Libraries/AppDelegate/RCTAppDelegate.h b/packages/react-native/Libraries/AppDelegate/RCTAppDelegate.h index f9ca86a602aea7..7c49cd7045dcb4 100644 --- a/packages/react-native/Libraries/AppDelegate/RCTAppDelegate.h +++ b/packages/react-native/Libraries/AppDelegate/RCTAppDelegate.h @@ -9,6 +9,7 @@ #import #import #import "RCTRootViewFactory.h" +#import "RCTUIConfiguratorProtocol.h" @class RCTBridge; @protocol RCTBridgeDelegate; @@ -16,6 +17,7 @@ @class RCTRootView; @class RCTSurfacePresenterBridgeAdapter; + NS_ASSUME_NONNULL_BEGIN /** @@ -55,7 +57,7 @@ NS_ASSUME_NONNULL_BEGIN (const facebook::react::ObjCTurboModule::InitParams &)params * - (id)getModuleInstanceFromClass:(Class)moduleClass */ -@interface RCTAppDelegate : UIResponder +@interface RCTAppDelegate : UIResponder /// The window object, used to render the UViewControllers @property (nonatomic, strong, nonnull) UIWindow *window; @@ -96,48 +98,7 @@ NS_ASSUME_NONNULL_BEGIN - (UIView *)createRootViewWithBridge:(RCTBridge *)bridge moduleName:(NSString *)moduleName initProps:(NSDictionary *)initProps; -/** - * This method can be used to customize the rootView that is passed to React Native. - * A typical example is to override this method in the AppDelegate to change the background color. - * To achieve this, add in your `AppDelegate.mm`: - * ``` - * - (void)customizeRootView:(RCTRootView *)rootView - * { - * rootView.backgroundColor = [UIColor colorWithDynamicProvider:^UIColor *(UITraitCollection *traitCollection) { - * if ([traitCollection userInterfaceStyle] == UIUserInterfaceStyleDark) { - * return [UIColor blackColor]; - * } else { - * return [UIColor whiteColor]; - * } - * }]; - * } - * ``` - * - * @parameter: rootView - The root view to customize. - */ -- (void)customizeRootView:(RCTRootView *)rootView; -/** - * It creates the RootViewController. - * By default, it creates a new instance of a `UIViewController`. - * You can override it to provide your own initial ViewController. - * - * @return: an instance of `UIViewController`. - */ -- (UIViewController *)createRootViewController; - -/** - * It assigns the rootView to the rootViewController - * By default, it assigns the rootView to the view property of the rootViewController - * If you are not using a simple UIViewController, then there could be other methods to use to setup the rootView. - * For example: UISplitViewController requires `setViewController(_:for:)` - */ -- (void)setRootView:(UIView *)rootView toRootViewController:(UIViewController *)rootViewController; - -/** - * The default `RCTColorSpace` for the app. It defaults to `RCTColorSpaceSRGB`. - */ -@property (nonatomic, readonly) RCTColorSpace defaultColorSpace; /// This method returns a map of Component Descriptors and Components classes that needs to be registered in the /// new renderer. The Component Descriptor is a string which represent the name used in JS to refer to the native diff --git a/packages/react-native/Libraries/AppDelegate/RCTUIConfiguratorProtocol.h b/packages/react-native/Libraries/AppDelegate/RCTUIConfiguratorProtocol.h new file mode 100644 index 00000000000000..345f2d6cd79c23 --- /dev/null +++ b/packages/react-native/Libraries/AppDelegate/RCTUIConfiguratorProtocol.h @@ -0,0 +1,56 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#import +#import + +@class RCTRootView; + +@protocol RCTUIConfiguratorProtocol +/** + * The default `RCTColorSpace` for the app. It defaults to `RCTColorSpaceSRGB`. + */ +- (RCTColorSpace)defaultColorSpace; + +/** + * This method can be used to customize the rootView that is passed to React Native. + * A typical example is to override this method in the AppDelegate to change the background color. + * To achieve this, add in your `AppDelegate.mm`: + * ``` + * - (void)customizeRootView:(RCTRootView *)rootView + * { + * rootView.backgroundColor = [UIColor colorWithDynamicProvider:^UIColor *(UITraitCollection *traitCollection) { + * if ([traitCollection userInterfaceStyle] == UIUserInterfaceStyleDark) { + * return [UIColor blackColor]; + * } else { + * return [UIColor whiteColor]; + * } + * }]; + * } + * ``` + * + * @parameter: rootView - The root view to customize. + */ +- (void)customizeRootView:(RCTRootView *)rootView; + +/** + * It creates the RootViewController. + * By default, it creates a new instance of a `UIViewController`. + * You can override it to provide your own initial ViewController. + * + * @return: an instance of `UIViewController`. + */ +- (UIViewController *)createRootViewController; + +/** + * It assigns the rootView to the rootViewController + * By default, it assigns the rootView to the view property of the rootViewController + * If you are not using a simple UIViewController, then there could be other methods to use to setup the rootView. + * For example: UISplitViewController requires `setViewController(_:for:)` + */ +- (void)setRootView:(UIView *)rootView toRootViewController:(UIViewController *)rootViewController; +@end