Detox + Expo + jest : timeout on opening the app

Describe the bug
Detox tests timeout waiting for the return of app opening methods.
using the detox-expo-helpers , both reloadApp() and device.openUrl({ url }) hang while waiting for the device response.
It looks like the Device Driver deliverPayload does not return.
To Reproduce

[x] I have tested this issue on the latest Detox release and it still reproduces

Here is a repo (basically I just ran expo init and detox init -r jest)
https://github.com/jeromecornet/expotest
You will note that device.launchApp without a url returns, but does not with a url launch parameter.
Also I can use the standalone app (not via the expo client) and it works fine, this seems to be specific to the expo client.
Expected behavior
Both launch methods should return.
Environment (please complete the following information):

Detox: 12.10.2
React Native: 0.57.1 (from expo sdk 32.0.0)
Node: 6.7.0
Device: iOS simulator, iPhone 8
Xcode: 10.2.1
iOS: 12.1
macOS: 10.14.5

with expo 32.0.0
Device and Verbose Detox Logs
detox[54371] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onBootDevice({ coldBoot: false,
  deviceId: '2F0E2EDF-A080-4757-90C4-976F1445D7C4' })
detox[54371] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onBeforeUninstallApp({ deviceId: '2F0E2EDF-A080-4757-90C4-976F1445D7C4',
  bundleId: 'host.exp.Exponent' })
