Add log message if App moves to background (#39943)

Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/39943

When the user attaches a debugger, and the app moves to the background the debugging session persists. This
sends a CDP console.info so the debugging user is aware of the app's state. It is an easy state to get into
when debugging on multiple emulators.

Changelog: [iOS][Added] - Add console.log notification in DevTools if app transitions between back/foreground.

Reviewed By: dmytrorykun

Differential Revision: D49956535

fbshipit-source-id: 29e1aba9c4eaeba072fe04f2b932a3e04c96d081
This commit is contained in:
Blake Friedman
2023-10-19 04:42:02 -07:00
committed by Facebook GitHub Bot
parent 0a8639ceb9
commit 05967e471e
2 changed files with 40 additions and 0 deletions
@@ -30,6 +30,7 @@ typedef RCTBundleStatus * (^RCTBundleStatusProvider)(void);
@interface RCTInspectorRemoteConnection : NSObject
- (void)onMessage:(NSString *)message;
- (void)onDisconnect;
- (void)handleBackgroundEvent:(NSNotification *)notification;
@end
#endif
@@ -328,10 +328,49 @@ RCT_NOT_IMPLEMENTED(-(instancetype)init)
if (self = [super init]) {
_owningPackagerConnection = owningPackagerConnection;
_pageId = pageId;
[self addObserverFor:UIApplicationDidEnterBackgroundNotification];
[self addObserverFor:UIApplicationWillEnterForegroundNotification];
}
return self;
}
- (void)addObserverFor:(NSString *)notificationName
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleBackgroundEvent:)
name:notificationName
object:nil];
}
- (void)consoleInfo:(NSString *)message format:(NSString *)format
{
if (!message) {
return;
}
NSNumber *now = @([[NSDate date] timeIntervalSince1970] * 1000);
NSDictionary *json = @{
@"method" : @"Runtime.consoleAPICalled",
@"params" : @{@"type" : @"info", @"args" : format == nil ? @[ message ] : @[ message, format ], @"timestamp" : now}
};
NSError *error = nil;
NSData *data = [NSJSONSerialization dataWithJSONObject:json options:0 error:&error];
if (error != nil) {
NSLog(@"Unable to serialize a console.warn() message: %@", error);
return;
}
NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
[self onMessage:str];
}
- (void)handleBackgroundEvent:(NSNotification *)notification
{
if ([notification.name isEqualToString:UIApplicationWillEnterForegroundNotification]) {
[self consoleInfo:@"App has moved into the %cforeground" format:@"font-weight: bold"];
} else if ([notification.name isEqualToString:UIApplicationDidEnterBackgroundNotification]) {
[self consoleInfo:@"App has moved into the %cbackground" format:@"font-weight: bold"];
}
}
- (void)onMessage:(NSString *)message
{
[_owningPackagerConnection sendWrappedEvent:_pageId message:message];