Here is the final, GitHub-ready issue, including your React Native version and Podfile configuration, formatted cleanly with bold, code, and proper headings.
Issue: Fabric updateProps Never Called — BlurView Always Uses Legacy Manager (iOS, RN 0.82.1)
Hi team,
I am integrating your BlurView component in an app running React Native 0.82.1, with New Architecture + Fabric + Bridgeless fully enabled.
However, based on extensive logging, it appears that the iOS implementation of BlurView never uses the Fabric component, and instead always routes through the legacy (Paper) interoperability layer.
I am sharing detailed evidence below so you can confirm whether this is expected or if something in the library needs an update.
Environment
- React Native:
0.82.1
- iOS
- New Architecture: Enabled
- Fabric: Enabled
- Bridgeless: Enabled
- Hermes: Enabled
Podfile Configuration
# Enable New Architecture
ENV['RCT_NEW_ARCH_ENABLED'] = '1'
# Enable bridgeless mode
ENV['RCT_BRIDGELESS_ENABLED'] = '1'
use_react_native!(
:path => config[:reactNativePath],
:app_path => "#{Pod::Config.instance.installation_root}/..",
:hermes_enabled => true, # Hermes is recommended
:fabric_enabled => true, # Enable Fabric renderer
:new_arch_enabled => true # Enable TurboModules + Fabric
)
New Architecture is clearly enabled. Fabric is clearly enabled.
Yet the BlurView does not behave like a Fabric component.
Expected Behavior
Under Fabric:
- The Fabric component (
BlurView.mm) should be initialized
updateProps should be triggered whenever props (like blurAmount) change
- Fabric lifecycle methods (
initWithFrame, componentDescriptorProvider, etc.) should fire
Actual Behavior
updateProps is NEVER called
- No logs from Fabric descriptors or Fabric lifecycle
- All logs come from the legacy
BlurViewManager
- Prop updates only call legacy setters like
setBlurAmount
- Component behaves entirely like a Paper-interop view
This strongly suggests Fabric is not being used at all for this component.
Logs — Initialization Phase
These are the logs printed when the BlurView mounts:
WEG: BlurViewManager.m: view: void
WEG: BlurView.mm: init: void
WEG: BlurView.mm: initWithFrame: {{0, 0}, {0, 0}}
WEG: BlurView.mm: setBlurAmount: 10
WEG: BlurView.mm: updateBlurEffect: void
WEG: BlurView.mm: blurEffectStyle: void
WEG: BlurView.mm: setBlurType: dark
WEG: BlurView.mm: updateBlurEffect: void
WEG: BlurView.mm: blurEffectStyle: void
WEG: BlurView.mm: updateBlurEffect: void
WEG: BlurView.mm: blurEffectStyle: void
WEG: BlurView.mm: updateFallbackView: void
WEG: BlurView.mm: useReduceTransparencyFallback: void
WEG: BlurView.mm: setBlurAmount: 11
WEG: BlurView.mm: updateBlurEffect: void
WEG: BlurView.mm: blurEffectStyle: void
WEG: BlurView.mm: setBlurType: light
WEG: BlurView.mm: updateBlurEffect: void
WEG: BlurView.mm: blurEffectStyle: void
WEG: BlurView.mm: setReducedTransparencyFallbackColor: UIExtendedSRGBColorSpace 1 1 1 1
WEG: BlurView.mm: updateFallbackView: void
WEG: BlurView.mm: useReduceTransparencyFallback: void
WEG: BlurView.mm: layoutSubviews: void
Even though some methods from BlurView.mm appear here,
none of the Fabric-only lifecycle methods are triggered.
Logs — When Props Update
WEG: BlurView.mm: setBlurAmount: 1
WEG: BlurView.mm: updateBlurEffect: void
WEG: BlurView.mm: blurEffectStyle: void
WEG: BlurView.mm: layoutSubviews: void
Still no updateProps call.
Fabric updateProps Implementation (Never Invoked)
- (void)updateProps:(Props::Shared const &)props oldProps:(Props::Shared const &)oldProps
{
NSLog(@"WEG: BlurView.mm: updateProps: newProps + oldProps");
const auto &oldViewProps = *std::static_pointer_cast<const BlurViewProps>(_props);
const auto &newViewProps = *std::static_pointer_cast<const BlurViewProps>(props);
if (oldViewProps.blurAmount != newViewProps.blurAmount) {
NSNumber *blurAmount = [NSNumber numberWithInt:newViewProps.blurAmount];
[self setBlurAmount:blurAmount];
}
if (oldViewProps.blurType != newViewProps.blurType) {
NSString *blurType = [NSString stringWithUTF8String:toString(newViewProps.blurType).c_str()];
[self setBlurType:blurType];
}
if (oldViewProps.reducedTransparencyFallbackColor != newViewProps.reducedTransparencyFallbackColor) {
UIColor *color = RCTUIColorFromSharedColor(newViewProps.reducedTransparencyFallbackColor);
[self setReducedTransparencyFallbackColor:color];
}
[super updateProps:props oldProps:oldProps];
}
This log never prints — meaning Fabric props pipeline is not active.
My Current Understanding (Please Confirm)
It appears that:
- The BlurView component is not registered or handled as a Fabric component on iOS
- React Native therefore falls back to the legacy interoperability layer
- Fabric's prop system is never engaged
- The component does not behave like a true Fabric view, despite RN 0.82.1 and all Fabric flags enabled
If my interpretation is incorrect, I would appreciate a detailed explanation of:
- Why Fabric paths are being bypassed
- Whether something in the library’s iOS implementation needs updating
- Whether this library currently supports full Fabric on iOS
I can also provide a minimal reproducible repo if needed.
Thanks!
Here is the final, GitHub-ready issue, including your React Native version and Podfile configuration, formatted cleanly with bold,
code, and proper headings.Issue: Fabric
updatePropsNever Called — BlurView Always Uses Legacy Manager (iOS, RN 0.82.1)Hi team,
I am integrating your
BlurViewcomponent in an app running React Native 0.82.1, with New Architecture + Fabric + Bridgeless fully enabled.However, based on extensive logging, it appears that the iOS implementation of BlurView never uses the Fabric component, and instead always routes through the legacy (Paper) interoperability layer.
I am sharing detailed evidence below so you can confirm whether this is expected or if something in the library needs an update.
Environment
0.82.1Podfile Configuration
New Architecture is clearly enabled. Fabric is clearly enabled.
Yet the BlurView does not behave like a Fabric component.
Expected Behavior
Under Fabric:
BlurView.mm) should be initializedupdatePropsshould be triggered whenever props (likeblurAmount) changeinitWithFrame,componentDescriptorProvider, etc.) should fireActual Behavior
updatePropsis NEVER calledBlurViewManagersetBlurAmountThis strongly suggests Fabric is not being used at all for this component.
Logs — Initialization Phase
These are the logs printed when the
BlurViewmounts:Even though some methods from
BlurView.mmappear here,none of the Fabric-only lifecycle methods are triggered.
Logs — When Props Update
Still no
updatePropscall.Fabric
updatePropsImplementation (Never Invoked)This log never prints — meaning Fabric props pipeline is not active.
My Current Understanding (Please Confirm)
It appears that:
If my interpretation is incorrect, I would appreciate a detailed explanation of:
I can also provide a minimal reproducible repo if needed.
Thanks!