Description
On iOS bridgeless (RN 0.83 New Arch, Expo 55, iOS 26.2 simulator), the expo-dev-client dev menu auto-opens as a bottom sheet on every app boot / cdp_reload (Home renders behind it). Interacting with it (swipe-to-dismiss or button taps) frequently pauses the JS thread / detaches the Hermes target — cdp_status then reports APP_DETACHED (0 targets) and Runtime.evaluate times out ("JS thread paused"). Dev-menu refs also go stale between device_snapshot and device_press (the sheet animates / re-renders).
Net impact: live-verification flows that need a remount without a reload — e.g. the // @refresh reset HMR trick to reset a component ref while preserving an injected RTK Query cache — become impractical, because the only reliable recovery is terminate+relaunch, which wipes the in-memory JS store and re-triggers the dev menu.
Environment
| Field |
Value |
| Plugin version |
0.55.3 |
| CDP Bridge |
0.45.7 |
| Tool count |
77 |
| OS |
Darwin 25.5.0 |
| Node.js |
v26.3.0 |
| npm |
11.16.0 |
| Metro |
running on 8081 |
| iOS Simulators |
1 booted |
| Android Emulators |
0 connected |
| agent-device |
0.17.5 |
| maestro-runner |
1.1.16 |
| App arch |
React Native Bridgeless (New Arch), Hermes |
Recent Tool Activity
Telemetry: stale (last event 16 days ago — capture not active in this plugin version, removed with the Experience Engine, GH #200).
Steps to Reproduce
- On a dev-client staging build (iOS bridgeless), call
cdp_reload (or cold-launch the app).
- The dev menu appears as a bottom sheet; Home renders behind it.
- Swipe the sheet down to dismiss (or tap a dev-menu button).
cdp_status → APP_DETACHED, 0 Hermes targets; Runtime.evaluate('1+1') times out ("JS thread paused").
Workaround
xcrun simctl terminate <udid> <bundle> && xcrun simctl launch … recovers the connection, but wipes the in-memory JS store and re-opens the dev menu — so it cannot be used mid-injection (e.g. when an RTK Query cache has been patched and must survive a component remount).
Suggested Fix
- A tool to reliably dismiss the iOS dev menu (parallel to
cdp_dismiss_dev_client_picker, which is Android-only today).
- And/or a remount-without-reload primitive that preserves the JS store, so injected RTK/Redux state survives a forced component remount.
Related Issues
Submitted via /rn-dev-agent:send-feedback — data sanitized automatically
Description
On iOS bridgeless (RN 0.83 New Arch, Expo 55, iOS 26.2 simulator), the expo-dev-client dev menu auto-opens as a bottom sheet on every app boot /
cdp_reload(Home renders behind it). Interacting with it (swipe-to-dismiss or button taps) frequently pauses the JS thread / detaches the Hermes target —cdp_statusthen reportsAPP_DETACHED(0 targets) andRuntime.evaluatetimes out ("JS thread paused"). Dev-menu refs also go stale betweendevice_snapshotanddevice_press(the sheet animates / re-renders).Net impact: live-verification flows that need a remount without a reload — e.g. the
// @refresh resetHMR trick to reset a component ref while preserving an injected RTK Query cache — become impractical, because the only reliable recovery is terminate+relaunch, which wipes the in-memory JS store and re-triggers the dev menu.Environment
Recent Tool Activity
Telemetry: stale (last event 16 days ago — capture not active in this plugin version, removed with the Experience Engine, GH #200).
Steps to Reproduce
cdp_reload(or cold-launch the app).cdp_status→APP_DETACHED, 0 Hermes targets;Runtime.evaluate('1+1')times out ("JS thread paused").Workaround
xcrun simctl terminate <udid> <bundle> && xcrun simctl launch …recovers the connection, but wipes the in-memory JS store and re-opens the dev menu — so it cannot be used mid-injection (e.g. when an RTK Query cache has been patched and must survive a component remount).Suggested Fix
cdp_dismiss_dev_client_picker, which is Android-only today).Related Issues
Submitted via
/rn-dev-agent:send-feedback— data sanitized automatically