-
Notifications
You must be signed in to change notification settings - Fork 571
Description
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 updatePropsshould be triggered whenever props (likeblurAmount) change- Fabric lifecycle methods (
initWithFrame,componentDescriptorProvider, etc.) should fire
Actual Behavior
updatePropsis 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!