From df263b9eb8c2d2c3e2c9b06abae6b8d98052287d Mon Sep 17 00:00:00 2001 From: Ben Sjoberg Date: Fri, 25 Jun 2021 15:50:42 -0500 Subject: [PATCH 1/2] fix(cli): race condition when getting iOS inspector port fixes #3701 --- .../mobile/ios/simulator/ios-simulator-device.ts | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/common/mobile/ios/simulator/ios-simulator-device.ts b/lib/common/mobile/ios/simulator/ios-simulator-device.ts index ada29293c3..17d1884979 100644 --- a/lib/common/mobile/ios/simulator/ios-simulator-device.ts +++ b/lib/common/mobile/ios/simulator/ios-simulator-device.ts @@ -87,7 +87,21 @@ export class IOSSimulator extends IOSDeviceBase implements Mobile.IiOSDevice { attachRequestMessage, this.deviceInfo.identifier ); - const port = await super.getDebuggerPort(appId); + + // Retry posting the notification every five seconds, in case the AttachRequest + // event handler wasn't registered when the first one was sent + const postNotificationRetryInterval = setInterval(() => { + this.$iOSEmulatorServices + .postDarwinNotification( + attachRequestMessage, + this.deviceInfo.identifier + ) + .catch((e) => this.$logger.error(e)); + }, 5e3); + + const port = await super.getDebuggerPort(appId).finally(() => { + clearInterval(postNotificationRetryInterval); + }); try { socket = await helpers.connectEventuallyUntilTimeout(async () => { return this.$iOSEmulatorServices.connectToPort({ port }); From 4103d57620f7bdda3bc35d681cdb122940266be5 Mon Sep 17 00:00:00 2001 From: Igor Randjelovic Date: Mon, 12 Jul 2021 19:12:53 +0200 Subject: [PATCH 2/2] Update lib/common/mobile/ios/simulator/ios-simulator-device.ts --- lib/common/mobile/ios/simulator/ios-simulator-device.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/common/mobile/ios/simulator/ios-simulator-device.ts b/lib/common/mobile/ios/simulator/ios-simulator-device.ts index 17d1884979..6654428a6b 100644 --- a/lib/common/mobile/ios/simulator/ios-simulator-device.ts +++ b/lib/common/mobile/ios/simulator/ios-simulator-device.ts @@ -99,6 +99,8 @@ export class IOSSimulator extends IOSDeviceBase implements Mobile.IiOSDevice { .catch((e) => this.$logger.error(e)); }, 5e3); + // the internal retry-mechanism of getDebuggerPort will ensure the above + // interval has a chance to execute multiple times const port = await super.getDebuggerPort(appId).finally(() => { clearInterval(postNotificationRetryInterval); });