Skip to content

Commit 6a9a76e

Browse files
RSNarafacebook-github-bot
authored andcommitted
Make RCTDevLoadingView TurboModule-compatible
Summary: This is a redo of D16969764, with a few extensions. ## Changes 1. Move `RCTDevLoadingView.{h,m}` to `CoreModuels/RCTDevLoadingView.{h,mm}` 2. Extract ObjC API of `RCTDevLodingView` into `RCTDevLoadingViewProtocol` in `ReactInternal`. 3. Create API `RCTDevLoadingViewSetEnabled.h` in `ReactInternal` to enable/disable `RCTDevLoadingView` Changelog: [iOS][Added] - Make RCTDevLoadingView TurboModule-compatible Reviewed By: PeteTheHeat Differential Revision: D18642554 fbshipit-source-id: 6b62e27e128d98254b7a6d018399ec1c06e274fc
1 parent 32127e8 commit 6a9a76e

17 files changed

+185
-51
lines changed

Libraries/FBReactNativeSpec/FBReactNativeSpec/FBReactNativeSpec-generated.mm

+1-1
Original file line numberDiff line numberDiff line change
@@ -825,7 +825,7 @@ + (RCTManagedPointer *)JS_NativeCameraRollManager_PhotoIdentifiersPage:(id)json
825825

826826

827827
static facebook::jsi::Value __hostFunction_NativeDevLoadingViewSpecJSI_showMessage(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
828-
return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, VoidKind, "showMessage", @selector(showMessage:color:backgroundColor:), args, count);
828+
return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, VoidKind, "showMessage", @selector(showMessage:withColor:withBackgroundColor:), args, count);
829829
}
830830

