You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[Bug]: iOS crash during dev reload — NavModule event emitters called with invalid bridge #539
During React Native development reloads (e.g. CMD+R or fast refresh), the app crashes on iOS because callback methods in NavModule.mm attempt to emit events through the React Native bridge after it has been invalidated/torn down.
The crash occurs because navigation callbacks (onLocationChanged, onArrival, onRemainingTimeOrDistanceChanged, onRouteChanged, onReroutingRequestedByOffRoute, onStartGuidance, onTurnByTurn) continue to fire after the bridge is destroyed during reload, and the emit* calls throw exceptions when the bridge is unavailable.
Steps to Reproduce
Start a React Native app using @googlemaps/react-native-navigation-sdk on iOS
Begin an active navigation session (so callbacks are firing)
Trigger a development reload (CMD+R or save a file with fast refresh)
App crashes
Expected Behavior
The app should gracefully handle the bridge being unavailable during reload without crashing.
Suggested Fix
Wrap each emit* call in the INavigationCallback methods in NavModule.mm with a try-catch block to silently ignore exceptions when the bridge is invalid during reload. The affected methods are:
onLocationChanged:
onArrival:
onRemainingTimeOrDistanceChangedWithNavigator:
onRouteChanged
onReroutingRequestedByOffRoute
onStartGuidance
onTurnByTurn:
Example fix for one method:
- (void)onLocationChanged:(NSDictionary *)mappedLocation {
try {
[selfemitOnLocationChanged:@{@"location" : mappedLocation}];
} catch (...) {
// Bridge may be invalid during dev reload - ignore to prevent crash
}
}
The same pattern applies to all 7 callback methods listed above.
i'm having similar issue, when app reload it crash on IOS. I figured out the issue was related to calling setOnArrival , setOnRemainingTimeOrDistanceChanged from useNavigationSDK hooks.
I can still reproduce this on 0.18.0. On main, the callbacks in NavModule.mm (onLocationChanged, onArrival, onRemainingTimeOrDistanceChanged, onRouteChanged, onReroutingRequestedByOffRoute, onStartGuidance, onTurnByTurn) still call the emitOn* methods with no guard for a module that has been invalidated during a reload.
I'd be happy to open a PR that stops emitting once the module is invalidated (and detaches the navigator listener in invalidate), so a CMD+R / fast refresh no longer crashes. Would that be welcome? I've signed the Google CLA.
Activity
illuminati1911 commentedon Mar 11, 2026
@christian-apollo Thank you for opening the issue. We'll look into it.
sr1k3sh commentedon Apr 10, 2026
i'm having similar issue, when app reload it crash on IOS. I figured out the issue was related to calling
setOnArrival,setOnRemainingTimeOrDistanceChangedfromuseNavigationSDKhooks.sr1k3sh commentedon Nov 2, 2026
I can still reproduce this on 0.18.0. On
main, the callbacks inNavModule.mm(onLocationChanged,onArrival,onRemainingTimeOrDistanceChanged,onRouteChanged,onReroutingRequestedByOffRoute,onStartGuidance,onTurnByTurn) still call theemitOn*methods with no guard for a module that has been invalidated during a reload.I'd be happy to open a PR that stops emitting once the module is invalidated (and detaches the navigator listener in
invalidate), so a CMD+R / fast refresh no longer crashes. Would that be welcome? I've signed the Google CLA.