detox[54371] DEBUG: [exec.js/EXEC_CMD, #3] /usr/bin/xcrun simctl uninstall 2F0E2EDF-A080-4757-90C4-976F1445D7C4 host.exp.Exponent
detox[54371] DEBUG: [exec.js/EXEC_TRY, #3] Uninstalling host.exp.Exponent...
detox[54371] TRACE: [exec.js/EXEC_SUCCESS, #3]
detox[54371] DEBUG: [exec.js/EXEC_SUCCESS, #3] host.exp.Exponent uninstalled
detox[54371] DEBUG: [exec.js/EXEC_CMD, #4] /usr/bin/xcrun simctl install 2F0E2EDF-A080-4757-90C4-976F1445D7C4 "/Users/jeromecornet/src/expotest/bin/expo.app"
detox[54371] DEBUG: [exec.js/EXEC_TRY, #4] Installing /Users/jeromecornet/src/expotest/bin/expo.app...
detox[54371] TRACE: [exec.js/EXEC_SUCCESS, #4]
detox[54371] DEBUG: [exec.js/EXEC_SUCCESS, #4] /Users/jeromecornet/src/expotest/bin/expo.app installed
detox[54371] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onBeforeTerminateApp({ deviceId: '2F0E2EDF-A080-4757-90C4-976F1445D7C4',
  bundleId: 'host.exp.Exponent' })
detox[54371] DEBUG: [exec.js/EXEC_CMD, #5] /usr/bin/xcrun simctl terminate 2F0E2EDF-A080-4757-90C4-976F1445D7C4 host.exp.Exponent
detox[54371] DEBUG: [exec.js/EXEC_TRY, #5] Terminating host.exp.Exponent...
detox[54371] TRACE: [exec.js/EXEC_SUCCESS, #5]
detox[54371] DEBUG: [exec.js/EXEC_SUCCESS, #5] host.exp.Exponent terminated
detox[54371] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onBeforeLaunchApp({ bundleId: 'host.exp.Exponent',
  deviceId: '2F0E2EDF-A080-4757-90C4-976F1445D7C4',
  launchArgs:
   { detoxServer: 'ws://localhost:58963',
     detoxSessionId: 'e36ef041-2bde-00df-d586-44b10a2a6098' } })
detox[54371] DEBUG: [exec.js/EXEC_CMD, #6] /bin/cat /dev/null >/Users/jeromecornet/Library/Developer/CoreSimulator/Devices/2F0E2EDF-A080-4757-90C4-976F1445D7C4/data/tmp/detox.last_launch_app_log.out 2>/Users/jeromecornet/Library/Developer/CoreSimulator/Devices/2F0E2EDF-A080-4757-90C4-976F1445D7C4/data/tmp/detox.last_launch_app_log.err && SIMCTL_CHILD_DYLD_INSERT_LIBRARIES="/Users/jeromecornet/Library/Detox/ios/0f0da01849237f5e3552f9c24f9315745fb4c726/Detox.framework/Detox" /usr/bin/xcrun simctl launch --stdout=/tmp/detox.last_launch_app_log.out --stderr=/tmp/detox.last_launch_app_log.err 2F0E2EDF-A080-4757-90C4-976F1445D7C4 host.exp.Exponent --args -detoxServer "ws://localhost:58963" -detoxSessionId "e36ef041-2bde-00df-d586-44b10a2a6098"
detox[54371] DEBUG: [exec.js/EXEC_TRY, #6] Launching host.exp.Exponent...
detox[54371] TRACE: [exec.js/EXEC_SUCCESS, #6] host.exp.Exponent: 54408

detox[54371] INFO:  [AppleSimUtils.js] host.exp.Exponent launched. The stdout and stderr logs were recreated, you can watch them with:
        tail -F /Users/jeromecornet/Library/Developer/CoreSimulator/Devices/2F0E2EDF-A080-4757-90C4-976F1445D7C4/data/tmp/detox.last_launch_app_log.{out,err}
detox[54408] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onLaunchApp({ bundleId: 'host.exp.Exponent',
  deviceId: '2F0E2EDF-A080-4757-90C4-976F1445D7C4',
  launchArgs:
   { detoxServer: 'ws://localhost:58963',
     detoxSessionId: 'e36ef041-2bde-00df-d586-44b10a2a6098' },
  pid: 54408 })
detox[54371] TRACE: [AsyncWebSocket.js/WEBSOCKET_SEND] {"type":"isReady","params":{},"messageId":-1000}
detox[54371] TRACE: [DetoxServer.js/MESSAGE] role=tester action=isReady (sessionId=e36ef041-2bde-00df-d586-44b10a2a6098)
detox[54371] DEBUG: [DetoxServer.js/CANNOT_FORWARD] role=testee not connected, cannot fw action (sessionId=e36ef041-2bde-00df-d586-44b10a2a6098)
detox[54371] DEBUG: [DetoxServer.js/LOGIN] role=testee, sessionId=e36ef041-2bde-00df-d586-44b10a2a6098
detox[54371] DEBUG: [DetoxServer.js/LOGIN_SUCCESS] role=testee, sessionId=e36ef041-2bde-00df-d586-44b10a2a6098
detox[54371] TRACE: [DetoxServer.js/MESSAGE] role=testee action=ready (sessionId=e36ef041-2bde-00df-d586-44b10a2a6098)
detox[54371] TRACE: [AsyncWebSocket.js/WEBSOCKET_MESSAGE] {"type":"ready","messageId":-1000,"params":{}}

detox[54371] TRACE: [AsyncWebSocket.js/WEBSOCKET_SEND] {"type":"waitForActive","params":{},"messageId":1}
detox[54371] TRACE: [DetoxServer.js/MESSAGE] role=tester action=waitForActive (sessionId=e36ef041-2bde-00df-d586-44b10a2a6098)
detox[54371] TRACE: [DetoxServer.js/MESSAGE] role=testee action=waitForActiveDone (sessionId=e36ef041-2bde-00df-d586-44b10a2a6098)
detox[54371] TRACE: [AsyncWebSocket.js/WEBSOCKET_MESSAGE] {"type":"waitForActiveDone","messageId":1,"params":{}}

detox[54371] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onBeforeAll()
Example: should load the app
detox[54371] TRACE: [Detox.js/DETOX_BEFORE_EACH] running test: "Example should load the app"
detox[54371] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onBeforeEach({ title: 'should load the app',
  fullName: 'Example should load the app',
  status: 'running' })
  console.log e2e/firstTest.spec.js:6
    Lauching using reloadApp

detox[54371] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onBeforeTerminateApp({ deviceId: '2F0E2EDF-A080-4757-90C4-976F1445D7C4',
  bundleId: 'host.exp.Exponent' })
detox[54371] DEBUG: [exec.js/EXEC_CMD, #7] /usr/bin/xcrun simctl terminate 2F0E2EDF-A080-4757-90C4-976F1445D7C4 host.exp.Exponent
detox[54371] DEBUG: [exec.js/EXEC_TRY, #7] Terminating host.exp.Exponent...
detox[54371] TRACE: [exec.js/EXEC_SUCCESS, #7]
detox[54371] DEBUG: [exec.js/EXEC_SUCCESS, #7] host.exp.Exponent terminated
detox[54371] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onBeforeLaunchApp({ bundleId: 'host.exp.Exponent',
  deviceId: '2F0E2EDF-A080-4757-90C4-976F1445D7C4',
  launchArgs:
   { detoxServer: 'ws://localhost:58963',
     detoxSessionId: 'e36ef041-2bde-00df-d586-44b10a2a6098',
     EXKernelDisableNuxDefaultsKey: true,
     detoxURLBlacklistRegex:
      '\\("http://<IP_ADDRESS>:19005/onchange","https://e.crashlytics.com/spi/v2/events"\\)',
     detoxURLOverride: 'exp://<IP_ADDRESS>:19004',
     detoxSourceAppOverride: 'host.exp.exponent' } })
detox[54371] DEBUG: [DetoxServer.js/DISCONNECT] role=testee, sessionId=e36ef041-2bde-00df-d586-44b10a2a6098
detox[54371] DEBUG: [exec.js/EXEC_CMD, #8] /bin/cat /dev/null >/Users/jeromecornet/Library/Developer/CoreSimulator/Devices/2F0E2EDF-A080-4757-90C4-976F1445D7C4/data/tmp/detox.last_launch_app_log.out 2>/Users/jeromecornet/Library/Developer/CoreSimulator/Devices/2F0E2EDF-A080-4757-90C4-976F1445D7C4/data/tmp/detox.last_launch_app_log.err && SIMCTL_CHILD_DYLD_INSERT_LIBRARIES="/Users/jeromecornet/Library/ExpoDetoxHook/ios/d49fa2ddb665bfbaeb7e286b34efc73912f59c66/ExpoDetoxHook.framework/ExpoDetoxHook:/Users/jeromecornet/Library/Detox/ios/0f0da01849237f5e3552f9c24f9315745fb4c726/Detox.framework/Detox" /usr/bin/xcrun simctl launch --stdout=/tmp/detox.last_launch_app_log.out --stderr=/tmp/detox.last_launch_app_log.err 2F0E2EDF-A080-4757-90C4-976F1445D7C4 host.exp.Exponent --args -detoxServer "ws://localhost:58963" -detoxSessionId "e36ef041-2bde-00df-d586-44b10a2a6098" -EXKernelDisableNuxDefaultsKey "true" -detoxURLBlacklistRegex "\("http://<IP_ADDRESS>:19005/onchange","https://e.crashlytics.com/spi/v2/events"\)" -detoxURLOverride "exp://<IP_ADDRESS>:19004" -detoxSourceAppOverride "host.exp.exponent"
detox[54371] DEBUG: [exec.js/EXEC_TRY, #8] Launching host.exp.Exponent...
detox[54371] TRACE: [exec.js/EXEC_SUCCESS, #8] host.exp.Exponent: 54435

detox[54371] INFO:  [AppleSimUtils.js] host.exp.Exponent launched. The stdout and stderr logs were recreated, you can watch them with:
        tail -F /Users/jeromecornet/Library/Developer/CoreSimulator/Devices/2F0E2EDF-A080-4757-90C4-976F1445D7C4/data/tmp/detox.last_launch_app_log.{out,err}
detox[54435] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onLaunchApp({ bundleId: 'host.exp.Exponent',
  deviceId: '2F0E2EDF-A080-4757-90C4-976F1445D7C4',
  launchArgs:
   { detoxServer: 'ws://localhost:58963',
     detoxSessionId: 'e36ef041-2bde-00df-d586-44b10a2a6098',
     EXKernelDisableNuxDefaultsKey: true,
     detoxURLBlacklistRegex:
      '\\("http://<IP_ADDRESS>:19005/onchange","https://e.crashlytics.com/spi/v2/events"\\)',
     detoxURLOverride: 'exp://<IP_ADDRESS>:19004',
     detoxSourceAppOverride: 'host.exp.exponent' },
  pid: 54435 })
detox[54371] TRACE: [AsyncWebSocket.js/WEBSOCKET_SEND] {"type":"isReady","params":{},"messageId":-1000}
detox[54371] TRACE: [DetoxServer.js/MESSAGE] role=tester action=isReady (sessionId=e36ef041-2bde-00df-d586-44b10a2a6098)
detox[54371] DEBUG: [DetoxServer.js/CANNOT_FORWARD] role=testee not connected, cannot fw action (sessionId=e36ef041-2bde-00df-d586-44b10a2a6098)
detox[54371] DEBUG: [DetoxServer.js/LOGIN] role=testee, sessionId=e36ef041-2bde-00df-d586-44b10a2a6098
detox[54371] DEBUG: [DetoxServer.js/LOGIN_SUCCESS] role=testee, sessionId=e36ef041-2bde-00df-d586-44b10a2a6098
Example: should load the app [FAIL]
Example: should open the app URL
detox[54371] TRACE: [Detox.js/DETOX_AFTER_EACH] failed test: "Example should load the app"
detox[54371] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onAfterEach({ title: 'should load the app',
  fullName: 'Example should load the app',
  status: 'failed' })
detox[54371] TRACE: [Detox.js/DETOX_BEFORE_EACH] running test: "Example should open the app URL"
detox[54371] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onBeforeEach({ title: 'should open the app URL',
  fullName: 'Example should open the app URL',
  status: 'running' })
  console.log e2e/firstTest.spec.js:13
    Lauching expo

detox[54371] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onBeforeTerminateApp({ deviceId: '2F0E2EDF-A080-4757-90C4-976F1445D7C4',
  bundleId: 'host.exp.Exponent' })
detox[54371] DEBUG: [exec.js/EXEC_CMD, #9] /usr/bin/xcrun simctl terminate 2F0E2EDF-A080-4757-90C4-976F1445D7C4 host.exp.Exponent
detox[54371] DEBUG: [exec.js/EXEC_TRY, #9] Terminating host.exp.Exponent...
detox[54371] TRACE: [exec.js/EXEC_SUCCESS, #9]
detox[54371] DEBUG: [exec.js/EXEC_SUCCESS, #9] host.exp.Exponent terminated
detox[54371] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onBeforeLaunchApp({ bundleId: 'host.exp.Exponent',
  deviceId: '2F0E2EDF-A080-4757-90C4-976F1445D7C4',
  launchArgs:
   { detoxServer: 'ws://localhost:58963',
     detoxSessionId: 'e36ef041-2bde-00df-d586-44b10a2a6098',
     EXKernelDisableNuxDefaultsKey: true } })
detox[54371] DEBUG: [DetoxServer.js/DISCONNECT] role=testee, sessionId=e36ef041-2bde-00df-d586-44b10a2a6098
detox[54371] DEBUG: [exec.js/EXEC_CMD, #10] /bin/cat /dev/null >/Users/jeromecornet/Library/Developer/CoreSimulator/Devices/2F0E2EDF-A080-4757-90C4-976F1445D7C4/data/tmp/detox.last_launch_app_log.out 2>/Users/jeromecornet/Library/Developer/CoreSimulator/Devices/2F0E2EDF-A080-4757-90C4-976F1445D7C4/data/tmp/detox.last_launch_app_log.err && SIMCTL_CHILD_DYLD_INSERT_LIBRARIES="/Users/jeromecornet/Library/ExpoDetoxHook/ios/d49fa2ddb665bfbaeb7e286b34efc73912f59c66/ExpoDetoxHook.framework/ExpoDetoxHook:/Users/jeromecornet/Library/Detox/ios/0f0da01849237f5e3552f9c24f9315745fb4c726/Detox.framework/Detox" /usr/bin/xcrun simctl launch --stdout=/tmp/detox.last_launch_app_log.out --stderr=/tmp/detox.last_launch_app_log.err 2F0E2EDF-A080-4757-90C4-976F1445D7C4 host.exp.Exponent --args -detoxServer "ws://localhost:58963" -detoxSessionId "e36ef041-2bde-00df-d586-44b10a2a6098" -EXKernelDisableNuxDefaultsKey "true"
detox[54371] DEBUG: [exec.js/EXEC_TRY, #10] Launching host.exp.Exponent...
detox[54371] TRACE: [exec.js/EXEC_SUCCESS, #10] host.exp.Exponent: 54511

detox[54371] INFO:  [AppleSimUtils.js] host.exp.Exponent launched. The stdout and stderr logs were recreated, you can watch them with:
        tail -F /Users/jeromecornet/Library/Developer/CoreSimulator/Devices/2F0E2EDF-A080-4757-90C4-976F1445D7C4/data/tmp/detox.last_launch_app_log.{out,err}
detox[54511] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onLaunchApp({ bundleId: 'host.exp.Exponent',
  deviceId: '2F0E2EDF-A080-4757-90C4-976F1445D7C4',
  launchArgs:
   { detoxServer: 'ws://localhost:58963',
     detoxSessionId: 'e36ef041-2bde-00df-d586-44b10a2a6098',
     EXKernelDisableNuxDefaultsKey: true },
  pid: 54511 })
detox[54371] TRACE: [AsyncWebSocket.js/WEBSOCKET_SEND] {"type":"isReady","params":{},"messageId":-1000}
detox[54371] TRACE: [DetoxServer.js/MESSAGE] role=tester action=isReady (sessionId=e36ef041-2bde-00df-d586-44b10a2a6098)
detox[54371] DEBUG: [DetoxServer.js/CANNOT_FORWARD] role=testee not connected, cannot fw action (sessionId=e36ef041-2bde-00df-d586-44b10a2a6098)
detox[54371] DEBUG: [DetoxServer.js/LOGIN] role=testee, sessionId=e36ef041-2bde-00df-d586-44b10a2a6098
detox[54371] DEBUG: [DetoxServer.js/LOGIN_SUCCESS] role=testee, sessionId=e36ef041-2bde-00df-d586-44b10a2a6098
detox[54371] TRACE: [DetoxServer.js/MESSAGE] role=testee action=ready (sessionId=e36ef041-2bde-00df-d586-44b10a2a6098)
detox[54371] TRACE: [AsyncWebSocket.js/WEBSOCKET_MESSAGE] {"type":"ready","messageId":-1000,"params":{}}

detox[54371] TRACE: [AsyncWebSocket.js/WEBSOCKET_SEND] {"type":"waitForActive","params":{},"messageId":2}
detox[54371] TRACE: [DetoxServer.js/MESSAGE] role=tester action=waitForActive (sessionId=e36ef041-2bde-00df-d586-44b10a2a6098)
detox[54371] TRACE: [DetoxServer.js/MESSAGE] role=testee action=waitForActiveDone (sessionId=e36ef041-2bde-00df-d586-44b10a2a6098)
detox[54371] TRACE: [AsyncWebSocket.js/WEBSOCKET_MESSAGE] {"type":"waitForActiveDone","messageId":2,"params":{}}

  console.log e2e/firstTest.spec.js:20
    Opening app URL: exp://<IP_ADDRESS>:19004

detox[54371] TRACE: [AsyncWebSocket.js/WEBSOCKET_SEND] {"type":"deliverPayload","params":{"url":"exp://<IP_ADDRESS>:19004"},"messageId":3}
detox[54371] TRACE: [DetoxServer.js/MESSAGE] role=tester action=deliverPayload (sessionId=e36ef041-2bde-00df-d586-44b10a2a6098)
Example: should open the app URL [FAIL]

detox[54371] TRACE: [Detox.js/DETOX_AFTER_EACH] failed test: "Example should open the app URL"
detox[54371] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onAfterEach({ title: 'should open the app URL',
  fullName: 'Example should open the app URL',
  status: 'failed' })
detox[54371] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onAfterAll()
detox[54371] TRACE: [AsyncWebSocket.js/WEBSOCKET_SEND] {"type":"cleanup","params":{"stopRunner":true},"messageId":4}
detox[54371] TRACE: [DetoxServer.js/MESSAGE] role=tester action=cleanup (sessionId=e36ef041-2bde-00df-d586-44b10a2a6098)
detox[54371] TRACE: [DetoxServer.js/MESSAGE] role=testee action=cleanupDone (sessionId=e36ef041-2bde-00df-d586-44b10a2a6098)
detox[54371] TRACE: [AsyncWebSocket.js/WEBSOCKET_MESSAGE] {"type":"cleanupDone","messageId":4,"params":{}}

 FAIL  e2e/firstTest.spec.js (258.305s)
  Example
    ✕ should load the app (120243ms)
    ✕ should open the app URL (120003ms)

  ● Example › should load the app

    Timeout - Async callback was not invoked within the 120000ms timeout specified by jest.setTimeout.

       8 |     console.log("App launched")
       9 |     await expect(element(by.text('Open up App.js to start working on your app!'))).toBeVisible();
    > 10 |   });
         |   ^
      11 |
      12 |  it('should open the app URL', async () => {
      13 |     console.log("Lauching expo")

      at new Spec (../node_modules/@jest/core/node_modules/jest-jasmine2/build/jasmine/Spec.js:116:22)
      at Suite.<anonymous> (firstTest.spec.js:10:3)
      at Object.<anonymous> (firstTest.spec.js:9:1)

  ● Example › should open the app URL

    Timeout - Async callback was not invoked within the 120000ms timeout specified by jest.setTimeout.

      at new Spec (../node_modules/@jest/core/node_modules/jest-jasmine2/build/jasmine/Spec.js:116:22)
      at Suite.<anonymous> (firstTest.spec.js:31:3)
      at Object.<anonymous> (firstTest.spec.js:9:1)

detox[54371] DEBUG: [DetoxServer.js/DISCONNECT] role=tester, sessionId=e36ef041-2bde-00df-d586-44b10a2a6098
detox[54371] DEBUG: [DetoxServer.js/DISCONNECT] role=testee, sessionId=e36ef041-2bde-00df-d586-44b10a2a6098
detox[54369] ERROR: [cli.js] Error: Command failed: node_modules/.bin/jest --config=e2e/config.json --maxWorkers=1 '--testNamePattern=^((?!:android:).)*$' "e2e"

Please enable debug synchronization and post the log here.   The stdout and stderr logs were recreated, you can watch them with:
        tail -F /Users/jeromecornet/Library/Developer/CoreSimulator/Devices/2F0E2EDF-A080-4757-90C4-976F1445D7C4/data/tmp/detox.last_launch_app_log.{out,err}
detox[8205] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onLaunchApp({ bundleId: 'host.exp.Exponent',
  deviceId: '2F0E2EDF-A080-4757-90C4-976F1445D7C4',
  launchArgs:
   { detoxServer: 'ws://localhost:54994',
     detoxSessionId: '3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69',
     EXKernelDisableNuxDefaultsKey: true,
     detoxURLBlacklistRegex:
      '\\("http://<IP_ADDRESS>:80/onchange","https://e.crashlytics.com/spi/v2/events"\\)',
     detoxURLOverride: 'exp://<IP_ADDRESS>:80',
     detoxSourceAppOverride: 'host.exp.exponent' },
  pid: 8205 })
detox[8134] TRACE: [AsyncWebSocket.js/WEBSOCKET_SEND] {"type":"isReady","params":{},"messageId":-1000}
detox[8134] TRACE: [DetoxServer.js/MESSAGE] role=tester action=isReady (sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69)
detox[8134] DEBUG: [DetoxServer.js/CANNOT_FORWARD] role=testee not connected, cannot fw action (sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69)
detox[8134] DEBUG: [DetoxServer.js/LOGIN] role=testee, sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69
detox[8134] DEBUG: [DetoxServer.js/LOGIN_SUCCESS] role=testee, sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69
detox[8134] TRACE: [DetoxServer.js/MESSAGE] role=testee action=ready (sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69)
detox[8134] TRACE: [AsyncWebSocket.js/WEBSOCKET_MESSAGE] {"type":"ready","messageId":-1000,"params":{}}

detox[8134] TRACE: [AsyncWebSocket.js/WEBSOCKET_SEND] {"type":"waitForActive","params":{},"messageId":2}
detox[8134] TRACE: [DetoxServer.js/MESSAGE] role=tester action=waitForActive (sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69)
detox[8134] TRACE: [DetoxServer.js/MESSAGE] role=testee action=waitForActiveDone (sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69)
detox[8134] TRACE: [AsyncWebSocket.js/WEBSOCKET_MESSAGE] {"type":"waitForActiveDone","messageId":2,"params":{}}

  console.log e2e/firstTest.spec.js:8
    App launched

detox[8134] TRACE: [AsyncWebSocket.js/WEBSOCKET_SEND] {"type":"invoke","params":{"target":{"type":"Invocation","value":{"target":{"type":"EarlGrey","value":"instance"},"method":"detox_selectElementWithMatcher:","args":[{"type":"Invocation","value":{"target":{"type":"Class","value":"GREYMatchers"},"method":"detoxMatcherForText:","args":[{"type":"NSString","value":"Open up App.js to start working on your app!"}]}}]}},"method":"assertWithMatcher:","args":[{"type":"Invocation","value":{"target":{"type":"Class","value":"GREYMatchers"},"method":"matcherForSufficientlyVisible","args":[]}}]},"messageId":3}
detox[8134] TRACE: [DetoxServer.js/MESSAGE] role=tester action=invoke (sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69)
detox[8134] TRACE: [DetoxServer.js/MESSAGE] role=testee action=testFailed (sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69)
detox[8134] TRACE: [AsyncWebSocket.js/WEBSOCKET_MESSAGE] {"type":"testFailed","messageId":3,"params":{"details":"Cannot find UI Element.\nException with Assertion: {\n  \"Assertion Criteria\":  \"assertWithMatcher:matcherForSufficientlyVisible(>=0.750000)\",\n  \"Element Matcher\":  \"((!(kindOfClass('RCTScrollView')) && (((kindOfClass('UILabel') || kindOfClass('UITextField') || kindOfClass('UITextView')) && hasText('Open up App.js to start working on your app!')) || (kindOfClass('RCTTextView') && an object with accessibilityLabel \"Open up App.js to start working on your app!\"))) || (((kindOfClass('UIView') || respondsToSelector(accessibilityContainer)) && parentThatMatches(kindOfClass('RCTScrollView'))) && ((kindOfClass('UIView') || respondsToSelector(accessibilityContainer)) && parentThatMatches((((kindOfClass('UILabel') || kindOfClass('UITextField') || kindOfClass('UITextView')) && hasText('Open up App.js to start working on your app!')) || (kindOfClass('RCTTextView') && an object with accessibilityLabel \"Open up App.js to start working on your app!\"))))))\",\n  \"Recovery Suggestion\":  \"Check if the element exists in the UI hierarchy printed below. If it exists, adjust the matcher so that it accurately matches element.\"\n}\n\n\nError Trace: [\n  {\n    \"Description\":  \"Interaction cannot continue because the desired element was not found.\",\n    \"Error Domain\":  \"com.google.earlgrey.ElementInteractionErrorDomain\",\n    \"Error Code\":  \"0\",\n    \"File Name\":  \"GREYElementInteraction.m\",\n    \"Function Name\":  \"-[GREYElementInteraction matchedElementsWithTimeout:error:]\",\n    \"Line\":  \"124\"\n  }\n]\n\nHierarchy: <UIWindow:0x7fe54e5348c0; AX=N; AX.frame={{0, 0}, {375, 667}}; AX.activationPoint={187.5, 333.5}; AX.traits='UIAccessibilityTraitNone'; AX.focused='N'; frame={{0, 0}, {375, 667}}; opaque; alpha=1>\n  |--<UIView:0x7fe54e412a10; AX=N; AX.frame={{0, 0}, {375, 667}}; AX.activationPoint={187.5, 333.5}; AX.traits='UIAccessibilityTraitNone'; AX.focused='N'; frame={{0, 0}, {375, 667}}; opaque; alpha=1>\n  |  |--<EXButtonView:0x7fe54e61d440; AX=N; AX.frame={{315, 571}, {48, 48}}; AX.activationPoint={339, 595}; AX.traits='UIAccessibilityTraitNone'; AX.focused='N'; frame={{315, 571}, {48, 48}}; opaque; hidden; alpha=1>\n  |  |  |--<UIButton:0x7fe54e61d8b0; AX=N; AX.label='MenuButton'; AX.frame={{315, 571}, {48, 48}}; AX.activationPoint={339, 595}; AX.traits='UIAccessibilityTraitButton'; AX.focused='N'; frame={{0, 0}, {48, 48}}; alpha=1>\n  |  |  |  |--<UIImageView:0x7fe551000f20; AX=N; AX.id='MenuButton'; AX.frame={{327, 584.5}, {24, 21}}; AX.activationPoint={339, 595}; AX.traits='UIAccessibilityTraitImage'; AX.focused='N'; frame={{12, 13.5}, {24, 21}}; alpha=1; UIE=N>\n  |  |--<UIView:0x7fe551104800; AX=N; AX.frame={{0, 0}, {375, 667}}; AX.activationPoint={187.5, 333.5}; AX.traits='UIAccessibilityTraitNone'; AX.focused='N'; frame={{0, 0}, {375, 667}}; opaque; alpha=1>\n  |  |  |--<EXErrorView:0x7fe54e753210; AX=N; AX.frame={{0, 0}, {375, 667}}; AX.activationPoint={187.5, 333.5}; AX.traits='UIAccessibilityTraitNone'; AX.focused='N'; frame={{0, 0}, {375, 667}}; opaque; alpha=1>\n  |  |  |  |--<UIScrollView:0x7fe550897000; AX=N; AX.frame={{0, 0}, {375, 667}}; AX.activationPoint={187.5, 333.5}; AX.traits='UIAccessibilityTraitNone'; AX.focused='N'; frame={{0, 0}, {375, 667}}; opaque; alpha=1>\n  |  |  |  |  |--<UIImageView:0x7fe54e548ef0; AX=N; AX.frame={{365, 661.5}, {7, 2.5}}; AX.activationPoint={368.5, 662.75}; AX.traits='UIAccessibilityTraitImage'; AX.focused='N'; frame={{365, 661.5}, {7, 2.5}}; alpha=0; UIE=N>\n  |  |  |  |  |--<UIImageView:0x7fe54e549120; AX=N; AX.frame={{369.5, 657}, {2.5, 7}}; AX.activationPoint={370.75, 660.5}; AX.traits='UIAccessibilityTraitImage'; AX.focused='N'; frame={{369.5, 657}, {2.5, 7}}; alpha=0; UIE=N>\n  |  |  |  |  |--<UILabel:0x7fe54e577140; AX=Y; AX.label='Could not connect to the server.';  It looks like you may be using a LAN URL. Make sure your device is on the same network as the server or try using a tunnel.'; AX.frame={{19.25, 133.25}, {336.5, 67}}; AX.activationPoint={187.5, 166.75}; AX.traits='UIAccessibilityTraitStaticText'; AX.focused='N'; frame={{19.25, 133.25}, {336.5, 67}}; opaque; alpha=1; UIE=N; text='There was a problem loading the requested app. It looks like you may be using a LAN URL.  You might want to check your internet connectivity.';  You might want to check your internet connectivity.'>\n  |  |  |  |  |--<UILabel:0x7fe54e65bb10; AX=Y; AX.label='Opening project...'; AX.frame={{143.75, 271}, {115.5, 17}}; AX.activationPoint={201.5, 279.5}; AX.traits='UIAccessibilityTraitStaticText'; AX.focused='N'; frame={{143.75, 1.5}, {115.5, 17}}; opaque; alpha=1; UIE=N; text='Opening project...'>\n  |  |  |  |  |--<UIActivityIndicatorView:0x7fe54e766ad0; AX=N; AX.label='In progress'; AX.value='1'; AX.frame={{115.75, 269.5}, {20, 20}}; AX.activationPoint={125.75, 279.5}; AX.traits='UIAccessibilityTraitNone'; AX.focused='N'; frame={{115.75, 0}, {20, 20}}; opaque; alpha=1>\n  |  |  |  |  |  |--<UIImageView:0x7fe54e7673e0; AX=N; AX.frame={{115.75, 269.5}, {20, 20}}; AX.activationPoint={125.75, 279.5}; AX.traits='UIAccessibilityTraitImage'; AX.focused='N'; frame={{0, 0}, {20, 20}}; alpha=1; UIE=N>\n  |  |  |  |--<UIView:0x7fe55132d9d0; AX=N; AX.frame={{0, 0}, {375, 667}}; AX.activationPoint={187.5, 333.5}; AX.traits='UIAccessibilityTraitNone'; AX.focused='N'; frame={{0, 0}, {375, 667}}; opaque; alpha=1>"}}

Example: should load the app [FAIL]
Example: should open the app URL
detox[8134] TRACE: [Detox.js/DETOX_AFTER_EACH] failed test: "Example should load the app"
detox[8134] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onAfterEach({ title: 'should load the app',
  fullName: 'Example should load the app',
  status: 'failed' })
detox[8134] TRACE: [Detox.js/DETOX_BEFORE_EACH] running test: "Example should open the app URL"
detox[8134] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onBeforeEach({ title: 'should open the app URL',
  fullName: 'Example should open the app URL',
  status: 'running' })
  console.log e2e/firstTest.spec.js:13
    Lauching expo

detox[8134] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onBeforeTerminateApp({ deviceId: '2F0E2EDF-A080-4757-90C4-976F1445D7C4',
  bundleId: 'host.exp.Exponent' })
detox[8134] DEBUG: [exec.js/EXEC_CMD, #9] /usr/bin/xcrun simctl terminate 2F0E2EDF-A080-4757-90C4-976F1445D7C4 host.exp.Exponent
detox[8134] DEBUG: [exec.js/EXEC_TRY, #9] Terminating host.exp.Exponent...
detox[8134] TRACE: [exec.js/EXEC_SUCCESS, #9]
detox[8134] DEBUG: [exec.js/EXEC_SUCCESS, #9] host.exp.Exponent terminated
detox[8134] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onBeforeLaunchApp({ bundleId: 'host.exp.Exponent',
  deviceId: '2F0E2EDF-A080-4757-90C4-976F1445D7C4',
  launchArgs:
   { detoxServer: 'ws://localhost:54994',
     detoxSessionId: '3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69',
     EXKernelDisableNuxDefaultsKey: true } })
detox[8134] DEBUG: [DetoxServer.js/DISCONNECT] role=testee, sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69
detox[8134] DEBUG: [exec.js/EXEC_CMD, #10] /bin/cat /dev/null >/Users/jeromecornet/Library/Developer/CoreSimulator/Devices/2F0E2EDF-A080-4757-90C4-976F1445D7C4/data/tmp/detox.last_launch_app_log.out 2>/Users/jeromecornet/Library/Developer/CoreSimulator/Devices/2F0E2EDF-A080-4757-90C4-976F1445D7C4/data/tmp/detox.last_launch_app_log.err && SIMCTL_CHILD_DYLD_INSERT_LIBRARIES="/Users/jeromecornet/Library/Detox/ios/0f0da01849237f5e3552f9c24f9315745fb4c726/Detox.framework/Detox" /usr/bin/xcrun simctl launch --stdout=/tmp/detox.last_launch_app_log.out --stderr=/tmp/detox.last_launch_app_log.err 2F0E2EDF-A080-4757-90C4-976F1445D7C4 host.exp.Exponent --args -detoxServer "ws://localhost:54994" -detoxSessionId "3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69" -EXKernelDisableNuxDefaultsKey "true"
detox[8134] DEBUG: [exec.js/EXEC_TRY, #10] Launching host.exp.Exponent...
detox[8134] TRACE: [exec.js/EXEC_SUCCESS, #10] host.exp.Exponent: 8245

detox[8134] INFO:  [AppleSimUtils.js] host.exp.Exponent launched. The stdout and stderr logs were recreated, you can watch them with:
        tail -F /Users/jeromecornet/Library/Developer/CoreSimulator/Devices/2F0E2EDF-A080-4757-90C4-976F1445D7C4/data/tmp/detox.last_launch_app_log.{out,err}
detox[8245] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onLaunchApp({ bundleId: 'host.exp.Exponent',
  deviceId: '2F0E2EDF-A080-4757-90C4-976F1445D7C4',
  launchArgs:
   { detoxServer: 'ws://localhost:54994',
     detoxSessionId: '3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69',
     EXKernelDisableNuxDefaultsKey: true },
  pid: 8245 })
detox[8134] TRACE: [AsyncWebSocket.js/WEBSOCKET_SEND] {"type":"isReady","params":{},"messageId":-1000}
detox[8134] TRACE: [DetoxServer.js/MESSAGE] role=tester action=isReady (sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69)
detox[8134] DEBUG: [DetoxServer.js/CANNOT_FORWARD] role=testee not connected, cannot fw action (sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69)
detox[8134] DEBUG: [DetoxServer.js/LOGIN] role=testee, sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69
detox[8134] DEBUG: [DetoxServer.js/LOGIN_SUCCESS] role=testee, sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69
detox[8134] TRACE: [AsyncWebSocket.js/WEBSOCKET_SEND] {"type":"currentStatus","params":{},"messageId":4}
detox[8134] TRACE: [DetoxServer.js/MESSAGE] role=tester action=currentStatus (sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69)
detox[8134] TRACE: [DetoxServer.js/MESSAGE] role=testee action=currentStatusResult (sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69)
detox[8134] TRACE: [AsyncWebSocket.js/WEBSOCKET_MESSAGE] {"type":"currentStatusResult","messageId":4,"params":{"state":"busy","resources":[{"name":"Timed","info":{"endTrackingDate":"Thursday 1 January 1970 at 16:25:27 Eastern Standard Time","object":"<NSObject: 0x6000033cec20>","name":"animateWithDuration:delay:options:animations:completion:","prettyPrint":"animateWithDuration:delay:options:animations:completion:","duration":0.25}},{"name":"Timed","info":{"endTrackingDate":"Thursday 1 January 1970 at 16:25:27 Eastern Standard Time","object":"<NSObject: 0x6000033ce380>","name":"animateWithDuration:delay:options:animations:completion:","prettyPrint":"animateWithDuration:delay:options:animations:completion:","duration":0.35}},{"name":"Timed","info":{"endTrackingDate":"Thursday 1 January 1970 at 16:25:28 Eastern Standard Time","object":"<NSObject: 0x6000033ce7d0>","name":"animateWithDuration:delay:options:animations:completion:","prettyPrint":"animateWithDuration:delay:options:animations:completion:","duration":1}},{"name":"Timed","info":{"endTrackingDate":"Thursday 1 January 1970 at 16:25:27 Eastern Standard Time","object":"<NSObject: 0x6000033e3770>","name":"animateWithDuration:delay:options:animations:completion:","prettyPrint":"animateWithDuration:delay:options:animations:completion:","duration":0.35}},{"name":"Timed","info":{"endTrackingDate":"Thursday 1 January 1970 at 16:25:28 Eastern Standard Time","object":"<NSObject: 0x6000033ff4f0>","name":"animateWithDuration:delay:options:animations:completion:","prettyPrint":"animateWithDuration:delay:options:animations:completion:","duration":1}},{"name":"Timer","info":{"prettyPrint":"Tracking Timer <__NSCFTimer: 0x6000004fcd80>","timer":"<__NSCFTimer: 0x6000004fcd80>","name":"Tracking Timer <__NSCFTimer: 0x6000004fcd80>","nextFireDate":"Monday 3 June 2019 at 08:03:22 Eastern Daylight Time"}},{"name":"Timed","info":{"endTrackingDate":"Thursday 1 January 1970 at 16:25:28 Eastern Standard Time","object":"Delayed performSelector","name":"performSelector @selector(_accessibilitySetUpQuickSpeak) on UIApplication","prettyPrint":"performSelector @selector(_accessibilitySetUpQuickSpeak) on UIApplication","duration":3}},{"name":"JavaScript Timers","info":{"javascriptTimerIDs":[95],"prettyPrint":"Javascript Timers Ids: 95"}},{"name":"App State","info":{"elements":["<CABasicAnimation: 0x6000030c6860>","<CABasicAnimation: 0x6000030c63c0>","<CABasicAnimation: 0x6000030d87a0>","<CAKeyframeAnimation: 0x6000031b1500>","<CABasicAnimation: 0x6000030c6bc0>","<CABasicAnimation: 0x6000030c67a0>","<CABasicAnimation: 0x6000030d3740>","<CABasicAnimation: 0x6000030d8760>","<CAKeyframeAnimation: 0x6000031b14c0>","<CABasicAnimation: 0x6000030c7240>","<CABasicAnimation: 0x6000030c6980>"],"appState":"Waiting for an animation to finish. Continuous animations may never finish and must be stopped explicitly. Animations attached to hidden view may still be running in the background."}},{"name":"Dispatch Queue","info":{"queue":"<OS_dispatch_queue_main: com.apple.main-thread[0x113866a80] = { xref = -2147483648, ref = -2147483648, sref = 1, target = com.apple.root.default-qos.overcommit[0x113866f00], width = 0x1, state = 0x001ffe9000000300, dirty, in-flight = 0, thread = 0x303 }>","prettyPrint":"com.apple.main-thread"}}],"messageId":4}}

detox[8134] INFO:  [actions.js] Sync Timed: animateWithDuration:delay:options:animations:completion:
detox[8134] INFO:  [actions.js] Sync Timed: animateWithDuration:delay:options:animations:completion:
detox[8134] INFO:  [actions.js] Sync Timed: animateWithDuration:delay:options:animations:completion:
detox[8134] INFO:  [actions.js] Sync Timed: animateWithDuration:delay:options:animations:completion:
detox[8134] INFO:  [actions.js] Sync Timed: animateWithDuration:delay:options:animations:completion:
detox[8134] INFO:  [actions.js] Sync Timer: Tracking Timer <__NSCFTimer: 0x6000004fcd80>
detox[8134] INFO:  [actions.js] Sync Timed: performSelector @selector(_accessibilitySetUpQuickSpeak) on UIApplication
detox[8134] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers Ids: 95
detox[8134] INFO:  [actions.js] Sync App State: undefined
detox[8134] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[8134] TRACE: [AsyncWebSocket.js/WEBSOCKET_SEND] {"type":"currentStatus","params":{},"messageId":5}
detox[8134] TRACE: [DetoxServer.js/MESSAGE] role=tester action=currentStatus (sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69)
detox[8134] TRACE: [DetoxServer.js/MESSAGE] role=testee action=currentStatusResult (sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69)
detox[8134] TRACE: [AsyncWebSocket.js/WEBSOCKET_MESSAGE] {"type":"currentStatusResult","messageId":5,"params":{"state":"busy","resources":[{"name":"App State","info":{"appState":"Waiting for an animation to finish. Continuous animations may never finish and must be stopped explicitly. Animations attached to hidden view may still be running in the background.\nWaiting for network requests to finish.","urls":["https://e.crashlytics.com/spi/v2/events"],"prettyPrint":"Waiting for an animation to finish. Continuous animations may never finish and must be stopped explicitly. Animations attached to hidden view may still be running in the background.\nWaiting for network requests to finish.: (\n    \"https://e.crashlytics.com/spi/v2/events\"\n)","elements":["<CASpringAnimation: 0x6000030cc240>","<CAKeyframeAnimation: 0x6000030ce000>","<CAKeyframeAnimation: 0x6000031b1500>","LocalUploadTask <68A7C194-C71D-4F22-922B-581A8589E266>.<2>","<CAKeyframeAnimation: 0x6000031b14c0>","<CASpringAnimation: 0x6000030cc9a0>","<CASpringAnimation: 0x6000030cc700>"]}},{"name":"Dispatch Queue","info":{"queue":"<OS_dispatch_queue_main: com.apple.main-thread[0x113866a80] = { xref = -2147483648, ref = -2147483648, sref = 1, target = com.apple.root.default-qos.overcommit[0x113866f00], width = 0x1, state = 0x001ffe9000000300, dirty, in-flight = 0, thread = 0x303 }>","prettyPrint":"com.apple.main-thread"}}],"messageId":5}}

detox[8134] INFO:  [actions.js] Sync App State: Waiting for an animation to finish. Continuous animations may never finish and must be stopped explicitly. Animations attached to hidden view may still be running in the background.
Waiting for network requests to finish.: (
    "https://e.crashlytics.com/spi/v2/events"
)
detox[8134] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[8134] TRACE: [AsyncWebSocket.js/WEBSOCKET_SEND] {"type":"currentStatus","params":{},"messageId":6}
detox[8134] TRACE: [DetoxServer.js/MESSAGE] role=tester action=currentStatus (sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69)
detox[8134] TRACE: [DetoxServer.js/MESSAGE] role=testee action=currentStatusResult (sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69)
detox[8134] TRACE: [AsyncWebSocket.js/WEBSOCKET_MESSAGE] {"type":"currentStatusResult","messageId":6,"params":{"state":"busy","resources":[{"name":"App State","info":{"elements":["<CAKeyframeAnimation: 0x6000030ce000>","<CAKeyframeAnimation: 0x6000031b1500>","<CAKeyframeAnimation: 0x6000031b14c0>"],"appState":"Waiting for an animation to finish. Continuous animations may never finish and must be stopped explicitly. Animations attached to hidden view may still be running in the background."}},{"name":"Dispatch Queue","info":{"queue":"<OS_dispatch_queue_main: com.apple.main-thread[0x113866a80] = { xref = -2147483648, ref = -2147483648, sref = 1, target = com.apple.root.default-qos.overcommit[0x113866f00], width = 0x1, state = 0x001ffe9000000300, dirty, in-flight = 0, thread = 0x303 }>","prettyPrint":"com.apple.main-thread"}}],"messageId":6}}

detox[8134] INFO:  [actions.js] Sync App State: undefined
detox[8134] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[8134] TRACE: [AsyncWebSocket.js/WEBSOCKET_SEND] {"type":"currentStatus","params":{},"messageId":7}
detox[8134] TRACE: [DetoxServer.js/MESSAGE] role=tester action=currentStatus (sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69)
detox[8134] TRACE: [DetoxServer.js/MESSAGE] role=testee action=currentStatusResult (sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69)
detox[8134] TRACE: [AsyncWebSocket.js/WEBSOCKET_MESSAGE] {"type":"currentStatusResult","messageId":7,"params":{"state":"busy","resources":[{"name":"App State","info":{"elements":["<CAKeyframeAnimation: 0x6000030ce000>"],"appState":"Waiting for an animation to finish. Continuous animations may never finish and must be stopped explicitly. Animations attached to hidden view may still be running in the background."}},{"name":"Dispatch Queue","info":{"queue":"<OS_dispatch_queue_main: com.apple.main-thread[0x113866a80] = { xref = -2147483648, ref = -2147483648, sref = 1, target = com.apple.root.default-qos.overcommit[0x113866f00], width = 0x1, state = 0x001ffe9000000300, dirty, in-flight = 0, thread = 0x303 }>","prettyPrint":"com.apple.main-thread"}}],"messageId":7}}

detox[8134] INFO:  [actions.js] Sync App State: undefined
detox[8134] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[8134] TRACE: [DetoxServer.js/MESSAGE] role=testee action=ready (sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69)
detox[8134] TRACE: [AsyncWebSocket.js/WEBSOCKET_MESSAGE] {"type":"ready","messageId":-1000,"params":{}}

detox[8134] TRACE: [AsyncWebSocket.js/WEBSOCKET_SEND] {"type":"waitForActive","params":{},"messageId":8}
detox[8134] TRACE: [DetoxServer.js/MESSAGE] role=tester action=waitForActive (sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69)
detox[8134] TRACE: [DetoxServer.js/MESSAGE] role=testee action=waitForActiveDone (sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69)
detox[8134] TRACE: [AsyncWebSocket.js/WEBSOCKET_MESSAGE] {"type":"waitForActiveDone","messageId":8,"params":{}}

  console.log e2e/firstTest.spec.js:20
    Opening app URL: exp://<IP_ADDRESS>:80

detox[8134] TRACE: [AsyncWebSocket.js/WEBSOCKET_SEND] {"type":"deliverPayload","params":{"url":"exp://<IP_ADDRESS>:80"},"messageId":9}
detox[8134] TRACE: [DetoxServer.js/MESSAGE] role=tester action=deliverPayload (sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69)
detox[8134] TRACE: [AsyncWebSocket.js/WEBSOCKET_SEND] {"type":"currentStatus","params":{},"messageId":10}
detox[8134] TRACE: [DetoxServer.js/MESSAGE] role=tester action=currentStatus (sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69)
detox[8134] TRACE: [DetoxServer.js/MESSAGE] role=testee action=currentStatusResult (sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69)
detox[8134] TRACE: [AsyncWebSocket.js/WEBSOCKET_MESSAGE] {"type":"currentStatusResult","messageId":10,"params":{"state":"busy","resources":[{"name":"App State","info":{"elements":["<CAKeyframeAnimation: 0x6000030cc900>","<CAKeyframeAnimation: 0x6000030ce1a0>"],"appState":"Waiting for an animation to finish. Continuous animations may never finish and must be stopped explicitly. Animations attached to hidden view may still be running in the background."}},{"name":"Dispatch Queue","info":{"queue":"<OS_dispatch_queue_main: com.apple.main-thread[0x113866a80] = { xref = -2147483648, ref = -2147483648, sref = 1, target = com.apple.root.default-qos.overcommit[0x113866f00], width = 0x1, state = 0x001ffe9000000300, dirty, in-flight = 0, thread = 0x303 }>","prettyPrint":"com.apple.main-thread"}}],"messageId":10}}

detox[8134] INFO:  [actions.js] Sync App State: undefined
detox[8134] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[8134] TRACE: [AsyncWebSocket.js/WEBSOCKET_SEND] {"type":"currentStatus","params":{},"messageId":11}
detox[8134] TRACE: [DetoxServer.js/MESSAGE] role=tester action=currentStatus (sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69)
detox[8134] TRACE: [DetoxServer.js/MESSAGE] role=testee action=currentStatusResult (sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69)
detox[8134] TRACE: [AsyncWebSocket.js/WEBSOCKET_MESSAGE] {"type":"currentStatusResult","messageId":11,"params":{"state":"busy","resources":[{"name":"App State","info":{"elements":["<CAKeyframeAnimation: 0x6000030cc900>","<CAKeyframeAnimation: 0x6000030ce1a0>"],"appState":"Waiting for an animation to finish. Continuous animations may never finish and must be stopped explicitly. Animations attached to hidden view may still be running in the background."}},{"name":"Dispatch Queue","info":{"queue":"<OS_dispatch_queue_main: com.apple.main-thread[0x113866a80] = { xref = -2147483648, ref = -2147483648, sref = 1, target = com.apple.root.default-qos.overcommit[0x113866f00], width = 0x1, state = 0x001ffe9000000300, dirty, in-flight = 0, thread = 0x303 }>","prettyPrint":"com.apple.main-thread"}}],"messageId":11}}

detox[8134] INFO:  [actions.js] Sync App State: undefined
detox[8134] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[8134] TRACE: [AsyncWebSocket.js/WEBSOCKET_SEND] {"type":"currentStatus","params":{},"messageId":12}
detox[8134] TRACE: [DetoxServer.js/MESSAGE] role=tester action=currentStatus (sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69)
detox[8134] TRACE: [DetoxServer.js/MESSAGE] role=testee action=currentStatusResult (sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69)
detox[8134] TRACE: [AsyncWebSocket.js/WEBSOCKET_MESSAGE] {"type":"currentStatusResult","messageId":12,"params":{"state":"busy","resources":[{"name":"App State","info":{"elements":["<CAKeyframeAnimation: 0x6000030cc900>","<CAKeyframeAnimation: 0x6000030ce1a0>"],"appState":"Waiting for an animation to finish. Continuous animations may never finish and must be stopped explicitly. Animations attached to hidden view may still be running in the background."}},{"name":"Dispatch Queue","info":{"queue":"<OS_dispatch_queue_main: com.apple.main-thread[0x113866a80] = { xref = -2147483648, ref = -2147483648, sref = 1, target = com.apple.root.default-qos.overcommit[0x113866f00], width = 0x1, state = 0x001ffe9000000300, dirty, in-flight = 0, thread = 0x303 }>","prettyPrint":"com.apple.main-thread"}}],"messageId":12}}

detox[8134] INFO:  [actions.js] Sync App State: undefined
detox[8134] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[8134] TRACE: [DetoxServer.js/MESSAGE] role=testee action=deliverPayloadDone (sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69)
detox[8134] TRACE: [AsyncWebSocket.js/WEBSOCKET_MESSAGE] {"type":"deliverPayloadDone","messageId":9,"params":{}}

  console.log e2e/firstTest.spec.js:22
    App launched

detox[8134] TRACE: [AsyncWebSocket.js/WEBSOCKET_SEND] {"type":"invoke","params":{"target":{"type":"Invocation","value":{"target":{"type":"EarlGrey","value":"instance"},"method":"detox_selectElementWithMatcher:","args":[{"type":"Invocation","value":{"target":{"type":"Class","value":"GREYMatchers"},"method":"detoxMatcherForText:","args":[{"type":"NSString","value":"Open up App.js to start working on your app!"}]}}]}},"method":"assertWithMatcher:","args":[{"type":"Invocation","value":{"target":{"type":"Class","value":"GREYMatchers"},"method":"matcherForSufficientlyVisible","args":[]}}]},"messageId":13}
detox[8134] TRACE: [DetoxServer.js/MESSAGE] role=tester action=invoke (sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69)
detox[8134] TRACE: [DetoxServer.js/MESSAGE] role=testee action=testFailed (sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69)
detox[8134] TRACE: [AsyncWebSocket.js/WEBSOCKET_MESSAGE] {"type":"testFailed","messageId":13,"params":{"details":"Cannot find UI Element.\nException with Assertion: {\n  \"Assertion Criteria\":  \"assertWithMatcher:matcherForSufficientlyVisible(>=0.750000)\",\n  \"Element Matcher\":  \"((!(kindOfClass('RCTScrollView')) && (((kindOfClass('UILabel') || kindOfClass('UITextField') || kindOfClass('UITextView')) && hasText('Open up App.js to start working on your app!')) || (kindOfClass('RCTTextView') && an object with accessibilityLabel \"Open up App.js to start working on your app!\"))) || (((kindOfClass('UIView') || respondsToSelector(accessibilityContainer)) && parentThatMatches(kindOfClass('RCTScrollView'))) && ((kindOfClass('UIView') || respondsToSelector(accessibilityContainer)) && parentThatMatches((((kindOfClass('UILabel') || kindOfClass('UITextField') || kindOfClass('UITextView')) && hasText('Open up App.js to start working on your app!')) || (kindOfClass('RCTTextView') && an object with accessibilityLabel \"Open up App.js to start working on your app!\"))))))\",\n  \"Recovery Suggestion\":  \"Check if the element exists in the UI hierarchy printed below. If it exists, adjust the matcher so that it accurately matches element.\"\n}\n\n\nError Trace: [\n  {\n    \"Description\":  \"Interaction cannot continue because the desired element was not found.\",\n    \"Error Domain\":  \"com.google.earlgrey.ElementInteractionErrorDomain\",\n    \"Error Code\":  \"0\",\n    \"File Name\":  \"GREYElementInteraction.m\",\n    \"Function Name\":  \"-[GREYElementInteraction matchedElementsWithTimeout:error:]\",\n    \"Line\":  \"124\"\n  }\n]\n\nHierarchy: <UIWindow:0x7fe0ac8193a0; AX=N; AX.frame={{0, 0}, {375, 667}}; AX.activationPoint={187.5, 333.5}; AX.traits='UIAccessibilityTraitNone'; AX.focused='N'; frame={{0, 0}, {375, 667}}; opaque; alpha=1>\n  |--<UIView:0x7fe0aac1db20; AX=N; AX.frame={{0, 0}, {375, 667}}; AX.activationPoint={187.5, 333.5}; AX.traits='UIAccessibilityTraitNone'; AX.focused='N'; frame={{0, 0}, {375, 667}}; opaque; alpha=1>\n  |  |--<EXButtonView:0x7fe0aac34b30; AX=N; AX.frame={{315, 571}, {48, 48}}; AX.activationPoint={339, 595}; AX.traits='UIAccessibilityTraitNone'; AX.focused='N'; frame={{315, 571}, {48, 48}}; opaque; hidden; alpha=1>\n  |  |  |--<UIButton:0x7fe0aac367c0; AX=N; AX.label='MenuButton'; AX.frame={{315, 571}, {48, 48}}; AX.activationPoint={339, 595}; AX.traits='UIAccessibilityTraitButton'; AX.focused='N'; frame={{0, 0}, {48, 48}}; alpha=1>\n  |  |  |  |--<UIImageView:0x7fe0acb0e420; AX=N; AX.id='MenuButton'; AX.frame={{327, 584.5}, {24, 21}}; AX.activationPoint={339, 595}; AX.traits='UIAccessibilityTraitImage'; AX.focused='N'; frame={{12, 13.5}, {24, 21}}; alpha=1; UIE=N>\n  |  |--<UIView:0x7fe0aac42d70; AX=N; AX.frame={{0, 0}, {375, 667}}; AX.activationPoint={187.5, 333.5}; AX.traits='UIAccessibilityTraitNone'; AX.focused='N'; frame={{0, 0}, {375, 667}}; opaque; alpha=1>\n  |  |  |--<EXErrorView:0x7fe0ac831090; AX=N; AX.frame={{0, 0}, {375, 667}}; AX.activationPoint={187.5, 333.5}; AX.traits='UIAccessibilityTraitNone'; AX.focused='N'; frame={{0, 0}, {375, 667}}; opaque; alpha=1>\n  |  |  |  |--<UIScrollView:0x7fe0ab11a800; AX=N; AX.frame={{0, 0}, {375, 667}}; AX.activationPoint={187.5, 333.5}; AX.traits='UIAccessibilityTraitNone'; AX.focused='N'; frame={{0, 0}, {375, 667}}; opaque; alpha=1>\n  |  |  |  |  |--<UIImageView:0x7fe0ac8259f0; AX=N; AX.frame={{365, 661.5}, {7, 2.5}}; AX.activationPoint={368.5, 662.75}; AX.traits='UIAccessibilityTraitImage'; AX.focused='N'; frame={{365, 661.5}, {7, 2.5}}; alpha=0; UIE=N>\n  |  |  |  |  |--<UIImageView:0x7fe0ac84d120; AX=N; AX.frame={{369.5, 657}, {2.5, 7}}; AX.activationPoint={370.75, 660.5}; AX.traits='UIAccessibilityTraitImage'; AX.focused='N'; frame={{369.5, 657}, {2.5, 7}}; alpha=0; UIE=N>\n  |  |  |  |  |--<UILabel:0x7fe0acb29550; AX=Y; AX.label='Could not connect to the server.';  It looks like you may be using a LAN URL. Make sure your device is on the same network as the server or try using a tunnel.'; AX.frame={{19.25, 133.25}, {336.5, 67}}; AX.activationPoint={187.5, 166.75}; AX.traits='UIAccessibilityTraitStaticText'; AX.focused='N'; frame={{19.25, 133.25}, {336.5, 67}}; opaque; alpha=1; UIE=N; text='There was a problem loading the requested app. It looks like you may be using a LAN URL.  You might want to check your internet connectivity.';  You might want to check your internet connectivity.'>\n  |  |  |  |  |--<UILabel:0x7fe0aac80660; AX=Y; AX.label='Opening project...'; AX.frame={{143.75, 271}, {115.5, 17}}; AX.activationPoint={201.5, 279.5}; AX.traits='UIAccessibilityTraitStaticText'; AX.focused='N'; frame={{143.75, 1.5}, {115.5, 17}}; opaque; alpha=1; UIE=N; text='Opening project...'>\n  |  |  |  |  |--<UIActivityIndicatorView:0x7fe0aac7a480; AX=N; AX.label='In progress'; AX.value='1'; AX.frame={{115.75, 269.5}, {20, 20}}; AX.activationPoint={125.75, 279.5}; AX.traits='UIAccessibilityTraitNone'; AX.focused='N'; frame={{115.75, 0}, {20, 20}}; opaque; alpha=1>\n  |  |  |  |  |  |--<UIImageView:0x7fe0aac7a910; AX=N; AX.frame={{115.75, 269.5}, {20, 20}}; AX.activationPoint={125.75, 279.5}; AX.traits='UIAccessibilityTraitImage'; AX.focused='N'; frame={{0, 0}, {20, 20}}; alpha=1; UIE=N>\n  |  |  |  |--<UIView:0x7fe0aac79d70; AX=N; AX.frame={{0, 0}, {375, 667}}; AX.activationPoint={187.5, 333.5}; AX.traits='UIAccessibilityTraitNone'; AX.focused='N'; frame={{0, 0}, {375, 667}}; opaque; alpha=1>"}}

Example: should open the app URL [FAIL]

detox[8134] TRACE: [Detox.js/DETOX_AFTER_EACH] failed test: "Example should open the app URL"
detox[8134] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onAfterEach({ title: 'should open the app URL',
  fullName: 'Example should open the app URL',
  status: 'failed' })
detox[8134] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onAfterAll()
detox[8134] TRACE: [AsyncWebSocket.js/WEBSOCKET_SEND] {"type":"cleanup","params":{"stopRunner":false},"messageId":14}
detox[8134] TRACE: [DetoxServer.js/MESSAGE] role=tester action=cleanup (sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69)
detox[8134] TRACE: [DetoxServer.js/MESSAGE] role=testee action=cleanupDone (sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69)
detox[8134] TRACE: [AsyncWebSocket.js/WEBSOCKET_MESSAGE] {"type":"cleanupDone","messageId":14,"params":{}}

 FAIL  e2e/firstTest.spec.js (52.048s)
  Example
    ✕ should load the app (12147ms)
    ✕ should open the app URL (21090ms)

  ● Example › should load the app

    Cannot find UI Element.
    Exception with Assertion: {
      "Assertion Criteria":  "assertWithMatcher:matcherForSufficientlyVisible(>=0.750000)",
      "Element Matcher":  "((!(kindOfClass('RCTScrollView')) && (((kindOfClass('UILabel') || kindOfClass('UITextField') || kindOfClass('UITextView')) && hasText('Open up App.js to start working on your app!')) || (kindOfClass('RCTTextView') && an object with accessibilityLabel "Open up App.js to start working on your app!"))) || (((kindOfClass('UIView') || respondsToSelector(accessibilityContainer)) && parentThatMatches(kindOfClass('RCTScrollView'))) && ((kindOfClass('UIView') || respondsToSelector(accessibilityContainer)) && parentThatMatches((((kindOfClass('UILabel') || kindOfClass('UITextField') || kindOfClass('UITextView')) && hasText('Open up App.js to start working on your app!')) || (kindOfClass('RCTTextView') && an object with accessibilityLabel "Open up App.js to start working on your app!"))))))",
      "Recovery Suggestion":  "Check if the element exists in the UI hierarchy printed below. If it exists, adjust the matcher so that it accurately matches element."
    }

    Error Trace: [
      {
        "Description":  "Interaction cannot continue because the desired element was not found.",
        "Error Domain":  "com.google.earlgrey.ElementInteractionErrorDomain",
        "Error Code":  "0",
        "File Name":  "GREYElementInteraction.m",
        "Function Name":  "-[GREYElementInteraction matchedElementsWithTimeout:error:]",
        "Line":  "124"
      }
    ]

    Hierarchy: <UIWindow:0x7fe54e5348c0; AX=N; AX.frame={{0, 0}, {375, 667}}; AX.activationPoint={187.5, 333.5}; AX.traits='UIAccessibilityTraitNone'; AX.focused='N'; frame={{0, 0}, {375, 667}}; opaque; alpha=1>
      |--<UIView:0x7fe54e412a10; AX=N; AX.frame={{0, 0}, {375, 667}}; AX.activationPoint={187.5, 333.5}; AX.traits='UIAccessibilityTraitNone'; AX.focused='N'; frame={{0, 0}, {375, 667}}; opaque; alpha=1>
      |  |--<EXButtonView:0x7fe54e61d440; AX=N; AX.frame={{315, 571}, {48, 48}}; AX.activationPoint={339, 595}; AX.traits='UIAccessibilityTraitNone'; AX.focused='N'; frame={{315, 571}, {48, 48}}; opaque; hidden; alpha=1>
      |  |  |--<UIButton:0x7fe54e61d8b0; AX=N; AX.label='MenuButton'; AX.frame={{315, 571}, {48, 48}}; AX.activationPoint={339, 595}; AX.traits='UIAccessibilityTraitButton'; AX.focused='N'; frame={{0, 0}, {48, 48}}; alpha=1>
      |  |  |  |--<UIImageView:0x7fe551000f20; AX=N; AX.id='MenuButton'; AX.frame={{327, 584.5}, {24, 21}}; AX.activationPoint={339, 595}; AX.traits='UIAccessibilityTraitImage'; AX.focused='N'; frame={{12, 13.5}, {24, 21}}; alpha=1; UIE=N>
      |  |--<UIView:0x7fe551104800; AX=N; AX.frame={{0, 0}, {375, 667}}; AX.activationPoint={187.5, 333.5}; AX.traits='UIAccessibilityTraitNone'; AX.focused='N'; frame={{0, 0}, {375, 667}}; opaque; alpha=1>
      |  |  |--<EXErrorView:0x7fe54e753210; AX=N; AX.frame={{0, 0}, {375, 667}}; AX.activationPoint={187.5, 333.5}; AX.traits='UIAccessibilityTraitNone'; AX.focused='N'; frame={{0, 0}, {375, 667}}; opaque; alpha=1>
      |  |  |  |--<UIScrollView:0x7fe550897000; AX=N; AX.frame={{0, 0}, {375, 667}}; AX.activationPoint={187.5, 333.5}; AX.traits='UIAccessibilityTraitNone'; AX.focused='N'; frame={{0, 0}, {375, 667}}; opaque; alpha=1>
      |  |  |  |  |--<UIImageView:0x7fe54e548ef0; AX=N; AX.frame={{365, 661.5}, {7, 2.5}}; AX.activationPoint={368.5, 662.75}; AX.traits='UIAccessibilityTraitImage'; AX.focused='N'; frame={{365, 661.5}, {7, 2.5}}; alpha=0; UIE=N>
      |  |  |  |  |--<UIImageView:0x7fe54e549120; AX=N; AX.frame={{369.5, 657}, {2.5, 7}}; AX.activationPoint={370.75, 660.5}; AX.traits='UIAccessibilityTraitImage'; AX.focused='N'; frame={{369.5, 657}, {2.5, 7}}; alpha=0; UIE=N>
      |  |  |  |  |--<UILabel:0x7fe54e577140; AX=Y; AX.label='Could not connect to the server.';  It looks like you may be using a LAN URL. Make sure your device is on the same network as the server or try using a tunnel.'; AX.frame={{19.25, 133.25}, {336.5, 67}}; AX.activationPoint={187.5, 166.75}; AX.traits='UIAccessibilityTraitStaticText'; AX.focused='N'; frame={{19.25, 133.25}, {336.5, 67}}; opaque; alpha=1; UIE=N; text='There was a problem loading the requested app. It looks like you may be using a LAN URL.  You might want to check your internet connectivity.';  You might want to check your internet connectivity.'>
      |  |  |  |  |--<UILabel:0x7fe54e65bb10; AX=Y; AX.label='Opening project...'; AX.frame={{143.75, 271}, {115.5, 17}}; AX.activationPoint={201.5, 279.5}; AX.traits='UIAccessibilityTraitStaticText'; AX.focused='N'; frame={{143.75, 1.5}, {115.5, 17}}; opaque; alpha=1; UIE=N; text='Opening project...'>
      |  |  |  |  |--<UIActivityIndicatorView:0x7fe54e766ad0; AX=N; AX.label='In progress'; AX.value='1'; AX.frame={{115.75, 269.5}, {20, 20}}; AX.activationPoint={125.75, 279.5}; AX.traits='UIAccessibilityTraitNone'; AX.focused='N'; frame={{115.75, 0}, {20, 20}}; opaque; alpha=1>
      |  |  |  |  |  |--<UIImageView:0x7fe54e7673e0; AX=N; AX.frame={{115.75, 269.5}, {20, 20}}; AX.activationPoint={125.75, 279.5}; AX.traits='UIAccessibilityTraitImage'; AX.focused='N'; frame={{0, 0}, {20, 20}}; alpha=1; UIE=N>
      |  |  |  |--<UIView:0x7fe55132d9d0; AX=N; AX.frame={{0, 0}, {375, 667}}; AX.activationPoint={187.5, 333.5}; AX.traits='UIAccessibilityTraitNone'; AX.focused='N'; frame={{0, 0}, {375, 667}}; opaque; alpha=1>

      20 |     console.log("Opening app URL:", url);
      21 |     await device.openURL({url})
    > 22 |     console.log("App launched")
         |                                                    ^
      23 |     await expect(element(by.text('Open up App.js to start working on your app!'))).toBeVisible();
      24 |   });
      25 | });

      at Client.execute (../node_modules/detox/src/client/Client.js:91:28)
      at InvocationManager.execute (../node_modules/detox/src/invoke.js:11:33)
      at MatcherAssertionInteraction.execute (../node_modules/detox/src/ios/expect.js:202:29)
      at ExpectElement.toBeVisible (../node_modules/detox/src/ios/expect.js:354:87)
      at _callee$ (firstTest.spec.js:22:120)
      at tryCatch (../node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js:45:40)
      at Generator.invoke [as _invoke] (../node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js:271:22)
      at Generator.prototype.(anonymous function) [as next] (../node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js:97:21)
      at tryCatch (../node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js:45:40)
      at invoke (../node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js:135:20)
      at ../node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js:145:13

  ● Example › should open the app URL

    Cannot find UI Element.
    Exception with Assertion: {
      "Assertion Criteria":  "assertWithMatcher:matcherForSufficientlyVisible(>=0.750000)",
      "Element Matcher":  "((!(kindOfClass('RCTScrollView')) && (((kindOfClass('UILabel') || kindOfClass('UITextField') || kindOfClass('UITextView')) && hasText('Open up App.js to start working on your app!')) || (kindOfClass('RCTTextView') && an object with accessibilityLabel "Open up App.js to start working on your app!"))) || (((kindOfClass('UIView') || respondsToSelector(accessibilityContainer)) && parentThatMatches(kindOfClass('RCTScrollView'))) && ((kindOfClass('UIView') || respondsToSelector(accessibilityContainer)) && parentThatMatches((((kindOfClass('UILabel') || kindOfClass('UITextField') || kindOfClass('UITextView')) && hasText('Open up App.js to start working on your app!')) || (kindOfClass('RCTTextView') && an object with accessibilityLabel "Open up App.js to start working on your app!"))))))",
      "Recovery Suggestion":  "Check if the element exists in the UI hierarchy printed below. If it exists, adjust the matcher so that it accurately matches element."
    }

    Error Trace: [
      {
        "Description":  "Interaction cannot continue because the desired element was not found.",
        "Error Domain":  "com.google.earlgrey.ElementInteractionErrorDomain",
        "Error Code":  "0",
        "File Name":  "GREYElementInteraction.m",
        "Function Name":  "-[GREYElementInteraction matchedElementsWithTimeout:error:]",
        "Line":  "124"
      }
    ]

    Hierarchy: <UIWindow:0x7fe0ac8193a0; AX=N; AX.frame={{0, 0}, {375, 667}}; AX.activationPoint={187.5, 333.5}; AX.traits='UIAccessibilityTraitNone'; AX.focused='N'; frame={{0, 0}, {375, 667}}; opaque; alpha=1>
      |--<UIView:0x7fe0aac1db20; AX=N; AX.frame={{0, 0}, {375, 667}}; AX.activationPoint={187.5, 333.5}; AX.traits='UIAccessibilityTraitNone'; AX.focused='N'; frame={{0, 0}, {375, 667}}; opaque; alpha=1>
      |  |--<EXButtonView:0x7fe0aac34b30; AX=N; AX.frame={{315, 571}, {48, 48}}; AX.activationPoint={339, 595}; AX.traits='UIAccessibilityTraitNone'; AX.focused='N'; frame={{315, 571}, {48, 48}}; opaque; hidden; alpha=1>
      |  |  |--<UIButton:0x7fe0aac367c0; AX=N; AX.label='MenuButton'; AX.frame={{315, 571}, {48, 48}}; AX.activationPoint={339, 595}; AX.traits='UIAccessibilityTraitButton'; AX.focused='N'; frame={{0, 0}, {48, 48}}; alpha=1>
      |  |  |  |--<UIImageView:0x7fe0acb0e420; AX=N; AX.id='MenuButton'; AX.frame={{327, 584.5}, {24, 21}}; AX.activationPoint={339, 595}; AX.traits='UIAccessibilityTraitImage'; AX.focused='N'; frame={{12, 13.5}, {24, 21}}; alpha=1; UIE=N>
      |  |--<UIView:0x7fe0aac42d70; AX=N; AX.frame={{0, 0}, {375, 667}}; AX.activationPoint={187.5, 333.5}; AX.traits='UIAccessibilityTraitNone'; AX.focused='N'; frame={{0, 0}, {375, 667}}; opaque; alpha=1>
      |  |  |--<EXErrorView:0x7fe0ac831090; AX=N; AX.frame={{0, 0}, {375, 667}}; AX.activationPoint={187.5, 333.5}; AX.traits='UIAccessibilityTraitNone'; AX.focused='N'; frame={{0, 0}, {375, 667}}; opaque; alpha=1>
      |  |  |  |--<UIScrollView:0x7fe0ab11a800; AX=N; AX.frame={{0, 0}, {375, 667}}; AX.activationPoint={187.5, 333.5}; AX.traits='UIAccessibilityTraitNone'; AX.focused='N'; frame={{0, 0}, {375, 667}}; opaque; alpha=1>
      |  |  |  |  |--<UIImageView:0x7fe0ac8259f0; AX=N; AX.frame={{365, 661.5}, {7, 2.5}}; AX.activationPoint={368.5, 662.75}; AX.traits='UIAccessibilityTraitImage'; AX.focused='N'; frame={{365, 661.5}, {7, 2.5}}; alpha=0; UIE=N>
      |  |  |  |  |--<UIImageView:0x7fe0ac84d120; AX=N; AX.frame={{369.5, 657}, {2.5, 7}}; AX.activationPoint={370.75, 660.5}; AX.traits='UIAccessibilityTraitImage'; AX.focused='N'; frame={{369.5, 657}, {2.5, 7}}; alpha=0; UIE=N>
      |  |  |  |  |--<UILabel:0x7fe0acb29550; AX=Y; AX.label='Could not connect to the server.';  It looks like you may be using a LAN URL. Make sure your device is on the same network as the server or try using a tunnel.'; AX.frame={{19.25, 133.25}, {336.5, 67}}; AX.activationPoint={187.5, 166.75}; AX.traits='UIAccessibilityTraitStaticText'; AX.focused='N'; frame={{19.25, 133.25}, {336.5, 67}}; opaque; alpha=1; UIE=N; text='There was a problem loading the requested app. It looks like you may be using a LAN URL.  You might want to check your internet connectivity.';  You might want to check your internet connectivity.'>
      |  |  |  |  |--<UILabel:0x7fe0aac80660; AX=Y; AX.label='Opening project...'; AX.frame={{143.75, 271}, {115.5, 17}}; AX.activationPoint={201.5, 279.5}; AX.traits='UIAccessibilityTraitStaticText'; AX.focused='N'; frame={{143.75, 1.5}, {115.5, 17}}; opaque; alpha=1; UIE=N; text='Opening project...'>
      |  |  |  |  |--<UIActivityIndicatorView:0x7fe0aac7a480; AX=N; AX.label='In progress'; AX.value='1'; AX.frame={{115.75, 269.5}, {20, 20}}; AX.activationPoint={125.75, 279.5}; AX.traits='UIAccessibilityTraitNone'; AX.focused='N'; frame={{115.75, 0}, {20, 20}}; opaque; alpha=1>
      |  |  |  |  |  |--<UIImageView:0x7fe0aac7a910; AX=N; AX.frame={{115.75, 269.5}, {20, 20}}; AX.activationPoint={125.75, 279.5}; AX.traits='UIAccessibilityTraitImage'; AX.focused='N'; frame={{0, 0}, {20, 20}}; alpha=1; UIE=N>
      |  |  |  |--<UIView:0x7fe0aac79d70; AX=N; AX.frame={{0, 0}, {375, 667}}; AX.activationPoint={187.5, 333.5}; AX.traits='UIAccessibilityTraitNone'; AX.focused='N'; frame={{0, 0}, {375, 667}}; opaque; alpha=1>

      at Client.execute (../node_modules/detox/src/client/Client.js:91:28)
      at InvocationManager.execute (../node_modules/detox/src/invoke.js:11:33)
      at MatcherAssertionInteraction.execute (../node_modules/detox/src/ios/expect.js:202:29)
      at ExpectElement.toBeVisible (../node_modules/detox/src/ios/expect.js:354:87)
      at _callee2$ (firstTest.spec.js:62:120)
      at tryCatch (../node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js:45:40)
      at Generator.invoke [as _invoke] (../node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js:271:22)
      at Generator.prototype.(anonymous function) [as next] (../node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js:97:21)
      at tryCatch (../node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js:45:40)
      at invoke (../node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js:135:20)
      at ../node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js:145:13

detox[8134] DEBUG: [DetoxServer.js/DISCONNECT] role=tester, sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69
detox[8134] DEBUG: [DetoxServer.js/DISCONNECT] role=testee, sessionId=3ae8975a-7abb-3d6a-5e7f-6ef3d69ddd69
Jest did not exit one second after the test run has completed.

This usually means that there are asynchronous operations that weren't stopped in your tests. Consider running Jest with `--detectOpenHandles` to troubleshoot this issue.
detox[8132] ERROR: [cli.js] Error: Command failed: node_modules/.bin/jest --config=e2e/config.json --maxWorkers=1 '--testNamePattern=^((?!:android:).)*$' "e2e"

Here you go (sorry I had posted the wrong log in another comment I deleted):
detox[8861] INFO:  [test.js] configuration="ios" loglevel="trace" debugSynchronization=3000 artifactsLocation="artifacts/ios.2019-06-03 12-06-32Z" recordLogs="none" takeScreenshots="manual" recordVideos="none" recordPerformance="none" reportSpecs=true node_modules/.bin/jest --config=e2e/config.json --maxWorkers=1 '--testNamePattern=^((?!:android:).)*$' "e2e"
detox[8865] INFO:  [DetoxServer.js] server listening on localhost:56660...
detox[8865] DEBUG: [AsyncWebSocket.js/WEBSOCKET_OPEN] opened web socket to: ws://localhost:56660
detox[8865] TRACE: [AsyncWebSocket.js/WEBSOCKET_SEND] {"type":"login","params":{"sessionId":"cc780e32-5ea3-3f86-ac51-8967cfa7b16a","role":"tester"},"messageId":0}
detox[8865] DEBUG: [DetoxServer.js/LOGIN] role=tester, sessionId=cc780e32-5ea3-3f86-ac51-8967cfa7b16a
detox[8865] DEBUG: [DetoxServer.js/LOGIN_SUCCESS] role=tester, sessionId=cc780e32-5ea3-3f86-ac51-8967cfa7b16a
detox[8865] TRACE: [AsyncWebSocket.js/WEBSOCKET_MESSAGE] {"type":"loginSuccess","params":{"sessionId":"cc780e32-5ea3-3f86-ac51-8967cfa7b16a","role":"tester"},"messageId":0}

detox[8865] DEBUG: [exec.js/EXEC_CMD, #0] /usr/bin/xcrun simctl list -j

8< - - - - - -
skipping long list of simulators
8< - - - -
detox[8865] DEBUG: [exec.js/EXEC_CMD, #1] applesimutils --list --byType "iPhone 8" --byOS "12.2"
detox[8865] DEBUG: [exec.js/EXEC_TRY, #1] Searching for device matching iPhone 8...
detox[8865] TRACE: [exec.js/EXEC_SUCCESS, #1] [
  {
    "availabilityError" : "",
    "os" : {
      "bundlePath" : "\/Applications\/Xcode.app\/Contents\/Developer\/Platforms\/iPhoneOS.platform\/Developer\/Library\/CoreSimulator\/Profiles\/Runtimes\/iOS.simruntime",
      "availabilityError" : "",
      "buildversion" : "16E226",
      "availability" : "(available)",
      "isAvailable" : true,
      "identifier" : "com.apple.CoreSimulator.SimRuntime.iOS-12-2",
      "version" : "12.2",
      "name" : "iOS 12.2"
    },
    "availability" : "(available)",
    "deviceType" : {
      "name" : "iPhone 8",
      "bundlePath" : "\/Applications\/Xcode.app\/Contents\/Developer\/Platforms\/iPhoneOS.platform\/Developer\/Library\/CoreSimulator\/Profiles\/DeviceTypes\/iPhone 8.simdevicetype",
      "identifier" : "com.apple.CoreSimulator.SimDeviceType.iPhone-8"
    },
    "udid" : "2F0E2EDF-A080-4757-90C4-976F1445D7C4",
    "isAvailable" : true,
    "state" : "Booted",
    "name" : "iPhone 8"
  }
]

detox[8865] DEBUG: [exec.js/EXEC_CMD, #2] applesimutils --list --byId "2F0E2EDF-A080-4757-90C4-976F1445D7C4"
detox[8865] TRACE: [exec.js/EXEC_SUCCESS, #2] [
  {
    "availabilityError" : "",
    "os" : {
      "bundlePath" : "\/Applications\/Xcode.app\/Contents\/Developer\/Platforms\/iPhoneOS.platform\/Developer\/Library\/CoreSimulator\/Profiles\/Runtimes\/iOS.simruntime",
      "availabilityError" : "",
      "buildversion" : "16E226",
      "availability" : "(available)",
      "isAvailable" : true,
      "identifier" : "com.apple.CoreSimulator.SimRuntime.iOS-12-2",
      "version" : "12.2",
      "name" : "iOS 12.2"
    },
    "availability" : "(available)",
    "deviceType" : {
      "name" : "iPhone 8",
      "bundlePath" : "\/Applications\/Xcode.app\/Contents\/Developer\/Platforms\/iPhoneOS.platform\/Developer\/Library\/CoreSimulator\/Profiles\/DeviceTypes\/iPhone 8.simdevicetype",
      "identifier" : "com.apple.CoreSimulator.SimDeviceType.iPhone-8"
    },
    "udid" : "2F0E2EDF-A080-4757-90C4-976F1445D7C4",
    "isAvailable" : true,
    "state" : "Booted",
    "name" : "iPhone 8"
  }
]

detox[8865] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onBootDevice({ coldBoot: false,
  deviceId: '2F0E2EDF-A080-4757-90C4-976F1445D7C4' })
detox[8865] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onBeforeUninstallApp({ deviceId: '2F0E2EDF-A080-4757-90C4-976F1445D7C4',
  bundleId: 'host.exp.Exponent' })
detox[8865] DEBUG: [exec.js/EXEC_CMD, #3] /usr/bin/xcrun simctl uninstall 2F0E2EDF-A080-4757-90C4-976F1445D7C4 host.exp.Exponent
detox[8865] DEBUG: [exec.js/EXEC_TRY, #3] Uninstalling host.exp.Exponent...
detox[8865] TRACE: [exec.js/EXEC_SUCCESS, #3]
detox[8865] DEBUG: [exec.js/EXEC_SUCCESS, #3] host.exp.Exponent uninstalled
detox[8865] DEBUG: [exec.js/EXEC_CMD, #4] /usr/bin/xcrun simctl install 2F0E2EDF-A080-4757-90C4-976F1445D7C4 "/Users/jeromecornet/src/expotest/bin/expo.app"
detox[8865] DEBUG: [exec.js/EXEC_TRY, #4] Installing /Users/jeromecornet/src/expotest/bin/expo.app...
detox[8865] TRACE: [exec.js/EXEC_SUCCESS, #4]
detox[8865] DEBUG: [exec.js/EXEC_SUCCESS, #4] /Users/jeromecornet/src/expotest/bin/expo.app installed
detox[8865] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onBeforeTerminateApp({ deviceId: '2F0E2EDF-A080-4757-90C4-976F1445D7C4',
  bundleId: 'host.exp.Exponent' })
detox[8865] DEBUG: [exec.js/EXEC_CMD, #5] /usr/bin/xcrun simctl terminate 2F0E2EDF-A080-4757-90C4-976F1445D7C4 host.exp.Exponent
detox[8865] DEBUG: [exec.js/EXEC_TRY, #5] Terminating host.exp.Exponent...
detox[8865] TRACE: [exec.js/EXEC_SUCCESS, #5]
detox[8865] DEBUG: [exec.js/EXEC_SUCCESS, #5] host.exp.Exponent terminated
detox[8865] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onBeforeLaunchApp({ bundleId: 'host.exp.Exponent',
  deviceId: '2F0E2EDF-A080-4757-90C4-976F1445D7C4',
  launchArgs:
   { detoxServer: 'ws://localhost:56660',
     detoxSessionId: 'cc780e32-5ea3-3f86-ac51-8967cfa7b16a' } })
detox[8865] DEBUG: [exec.js/EXEC_CMD, #6] /bin/cat /dev/null >/Users/jeromecornet/Library/Developer/CoreSimulator/Devices/2F0E2EDF-A080-4757-90C4-976F1445D7C4/data/tmp/detox.last_launch_app_log.out 2>/Users/jeromecornet/Library/Developer/CoreSimulator/Devices/2F0E2EDF-A080-4757-90C4-976F1445D7C4/data/tmp/detox.last_launch_app_log.err && SIMCTL_CHILD_DYLD_INSERT_LIBRARIES="/Users/jeromecornet/Library/Detox/ios/0f0da01849237f5e3552f9c24f9315745fb4c726/Detox.framework/Detox" /usr/bin/xcrun simctl launch --stdout=/tmp/detox.last_launch_app_log.out --stderr=/tmp/detox.last_launch_app_log.err 2F0E2EDF-A080-4757-90C4-976F1445D7C4 host.exp.Exponent --args -detoxServer "ws://localhost:56660" -detoxSessionId "cc780e32-5ea3-3f86-ac51-8967cfa7b16a"
detox[8865] DEBUG: [exec.js/EXEC_TRY, #6] Launching host.exp.Exponent...
detox[8865] TRACE: [exec.js/EXEC_SUCCESS, #6] host.exp.Exponent: 8937

detox[8865] INFO:  [AppleSimUtils.js] host.exp.Exponent launched. The stdout and stderr logs were recreated, you can watch them with:
        tail -F /Users/jeromecornet/Library/Developer/CoreSimulator/Devices/2F0E2EDF-A080-4757-90C4-976F1445D7C4/data/tmp/detox.last_launch_app_log.{out,err}
detox[8937] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onLaunchApp({ bundleId: 'host.exp.Exponent',
  deviceId: '2F0E2EDF-A080-4757-90C4-976F1445D7C4',
  launchArgs:
   { detoxServer: 'ws://localhost:56660',
     detoxSessionId: 'cc780e32-5ea3-3f86-ac51-8967cfa7b16a' },
  pid: 8937 })
detox[8865] TRACE: [AsyncWebSocket.js/WEBSOCKET_SEND] {"type":"isReady","params":{},"messageId":-1000}
detox[8865] TRACE: [DetoxServer.js/MESSAGE] role=tester action=isReady (sessionId=cc780e32-5ea3-3f86-ac51-8967cfa7b16a)
detox[8865] DEBUG: [DetoxServer.js/CANNOT_FORWARD] role=testee not connected, cannot fw action (sessionId=cc780e32-5ea3-3f86-ac51-8967cfa7b16a)
detox[8865] DEBUG: [DetoxServer.js/LOGIN] role=testee, sessionId=cc780e32-5ea3-3f86-ac51-8967cfa7b16a
detox[8865] DEBUG: [DetoxServer.js/LOGIN_SUCCESS] role=testee, sessionId=cc780e32-5ea3-3f86-ac51-8967cfa7b16a
detox[8865] TRACE: [DetoxServer.js/MESSAGE] role=testee action=ready (sessionId=cc780e32-5ea3-3f86-ac51-8967cfa7b16a)
detox[8865] TRACE: [AsyncWebSocket.js/WEBSOCKET_MESSAGE] {"type":"ready","messageId":-1000,"params":{}}

detox[8865] TRACE: [AsyncWebSocket.js/WEBSOCKET_SEND] {"type":"waitForActive","params":{},"messageId":1}
detox[8865] TRACE: [DetoxServer.js/MESSAGE] role=tester action=waitForActive (sessionId=cc780e32-5ea3-3f86-ac51-8967cfa7b16a)
detox[8865] TRACE: [DetoxServer.js/MESSAGE] role=testee action=waitForActiveDone (sessionId=cc780e32-5ea3-3f86-ac51-8967cfa7b16a)
detox[8865] TRACE: [AsyncWebSocket.js/WEBSOCKET_MESSAGE] {"type":"waitForActiveDone","messageId":1,"params":{}}

detox[8865] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onBeforeAll()
Example: should load the app
detox[8865] TRACE: [Detox.js/DETOX_BEFORE_EACH] running test: "Example should load the app"
detox[8865] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onBeforeEach({ title: 'should load the app',
  fullName: 'Example should load the app',
  status: 'running' })
  console.log e2e/firstTest.spec.js:6
    Lauching using reloadApp

detox[8865] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onBeforeTerminateApp({ deviceId: '2F0E2EDF-A080-4757-90C4-976F1445D7C4',
  bundleId: 'host.exp.Exponent' })
detox[8865] DEBUG: [exec.js/EXEC_CMD, #7] /usr/bin/xcrun simctl terminate 2F0E2EDF-A080-4757-90C4-976F1445D7C4 host.exp.Exponent
detox[8865] DEBUG: [exec.js/EXEC_TRY, #7] Terminating host.exp.Exponent...
detox[8865] TRACE: [exec.js/EXEC_SUCCESS, #7]
detox[8865] DEBUG: [exec.js/EXEC_SUCCESS, #7] host.exp.Exponent terminated
detox[8865] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onBeforeLaunchApp({ bundleId: 'host.exp.Exponent',
  deviceId: '2F0E2EDF-A080-4757-90C4-976F1445D7C4',
  launchArgs:
   { detoxServer: 'ws://localhost:56660',
     detoxSessionId: 'cc780e32-5ea3-3f86-ac51-8967cfa7b16a',
     EXKernelDisableNuxDefaultsKey: true,
     detoxURLBlacklistRegex:
      '\\("http://<IP_ADDRESS>:19001/onchange","https://e.crashlytics.com/spi/v2/events"\\)',
     detoxURLOverride: 'exp://<IP_ADDRESS>:19000',
     detoxSourceAppOverride: 'host.exp.exponent' } })
detox[8865] DEBUG: [DetoxServer.js/DISCONNECT] role=testee, sessionId=cc780e32-5ea3-3f86-ac51-8967cfa7b16a
detox[8865] DEBUG: [exec.js/EXEC_CMD, #8] /bin/cat /dev/null >/Users/jeromecornet/Library/Developer/CoreSimulator/Devices/2F0E2EDF-A080-4757-90C4-976F1445D7C4/data/tmp/detox.last_launch_app_log.out 2>/Users/jeromecornet/Library/Developer/CoreSimulator/Devices/2F0E2EDF-A080-4757-90C4-976F1445D7C4/data/tmp/detox.last_launch_app_log.err && SIMCTL_CHILD_DYLD_INSERT_LIBRARIES="/Users/jeromecornet/Library/ExpoDetoxHook/ios/d49fa2ddb665bfbaeb7e286b34efc73912f59c66/ExpoDetoxHook.framework/ExpoDetoxHook:/Users/jeromecornet/Library/Detox/ios/0f0da01849237f5e3552f9c24f9315745fb4c726/Detox.framework/Detox" /usr/bin/xcrun simctl launch --stdout=/tmp/detox.last_launch_app_log.out --stderr=/tmp/detox.last_launch_app_log.err 2F0E2EDF-A080-4757-90C4-976F1445D7C4 host.exp.Exponent --args -detoxServer "ws://localhost:56660" -detoxSessionId "cc780e32-5ea3-3f86-ac51-8967cfa7b16a" -EXKernelDisableNuxDefaultsKey "true" -detoxURLBlacklistRegex "\("http://<IP_ADDRESS>:19001/onchange","https://e.crashlytics.com/spi/v2/events"\)" -detoxURLOverride "exp://<IP_ADDRESS>:19000" -detoxSourceAppOverride "host.exp.exponent"
detox[8865] DEBUG: [exec.js/EXEC_TRY, #8] Launching host.exp.Exponent...
detox[8865] TRACE: [exec.js/EXEC_SUCCESS, #8] host.exp.Exponent: 8964

detox[8865] INFO:  [AppleSimUtils.js] host.exp.Exponent launched. The stdout and stderr logs were recreated, you can watch them with:
        tail -F /Users/jeromecornet/Library/Developer/CoreSimulator/Devices/2F0E2EDF-A080-4757-90C4-976F1445D7C4/data/tmp/detox.last_launch_app_log.{out,err}
detox[8964] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onLaunchApp({ bundleId: 'host.exp.Exponent',
  deviceId: '2F0E2EDF-A080-4757-90C4-976F1445D7C4',
  launchArgs:
   { detoxServer: 'ws://localhost:56660',
     detoxSessionId: 'cc780e32-5ea3-3f86-ac51-8967cfa7b16a',
     EXKernelDisableNuxDefaultsKey: true,
     detoxURLBlacklistRegex:
      '\\("http://<IP_ADDRESS>:19001/onchange","https://e.crashlytics.com/spi/v2/events"\\)',
     detoxURLOverride: 'exp://<IP_ADDRESS>:19000',
     detoxSourceAppOverride: 'host.exp.exponent' },
  pid: 8964 })
detox[8865] TRACE: [AsyncWebSocket.js/WEBSOCKET_SEND] {"type":"isReady","params":{},"messageId":-1000}
detox[8865] TRACE: [DetoxServer.js/MESSAGE] role=tester action=isReady (sessionId=cc780e32-5ea3-3f86-ac51-8967cfa7b16a)
detox[8865] DEBUG: [DetoxServer.js/CANNOT_FORWARD] role=testee not connected, cannot fw action (sessionId=cc780e32-5ea3-3f86-ac51-8967cfa7b16a)
detox[8865] DEBUG: [DetoxServer.js/LOGIN] role=testee, sessionId=cc780e32-5ea3-3f86-ac51-8967cfa7b16a
detox[8865] DEBUG: [DetoxServer.js/LOGIN_SUCCESS] role=testee, sessionId=cc780e32-5ea3-3f86-ac51-8967cfa7b16a
Example: should load the app [FAIL]
Example: should open the app URL
detox[8865] TRACE: [Detox.js/DETOX_AFTER_EACH] failed test: "Example should load the app"
detox[8865] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onAfterEach({ title: 'should load the app',
  fullName: 'Example should load the app',
  status: 'failed' })
detox[8865] TRACE: [Detox.js/DETOX_BEFORE_EACH] running test: "Example should open the app URL"
detox[8865] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onBeforeEach({ title: 'should open the app URL',
  fullName: 'Example should open the app URL',
  status: 'running' })
  console.log e2e/firstTest.spec.js:13
    Lauching expo

detox[8865] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onBeforeTerminateApp({ deviceId: '2F0E2EDF-A080-4757-90C4-976F1445D7C4',
  bundleId: 'host.exp.Exponent' })
detox[8865] DEBUG: [exec.js/EXEC_CMD, #9] /usr/bin/xcrun simctl terminate 2F0E2EDF-A080-4757-90C4-976F1445D7C4 host.exp.Exponent
detox[8865] DEBUG: [exec.js/EXEC_TRY, #9] Terminating host.exp.Exponent...
detox[8865] TRACE: [exec.js/EXEC_SUCCESS, #9]
detox[8865] DEBUG: [exec.js/EXEC_SUCCESS, #9] host.exp.Exponent terminated
detox[8865] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onBeforeLaunchApp({ bundleId: 'host.exp.Exponent',
  deviceId: '2F0E2EDF-A080-4757-90C4-976F1445D7C4',
  launchArgs:
   { detoxServer: 'ws://localhost:56660',
     detoxSessionId: 'cc780e32-5ea3-3f86-ac51-8967cfa7b16a',
     EXKernelDisableNuxDefaultsKey: true } })
detox[8865] DEBUG: [DetoxServer.js/DISCONNECT] role=testee, sessionId=cc780e32-5ea3-3f86-ac51-8967cfa7b16a
detox[8865] DEBUG: [exec.js/EXEC_CMD, #10] /bin/cat /dev/null >/Users/jeromecornet/Library/Developer/CoreSimulator/Devices/2F0E2EDF-A080-4757-90C4-976F1445D7C4/data/tmp/detox.last_launch_app_log.out 2>/Users/jeromecornet/Library/Developer/CoreSimulator/Devices/2F0E2EDF-A080-4757-90C4-976F1445D7C4/data/tmp/detox.last_launch_app_log.err && SIMCTL_CHILD_DYLD_INSERT_LIBRARIES="/Users/jeromecornet/Library/ExpoDetoxHook/ios/d49fa2ddb665bfbaeb7e286b34efc73912f59c66/ExpoDetoxHook.framework/ExpoDetoxHook:/Users/jeromecornet/Library/Detox/ios/0f0da01849237f5e3552f9c24f9315745fb4c726/Detox.framework/Detox" /usr/bin/xcrun simctl launch --stdout=/tmp/detox.last_launch_app_log.out --stderr=/tmp/detox.last_launch_app_log.err 2F0E2EDF-A080-4757-90C4-976F1445D7C4 host.exp.Exponent --args -detoxServer "ws://localhost:56660" -detoxSessionId "cc780e32-5ea3-3f86-ac51-8967cfa7b16a" -EXKernelDisableNuxDefaultsKey "true"
detox[8865] DEBUG: [exec.js/EXEC_TRY, #10] Launching host.exp.Exponent...
detox[8865] TRACE: [exec.js/EXEC_SUCCESS, #10] host.exp.Exponent: 9057

detox[8865] INFO:  [AppleSimUtils.js] host.exp.Exponent launched. The stdout and stderr logs were recreated, you can watch them with:
        tail -F /Users/jeromecornet/Library/Developer/CoreSimulator/Devices/2F0E2EDF-A080-4757-90C4-976F1445D7C4/data/tmp/detox.last_launch_app_log.{out,err}
detox[9057] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onLaunchApp({ bundleId: 'host.exp.Exponent',
  deviceId: '2F0E2EDF-A080-4757-90C4-976F1445D7C4',
  launchArgs:
   { detoxServer: 'ws://localhost:56660',
     detoxSessionId: 'cc780e32-5ea3-3f86-ac51-8967cfa7b16a',
     EXKernelDisableNuxDefaultsKey: true },
  pid: 9057 })
detox[8865] TRACE: [AsyncWebSocket.js/WEBSOCKET_SEND] {"type":"isReady","params":{},"messageId":-1000}
detox[8865] TRACE: [DetoxServer.js/MESSAGE] role=tester action=isReady (sessionId=cc780e32-5ea3-3f86-ac51-8967cfa7b16a)
detox[8865] DEBUG: [DetoxServer.js/CANNOT_FORWARD] role=testee not connected, cannot fw action (sessionId=cc780e32-5ea3-3f86-ac51-8967cfa7b16a)
detox[8865] DEBUG: [DetoxServer.js/LOGIN] role=testee, sessionId=cc780e32-5ea3-3f86-ac51-8967cfa7b16a
detox[8865] DEBUG: [DetoxServer.js/LOGIN_SUCCESS] role=testee, sessionId=cc780e32-5ea3-3f86-ac51-8967cfa7b16a
detox[8865] TRACE: [DetoxServer.js/MESSAGE] role=testee action=ready (sessionId=cc780e32-5ea3-3f86-ac51-8967cfa7b16a)
detox[8865] TRACE: [AsyncWebSocket.js/WEBSOCKET_MESSAGE] {"type":"ready","messageId":-1000,"params":{}}

detox[8865] TRACE: [AsyncWebSocket.js/WEBSOCKET_SEND] {"type":"waitForActive","params":{},"messageId":2}
detox[8865] TRACE: [DetoxServer.js/MESSAGE] role=tester action=waitForActive (sessionId=cc780e32-5ea3-3f86-ac51-8967cfa7b16a)
detox[8865] TRACE: [DetoxServer.js/MESSAGE] role=testee action=waitForActiveDone (sessionId=cc780e32-5ea3-3f86-ac51-8967cfa7b16a)
detox[8865] TRACE: [AsyncWebSocket.js/WEBSOCKET_MESSAGE] {"type":"waitForActiveDone","messageId":2,"params":{}}

  console.log e2e/firstTest.spec.js:20
    Opening app URL: exp://<IP_ADDRESS>:19000

detox[8865] TRACE: [AsyncWebSocket.js/WEBSOCKET_SEND] {"type":"deliverPayload","params":{"url":"exp://<IP_ADDRESS>:19000"},"messageId":3}
detox[8865] TRACE: [DetoxServer.js/MESSAGE] role=tester action=deliverPayload (sessionId=cc780e32-5ea3-3f86-ac51-8967cfa7b16a)
Example: should open the app URL [FAIL]

detox[8865] TRACE: [Detox.js/DETOX_AFTER_EACH] failed test: "Example should open the app URL"
detox[8865] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onAfterEach({ title: 'should open the app URL',
  fullName: 'Example should open the app URL',
  status: 'failed' })
detox[8865] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onAfterAll()
detox[8865] TRACE: [AsyncWebSocket.js/WEBSOCKET_SEND] {"type":"cleanup","params":{"stopRunner":true},"messageId":4}
detox[8865] TRACE: [DetoxServer.js/MESSAGE] role=tester action=cleanup (sessionId=cc780e32-5ea3-3f86-ac51-8967cfa7b16a)
detox[8865] TRACE: [DetoxServer.js/MESSAGE] role=testee action=cleanupDone (sessionId=cc780e32-5ea3-3f86-ac51-8967cfa7b16a)
detox[8865] TRACE: [AsyncWebSocket.js/WEBSOCKET_MESSAGE] {"type":"cleanupDone","messageId":4,"params":{}}

 FAIL  e2e/firstTest.spec.js (259.191s)
  Example
    ✕ should load the app (120445ms)
    ✕ should open the app URL (120002ms)

  ● Example › should load the app

    Timeout - Async callback was not invoked within the 120000ms timeout specified by jest.setTimeout.

       8 |     console.log("App launched")
       9 |     await expect(element(by.text('Open up App.js to start working on your app!'))).toBeVisible();
    > 10 |   });
         |   ^
      11 |
      12 |  it('should open the app URL', async () => {
      13 |     console.log("Lauching expo")

      at new Spec (../node_modules/@jest/core/node_modules/jest-jasmine2/build/jasmine/Spec.js:116:22)
      at Suite.<anonymous> (firstTest.spec.js:10:3)
      at Object.<anonymous> (firstTest.spec.js:9:1)

  ● Example › should open the app URL

    Timeout - Async callback was not invoked within the 120000ms timeout specified by jest.setTimeout.

      at new Spec (../node_modules/@jest/core/node_modules/jest-jasmine2/build/jasmine/Spec.js:116:22)
      at Suite.<anonymous> (firstTest.spec.js:31:3)
      at Object.<anonymous> (firstTest.spec.js:9:1)

detox[8865] DEBUG: [DetoxServer.js/DISCONNECT] role=tester, sessionId=cc780e32-5ea3-3f86-ac51-8967cfa7b16a
detox[8865] DEBUG: [DetoxServer.js/DISCONNECT] role=testee, sessionId=cc780e32-5ea3-3f86-ac51-8967cfa7b16a
detox[8861] ERROR: [cli.js] Error: Command failed: node_modules/.bin/jest --config=e2e/config.json --maxWorkers=1 '--testNamePattern=^((?!:android:).)*$' "e2e"

detox[8865] TRACE: [AsyncWebSocket.js/WEBSOCKET_SEND] {"type":"deliverPayload","params":{"url":"exp://<IP_ADDRESS>:19000"},"messageId":3}
detox[8865] TRACE: [DetoxServer.js/MESSAGE] role=tester action=deliverPayload (sessionId=cc780e32-5ea3-3f86-ac51-8967cfa7b16a)
Example: should open the app URL [FAIL]

detox[8865] TRACE: [Detox.js/DETOX_AFTER_EACH] failed test: "Example should open the app URL"
detox[8865] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onAfterEach({ title: 'should open the app URL',
  fullName: 'Example should open the app URL',
  status: 'failed' })

I see from the log that you are trying to use openURL and then your test fails. But I don't see any sync blocks. So it's something on your end. The app seems idle.

Thanks for looking into it @LeoNatan.
What I don't understand is that both scenarios fail (not just openUrl):

reloadApp() which calls device.launchApp({ url, ...others})
device.launchApp({...others}), then device.openUrl({url})

The project was just created with expo init and displays the welcome screen, so there is no real code that can fail at that level. When you say 'something on your end' do you mean the expo client ? or the tests themselves ?

Also (this may be useful info) I have no problem using detox on the standalone built app that is generated from that project, only when trying to use detox with the expo client itself.

My guess would be the tests, since I don't see the app being stuck in sync issues...

Mhhh, I'm not sure what part of the test it could be:
the init.js file is straight out of detox init -r jest and

the first test fails on the first line await reloadApp();
https://github.com/jeromecornet/expotest/blob/acf82781c7bc4587a8a25359e0140929ecb6a6e9/e2e/firstTest.spec.js#L7
to make sure it isn't something weird that detox-expo-helpers would do, the second test fails on await device.openURL({url}) https://github.com/jeromecornet/expotest/blob/master/e2e/firstTest.spec.js#L21

If you look at that repo https://github.com/jeromecornet/expotest, it's just after running expo init then detox init and making a test that calls reloadApp.
Is there something missing in the setup of the test ? If so that probably should be added to detox init
Rather than a bug in the test, it looks to me like the the websocket send call in Client.js#sendAction (which ultimately gets called in both situations) does not resolve.

I am sorry, I am not familiar with expo at all. But it seems like the app is running, and I don't see anything in the log that shows me that detox is stuck in sync. Could you maybe set the sync print to something like 200 rather than 3000? But again, 3000 should still be enough to see if it is stuck.

It actually does the same in ejected app

Sorry guys, I don’t know how to debug this. If someone is willing to step up and help, it would be greatly appreciated.

Our detox with expo tests stopped working after detox 12.3.0. Thanks for the minimal example, I can try and confirm tomorrow and offer something useful or confirm

Was anyone able to find a workaround for this? or a version of detox where it works?

Confirming 12.3.0 fixes the issue for me, don't have any solutions at this time.

Confirming 12.3.0 fixes the issue for me, don't have any solutions at this time.

You mean downgrading to 12.3.0 makes the issue go away?
I can still reproduce this bug on 12.11.0 myself. Still have to test with 12.11.1, but based on the commits since then I'not expecting this to work.

This also happens to me - Expo only works with detox 12.3.0.
I made a sample project - this may help who ever is trying to solve this:
https://github.com/yaron1m/expo-detox-typescript-example

Please use the new debug option documented here to see why Detox hangs on launch.
Add the -detoxPrintBusyIdleResources YES launch argument.
Then use xcrun simctl spawn booted log stream --level debug --style compact --predicate "category=='EarlGreyStatistics'" to get the specific log entries.

Thanks @LeoNatan
That log was massive so I removed consecutive duplicate lines
Here's what I got:
2019-06-28 10:43:12.942 Db Exponent[94847:271f1c] [com.wix.Detox:EarlGreyStatistics] Dispatch Queue -> busy com.apple.main-thread
2019-06-28 10:43:30.188 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] Timed -> busy animateWithDuration:delay:options:animations:completion:
2019-06-28 10:43:30.217 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] WXRunLoopIdlingResource -> busy React Native thread is busy.
2019-06-28 10:43:30.585 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] Timer -> busy Tracking Timer <__NSCFTimer: 0x600000c049c0>
2019-06-28 10:43:30.691 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] Timer -> busy Tracking Timer <__NSCFTimer: 0x600000c1b000>
2019-06-28 10:43:30.738 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] Dispatch Queue -> busy com.facebook.react.BlobModuleQueue
2019-06-28 10:43:30.738 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] Timer -> busy Tracking Timer <__NSCFTimer: 0x600000c1b000>
2019-06-28 10:43:30.852 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] Dispatch Queue -> busy com.facebook.react.KeyboardObserverQueue
2019-06-28 10:43:30.852 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] Timer -> busy Tracking Timer <__NSCFTimer: 0x600000c1b000>
2019-06-28 10:43:30.965 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] Timed -> busy animateWithDuration:animations:completion:
2019-06-28 10:43:30.973 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] Dispatch Queue -> busy com.apple.NSURLSession-work
2019-06-28 10:43:31.004 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] Timed -> busy animateWithDuration:delay:options:animations:completion:
2019-06-28 10:43:31.181 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] Dispatch Queue -> busy com.facebook.react.FileReaderModuleQueue
2019-06-28 10:43:31.181 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] Timed -> busy animateWithDuration:delay:options:animations:completion:
2019-06-28 10:43:32.009 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] Timer -> busy IdlingResource For Timer <__NSCFTimer: 0x600000c38f00>
2019-06-28 10:43:33.342 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] WXRunLoopIdlingResource -> busy React Native thread is busy.
2019-06-28 10:43:33.342 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] ReactNative JS Loading -> busy React Native is loading Javascript.
2019-06-28 10:43:33.353 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] WXRunLoopIdlingResource -> busy React Native thread is busy.
2019-06-28 10:43:33.353 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] ReactNative JS Loading -> busy React Native is loading Javascript.
2019-06-28 10:43:35.353 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] WXRunLoopIdlingResource -> busy React Native thread is busy.
2019-06-28 10:43:35.353 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] ReactNative JS Loading -> busy React Native is loading Javascript.
2019-06-28 10:43:35.377 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] WXRunLoopIdlingResource -> busy React Native thread is busy.
2019-06-28 10:43:35.377 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] ReactNative JS Loading -> busy React Native is loading Javascript.
2019-06-28 10:43:37.343 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] WXRunLoopIdlingResource -> busy React Native thread is busy.
2019-06-28 10:43:37.353 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] ReactNative JS Loading -> busy React Native is loading Javascript.
2019-06-28 10:43:39.352 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] WXRunLoopIdlingResource -> busy React Native thread is busy.
2019-06-28 10:43:39.352 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] ReactNative JS Loading -> busy React Native is loading Javascript.
2019-06-28 10:43:39.378 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] WXRunLoopIdlingResource -> busy React Native thread is busy.
2019-06-28 10:43:39.378 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] ReactNative JS Loading -> busy React Native is loading Javascript.
2019-06-28 10:43:41.315 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] WXRunLoopIdlingResource -> busy React Native thread is busy.
2019-06-28 10:43:41.315 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] ReactNative JS Loading -> busy React Native is loading Javascript.
2019-06-28 10:43:41.343 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] WXRunLoopIdlingResource -> busy React Native thread is busy.
2019-06-28 10:43:41.353 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] ReactNative JS Loading -> busy React Native is loading Javascript.
2019-06-28 10:43:43.353 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] WXRunLoopIdlingResource -> busy React Native thread is busy.
2019-06-28 10:43:43.353 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] ReactNative JS Loading -> busy React Native is loading Javascript.
2019-06-28 10:43:43.361 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] WXRunLoopIdlingResource -> busy React Native thread is busy.
2019-06-28 10:43:43.361 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] ReactNative JS Loading -> busy React Native is loading Javascript.
2019-06-28 10:43:44.984 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] Dispatch Queue -> busy com.apple.NSURLSession-work
2019-06-28 10:43:44.984 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] ReactNative JS Loading -> busy React Native is loading Javascript.
2019-06-28 10:43:45.103 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] Dispatch Queue -> busy com.apple.NSURLSession-work
2019-06-28 10:43:45.106 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] ReactNative JS Loading -> busy React Native is loading Javascript.
2019-06-28 10:43:45.353 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] WXRunLoopIdlingResource -> busy React Native thread is busy.
2019-06-28 10:43:45.353 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] ReactNative JS Loading -> busy React Native is loading Javascript.
2019-06-28 10:43:45.363 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] WXRunLoopIdlingResource -> busy React Native thread is busy.
2019-06-28 10:43:45.363 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] ReactNative JS Loading -> busy React Native is loading Javascript.
2019-06-28 10:43:47.354 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] WXRunLoopIdlingResource -> busy React Native thread is busy.
2019-06-28 10:43:47.354 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] ReactNative JS Loading -> busy React Native is loading Javascript.
2019-06-28 10:43:47.380 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] WXRunLoopIdlingResource -> busy React Native thread is busy.
2019-06-28 10:43:47.380 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] ReactNative JS Loading -> busy React Native is loading Javascript.
2019-06-28 10:43:49.354 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] WXRunLoopIdlingResource -> busy React Native thread is busy.
2019-06-28 10:43:49.354 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] ReactNative JS Loading -> busy React Native is loading Javascript.
2019-06-28 10:43:53.356 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] WXRunLoopIdlingResource -> busy React Native thread is busy.
2019-06-28 10:43:53.356 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] ReactNative JS Loading -> busy React Native is loading Javascript.
2019-06-28 10:43:55.346 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] WXRunLoopIdlingResource -> busy React Native thread is busy.
2019-06-28 10:43:55.356 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] ReactNative JS Loading -> busy React Native is loading Javascript.
2019-06-28 10:43:55.380 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] WXRunLoopIdlingResource -> busy React Native thread is busy.
2019-06-28 10:43:55.380 Db Exponent[95085:272499] [com.wix.Detox:EarlGreyStatistics] ReactNative JS Loading -> busy React Native is loading Javascript.

The output of detox test shows
detox[94950] WARN:  [Client.js/PENDING_REQUESTS] App has not responded to the network requests below:
  (id = -1000) isReady: {}

That might be the reason why the test "Example should load the app with the url" has timed out.

So it looks like it's not detecting that the app has finished loading.
Now on the other hand, I managed to find a workaround: launch expo without any app, set the live reload blacklist then call device.openURL
This test is now passing:
https://github.com/jeromecornet/expotest/blob/b09b2b65ed007fdacb1a3a88150452694d189616/e2e/firstTest.spec.js#L31-L47
(although this specific version uses detoxPrintBusyIdleResources: 'YES' which you don't need)
In my prior tests, the device.openURL would fail because I did not specify the Blacklist for live reload and it got stuck waiting for the /onchange call to be dealt with (which I discovered using the EarlGreyStatistics)

Hm, it seems the load operation is not ending and that's why it's stuck. Could be that Expo is using some RN configuration or load type that we are not familiar with.
Not sure what you mean in your workaround, but I guess it's good that it exists.
Unfortunately, as I said, I don't have the resources to debug Expo. If someone can reproduce the same loading behavior in an empty example project, I'll take a look. If someone is willing to debug this issue, I'll provide assistance.

Hi @LeoNatan, where should I add -detoxPrintBusyIdleResources YES argument? Using detox test -detoxPrintBusyIdleResources YES results in unrecognized argument error.

That's an app launch argument, not Detox. I'll explain better in the readme.

@LeoNatan Thanks for the quick update ;), though I still don't quite understand where launchApp() means. Is it a function for init.js?

See docs here:
https://github.com/wix/Detox/blob/master/docs/APIRef.DeviceObjectAPI.md#devicelaunchappparams
You can specify not to launch in Detox.init() and then use Device.launchApp() to launch your app before tests. In that method you can specify app launch arguments.

I'm using bare React Native with react-native-navigation and it stuck at await device.launchApp({       newInstance: true,       launchArgs: "-detoxPrintBusyIdleResources YES"     });.
So I guess it is not an expo-specific problem.
I'm trying to get the log out to see what's happening for my project.

That argument alone won't help you. It prints stuff in the system log. The command needed to retrieve the information is provided in the docs.

After examining the doc, I assume I should use   await device.launchApp({       newInstance: true,       launchArgs: {         "-detoxPrintBusyIdleResources": "YES"       }     }); right?
And using xcrun simctl spawn booted log stream --level debug --style compact --predicate "category=='EarlGreyStatistics'" only prints the following and nothing else:
Error from getpwuid_r: 0 (Undefined error: 0)
Filtering the log data using "category == "EarlGreyStatistics""

Any help would be appreciated.

Right, I assume the Detox infra appends the - by itself.

Ok.
Timed -> busy animateWithDuration:delay:options:animations:completion:
2019-06-30 18:10:56.954 Db learnX[11790:1c9b1] [com.wix.Detox:EarlGreyStatistics] Timed -> busy animateWithDuration:delay:options:animations:completion:
2019-06-30 18:10:56.954 Db learnX[11790:1c9b1] [com.wix.Detox:EarlGreyStatistics] Timed -> busy animateWithDuration:delay:options:animations:completion:
2019-06-30 18:10:56.955 Db learnX[11790:1c9b1] [com.wix.Detox:EarlGreyStatistics] Timed -> busy animateWithDuration:delay:options:animations:completion:
2019-06-30 18:10:56.955 Db learnX[11790:1c9b1] [com.wix.Detox:EarlGreyStatistics] Timed -> busy animateWithDuration:delay:options:animations:completion:
2019-06-30 18:10:56.956 Db learnX[11790:1c9b1] [com.wix.Detox:EarlGreyStatistics] Timed -> busy animateWithDuration:delay:options:animations:completion:
2019-06-30 18:10:56.956 Db learnX[11790:1c9b1] [com.wix.Detox:EarlGreyStatistics] Timed -> busy animateWithDuration:delay:options:animations:completion:
2019-06-30 18:10:56.957 Db learnX[11790:1c9b1] [com.wix.Detox:EarlGreyStatistics] Timed -> busy animateWithDuration:delay:options:animations:completion:
2019-06-30 18:10:56.958 Db learnX[11790:1c9b1] [com.wix.Detox:EarlGreyStatistics] App State -> busy (null)
2019-06-30 18:10:56.958 Db learnX[11790:1c9b1] [com.wix.Detox:EarlGreyStatistics] App State -> busy (null)
2019-06-30 18:10:56.958 Db learnX[11790:1c9b1] [com.wix.Detox:EarlGreyStatistics] App State -> busy (null)
2019-06-30 18:10:56.958 Db learnX[11790:1c9b1] [com.wix.Detox:EarlGreyStatistics] App State -> busy (null)
2019-06-30 18:10:56.958 Db learnX[11790:1c9b1] [com.wix.Detox:EarlGreyStatistics] App State -> busy (null)
2019-06-30 18:10:56.958 Db learnX[11790:1c9b1] [com.wix.Detox:EarlGreyStatistics] App State -> busy (null)
2019-06-30 18:10:56.958 Db learnX[11790:1c9b1] [com.wix.Detox:EarlGreyStatistics] App State -> busy (null)
2019-06-30 18:10:56.958 Db learnX[11790:1c9b1] [com.wix.Detox:EarlGreyStatistics] App State -> busy (null)

It may be worth mentioning that I use animation on the first screen.

And I found the issue!
I use LayoutAnimation for the first screen and it may trick detox the app is never launched completely:
  useEffect(() => {
    setTimeout(() => {
      LayoutAnimation.configureNext(
        {
          duration: 800,
          create: {
            delay: 200,
            property: LayoutAnimation.Properties.opacity,
            type: LayoutAnimation.Types.easeInEaseOut
          },
          update: {
            property: LayoutAnimation.Properties.scaleXY,
            type: LayoutAnimation.Types.easeOut
          }
        },
        () =>
          usernameTextFieldRef.current &&
          (usernameTextFieldRef.current as any).getNode().focus()
      );
      setFormVisible(true);
    }, 800);
  }, []);

Remove the animation and it worked!
@LeoNatan I'm quite new to detox. Is there a way for JS to know if we are running a test and disable animations based on that? It would solve the issue for now. Thanks!

Please use SrackOverflow for general usage questions. This question is specifically about Expo.

@jeromecornet since git bisect is out of the question, how are you debugging?

@wolverineks I haven't debugged the issue besides running the few commands manually (see the linked repo with the test case to reproduce the problem).
git bisect would be ideal to find the commit that introduced the regression though.

I've tried debugging this a little, all I know so far (and repeating what was said earlier)
Is that when you load a detox application (ie detox-expo-helpers:reloadApp calls device.launchApp and the actual expo app boots), the isReady message doesn't seem to get a response.
detox[94950] WARN:  [Client.js/PENDING_REQUESTS] App has not responded to the network requests below:
  (id = -1000) isReady: {}

I'll try the : launch expo without any app, set the live reload blacklist then call device.openURL workaround @jeromecornet suggested (thanks for the help)

Well think I found the offending commit https://github.com/wix/Detox/commit/32be293774383d631d0938300175204d4222dd13
detox-expo-helpers doesn't work right with the quoting, I'll put a pr in, till then, reverting this commit works for me with the latest detox, can any other expo users confirm?

Well think I found the offending commit 32be293
Reverting this commit works for me with the latest detox, can any other expo users confirm?
I think that change broke passing in a url blacklist on launch?
From the detox docs for device-launch
It seems after the commit passing a blacklistregex to launchArgs like
{ detoxURLBlacklistRegex: '\\("http://<IP_ADDRESS>:19001/onchange","https://e.crashlytics.com/spi/v2/events"\\)'}

(see: detox-expo-helper#L105) to DetoxManager.m no longer works? Sorry I don't have the obj-c debugging chops to be certain right now.

I confirmed because I'm using this patch and my e2e tests was fix detox+13.3.1.patch:
diff --git a/node_modules/detox/src/devices/ios/AppleSimUtils.js b/node_modules/detox/src/devices/ios/AppleSimUtils.js
index 72b8d3a..391930e 100644
--- a/node_modules/detox/src/devices/ios/AppleSimUtils.js
+++ b/node_modules/detox/src/devices/ios/AppleSimUtils.js
@@ -280,7 +280,7 @@ class AppleSimUtils {
   }

   _joinLaunchArgs(launchArgs) {
-    return _.map(launchArgs, (v, k) => `-${k} "${v}"`).join(' ').trim();
+    return _.map(launchArgs, (v, k) => `-${k} ${v}`).join(' ').trim();
   }

   async _launchMagically(frameworkPath, udid, bundleId, launchArgs, languageAndLocale) {

Thanks I'm applying the same patch for now (😄 patch-package). I know the double quote->arguments map fixed an issue with url argument splitting (see: https://github.com/wix/Detox/issues/1294).
Maybe the more comprehensive fix is to look at how detoxURLBlacklistRegex is made. Passing a regex argument like this doesn't feel the most intuitive. Maybe it could be a regex list idk

Hi, this certainly fixes the issue so huge thanks!
Was wondering if anyones created a PN for this?
Cheers,
Stephen.

@maitriyogin Not yet, it's one of those cases where a change solved the issue for another use case (multiple argument urls).
Solution is to write tests for both use cases and fix it, just haven't had the time yet.

According with our statement here, I am closing this issue. General Expo questions are no longer allowed. Please follow these issues with the Expo team or in the Expo community. Thanks!