831831
static facebook::jsi::Value __hostFunction_NativeDevLoadingViewSpecJSI_hide(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {

Libraries/FBReactNativeSpec/FBReactNativeSpec/FBReactNativeSpec.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -848,8 +848,8 @@ namespace facebook {
848848
@protocol NativeDevLoadingViewSpec <RCTBridgeModule, RCTTurboModule>
849849

850850
- (void)showMessage:(NSString *)message
851-
color:(NSDictionary *)color
852-
backgroundColor:(NSDictionary *)backgroundColor;
851+
withColor:(NSNumber *)withColor
852+
withBackgroundColor:(NSNumber *)withBackgroundColor;
853853
- (void)hide;
854854

855855
@end

Libraries/Utilities/LoadingView.ios.js

+11-3
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,21 @@ import NativeDevLoadingView from './NativeDevLoadingView';
1616
module.exports = {
1717
showMessage(message: string, type: 'load' | 'refresh') {
1818
if (NativeDevLoadingView) {
19+
const green = processColor('#275714');
20+
const blue = processColor('#2584e8');
21+
const white = processColor('#ffffff');
22+
1923
NativeDevLoadingView.showMessage(
2024
message,
2125
// Use same colors as iOS "Personal Hotspot" bar.
22-
processColor('#ffffff'),
26+
typeof white === 'number' ? white : null,
2327
type && type === 'load'
24-
? processColor('#275714')
25-
: processColor('#2584e8'),
28+
? typeof green === 'number'
29+
? green
30+
: null
31+
: typeof blue === 'number'
32+
? blue
33+
: null,
2634
);
2735
}
2836
},

Libraries/Utilities/NativeDevLoadingView.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ import * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';
1616
export interface Spec extends TurboModule {
1717
+showMessage: (
1818
message: string,
19-
color: Object,
20-
backgroundColor: Object,
19+
withColor: ?number,
20+
withBackgroundColor: ?number,
2121
) => void;
2222
+hide: () => void;
2323
}

RNTester/Podfile.lock

+24-24
Original file line numberDiff line numberDiff line change
@@ -451,8 +451,8 @@ SPEC CHECKSUMS:
451451
CocoaAsyncSocket: eafaa68a7e0ec99ead0a7b35015e0bf25d2c8987
452452
CocoaLibEvent: 2fab71b8bd46dd33ddb959f7928ec5909f838e3f
453453
DoubleConversion: cde416483dac037923206447da6e1454df403714
454-
FBLazyVector: 9806caa151956ce2238f70bde6649a6e3468d2c2
455-
FBReactNativeSpec: 36a4e4488cc758ffceea8e1b3b5c6dab3ed99fa2
454+
FBLazyVector: 8ea0285646adaf7fa725c20ed737c49ee5ea680a
455+
FBReactNativeSpec: e8f07c749b9cf184c819f5a8ca44b91ab61fca12
456456
Flipper: 10b225e352595f521be0e5badddd90e241336e89
457457
Flipper-DoubleConversion: 38631e41ef4f9b12861c67d17cb5518d06badc41
458458
Flipper-Folly: 2de3d03e0acc7064d5e4ed9f730e2f217486f162
@@ -463,28 +463,28 @@ SPEC CHECKSUMS:
463463
Folly: b73c3869541e86821df3c387eb0af5f65addfab4
464464
glog: 40a13f7840415b9a77023fbcae0f1e6f43192af3
465465
OpenSSL-Universal: 8b48cc0d10c1b2923617dfe5c178aa9ed2689355
466-
RCTRequired: f04f9813bccb37099f642722b46e879fc47c7e78
467-
RCTTypeSafety: 26a1a3b30655098b72d3954e3e7d0f9a7a059e95
468-
React: 7b262249ab4afa1d300c9e90f50edcc2a5f72bcd
469-
React-ART: 25a40dbfb785ceec6ca41d5bd1ec997ca8c01f17
470-
React-Core: 86046aecc5d3297cd37391ad7577e33784bcff74
471-
React-CoreModules: b6dd63292ef064320a8c1b2e40291b95690e0e5f
472-
React-cxxreact: 9a0a25be41fd93b42d3cbef6311b309a1da53191
473-
React-jsi: 1143a100f9e746b6acb9c8ebff6c3fe66669e404
474-
React-jsiexecutor: 56259faac069d4e475001c1ddb042ef622318f10
475-
React-jsinspector: 5a11c19a7a267ea4a54f7082ca7834470f5c3fec
476-
React-RCTActionSheet: 83587cdb4e14b9d986058a3acec8fc1cd9815b59
477-
React-RCTAnimation: e328fb809d590c09d88aa4d42f3963de522fef90
478-
React-RCTBlob: de3bd0bdbc42ec4e64183aefec9d582a7463cf00
479-
React-RCTImage: 046397bd2ba8506628b720ba3baf2ba7e331b1bf
480-
React-RCTLinking: 7b77eca020eaf222d19151f0f52cd6065cbc90ec
481-
React-RCTNetwork: d16dd52792dc3d66c3e23b464afe0f759d3a5670
482-
React-RCTPushNotification: 9290035bbd9ecef15f03d760cc422a219b55be07
483-
React-RCTSettings: f7daf792f772c8582b31c7aeeb1f146df61a52a7
484-
React-RCTTest: e10acfa457347879d3723bc85f1d2754414b9d2c
485-
React-RCTText: b3eb3514addd9b105c0edb05ed32333428ba2a52
486-
React-RCTVibration: e2856bb9408f7e8eccfe870e123e5644ab744219
487-
ReactCommon: c3834cbee58b60f71c8155c04a3f44e60ec017fb
466+
RCTRequired: 34582e9b3ebe69f244e091f37218d318406d5c4a
467+
RCTTypeSafety: 1ade47a69b092cddf1e4ea21e0c5bdc65cc950b4
468+
React: cafb3c2321f7df55ce90dbf29d513799a79e4418
469+
React-ART: df0460bdff42ef039e28ee3ffd41f50b75644788
470+
React-Core: 08c69f013e6fd654ea8f9fd84bbd66780a54d886
471+
React-CoreModules: 0b59c833afcc9735e5a0220997fb18876dc9e52c
472+
React-cxxreact: c0246279e902a2a6e71e309e8cdcbaa4877141c6
473+
React-jsi: fe94132da767bfc4801968c2a12abae43e9a833e
474+
React-jsiexecutor: 55eff40b2e0696e7a979016e321793ec8b28a2ac
475+
React-jsinspector: 7fbf9b42b58b02943a0d89b0ba9fff0070f2de98
476+
React-RCTActionSheet: 51c43beeb74ef41189e87fe9823e53ebf6210359
477+
React-RCTAnimation: 528462d8fe78787f2e058062cd9a4b44735ea579
478+
React-RCTBlob: e29e0277cbcd91f07719d8411a3fa5db6600b4cf
479+
React-RCTImage: a24587309c984427ec74d3c7be13b00ca0caabeb
480+
React-RCTLinking: 696a3911a5d380ba87e29fde099a811e51e69e2f
481+
React-RCTNetwork: cc2ccdcbf13dbea0710ef887e0b9ceae7f5aef28
482+
React-RCTPushNotification: 13befc7c6efba31625fd9a945dfa71a31b724b4a
483+
React-RCTSettings: a2b148ef74dcb98369e5bb0def506d2d29125ab3
484+
React-RCTTest: cfe25fcf70b04a747dba4326105db398250caa9a
485+
React-RCTText: 6c01963d3e562109f5548262b09b1b2bc260dd60
486+
React-RCTVibration: d218336fa28ade97e99b4ddb935f1de5c670e361
487+
ReactCommon: d17767bf5744406b4f4be1db7356ffbf1f99180c
488488
Yoga: f7fa200d8c49f97b54c9421079e781fb900b5cae
489489
YogaKit: f782866e155069a2cca2517aafea43200b01fd5a
490490

RNTester/RNTesterPods.xcodeproj/project.pbxproj

+54
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,7 @@
395395
13B07F8E1A680F5B00A75B9A /* Resources */,
396396
68CD48B71D2BCB2C007E06A9 /* Build JS Bundle */,
397397
5CF0FD27207FC6EC00C13D65 /* Start Metro */,
398+
33D41129F73FA216240D6A8E /* [CP] Copy Pods Resources */,
398399
);
399400
buildRules = (
400401
);
@@ -413,6 +414,7 @@
413414
E7DB209B22B2BA84005AC45F /* Sources */,
414415
E7DB209C22B2BA84005AC45F /* Frameworks */,
415416
E7DB209D22B2BA84005AC45F /* Resources */,
417+
82168A981B1591BFD3DFCF51 /* [CP] Copy Pods Resources */,
416418
);
417419
buildRules = (
418420
);
@@ -431,6 +433,7 @@
431433
E7DB214F22B2F332005AC45F /* Sources */,
432434
E7DB215022B2F332005AC45F /* Frameworks */,
433435
E7DB215122B2F332005AC45F /* Resources */,
436+
28D6EF6C8ED1C5CEB67629BA /* [CP] Copy Pods Resources */,
434437
);
435438
buildRules = (
436439
);
@@ -509,6 +512,40 @@
509512
/* End PBXResourcesBuildPhase section */
510513

511514
/* Begin PBXShellScriptBuildPhase section */
515+
28D6EF6C8ED1C5CEB67629BA /* [CP] Copy Pods Resources */ = {
516+
isa = PBXShellScriptBuildPhase;
517+
buildActionMask = 2147483647;
518+
files = (
519+
);
520+
inputFileListPaths = (
521+
"${PODS_ROOT}/Target Support Files/Pods-RNTesterIntegrationTests/Pods-RNTesterIntegrationTests-resources-${CONFIGURATION}-input-files.xcfilelist",
522+
);
523+
name = "[CP] Copy Pods Resources";
524+
outputFileListPaths = (
525+
"${PODS_ROOT}/Target Support Files/Pods-RNTesterIntegrationTests/Pods-RNTesterIntegrationTests-resources-${CONFIGURATION}-output-files.xcfilelist",
526+
);
527+
runOnlyForDeploymentPostprocessing = 0;
528+
shellPath = /bin/sh;
529+
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-RNTesterIntegrationTests/Pods-RNTesterIntegrationTests-resources.sh\"\n";
530+
showEnvVarsInLog = 0;
531+
};
532+
33D41129F73FA216240D6A8E /* [CP] Copy Pods Resources */ = {
533+
isa = PBXShellScriptBuildPhase;
534+
buildActionMask = 2147483647;
535+
files = (
536+
);
537+
inputFileListPaths = (
538+
"${PODS_ROOT}/Target Support Files/Pods-RNTester/Pods-RNTester-resources-${CONFIGURATION}-input-files.xcfilelist",
539+
);
540+
name = "[CP] Copy Pods Resources";
541+
outputFileListPaths = (
542+
"${PODS_ROOT}/Target Support Files/Pods-RNTester/Pods-RNTester-resources-${CONFIGURATION}-output-files.xcfilelist",
543+
);
544+
runOnlyForDeploymentPostprocessing = 0;
545+
shellPath = /bin/sh;
546+
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-RNTester/Pods-RNTester-resources.sh\"\n";
547+
showEnvVarsInLog = 0;
548+
};
512549
56D84768A7BBB2750D674CF3 /* [CP] Check Pods Manifest.lock */ = {
513550
isa = PBXShellScriptBuildPhase;
514551
buildActionMask = 2147483647;
@@ -582,6 +619,23 @@
582619
shellPath = /bin/sh;
583620
shellScript = "export NODE_BINARY=node\nPROJECT_ROOT=$SRCROOT/.. $SRCROOT/../scripts/react-native-xcode.sh RNTester/js/RNTesterApp.ios.js\n";
584621
};
622+
82168A981B1591BFD3DFCF51 /* [CP] Copy Pods Resources */ = {
623+
isa = PBXShellScriptBuildPhase;
624+
buildActionMask = 2147483647;
625+
files = (
626+
);
627+
inputFileListPaths = (
628+
"${PODS_ROOT}/Target Support Files/Pods-RNTesterUnitTests/Pods-RNTesterUnitTests-resources-${CONFIGURATION}-input-files.xcfilelist",
629+
);
630+
name = "[CP] Copy Pods Resources";
631+
outputFileListPaths = (
632+
"${PODS_ROOT}/Target Support Files/Pods-RNTesterUnitTests/Pods-RNTesterUnitTests-resources-${CONFIGURATION}-output-files.xcfilelist",
633+
);
634+
runOnlyForDeploymentPostprocessing = 0;
635+
shellPath = /bin/sh;
636+
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-RNTesterUnitTests/Pods-RNTesterUnitTests-resources.sh\"\n";
637+
showEnvVarsInLog = 0;
638+
};
585639
F9CB97B0D9633939D43E75E0 /* [CP] Check Pods Manifest.lock */ = {
586640
isa = PBXShellScriptBuildPhase;
587641
buildActionMask = 2147483647;

React/CoreModules/BUCK

+3
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,9 @@ rn_apple_library(
109109
) + react_module_plugin_providers(
110110
name = "WebSocketModule",
111111
native_class_func = "RCTWebSocketModuleCls",
112+
) + react_module_plugin_providers(
113+
name = "DevLoadingView",
114+
native_class_func = "RCTDevLoadingViewCls",
112115
),
113116
plugins_header = "FBCoreModulesPlugins.h",
114117
preprocessor_flags = OBJC_ARC_PREPROCESSOR_FLAGS + get_debug_preprocessor_flags() + rn_extra_build_flags() + [

React/CoreModules/CoreModulesPlugins.h

+1
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ Class RCTLogBoxCls(void) __attribute__((used));
5252
Class RCTTVNavigationEventEmitterCls(void) __attribute__((used));
5353
Class RCTWebSocketExecutorCls(void) __attribute__((used));
5454
Class RCTWebSocketModuleCls(void) __attribute__((used));
55+
Class RCTDevLoadingViewCls(void) __attribute__((used));
5556

5657
#ifdef __cplusplus
5758
}

React/CoreModules/CoreModulesPlugins.mm

+1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ Class RCTCoreModulesClassProvider(const char *name) {
4141
{"TVNavigationEventEmitter", RCTTVNavigationEventEmitterCls},
4242
{"WebSocketExecutor", RCTWebSocketExecutorCls},
4343
{"WebSocketModule", RCTWebSocketModuleCls},
44+
{"DevLoadingView", RCTDevLoadingViewCls},
4445
};
4546

4647
auto p = sCoreModuleClassMap.find(name);

React/CoreModules/RCTDevLoadingView.h

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
/*
2+
* Copyright (c) Facebook, Inc. and its affiliates.
3+
*
4+
* This source code is licensed under the MIT license found in the
5+
* LICENSE file in the root directory of this source tree.
6+
*/
7+
8+
#import <UIKit/UIKit.h>
9+
#import <React/RCTBridgeModule.h>
10+
#import <React/RCTDevLoadingViewProtocol.h>
11+
12+
@interface RCTDevLoadingView : NSObject <RCTDevLoadingViewProtocol, RCTBridgeModule>
13+
@end

React/DevSupport/RCTDevLoadingView.m React/CoreModules/RCTDevLoadingView.mm

+33-6
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,21 @@
1010
#import <QuartzCore/QuartzCore.h>
1111

1212
#import <React/RCTBridge.h>
13+
#import <React/RCTConvert.h>
1314
#import <React/RCTDefines.h>
15+
#import <React/RCTDevLoadingViewSetEnabled.h>
1416
#import <React/RCTModalHostViewController.h>
1517
#import <React/RCTUtils.h>
18+
#import <FBReactNativeSpec/FBReactNativeSpec.h>
1619

17-
#if RCT_DEV | RCT_ENABLE_LOADING_VIEW
20+
#import "CoreModulesPlugins.h"
21+
22+
using namespace facebook::react;
23+
24+
@interface RCTDevLoadingView () <NativeDevLoadingViewSpec>
25+
@end
1826

19-
static BOOL isEnabled = YES;
27+
#if RCT_DEV | RCT_ENABLE_LOADING_VIEW
2028

2129
@implementation RCTDevLoadingView
2230
{
@@ -31,7 +39,7 @@ @implementation RCTDevLoadingView
3139

3240
+ (void)setEnabled:(BOOL)enabled
3341
{
34-
isEnabled = enabled;
42+
RCTDevLoadingViewSetEnabled(enabled);
3543
}
3644

3745
+ (BOOL)requiresMainQueueSetup
@@ -57,9 +65,9 @@ - (void)setBridge:(RCTBridge *)bridge
5765
}
5866
}
5967

60-
RCT_EXPORT_METHOD(showMessage:(NSString *)message color:(UIColor *)color backgroundColor:(UIColor *)backgroundColor)
68+
-(void)showMessage:(NSString *)message color:(UIColor *)color backgroundColor:(UIColor *)backgroundColor
6169
{
62-
if (!isEnabled) {
70+
if (!RCTDevLoadingViewGetEnabled()) {
6371
return;
6472
}
6573

@@ -102,9 +110,14 @@ - (void)setBridge:(RCTBridge *)bridge
102110
});
103111
}
104112

