Skip to content

Commit 9f4592f

Browse files
committed
fix: use bridge proxy from TurboModule 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 to capture and share this bridge proxy so that ComponentViews can fall back to it for image loading.
1 parent 66ef2e6 commit 9f4592f

20 files changed

Lines changed: 66 additions & 20 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 "RNMBXImageModule.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 = [RCTBridge currentBridge] ?: [RNMBXBridgeManager sharedBridge];
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 "RNMBXImageModule.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 = [RCTBridge currentBridge] ?: [RNMBXBridgeManager sharedBridge];
4445
self.contentView = _view;
4546
}
4647

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 "RNMBXImageModule.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 = [RCTBridge currentBridge] ?: [RNMBXBridgeManager sharedBridge];
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 "RNMBXImageModule.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 = [RCTBridge currentBridge] ?: [RNMBXBridgeManager sharedBridge];
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 "RNMBXImageModule.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 = [RCTBridge currentBridge] ?: [RNMBXBridgeManager sharedBridge];
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 "RNMBXImageModule.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 = [RCTBridge currentBridge] ?: [RNMBXBridgeManager sharedBridge];
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 "RNMBXImageModule.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 = [RCTBridge currentBridge] ?: [RNMBXBridgeManager sharedBridge];
4445
self.contentView = _view;
4546
}
4647

ios/RNMBX/RNMBXImageModule.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,8 @@
1414
@end
1515

1616
#endif
17+
18+
@interface RNMBXBridgeManager : NSObject
19+
+ (void)setSharedBridge:(id)bridge;
20+
+ (id)sharedBridge;
21+
@end

ios/RNMBX/RNMBXImageModule.mm

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,35 @@
77

88
#import "rnmapbox_maps-Swift.pre.h"
99

10-
@implementation RNMBXImageModule
10+
static __weak id _rnmbxSharedBridge = nil;
11+
12+
@implementation RNMBXBridgeManager
13+
+ (void)setSharedBridge:(id)bridge {
14+
_rnmbxSharedBridge = bridge;
15+
}
16+
+ (id)sharedBridge {
17+
return _rnmbxSharedBridge;
18+
}
19+
@end
20+
21+
@implementation RNMBXImageModule {
22+
id _bridgeBacking;
23+
}
1124

1225
RCT_EXPORT_MODULE();
1326

1427
@synthesize viewRegistry_DEPRECATED = _viewRegistry_DEPRECATED;
15-
@synthesize bridge = _bridge;
28+
29+
- (void)setBridge:(RCTBridge *)bridge {
30+
_bridgeBacking = bridge;
31+
if (bridge != nil) {
32+
[RNMBXBridgeManager setSharedBridge:bridge];
33+
}
34+
}
35+
36+
- (RCTBridge *)bridge {
37+
return _bridgeBacking;
38+
}
1639

1740
- (dispatch_queue_t)methodQueue
1841
{

ios/RNMBX/RNMBXImagesComponentView.mm

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include "RNMBXImageComponentView.h"
66

77
#import <React/RCTBridge+Private.h>
8+
#import "RNMBXImageModule.h"
89
#import <React/RCTConversions.h>
910
#import <React/RCTFabricComponentsPlugins.h>
1011

@@ -42,7 +43,7 @@ - (instancetype)initWithFrame:(CGRect)frame
4243
- (void)prepareView
4344
{
4445
_view = [[RNMBXImages alloc] init];
45-
_view.bridge = [RCTBridge currentBridge];
46+
_view.bridge = [RCTBridge currentBridge] ?: [RNMBXBridgeManager sharedBridge];
4647

4748
// capture weak self reference to prevent retain cycle
4849
__weak __typeof__(self) weakSelf = self;

0 commit comments

Comments
 (0)