Skip to content

Commit 7c8894b

Browse files
authored
fix: remove bridge! force-unwrap that crashes on RN 0.84+ bridgeless mode (#4200)
* fix: remove bridge! force-unwrap that crashes on RN 0.84+ bridgeless mode Fixes #4195 * fix: resolve bridge proxy for image loading in bridgeless mode In RN 0.84+ with RCT_REMOVE_LEGACY_ARCH, [RCTBridge currentBridge] returns nil but TurboModules receive an RCTBridgeProxy via their bridge property. Add RNMBXBridgeManager that captures the bridge proxy from TurboModules and provides a currentBridge method that falls back to it. All ComponentViews now use [RNMBXBridgeManager currentBridge] instead of [RCTBridge currentBridge].
1 parent c1f986f commit 7c8894b

27 files changed

Lines changed: 106 additions & 32 deletions

ios/RNMBX/RNMBXAtmosphereComponentView.mm

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#import "RNMBXFabricHelpers.h"
44

55
#import <React/RCTBridge+Private.h>
6+
#import "RNMBXBridgeManager.h"
67
#import <React/RCTConversions.h>
78
#import <React/RCTFabricComponentsPlugins.h>
89

@@ -40,7 +41,7 @@ - (instancetype)initWithFrame:(CGRect)frame
4041
- (void)prepareView
4142
{
4243
_view = [[RNMBXAtmosphere alloc] init];
43-
_view.bridge = [RCTBridge currentBridge];
44+
_view.bridge = [RNMBXBridgeManager currentBridge];
4445

4546
self.contentView = _view;
4647
}

ios/RNMBX/RNMBXBackgroundLayerComponentView.mm

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#import "RNMBXFabricHelpers.h"
44

55
#import <React/RCTBridge+Private.h>
6+
#import "RNMBXBridgeManager.h"
67
#import <React/RCTConversions.h>
78
#import <React/RCTFabricComponentsPlugins.h>
89

@@ -40,7 +41,7 @@ - (instancetype)initWithFrame:(CGRect)frame
4041
- (void)prepareView
4142
{
4243
_view = [[RNMBXBackgroundLayer alloc] init];
43-
_view.bridge = [RCTBridge currentBridge];
44+
_view.bridge = [RNMBXBridgeManager currentBridge];
4445
self.contentView = _view;
4546
}
4647

ios/RNMBX/RNMBXBridgeManager.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#import <React/RCTBridge.h>
2+
3+
@interface RNMBXBridgeManager : NSObject
4+
5+
+ (void)setBridge:(RCTBridge *)bridge;
6+
+ (RCTBridge *)currentBridge;
7+
8+
@end

ios/RNMBX/RNMBXBridgeManager.m

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#import "RNMBXBridgeManager.h"
2+
#import <React/RCTBridge+Private.h>
3+
4+
static __weak RCTBridge *_rnmbxBridge = nil;
5+
6+
@implementation RNMBXBridgeManager
7+
8+
+ (void)setBridge:(RCTBridge *)bridge {
9+
_rnmbxBridge = bridge;
10+
}
11+
12+
+ (RCTBridge *)currentBridge {
13+
return [RCTBridge currentBridge] ?: _rnmbxBridge;
14+
}
15+
16+
@end

ios/RNMBX/RNMBXCircleLayerComponentView.mm

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#import <React/RCTConversions.h>
66
#import <React/RCTFabricComponentsPlugins.h>
77
#import <React/RCTBridge+Private.h>
8+
#import "RNMBXBridgeManager.h"
89

910
#import <react/renderer/components/rnmapbox_maps_specs/ComponentDescriptors.h>
1011
#import <react/renderer/components/rnmapbox_maps_specs/EventEmitters.h>
@@ -40,7 +41,7 @@ - (instancetype)initWithFrame:(CGRect)frame
4041
- (void)prepareView
4142
{
4243
_view = [[RNMBXCircleLayer alloc] init];
43-
_view.bridge = [RCTBridge currentBridge];
44+
_view.bridge = [RNMBXBridgeManager currentBridge];
4445
self.contentView = _view;
4546
}
4647

ios/RNMBX/RNMBXFillExtrusionLayerComponentView.mm

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#import <React/RCTConversions.h>
66
#import <React/RCTFabricComponentsPlugins.h>
77
#import <React/RCTBridge+Private.h>
8+
#import "RNMBXBridgeManager.h"
89

910
#import <react/renderer/components/rnmapbox_maps_specs/ComponentDescriptors.h>
1011
#import <react/renderer/components/rnmapbox_maps_specs/EventEmitters.h>
@@ -40,7 +41,7 @@ - (instancetype)initWithFrame:(CGRect)frame
4041
- (void)prepareView
4142
{
4243
_view = [[RNMBXFillExtrusionLayer alloc] init];
43-
_view.bridge = [RCTBridge currentBridge];
44+
_view.bridge = [RNMBXBridgeManager currentBridge];
4445
self.contentView = _view;
4546
}
4647

ios/RNMBX/RNMBXFillLayerComponentView.mm

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#import <React/RCTConversions.h>
66
#import <React/RCTFabricComponentsPlugins.h>
77
#import <React/RCTBridge+Private.h>
8+
#import "RNMBXBridgeManager.h"
89

910
#import <react/renderer/components/rnmapbox_maps_specs/ComponentDescriptors.h>
1011
#import <react/renderer/components/rnmapbox_maps_specs/EventEmitters.h>
@@ -40,7 +41,7 @@ - (instancetype)initWithFrame:(CGRect)frame
4041
- (void)prepareView
4142
{
4243
_view = [[RNMBXFillLayer alloc] init];
43-
_view.bridge = [RCTBridge currentBridge];
44+
_view.bridge = [RNMBXBridgeManager currentBridge];
4445
self.contentView = _view;
4546
}
4647

ios/RNMBX/RNMBXHeatmapLayerComponentView.mm

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#import <React/RCTConversions.h>
66
#import <React/RCTFabricComponentsPlugins.h>
77
#import <React/RCTBridge+Private.h>
8+
#import "RNMBXBridgeManager.h"
89

910
#import <react/renderer/components/rnmapbox_maps_specs/ComponentDescriptors.h>
1011
#import <react/renderer/components/rnmapbox_maps_specs/EventEmitters.h>
@@ -40,7 +41,7 @@ - (instancetype)initWithFrame:(CGRect)frame
4041
- (void)prepareView
4142
{
4243
_view = [[RNMBXHeatmapLayer alloc] init];
43-
_view.bridge = [RCTBridge currentBridge];
44+
_view.bridge = [RNMBXBridgeManager currentBridge];
4445
self.contentView = _view;
4546
}
4647
#pragma mark - RCTComponentViewProtocol

ios/RNMBX/RNMBXHillshadeLayerComponentView.mm

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#import <React/RCTConversions.h>
66
#import <React/RCTFabricComponentsPlugins.h>
77
#import <React/RCTBridge+Private.h>
8+
#import "RNMBXBridgeManager.h"
89

910
#import <react/renderer/components/rnmapbox_maps_specs/ComponentDescriptors.h>
1011
#import <react/renderer/components/rnmapbox_maps_specs/EventEmitters.h>
@@ -40,7 +41,7 @@ - (instancetype)initWithFrame:(CGRect)frame
4041
- (void)prepareView
4142
{
4243
_view = [[RNMBXHillshadeLayer alloc] init];
43-
_view.bridge = [RCTBridge currentBridge];
44+
_view.bridge = [RNMBXBridgeManager currentBridge];
4445
self.contentView = _view;
4546
}
4647

ios/RNMBX/RNMBXImageModule.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,4 @@
1414
@end
1515

1616
#endif
17+

0 commit comments

Comments
 (0)