113+
RCT_EXPORT_METHOD(showMessage:(NSString *)message withColor:(NSNumber *)color withBackgroundColor:(NSNumber *)backgroundColor)
114+
{
115+
[self showMessage:message color:[RCTConvert UIColor:color] backgroundColor:[RCTConvert UIColor:backgroundColor]];
116+
}
117+
105118
RCT_EXPORT_METHOD(hide)
106119
{
107-
if (!isEnabled) {
120+
if (!RCTDevLoadingViewGetEnabled()) {
108121
return;
109122
}
110123

@@ -160,6 +173,11 @@ - (void)updateProgress:(RCTLoadingProgress *)progress
160173
});
161174
}
162175

176+
- (std::shared_ptr<TurboModule>)getTurboModuleWithJsInvoker:(std::shared_ptr<CallInvoker>)jsInvoker
177+
{
178+
return std::make_shared<NativeDevLoadingViewSpecJSI>(self, jsInvoker);
179+
}
180+
163181
@end
164182

165183
#else
@@ -169,10 +187,19 @@ @implementation RCTDevLoadingView
169187
+ (NSString *)moduleName { return nil; }
170188
+ (void)setEnabled:(BOOL)enabled { }
171189
- (void)showMessage:(NSString *)message color:(UIColor *)color backgroundColor:(UIColor *)backgroundColor { }
190+
- (void)showMessage:(NSString *)message withColor:(NSNumber *)color withBackgroundColor:(NSNumber *)backgroundColor{ }
172191
- (void)showWithURL:(NSURL *)URL { }
173192
- (void)updateProgress:(RCTLoadingProgress *)progress { }
174193
- (void)hide { }
194+
- (std::shared_ptr<TurboModule>)getTurboModuleWithJsInvoker:(std::shared_ptr<CallInvoker>)jsInvoker
195+
{
196+
return std::make_shared<NativeDevLoadingViewSpecJSI>(self, jsInvoker);
197+
}
175198

