Skip to content

[Bug]: iOS crash during dev reload — NavModule event emitters called with invalid bridge #539

@christian-apollo

Description

@christian-apollo

Bug Description

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

  1. Start a React Native app using @googlemaps/react-native-navigation-sdk on iOS
  2. Begin an active navigation session (so callbacks are firing)
  3. Trigger a development reload (CMD+R or save a file with fast refresh)
  4. 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 {
    [self emitOnLocationChanged:@{@"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.

Environment

  • SDK version: 0.14.1
  • Platform: iOS
  • React Native: 0.76+

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions