diff --git a/packages/react-native/React/Base/RCTBridge.h b/packages/react-native/React/Base/RCTBridge.h index d09cdeed3edd..a161887ca87a 100644 --- a/packages/react-native/React/Base/RCTBridge.h +++ b/packages/react-native/React/Base/RCTBridge.h @@ -112,17 +112,6 @@ RCT_EXTERN_C_END launchOptions:(NSDictionary *)launchOptions __deprecated_msg("This API will be removed along with the legacy architecture."); -/** - * This method is used to call functions in the JavaScript application context. - * It is primarily intended for use by modules that require two-way communication - * with the JavaScript code. Safe to call from any thread. - */ -- (void)enqueueJSCall:(NSString *)moduleDotMethod args:(NSArray *)args; -- (void)enqueueJSCall:(NSString *)module - method:(NSString *)method - args:(NSArray *)args - completion:(dispatch_block_t)completion; - /** * This method registers the file path of an additional JS segment by its ID. * @@ -147,38 +136,22 @@ RCT_EXTERN_C_END * When a NativeModule performs a lookup for a TurboModule, we need to query * the TurboModuleRegistry. */ -- (void)setRCTTurboModuleRegistry:(id)turboModuleRegistry; +- (void)setRCTTurboModuleRegistry:(id)turboModuleRegistry + __deprecated_msg("This API will be removed along with the legacy architecture."); /** * This hook is called by the TurboModule infra with every ObjC module that's created. * It allows the bridge to attach properties to ObjC modules that give those modules * access to Bridge APIs. */ -- (RCTBridgeModuleDecorator *)bridgeModuleDecorator; - -/** - * Convenience method for retrieving all modules conforming to a given protocol. - * Modules will be synchronously instantiated if they haven't already been, - * potentially blocking both the calling thread and main thread for a short time. - */ -- (NSArray *)modulesConformingToProtocol:(Protocol *)protocol; - -/** - * Test if a module has been initialized. Use this prior to calling - * `moduleForClass:` or `moduleForName:` if you do not want to cause the module - * to be instantiated if it hasn't been already. - */ -- (BOOL)moduleIsInitialized:(Class)moduleClass; - -/** - * All registered bridge module classes. - */ -@property (nonatomic, copy, readonly) NSArray *moduleClasses; +- (RCTBridgeModuleDecorator *) + bridgeModuleDecorator __deprecated_msg("This API will be removed along with the legacy architecture."); /** * URL of the script that was loaded into the bridge. */ -@property (nonatomic, strong, readonly) NSURL *bundleURL; +@property (nonatomic, strong, readonly) + NSURL *bundleURL __deprecated_msg("This API will be removed along with the legacy architecture."); /** * The class of the executor currently being used. Changes to this value will @@ -186,11 +159,6 @@ RCT_EXTERN_C_END */ @property (nonatomic, strong) Class executorClass; -/** - * The delegate provided during the bridge initialization - */ -@property (nonatomic, weak, readonly) id delegate; - /** * The launch options that were used to initialize the bridge. */ @@ -211,29 +179,9 @@ RCT_EXTERN_C_END */ @property (nonatomic, readonly, strong) RCTPerformanceLogger *performanceLogger; -/** - * Reload the bundle and reset executor & modules. Safe to call from any thread. - */ -- (void)reload __deprecated_msg("Use RCTReloadCommand instead"); - -/** - * Reload the bundle and reset executor & modules. Safe to call from any thread. - */ -- (void)reloadWithReason:(NSString *)reason __deprecated_msg("Use RCTReloadCommand instead"); - /** * Handle notifications for a fast refresh. Safe to call from any thread. */ - (void)onFastRefresh; -/** - * Inform the bridge, and anything subscribing to it, that it should reload. - */ -- (void)requestReload __deprecated_msg("Use RCTReloadCommand instead"); - -/** - * Says whether bridge has started receiving calls from JavaScript. - */ -- (BOOL)isBatchActive; - @end diff --git a/packages/react-native/React/Base/RCTBridge.mm b/packages/react-native/React/Base/RCTBridge.mm index 9998204e136c..93d5bd2344d0 100644 --- a/packages/react-native/React/Base/RCTBridge.mm +++ b/packages/react-native/React/Base/RCTBridge.mm @@ -231,17 +231,6 @@ - (instancetype)initWithBundleURL:(NSURL *)bundleURL return self; } -- (void)enqueueJSCall:(NSString *)moduleDotMethod args:(NSArray *)args -{ -} - -- (void)enqueueJSCall:(NSString *)module - method:(NSString *)method - args:(NSArray *)args - completion:(__strong dispatch_block_t)completion -{ -} - - (void)registerSegmentWithId:(NSUInteger)segmentId path:(NSString *)path { } @@ -270,37 +259,10 @@ - (RCTBridgeModuleDecorator *)bridgeModuleDecorator return nil; } -- (NSArray *)modulesConformingToProtocol:(Protocol *)protocol -{ - return @[]; -} - -- (BOOL)moduleIsInitialized:(Class)moduleClass -{ - return NO; -} - -- (void)reload __attribute__((deprecated("Use RCTReloadCommand instead"))) -{ -} - -- (void)reloadWithReason:(NSString *)reason __attribute__((deprecated("Use RCTReloadCommand instead"))) -{ -} - - (void)onFastRefresh { } -- (void)requestReload __attribute__((deprecated("Use RCTReloadCommand instead"))) -{ -} - -- (BOOL)isBatchActive -{ - return NO; -} - - (void)enqueueCallback:(NSNumber *)cbID args:(NSArray *)args { } diff --git a/packages/rn-tester/RNTesterIntegrationTests/RCTLoggingTests.m b/packages/rn-tester/RNTesterIntegrationTests/RCTLoggingTests.m deleted file mode 100644 index dd2336c0c220..000000000000 --- a/packages/rn-tester/RNTesterIntegrationTests/RCTLoggingTests.m +++ /dev/null @@ -1,146 +0,0 @@ -/* - * 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 -#import -#import -#import - -// Time to wait for an expected log statement to show before failing the test -const int64_t LOGGER_TIMEOUT = 10 * NSEC_PER_SEC; - -@interface RCTLoggingTests : XCTestCase - -@end - -@implementation RCTLoggingTests { - RCTBridge *_bridge; - - dispatch_semaphore_t _logSem; - RCTLogLevel _lastLogLevel; - RCTLogSource _lastLogSource; - NSString *_lastLogMessage; -} - -- (void)setUp -{ - XCTSkip(@"Skipping RCTLoggingTests since they rely on deprecated RCTBridge functionality."); - - NSURL *scriptURL; - if (getenv("CI_USE_PACKAGER")) { - NSString *app = @"IntegrationTests/IntegrationTestsApp"; - scriptURL = [NSURL URLWithString:[NSString stringWithFormat:@"http://localhost:8081/%@.bundle?platform=%@&dev=true", - app, - RCTPlatformName]]; - } else { - scriptURL = [[NSBundle bundleForClass:[RCTBridge class]] URLForResource:@"main" withExtension:@"jsbundle"]; - } - RCTAssert(scriptURL != nil, @"No scriptURL set"); - - _bridge = [[RCTBridge alloc] initWithBundleURL:scriptURL moduleProvider:NULL launchOptions:nil]; - NSDate *date = [NSDate dateWithTimeIntervalSinceNow:60]; - while (date.timeIntervalSinceNow > 0 && _bridge.loading) { - [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; - } - XCTAssertFalse(_bridge.loading); - - _logSem = dispatch_semaphore_create(0); - - // Set the log function to signal the semaphore - RCTSetLogFunction( - ^(RCTLogLevel level, - RCTLogSource source, - __unused NSString *fileName, - __unused NSNumber *lineNumber, - NSString *message) { - if (source == RCTLogSourceJavaScript) { - self->_lastLogLevel = level; - self->_lastLogSource = source; - self->_lastLogMessage = message; - dispatch_semaphore_signal(self->_logSem); - } - }); -} - -- (void)tearDown -{ - [_bridge invalidate]; - _bridge = nil; - - RCTSetLogFunction(RCTDefaultLogFunction); -} - -- (void)testLogging -{ - intptr_t waitRet = 0; - - // First queue the marker and spin until it happens to be logged. - // This is to ensure we skip all of the other messages, that were logged earlier. - NSString *const LogMarker = @"===LOG_MARKER==="; - [_bridge enqueueJSCall:@"LoggingTestModule.logToConsole" args:@[ LogMarker ]]; - - do { - waitRet = dispatch_semaphore_wait(_logSem, dispatch_time(DISPATCH_TIME_NOW, LOGGER_TIMEOUT)); - XCTAssertEqual(waitRet, 0, @"Timed out waiting for log marker"); - } while (waitRet == 0 && ![_lastLogMessage isEqualToString:LogMarker]); - - [_bridge enqueueJSCall:@"LoggingTestModule.logToConsole" args:@[ @"Invoking console.log" ]]; - waitRet = dispatch_semaphore_wait(_logSem, dispatch_time(DISPATCH_TIME_NOW, LOGGER_TIMEOUT)); - XCTAssertEqual(waitRet, 0, @"Timed out waiting for logToConsole"); - - XCTAssertEqual(_lastLogLevel, RCTLogLevelInfo); - XCTAssertEqual(_lastLogSource, RCTLogSourceJavaScript); - XCTAssertEqualObjects(_lastLogMessage, @"Invoking console.log"); - - [_bridge enqueueJSCall:@"LoggingTestModule.warning" args:@[ @"Generating warning" ]]; - waitRet = dispatch_semaphore_wait(_logSem, dispatch_time(DISPATCH_TIME_NOW, LOGGER_TIMEOUT)); - XCTAssertEqual(waitRet, 0, @"Timed out waiting for warning"); - - XCTAssertEqual(_lastLogLevel, RCTLogLevelWarning); - XCTAssertEqual(_lastLogSource, RCTLogSourceJavaScript); - XCTAssertEqualObjects(_lastLogMessage, @"Generating warning"); - - [_bridge enqueueJSCall:@"LoggingTestModule.invariant" args:@[ @"Invariant failed" ]]; - waitRet = dispatch_semaphore_wait(_logSem, dispatch_time(DISPATCH_TIME_NOW, LOGGER_TIMEOUT)); - XCTAssertEqual(waitRet, 0, @"Timed out waiting for invariant"); - - XCTAssertEqual(_lastLogLevel, RCTLogLevelError); - XCTAssertEqual(_lastLogSource, RCTLogSourceJavaScript); - XCTAssertTrue([_lastLogMessage containsString:@"Invariant Violation: Invariant failed"]); - - [_bridge enqueueJSCall:@"LoggingTestModule.logErrorToConsole" args:@[ @"Invoking console.error" ]]; - waitRet = dispatch_semaphore_wait(_logSem, dispatch_time(DISPATCH_TIME_NOW, LOGGER_TIMEOUT)); - XCTAssertEqual(waitRet, 0, @"Timed out waiting for logErrorToConsole"); - - // For local bundles, we may first get a warning about symbolication - if (![_lastLogMessage isEqualToString:@"Invoking console.error"]) { - waitRet = dispatch_semaphore_wait(_logSem, dispatch_time(DISPATCH_TIME_NOW, LOGGER_TIMEOUT)); - XCTAssertEqual(waitRet, 0, @"Timed out waiting for logErrorToConsole #2"); - } - - XCTAssertEqual(_lastLogLevel, RCTLogLevelError); - XCTAssertEqual(_lastLogSource, RCTLogSourceJavaScript); - XCTAssertEqualObjects(_lastLogMessage, @"Invoking console.error"); - - [_bridge enqueueJSCall:@"LoggingTestModule.throwError" args:@[ @"Throwing an error" ]]; - waitRet = dispatch_semaphore_wait(_logSem, dispatch_time(DISPATCH_TIME_NOW, LOGGER_TIMEOUT)); - XCTAssertEqual(waitRet, 0, @"Timed out waiting for throwError"); - - // For local bundles, we may first get a warning about symbolication - if (![_lastLogMessage containsString:@"Error: Throwing an error"]) { - waitRet = dispatch_semaphore_wait(_logSem, dispatch_time(DISPATCH_TIME_NOW, LOGGER_TIMEOUT)); - XCTAssertEqual(waitRet, 0, @"Timed out waiting for throwError #2"); - } - - XCTAssertEqual(_lastLogLevel, RCTLogLevelError); - XCTAssertEqual(_lastLogSource, RCTLogSourceJavaScript); - XCTAssertTrue([_lastLogMessage containsString:@"Error: Throwing an error"]); -} - -@end diff --git a/scripts/cxx-api/api-snapshots/ReactAppleDebugCxx.api b/scripts/cxx-api/api-snapshots/ReactAppleDebugCxx.api index cb68d6c58bd7..4f13f91c34c8 100644 --- a/scripts/cxx-api/api-snapshots/ReactAppleDebugCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAppleDebugCxx.api @@ -672,28 +672,18 @@ interface RCTBlobManager : public NSObject { public @property (assign, readonly) BOOL loading; public @property (assign, readonly) BOOL valid; - public @property (copy, readonly) NSArray* moduleClasses; public @property (copy, readonly) NSDictionary* launchOptions; public @property (strong) Class executorClass; public @property (strong, readonly) NSURL* bundleURL; public @property (strong, readonly) RCTPerformanceLogger* performanceLogger; - public @property (weak, readonly) id delegate; - public virtual BOOL isBatchActive(); - public virtual BOOL moduleIsInitialized:(Class moduleClass); - public virtual NSArray* modulesConformingToProtocol:(Protocol* protocol); public virtual RCTBridgeModuleDecorator* bridgeModuleDecorator(); public virtual id moduleForClass:(Class moduleClass); public virtual id moduleForName:(NSString* moduleName); public virtual id moduleForName:lazilyLoadIfNecessary:(NSString* moduleName, BOOL lazilyLoad); public virtual instancetype initWithBundleURL:moduleProvider:launchOptions:(NSURL* bundleURL, RCTBridgeModuleListProvider block, NSDictionary* launchOptions); public virtual instancetype initWithDelegate:launchOptions:(id delegate, NSDictionary* launchOptions); - public virtual void enqueueJSCall:args:(NSString* moduleDotMethod, NSArray* args); - public virtual void enqueueJSCall:method:args:completion:(NSString* module, NSString* method, NSArray* args, dispatch_block_t completion); public virtual void onFastRefresh(); public virtual void registerSegmentWithId:path:(NSUInteger segmentId, NSString* path); - public virtual void reload(); - public virtual void reloadWithReason:(NSString* reason); - public virtual void requestReload(); public virtual void setRCTTurboModuleRegistry:(id turboModuleRegistry); } diff --git a/scripts/cxx-api/api-snapshots/ReactAppleFrameworksCxx.api b/scripts/cxx-api/api-snapshots/ReactAppleFrameworksCxx.api index b05f7665f7da..8b3a80c59fa6 100644 --- a/scripts/cxx-api/api-snapshots/ReactAppleFrameworksCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAppleFrameworksCxx.api @@ -681,28 +681,18 @@ interface RCTBlobManager : public NSObject { public @property (assign, readonly) BOOL loading; public @property (assign, readonly) BOOL valid; - public @property (copy, readonly) NSArray* moduleClasses; public @property (copy, readonly) NSDictionary* launchOptions; public @property (strong) Class executorClass; public @property (strong, readonly) NSURL* bundleURL; public @property (strong, readonly) RCTPerformanceLogger* performanceLogger; - public @property (weak, readonly) id delegate; - public virtual BOOL isBatchActive(); - public virtual BOOL moduleIsInitialized:(Class moduleClass); - public virtual NSArray* modulesConformingToProtocol:(Protocol* protocol); public virtual RCTBridgeModuleDecorator* bridgeModuleDecorator(); public virtual id moduleForClass:(Class moduleClass); public virtual id moduleForName:(NSString* moduleName); public virtual id moduleForName:lazilyLoadIfNecessary:(NSString* moduleName, BOOL lazilyLoad); public virtual instancetype initWithBundleURL:moduleProvider:launchOptions:(NSURL* bundleURL, RCTBridgeModuleListProvider block, NSDictionary* launchOptions); public virtual instancetype initWithDelegate:launchOptions:(id delegate, NSDictionary* launchOptions); - public virtual void enqueueJSCall:args:(NSString* moduleDotMethod, NSArray* args); - public virtual void enqueueJSCall:method:args:completion:(NSString* module, NSString* method, NSArray* args, dispatch_block_t completion); public virtual void onFastRefresh(); public virtual void registerSegmentWithId:path:(NSUInteger segmentId, NSString* path); - public virtual void reload(); - public virtual void reloadWithReason:(NSString* reason); - public virtual void requestReload(); public virtual void setRCTTurboModuleRegistry:(id turboModuleRegistry); } diff --git a/scripts/cxx-api/api-snapshots/ReactAppleNewarchCxx.api b/scripts/cxx-api/api-snapshots/ReactAppleNewarchCxx.api index 497a3a43a3ee..78eb92f3b37a 100644 --- a/scripts/cxx-api/api-snapshots/ReactAppleNewarchCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAppleNewarchCxx.api @@ -672,28 +672,18 @@ interface RCTBlobManager : public NSObject { public @property (assign, readonly) BOOL loading; public @property (assign, readonly) BOOL valid; - public @property (copy, readonly) NSArray* moduleClasses; public @property (copy, readonly) NSDictionary* launchOptions; public @property (strong) Class executorClass; public @property (strong, readonly) NSURL* bundleURL; public @property (strong, readonly) RCTPerformanceLogger* performanceLogger; - public @property (weak, readonly) id delegate; - public virtual BOOL isBatchActive(); - public virtual BOOL moduleIsInitialized:(Class moduleClass); - public virtual NSArray* modulesConformingToProtocol:(Protocol* protocol); public virtual RCTBridgeModuleDecorator* bridgeModuleDecorator(); public virtual id moduleForClass:(Class moduleClass); public virtual id moduleForName:(NSString* moduleName); public virtual id moduleForName:lazilyLoadIfNecessary:(NSString* moduleName, BOOL lazilyLoad); public virtual instancetype initWithBundleURL:moduleProvider:launchOptions:(NSURL* bundleURL, RCTBridgeModuleListProvider block, NSDictionary* launchOptions); public virtual instancetype initWithDelegate:launchOptions:(id delegate, NSDictionary* launchOptions); - public virtual void enqueueJSCall:args:(NSString* moduleDotMethod, NSArray* args); - public virtual void enqueueJSCall:method:args:completion:(NSString* module, NSString* method, NSArray* args, dispatch_block_t completion); public virtual void onFastRefresh(); public virtual void registerSegmentWithId:path:(NSUInteger segmentId, NSString* path); - public virtual void reload(); - public virtual void reloadWithReason:(NSString* reason); - public virtual void requestReload(); public virtual void setRCTTurboModuleRegistry:(id turboModuleRegistry); } diff --git a/scripts/cxx-api/api-snapshots/ReactAppleReleaseCxx.api b/scripts/cxx-api/api-snapshots/ReactAppleReleaseCxx.api index 4f7774be13cd..813e07fbea93 100644 --- a/scripts/cxx-api/api-snapshots/ReactAppleReleaseCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAppleReleaseCxx.api @@ -672,28 +672,18 @@ interface RCTBlobManager : public NSObject { public @property (assign, readonly) BOOL loading; public @property (assign, readonly) BOOL valid; - public @property (copy, readonly) NSArray* moduleClasses; public @property (copy, readonly) NSDictionary* launchOptions; public @property (strong) Class executorClass; public @property (strong, readonly) NSURL* bundleURL; public @property (strong, readonly) RCTPerformanceLogger* performanceLogger; - public @property (weak, readonly) id delegate; - public virtual BOOL isBatchActive(); - public virtual BOOL moduleIsInitialized:(Class moduleClass); - public virtual NSArray* modulesConformingToProtocol:(Protocol* protocol); public virtual RCTBridgeModuleDecorator* bridgeModuleDecorator(); public virtual id moduleForClass:(Class moduleClass); public virtual id moduleForName:(NSString* moduleName); public virtual id moduleForName:lazilyLoadIfNecessary:(NSString* moduleName, BOOL lazilyLoad); public virtual instancetype initWithBundleURL:moduleProvider:launchOptions:(NSURL* bundleURL, RCTBridgeModuleListProvider block, NSDictionary* launchOptions); public virtual instancetype initWithDelegate:launchOptions:(id delegate, NSDictionary* launchOptions); - public virtual void enqueueJSCall:args:(NSString* moduleDotMethod, NSArray* args); - public virtual void enqueueJSCall:method:args:completion:(NSString* module, NSString* method, NSArray* args, dispatch_block_t completion); public virtual void onFastRefresh(); public virtual void registerSegmentWithId:path:(NSUInteger segmentId, NSString* path); - public virtual void reload(); - public virtual void reloadWithReason:(NSString* reason); - public virtual void requestReload(); public virtual void setRCTTurboModuleRegistry:(id turboModuleRegistry); }