176199
@end
177200

178201
#endif
202+
203+
Class RCTDevLoadingViewCls(void) {
204+
return RCTDevLoadingView.class;
205+
}

React/CxxBridge/RCTCxxBridge.mm

+4-5
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@
4545
#import <React/RCTFBSystrace.h>
4646
#endif
4747

48-
#if (RCT_DEV | RCT_ENABLE_LOADING_VIEW) && __has_include(<React/RCTDevLoadingView.h>)
49-
#import <React/RCTDevLoadingView.h>
48+
#if (RCT_DEV | RCT_ENABLE_LOADING_VIEW) && __has_include(<React/RCTDevLoadingViewProtocol.h>)
49+
#import <React/RCTDevLoadingViewProtocol.h>
5050
#endif
5151

5252
static NSString *const RCTJSThreadName = @"com.facebook.react.JavaScript";
@@ -372,10 +372,9 @@ - (void)start
372372
sourceCode = source.data;
373373
dispatch_group_leave(prepareBridge);
374374
} onProgress:^(RCTLoadingProgress *progressData) {
375-
#if (RCT_DEV | RCT_ENABLE_LOADING_VIEW) && __has_include(<React/RCTDevLoadingView.h>)
375+
#if (RCT_DEV | RCT_ENABLE_LOADING_VIEW) && __has_include(<React/RCTDevLoadingViewProtocol.h>)
376376
// Note: RCTDevLoadingView should have been loaded at this point, so no need to allow lazy loading.
377-
RCTDevLoadingView *loadingView = [weakSelf moduleForName:RCTBridgeModuleNameForClass([RCTDevLoadingView class])
378-
lazilyLoadIfNecessary:NO];
377+
id<RCTDevLoadingViewProtocol> loadingView = [weakSelf moduleForName:@"DevLoadingView" lazilyLoadIfNecessary:NO];
379378
[loadingView updateProgress:progressData];
380379
#endif
381380
}];

