googlemaps / googlemaps/react-native-navigation-sdk

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

Open
#539 2 comments 0 reactions 1 assignee Claimed by @jokerttu View on GitHub
priority: p3 type: bug
Dominant language
TypeScript
Stars
227
Forks
38
Avg merge
5d 7h
Merged PRs (30d)
10

Description

## 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:

```objc
- (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+

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.