React/DevSupport/RCTDevLoadingView.h React/DevSupport/RCTDevLoadingViewProtocol.h

+1-5
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,12 @@
77

88
#import <UIKit/UIKit.h>
99

10-
#import <React/RCTBridgeModule.h>
11-
1210
@class RCTLoadingProgress;
1311

14-
@interface RCTDevLoadingView : NSObject <RCTBridgeModule>
15-
12+
@protocol RCTDevLoadingViewProtocol<NSObject>
1613
+ (void)setEnabled:(BOOL)enabled;
1714
- (void)showMessage:(NSString *)message color:(UIColor *)color backgroundColor:(UIColor *)backgroundColor;
1815
- (void)showWithURL:(NSURL *)URL;
1916
- (void)updateProgress:(RCTLoadingProgress *)progress;
2017
- (void)hide;
21-
2218
@end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
/*
2+
* Copyright (c) Facebook, Inc. and its affiliates.
3+
*
4+
* This source code is licensed under the MIT license found in the
5+
* LICENSE file in the root directory of this source tree.
6+
*/
7+
8+
#import <React/RCTDefines.h>
9+
10+
RCT_EXTERN void RCTDevLoadingViewSetEnabled(BOOL enabled);
11+
RCT_EXTERN BOOL RCTDevLoadingViewGetEnabled(void);

0 commit comments

Comments
 (0)