From 024e3ee7a98ad1e4ac707f9441c8a1a0224c3862 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nishan=20=28o=5E=E2=96=BD=5Eo=29?= Date: Thu, 3 Jul 2025 11:41:37 +0530 Subject: [PATCH 01/12] swiftui container view wip somewhat working working fix additional stuff update layout metrics update blur radius init working revert use layer reset dkd fix final version working working grayscale parent frame set swiftui container wip nit nit enable blur filter example cleanup renaming cleanup naming remove unnecessary configs nits wip nit child mount working remove needs swiftui container flag working nit nit nit remove all animations remove all animations nit working refactor nit nit fix brightness filter overlay nit --- packages/react-native/React-Core.podspec | 1 + .../View/RCTViewComponentView.mm | 186 ++++++++++--- .../React/React-RCTFabric.podspec | 1 + .../React/React-SwiftUtils.podspec | 38 +++ .../SwiftUtils/RCTSwiftUIContainerView.swift | 82 ++++++ .../RCTSwiftUIContainerViewWrapper.h | 24 ++ .../RCTSwiftUIContainerViewWrapper.m | 49 ++++ .../components/view/ViewShadowNode.cpp | 2 +- .../react-native/scripts/react_native_pods.rb | 1 + packages/rn-tester/Podfile.lock | 250 ++++++++++++------ .../RNTesterPods.xcodeproj/project.pbxproj | 178 ++++++------- .../js/examples/Filter/FilterExample.js | 1 - 12 files changed, 616 insertions(+), 197 deletions(-) create mode 100644 packages/react-native/React/React-SwiftUtils.podspec create mode 100644 packages/react-native/React/SwiftUtils/RCTSwiftUIContainerView.swift create mode 100644 packages/react-native/React/SwiftUtils/RCTSwiftUIContainerViewWrapper.h create mode 100644 packages/react-native/React/SwiftUtils/RCTSwiftUIContainerViewWrapper.m diff --git a/packages/react-native/React-Core.podspec b/packages/react-native/React-Core.podspec index 795801379b9101..35f1091646320e 100644 --- a/packages/react-native/React-Core.podspec +++ b/packages/react-native/React-Core.podspec @@ -75,6 +75,7 @@ Pod::Spec.new do |s| "React/Tests/**/*", "React/Inspector/**/*", "React/Runtime/**/*", + "React/SwiftUtils/**/*", ] # The default is use hermes, we don't have jsc installed diff --git a/packages/react-native/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm b/packages/react-native/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm index a99f103a33e6ef..9f403cf741acf2 100644 --- a/packages/react-native/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +++ b/packages/react-native/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm @@ -20,6 +20,7 @@ #import #import #import +#import #import #import #import @@ -53,6 +54,7 @@ @implementation RCTViewComponentView { NSMutableSet *_accessibilityOrderNativeIDs; NSMutableArray *_accessibilityElements; RCTViewAccessibilityElement *_axElementDescribingSelf; + RCTSwiftUIContainerViewWrapper* _swiftUIWrapper; } #ifdef RCT_DYNAMIC_FRAMEWORKS @@ -575,6 +577,13 @@ - (void)updateLayoutMetrics:(const LayoutMetrics &)layoutMetrics auto newTransform = _props->resolveTransform(layoutMetrics); self.layer.transform = RCTCATransform3DFromTransformMatrix(newTransform); } + + if (_swiftUIWrapper) { + _swiftUIWrapper.hostingView.frame = self.bounds; + if (_swiftUIWrapper.contentView) { + _swiftUIWrapper.contentView.frame = self.bounds; + } + } } - (BOOL)isJSResponder @@ -793,44 +802,88 @@ - (BOOL)styleWouldClipOverflowInk ((!_props->boxShadow.empty() || (clipToPaddingBox && nonZeroBorderWidth)) || _props->outlineWidth != 0); } +- (UIView *)childContainerView +{ + UIView *childContainerView = self; + + if (self.styleNeedsSwiftUIContainer) { + if (!_swiftUIWrapper) { + _swiftUIWrapper = [RCTSwiftUIContainerViewWrapper new]; + _swiftUIWrapper.hostingView.frame = CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height); + UIView *swiftUIContentView = + [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height)]; + for (UIView *subview in self.subviews) { + [swiftUIContentView addSubview:subview]; + } + swiftUIContentView.clipsToBounds = self.clipsToBounds; + self.clipsToBounds = NO; + swiftUIContentView.layer.mask = self.layer.mask; + self.layer.mask = nil; + [_swiftUIWrapper updateContentView:swiftUIContentView]; + [self addSubview:_swiftUIWrapper.hostingView]; + + [self transferVisualPropertiesFromView:self toView:swiftUIContentView]; + } + + childContainerView = _swiftUIWrapper.contentView; + } else { + if (_swiftUIWrapper) { + UIView *swiftUIContentView = _swiftUIWrapper.contentView; + for (UIView *subview in swiftUIContentView.subviews) { + [self addSubview:subview]; + } + self.clipsToBounds = swiftUIContentView.clipsToBounds; + self.layer.mask = swiftUIContentView.layer.mask; + + [self transferVisualPropertiesFromView:swiftUIContentView toView:self]; + + [_swiftUIWrapper.hostingView removeFromSuperview]; + _swiftUIWrapper = nil; + } + } + + return childContainerView; +} + // This UIView is the UIView that holds all subviews. It is sometimes not self // because we want to render "overflow ink" that extends beyond the bounds of // the view and is not affected by clipping. - (UIView *)currentContainerView { + UIView* childContainerView = self.childContainerView; + if (_useCustomContainerView) { if (!_containerView) { _containerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; - for (UIView *subview in self.subviews) { + for (UIView *subview in childContainerView.subviews) { [_containerView addSubview:subview]; } - _containerView.clipsToBounds = self.clipsToBounds; - self.clipsToBounds = NO; - _containerView.layer.mask = self.layer.mask; - self.layer.mask = nil; - [self addSubview:_containerView]; + _containerView.clipsToBounds = childContainerView.clipsToBounds; + childContainerView.clipsToBounds = NO; + _containerView.layer.mask = childContainerView.layer.mask; + childContainerView.layer.mask = nil; + [childContainerView addSubview:_containerView]; } - return _containerView; + childContainerView = _containerView; } else { if (_containerView) { for (UIView *subview in _containerView.subviews) { - [self addSubview:subview]; + [childContainerView addSubview:subview]; } - self.clipsToBounds = _containerView.clipsToBounds; - self.layer.mask = _containerView.layer.mask; + childContainerView.clipsToBounds = _containerView.clipsToBounds; + childContainerView.layer.mask = _containerView.layer.mask; [_containerView removeFromSuperview]; _containerView = nil; } - - return self; } + return childContainerView; } - (void)invalidateLayer { - CALayer *layer = self.layer; - + CALayer *layer = self.childContainerView.layer; + if (CGSizeEqualToSize(layer.bounds.size, CGSizeZero)) { return; } @@ -910,7 +963,7 @@ - (void)invalidateLayer if (!_backgroundColorLayer) { _backgroundColorLayer = [CALayer layer]; _backgroundColorLayer.zPosition = BACKGROUND_COLOR_ZPOSITION; - [self.layer addSublayer:_backgroundColorLayer]; + [layer addSublayer:_backgroundColorLayer]; } [self shapeLayerToMatchView:_backgroundColorLayer borderMetrics:borderMetrics]; _backgroundColorLayer.backgroundColor = backgroundColor.CGColor; @@ -986,31 +1039,43 @@ - (void)invalidateLayer // filter [_filterLayer removeFromSuperlayer]; _filterLayer = nil; + if (_swiftUIWrapper) { + [_swiftUIWrapper updateBlurRadius:@(0)]; + } self.layer.opacity = (float)_props->opacity; if (!_props->filter.empty()) { float multiplicativeBrightness = 1; + bool hasBrightnessFilter = false; for (const auto &primitive : _props->filter) { if (std::holds_alternative(primitive.parameters)) { if (primitive.type == FilterType::Brightness) { multiplicativeBrightness *= std::get(primitive.parameters); + hasBrightnessFilter = true; } else if (primitive.type == FilterType::Opacity) { self.layer.opacity *= std::get(primitive.parameters); + } else if (primitive.type == FilterType::Blur) { + if (_swiftUIWrapper) { + Float blurRadius = std::get(primitive.parameters); + [_swiftUIWrapper updateBlurRadius:@(blurRadius)]; + } } } } - - _filterLayer = [CALayer layer]; - [self shapeLayerToMatchView:_filterLayer borderMetrics:borderMetrics]; - _filterLayer.compositingFilter = @"multiplyBlendMode"; - _filterLayer.backgroundColor = [UIColor colorWithRed:multiplicativeBrightness - green:multiplicativeBrightness - blue:multiplicativeBrightness - alpha:self.layer.opacity] - .CGColor; - // So that this layer is always above any potential sublayers this view may - // add - _filterLayer.zPosition = CGFLOAT_MAX; - [self.layer addSublayer:_filterLayer]; + + if (hasBrightnessFilter) { + _filterLayer = [CALayer layer]; + [self shapeLayerToMatchView:_filterLayer borderMetrics:borderMetrics]; + _filterLayer.compositingFilter = @"multiplyBlendMode"; + _filterLayer.backgroundColor = [UIColor colorWithRed:multiplicativeBrightness + green:multiplicativeBrightness + blue:multiplicativeBrightness + alpha:self.layer.opacity] + .CGColor; + // So that this layer is always above any potential sublayers this view may + // add + _filterLayer.zPosition = CGFLOAT_MAX; + [layer addSublayer:_filterLayer]; + } } // background image @@ -1025,7 +1090,7 @@ - (void)invalidateLayer [self shapeLayerToMatchView:backgroundImageLayer borderMetrics:borderMetrics]; backgroundImageLayer.masksToBounds = YES; backgroundImageLayer.zPosition = BACKGROUND_COLOR_ZPOSITION; - [self.layer addSublayer:backgroundImageLayer]; + [layer addSublayer:backgroundImageLayer]; [_backgroundImageLayers addObject:backgroundImageLayer]; } else if (std::holds_alternative(backgroundImage)) { const auto &radialGradient = std::get(backgroundImage); @@ -1034,7 +1099,7 @@ - (void)invalidateLayer [self shapeLayerToMatchView:backgroundImageLayer borderMetrics:borderMetrics]; backgroundImageLayer.masksToBounds = YES; backgroundImageLayer.zPosition = BACKGROUND_COLOR_ZPOSITION; - [self.layer addSublayer:backgroundImageLayer]; + [layer addSublayer:backgroundImageLayer]; [_backgroundImageLayers addObject:backgroundImageLayer]; } } @@ -1056,7 +1121,7 @@ - (void)invalidateLayer RCTUIEdgeInsetsFromEdgeInsets(borderMetrics.borderWidths), self.layer.bounds.size); shadowLayer.zPosition = _borderLayer.zPosition; - [self.layer addSublayer:shadowLayer]; + [layer addSublayer:shadowLayer]; [_boxShadowLayers addObject:shadowLayer]; } } @@ -1423,6 +1488,65 @@ - (NSString *)componentViewName_DO_NOT_USE_THIS_IS_BROKEN return RCTNSStringFromString([[self class] componentDescriptorProvider].name); } +- (BOOL) styleNeedsSwiftUIContainer { + if (!_props->filter.empty()) { + for (const auto &primitive : _props->filter) { + if (primitive.type == FilterType::Blur) { + return YES; + } + } + } + return NO; +} + +- (void)transferVisualPropertiesFromView:(UIView *)sourceView toView:(UIView *)destinationView +{ + // shadow + destinationView.layer.shadowColor = sourceView.layer.shadowColor; + sourceView.layer.shadowColor = nil; + destinationView.layer.shadowOffset = sourceView.layer.shadowOffset; + sourceView.layer.shadowOffset = CGSizeZero; + destinationView.layer.shadowOpacity = sourceView.layer.shadowOpacity; + sourceView.layer.shadowOpacity = 0; + destinationView.layer.shadowRadius = sourceView.layer.shadowRadius; + sourceView.layer.shadowRadius = 0; + + // background + destinationView.layer.backgroundColor = sourceView.layer.backgroundColor; + sourceView.layer.backgroundColor = nil; + if (_backgroundColorLayer) { + [destinationView.layer addSublayer:_backgroundColorLayer]; + } + + // border + destinationView.layer.borderColor = sourceView.layer.borderColor; + sourceView.layer.borderColor = nil; + destinationView.layer.borderWidth = sourceView.layer.borderWidth; + sourceView.layer.borderWidth = 0; + + // corner + destinationView.layer.cornerRadius = sourceView.layer.cornerRadius; + sourceView.layer.cornerRadius = 0; + destinationView.layer.cornerCurve = sourceView.layer.cornerCurve; + + // custom layers + if (_borderLayer) { + [destinationView.layer addSublayer:_borderLayer]; + } + if (_outlineLayer) { + [destinationView.layer addSublayer:_outlineLayer]; + } + if (_filterLayer) { + [destinationView.layer addSublayer:_filterLayer]; + } + for (CALayer *layer in _backgroundImageLayers) { + [destinationView.layer addSublayer:layer]; + } + for (CALayer *layer in _boxShadowLayers) { + [destinationView.layer addSublayer:layer]; + } +} + @end #ifdef __cplusplus diff --git a/packages/react-native/React/React-RCTFabric.podspec b/packages/react-native/React/React-RCTFabric.podspec index 5dd782ed308a5d..6781a217d2e756 100644 --- a/packages/react-native/React/React-RCTFabric.podspec +++ b/packages/react-native/React/React-RCTFabric.podspec @@ -63,6 +63,7 @@ Pod::Spec.new do |s| s.dependency "Yoga" s.dependency "React-RCTText" s.dependency "React-jsi" + add_dependency(s, "React-SwiftUtils") add_dependency(s, "React-FabricImage") add_dependency(s, "React-Fabric", :additional_framework_paths => [ diff --git a/packages/react-native/React/React-SwiftUtils.podspec b/packages/react-native/React/React-SwiftUtils.podspec new file mode 100644 index 00000000000000..93be96b82f78a1 --- /dev/null +++ b/packages/react-native/React/React-SwiftUtils.podspec @@ -0,0 +1,38 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# +# This source code is licensed under the MIT license found in the +# LICENSE file in the root directory of this source tree. + +require "json" + +package = JSON.parse(File.read(File.join(__dir__, "..", "package.json"))) +version = package['version'] + +source = { :git => 'https://github.com/facebook/react-native.git' } +if version == '1000.0.0' + # This is an unpublished version, use the latest commit hash of the react-native repo, which we're presumably in. + source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1") +else + source[:tag] = "v#{version}" +end + +Pod::Spec.new do |s| + s.name = "React-SwiftUtils" + s.version = version + s.summary = "Swift utilities for React Native." + s.homepage = "https://reactnative.dev/" + s.license = package["license"] + s.author = "Meta Platforms, Inc. and its affiliates" + s.platforms = min_supported_versions + s.source = source + s.source_files = "SwiftUtils/**/*.{h,m,swift}" + s.public_header_files = "SwiftUtils/**/*.h" + s.module_name = "ReactSwiftUtils" + s.header_dir = "ReactSwiftUtils" + + # Swift-specific configuration + s.pod_target_xcconfig = { + "SWIFT_VERSION" => "5.0" + } + +end diff --git a/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerView.swift b/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerView.swift new file mode 100644 index 00000000000000..14353117b7d9df --- /dev/null +++ b/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerView.swift @@ -0,0 +1,82 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import SwiftUI +import UIKit + +@objc public class RCTSwiftUIContainerView: NSObject { + private var containerViewModel = ContainerViewModel() + private var hostingController: UIHostingController? + + @objc public override init() { + super.init(); + hostingController = UIHostingController(rootView: SwiftUIContainerView(viewModel: containerViewModel)) + guard let view = hostingController?.view else { + return + } + + view.backgroundColor = .clear; + } + + + @objc public func updateContentView(_ view: UIView) { + containerViewModel.contentView = view + } + + @objc public func hostingView() -> UIView? { + return hostingController?.view; + } + + @objc public func contentView() -> UIView? { + return containerViewModel.contentView + } + + @objc public func updateBlurRadius(_ radius: NSNumber) { + let blurRadius = CGFloat(radius.floatValue) + containerViewModel.blurRadius = blurRadius + } + + @objc public func updateGrayScale(_ amount: NSNumber) { + let amount = CGFloat(amount.floatValue) + containerViewModel.grayScale = amount; + } + + @objc public func resetStyles() { + containerViewModel.blurRadius = 0 + containerViewModel.grayScale = 0 + } +} + +class ContainerViewModel: ObservableObject { + @Published var blurRadius: CGFloat = 0 + @Published var grayScale: CGFloat = 0 + @Published var contentView: UIView? +} + +struct SwiftUIContainerView: View { + @ObservedObject var viewModel: ContainerViewModel + + var body: some View { + if let contentView = viewModel.contentView { + UIViewWrapper(view: contentView) + .blur(radius: viewModel.blurRadius) + .grayscale(viewModel.grayScale) + + } + } +} + +struct UIViewWrapper: UIViewRepresentable { + let view: UIView + + func makeUIView(context: Context) -> UIView { + return view + } + + func updateUIView(_ uiView: UIView, context: Context) { + } +} diff --git a/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerViewWrapper.h b/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerViewWrapper.h new file mode 100644 index 00000000000000..74cc6a9ccc09b5 --- /dev/null +++ b/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerViewWrapper.h @@ -0,0 +1,24 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface RCTSwiftUIContainerViewWrapper : NSObject + +- (UIView *)contentView; +- (void)updateBlurRadius:(NSNumber *)radius; +- (void)updateGrayScale:(NSNumber *)amount; +- (void)updateContentView:(UIView *)view; +- (UIView *)hostingView; +- (void)resetStyles; + +@end + +NS_ASSUME_NONNULL_END diff --git a/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerViewWrapper.m b/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerViewWrapper.m new file mode 100644 index 00000000000000..898d090ef1738c --- /dev/null +++ b/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerViewWrapper.m @@ -0,0 +1,49 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#import "RCTSwiftUIContainerViewWrapper.h" +#import "ReactSwiftUtils-Swift.h" + +@interface RCTSwiftUIContainerViewWrapper () +@property (nonatomic, strong) RCTSwiftUIContainerView *swiftContainerView; +@end + +@implementation RCTSwiftUIContainerViewWrapper + +- (instancetype)init { + if (self = [super init]) { + _swiftContainerView = [RCTSwiftUIContainerView new]; + } + return self; +} + + +- (UIView *)contentView { + return [self.swiftContainerView contentView]; +} + +- (UIView *)hostingView { + return [self.swiftContainerView hostingView]; +} + +- (void)resetStyles { + [self.swiftContainerView resetStyles]; +} + +- (void)updateContentView:(UIView *)view { + return [self.swiftContainerView updateContentView:view]; +} + +- (void)updateBlurRadius:(NSNumber *)radius { + [self.swiftContainerView updateBlurRadius:radius]; +} + +- (void)updateGrayScale:(NSNumber *)amount { + [self.swiftContainerView updateGrayScale:amount]; +} + +@end diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/ViewShadowNode.cpp b/packages/react-native/ReactCommon/react/renderer/components/view/ViewShadowNode.cpp index 19e6f2106e005b..5206268014ae5a 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/ViewShadowNode.cpp +++ b/packages/react-native/ReactCommon/react/renderer/components/view/ViewShadowNode.cpp @@ -63,7 +63,7 @@ void ViewShadowNode::initialize() noexcept { viewProps.mixBlendMode != BlendMode::Normal || viewProps.isolation == Isolation::Isolate || HostPlatformViewTraitsInitializer::formsStackingContext(viewProps) || - !viewProps.accessibilityOrder.empty(); + !viewProps.accessibilityOrder.empty() || !viewProps.filter.empty(); bool formsView = formsStackingContext || isColorMeaningful(viewProps.backgroundColor) || hasBorder() || diff --git a/packages/react-native/scripts/react_native_pods.rb b/packages/react-native/scripts/react_native_pods.rb index 676d8b80eb4f9c..606a7fd7fd8013 100644 --- a/packages/react-native/scripts/react_native_pods.rb +++ b/packages/react-native/scripts/react_native_pods.rb @@ -147,6 +147,7 @@ def use_react_native! ( pod 'React-jserrorhandler', :path => "#{prefix}/ReactCommon/jserrorhandler" pod 'RCTDeprecation', :path => "#{prefix}/ReactApple/Libraries/RCTFoundation/RCTDeprecation" pod 'React-RCTFBReactNativeSpec', :path => "#{prefix}/React" + pod 'React-SwiftUtils', :path => "#{prefix}/React" pod 'React-jsi', :path => "#{prefix}/ReactCommon/jsi" if hermes_enabled diff --git a/packages/rn-tester/Podfile.lock b/packages/rn-tester/Podfile.lock index 2a568e1874e6b4..8d99c038fd25b8 100644 --- a/packages/rn-tester/Podfile.lock +++ b/packages/rn-tester/Podfile.lock @@ -16,7 +16,7 @@ PODS: - hermes-engine/inspector (1000.0.0) - hermes-engine/inspector_chrome (1000.0.0) - hermes-engine/Public (1000.0.0) - - MyNativeView (0.80.0-main): + - MyNativeView (0.81.0-main): - boost - DoubleConversion - fast_float @@ -44,7 +44,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - NativeCxxModuleExample (0.80.0-main): + - NativeCxxModuleExample (0.81.0-main): - boost - DoubleConversion - fast_float @@ -73,7 +73,7 @@ PODS: - SocketRocket - Yoga - OCMock (3.9.4) - - OSSLibraryExample (0.80.0-main): + - OSSLibraryExample (0.81.0-main): - boost - DoubleConversion - fast_float @@ -584,6 +584,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - React-Fabric + - React-Fabric/bridging - React-FabricComponents - React-graphics - React-jsi @@ -609,6 +610,7 @@ PODS: - React-debug - React-Fabric/animations (= 1000.0.0) - React-Fabric/attributedstring (= 1000.0.0) + - React-Fabric/bridging (= 1000.0.0) - React-Fabric/componentregistry (= 1000.0.0) - React-Fabric/componentregistrynative (= 1000.0.0) - React-Fabric/components (= 1000.0.0) @@ -684,6 +686,31 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket + - React-Fabric/bridging (1000.0.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket - React-Fabric/componentregistry (1000.0.0): - boost - DoubleConversion @@ -1243,11 +1270,13 @@ PODS: - React-FabricComponents/components/inputaccessory (= 1000.0.0) - React-FabricComponents/components/iostextinput (= 1000.0.0) - React-FabricComponents/components/modal (= 1000.0.0) + - React-FabricComponents/components/rncore (= 1000.0.0) - React-FabricComponents/components/safeareaview (= 1000.0.0) - React-FabricComponents/components/scrollview (= 1000.0.0) - React-FabricComponents/components/text (= 1000.0.0) - React-FabricComponents/components/textinput (= 1000.0.0) - React-FabricComponents/components/unimplementedview (= 1000.0.0) + - React-FabricComponents/components/virtualview (= 1000.0.0) - React-featureflags - React-graphics - React-jsi @@ -1341,6 +1370,33 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga + - React-FabricComponents/components/rncore (1000.0.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga - React-FabricComponents/components/safeareaview (1000.0.0): - boost - DoubleConversion @@ -1476,6 +1532,33 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga + - React-FabricComponents/components/virtualview (1000.0.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga - React-FabricComponents/textlayoutmanager (1000.0.0): - boost - DoubleConversion @@ -1900,6 +1983,7 @@ PODS: - React-rendererdebug - React-runtimeexecutor - React-runtimescheduler + - React-SwiftUtils - React-utils - SocketRocket - Yoga @@ -2122,7 +2206,18 @@ PODS: - React-utils - SocketRocket - React-runtimeexecutor (1000.0.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - React-debug + - React-featureflags - React-jsi (= 1000.0.0) + - React-utils + - SocketRocket - React-RuntimeHermes (1000.0.0): - boost - DoubleConversion @@ -2166,6 +2261,7 @@ PODS: - React-timing - React-utils - SocketRocket + - React-SwiftUtils (1000.0.0) - React-timing (1000.0.0) - React-utils (1000.0.0): - boost @@ -2283,7 +2379,7 @@ PODS: - React-perflogger (= 1000.0.0) - React-utils (= 1000.0.0) - SocketRocket - - ScreenshotManager (0.80.0-main): + - ScreenshotManager (0.81.0-main): - boost - DoubleConversion - fast_float @@ -2387,6 +2483,7 @@ DEPENDENCIES: - React-runtimeexecutor (from `../react-native/ReactCommon/runtimeexecutor`) - React-RuntimeHermes (from `../react-native/ReactCommon/react/runtime`) - React-runtimescheduler (from `../react-native/ReactCommon/react/renderer/runtimescheduler`) + - React-SwiftUtils (from `../react-native/React`) - React-timing (from `../react-native/ReactCommon/react/timing`) - React-utils (from `../react-native/ReactCommon/react/utils`) - ReactAppDependencyProvider (from `build/generated/ios`) @@ -2544,6 +2641,8 @@ EXTERNAL SOURCES: :path: "../react-native/ReactCommon/react/runtime" React-runtimescheduler: :path: "../react-native/ReactCommon/react/renderer/runtimescheduler" + React-SwiftUtils: + :path: "../react-native/React" React-timing: :path: "../react-native/ReactCommon/react/timing" React-utils: @@ -2565,84 +2664,85 @@ SPEC CHECKSUMS: boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6 - FBLazyVector: d3c2dd739a63c1a124e775df075dc7c517a719cb + FBLazyVector: 0cf0058cd9c676f2719c5bc9464e0159880dd0b1 fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 - hermes-engine: fd5605ca4043c8317548d649d0b64e5dafc2a124 - MyNativeView: 9b03b64f5cd9220bf7ef49fcdfc468effe704fa0 - NativeCxxModuleExample: 2897d5f3aee8a02dd201a3dd41fbc94ada1aac5e + hermes-engine: dc2711b32cd2ecdf68b78aa78b2c1da094084d6a + MyNativeView: 0387bccdf96db2946b3e4f44df7370b55da40682 + NativeCxxModuleExample: 7d0b25d0b54a57727669cd7b06279499ced25daf OCMock: 589f2c84dacb1f5aaf6e4cec1f292551fe748e74 - OSSLibraryExample: bf5b5a4238613dae3c536faff58f87528e6191cf + OSSLibraryExample: e829af5c61a90a691f3e51c583d9c1236a12d8d3 RCT-Folly: 846fda9475e61ec7bcbf8a3fe81edfcaeb090669 RCTDeprecation: 3808e36294137f9ee5668f4df2e73dc079cd1dcf - RCTRequired: a00614e2da5344c2cda3d287050b6cee00e21dc6 - RCTTypeSafety: 459a16418c6b413060d35434ba3e83f5b0bd2651 - React: 170a01a19ba2525ab7f11243e2df6b19bf268093 - React-callinvoker: f08f425e4043cd1998a158b6e39a6aed1fd1d718 - React-Core: d35c5cf69898fd026e5cd93a0454b1d42e999d3e - React-CoreModules: 3ce1d43f6cc37f43759ec543ce1c0010080f1de1 - React-cxxreact: 3169b106af8f405e182d131d3a0844201e3252e2 - React-debug: 195df38487d3f48a7af04deddeb4a5c6d4440416 - React-defaultsnativemodule: 8afea5a4bd07addb523bf48489b8a684ea1bdff0 - React-domnativemodule: 8a813559774e65bc800fe489bbb454cd546f21d7 - React-Fabric: e9846203f11ab49be8b1329c76301bbd399ef2ad - React-FabricComponents: 032d6f01f1d6966633418c0fece18f698ddb7897 - React-FabricImage: 264c9ce5241e43e25b94c8de55ac6c3c8a046472 - React-featureflags: 595651ea13c63a9f77f06d9a1973b665b4a28b7e - React-featureflagsnativemodule: 06823479a2ee210cfa0e9c19447c2722a8d995f2 - React-graphics: 1f99b9b5515eac389f0cf9c85b03abc366d6a933 - React-hermes: 745eb45a6d0aae7e890d0aae0def54670bbd103c - React-idlecallbacksnativemodule: 4e65f183318b8a0fbabc481a4eafc0f0d62d1cbf - React-ImageManager: a6833445e17879933378b7c0ba45ee42115c14bc - React-jserrorhandler: bec134a192c50338193544404d45df24fb8a19ca - React-jsi: 4ad77650fb0ca4229569eb2532db7a87e3d12662 - React-jsiexecutor: fa5b80bdbe1ceffc33a892da20fc07b4dfa4df7a - React-jsinspector: 10b5dc4eef2a3d05b80be2114ed676496c5bf59c - React-jsinspectorcdp: 5fb266e5f23d3a2819ba848e9d4d0b6b00f95934 - React-jsinspectornetwork: 1655a81f3fe14789df41e063bd56dd130cc3562a - React-jsinspectortracing: 5b0be488e06958a572e1badfe8509929ae1cc83b - React-jsitooling: 9e563b89f94cf4baf872fe47105d60ae83f4ce4d - React-jsitracing: ce443686f52538d1033ce7db1e7d643e866262f0 - React-logger: 116c3ae5a9906671d157aa00882a5ee75a5a7ebc - React-Mapbuffer: fc937cfa41140d7724c559c3d16c50dd725361c8 - React-microtasksnativemodule: 09899c7389250279bdcc5384f0281bb069979855 - React-NativeModulesApple: d05b718ccd8b68c184e76dbc1efb63385197595b - React-oscompat: 7133e0e945cda067ae36b22502df663d73002864 - React-perflogger: ada3cdf3dfc8b7cd1fabe3c91b672e23981611ab - React-performancetimeline: e7d5849d89ee39557dcd56dfb6e7b0d49003d925 - React-RCTActionSheet: 1bf8cc8086ad1c15da3407dfb7bc9dd94dc7595d - React-RCTAnimation: 263593e66c89bf810604b1ace15dfa382a1ca2df - React-RCTAppDelegate: 3a99437ffa7460f85045de65f9bed6b1c47d5f09 - React-RCTBlob: 7b76230c53fe87d305eeeb250b0aae031bb6cbae - React-RCTFabric: 2fd2ef899c7219fd39fd61c39750510f88a81434 - React-RCTFBReactNativeSpec: 4ed3b463eb26726b04ac65c73797207ecab5634c - React-RCTImage: de404b6b0ebe53976a97e3a0dee819c83e12977b - React-RCTLinking: 06742cfad41c506091403a414370743a4ed75af3 - React-RCTNetwork: b4577eec0092c16d8996e415e4cac7a372d6d362 - React-RCTPushNotification: ea11178d499696516e0ff9ae335edbe99b06f94b - React-RCTRuntime: 925039e78fc530e0421c308ccc607f214f3c7be1 - React-RCTSettings: d3c2dd305ec81f7faf42762ec598d57f07fd43be - React-RCTTest: 2db46eda60bc2228cb67622a580e8e86b00088d9 - React-RCTText: e416825b80c530647040ef91d23ffd35ccc87981 - React-RCTVibration: 1837a27fc16eeffc9509779c3334fde54c012bcc - React-rendererconsistency: 777c894edc43dde01499189917ac54ee76ae6a6a - React-renderercss: a9cb6ba7f49a80dc4b4f7008bae1590d12f27049 - React-rendererdebug: fea8bde927403a198742b2d940a5f1cd8230c0b4 - React-RuntimeApple: 6a0c164a8855edb4987b90da2d4d8601302de72d - React-RuntimeCore: 6dec37113b759b76641bd028bfbbbec8cf923356 - React-runtimeexecutor: a16a24b964e964afe833a652d703e1bb39f10dc9 - React-RuntimeHermes: d4f661204d3061219a63951eb4efed4dcaf3f12f - React-runtimescheduler: ae44fe8b4170a9d59f62e8b7d7b060c179db739d - React-timing: 9d49179631e5e3c759e6e82d4c613c73da80a144 - React-utils: 0944df8d553d66b27f486282c42a84a969fd2f6c - ReactAppDependencyProvider: 68f2d2cefd6c9b9f2865246be2bfe86ebd49238d + RCTRequired: 1317fd762768b4ddf931927017c60a9cd04958cc + RCTTypeSafety: 4f5487ed593e22cd9c47dbb8ccb4cf90b6e3be5a + React: a25b8e9bb4adb8eafcec66f6af4f1e09daf95875 + React-callinvoker: 619bf3d61c08136b9ccd4930422e3d6af4d55798 + React-Core: 9e0c9dc869ed88e37ae5148bcec1c8e8f51ce597 + React-CoreModules: 9c7f37a45bd08ea860bcf65e39a766f62f4fcf43 + React-cxxreact: 5e062ef2719bfc7a8b75e9f7ee0aab741a5ffb34 + React-debug: 518e97a2ec248527f778ec0aa5681bbd37751d6a + React-defaultsnativemodule: 357d2a9159236179fd422adf7dc64681223e77b5 + React-domnativemodule: 737dd166c2b9317d49e3fd29931c710d9b2e5764 + React-Fabric: e312d1b607f860dddbb9fbea0ec5f8ff905b15a6 + React-FabricComponents: 2c9b04e85f211e4fe6981f62aaaf25fd9cb95d0b + React-FabricImage: 66defec71ebce1feccb6fa607907ecf8b2adffd9 + React-featureflags: 611b755f2bf62a70669f8c0be028609e145c0352 + React-featureflagsnativemodule: bb9525890390038fbc3d5dc235c06fc371b03776 + React-graphics: 1d9df203595755d7b01a25b9bedb68ee66f16c3a + React-hermes: 2434de4efe0a109d04d1d77d7bbb5d4455764610 + React-idlecallbacksnativemodule: b84714da718400a8e6263a0ccf04c12b45bd4a1b + React-ImageManager: f6b5559e7cc4fa0e47570a2bd834bec0f8fb5e40 + React-jserrorhandler: 2c39c0e270cd53fcb6b82022c22bc4330d910571 + React-jsi: 65ebaaa3f5d95ea09be2c984dc9b28baec3991f6 + React-jsiexecutor: 92a044ee15517c4e3f3b17c4a3b87c303bf54ca5 + React-jsinspector: 90a757bb49d743d38a084216a414aa14afccca79 + React-jsinspectorcdp: 8c7315277e03506c751f71b28a93d77f280c4db8 + React-jsinspectornetwork: 0af93461e46652624718562a0460c860964e8125 + React-jsinspectortracing: 124da1283e95500a01c362bc6fde5a27304ef738 + React-jsitooling: d0e8061957f49e8beb1d48a18a46c28318b81a46 + React-jsitracing: a9c353a9e7de58693e62d847171d417d2d1c4c79 + React-logger: d8e5b2815cd33c8c9b6d91579f67ff45cdeacdf9 + React-Mapbuffer: 2b537fd2cff1ac76f17b467fc8dc0c601e9985ff + React-microtasksnativemodule: b8b8ddb0e206949c17f758992876dd4633484610 + React-NativeModulesApple: a9625402f73f838379525a24c73f2bb182c0730f + React-oscompat: 2ea3f01154abf313ece8aea577e9aadd65000734 + React-perflogger: 673f441b54e61423ce66c0b05c2c9e33f3fe7602 + React-performancetimeline: 277891ec278ce8c38a10b808d0a81b9a7f4c06ca + React-RCTActionSheet: 9281d6a4ee789fb7b7506e585fa755d75684f377 + React-RCTAnimation: 05f84e88ad41276bf2fe526c515972ccb263a531 + React-RCTAppDelegate: 1c2137fb2970f327f2baed9262511167bec8b1d3 + React-RCTBlob: cdfa34dcc362963442c7230921fbfa9e257a441d + React-RCTFabric: 4da2747041884dbb220922f53223bcca678b62eb + React-RCTFBReactNativeSpec: 3dc3d16c6ddc51b3fdfa745d09c27f9dc0852f61 + React-RCTImage: cd69d78313a38184609cadd8dd99dfba4f5390a5 + React-RCTLinking: e320d43e37c836a5436c22cfebaa6cfcdac34594 + React-RCTNetwork: 770cf6d39737704033d671a1de4ff5e0070c1701 + React-RCTPushNotification: 52d6d65878c6c9f8b5c02ca27376f717bf20ed67 + React-RCTRuntime: 8f926894cbd5215adcb71cef77424b1ba14fad07 + React-RCTSettings: cc340907f6455819ce97f23cd47e928f1c7ea242 + React-RCTTest: cb59b63b1de252046536b3c4997c5860e67de2c3 + React-RCTText: 5830be3e116c9192f378c7177511cf3b8a0f1ce0 + React-RCTVibration: bee82a3e5e791de06a167f6e31717d1a9a3deb28 + React-rendererconsistency: b3211f5e0df77800f7f567093a1776ebf7d7782f + React-renderercss: a7f0507f6538d247e795b73cf303d9a4ab651b8b + React-rendererdebug: f802be68a9ac79871e707c3b880fe9793bea0a07 + React-RuntimeApple: 00841a870266bbdf7d599b2e16c08ae9a4eb6884 + React-RuntimeCore: 6be1394491a01ae1847153bc7ba99b74e941bb93 + React-runtimeexecutor: ab8bc1355593cf7d098ada5897fe519498261499 + React-RuntimeHermes: e8d36054cbbee262a090299e07a2864252f82a8f + React-runtimescheduler: d9e2f04861bafcf926a5d14ac8a13aa8ec575d27 + React-SwiftUtils: df219b9358aafb31e7e406f16febd60ba686f7b1 + React-timing: cad9cd0a8c16e89538f394ad4fce0e1e9eb71010 + React-utils: 7e27e47e664ed63491cb21a76c97ba48c8deb590 + ReactAppDependencyProvider: 09091a6d195a140add1ac69112531895b16d8c41 ReactCodegen: 8fc4c8b6562a59409b5650e67f78719093d093bf - ReactCommon: a53973ab35d399560ace331ec9e2b26db0592cec - ReactCommon-Samples: dcc128cbf51ac38d2578791750d0a046d1b8a5e9 - ScreenshotManager: 6ac0b11c7bbd5cf1abd9448fb3b856fe6fd65ff7 + ReactCommon: a8b6a61fb505e0ca9abf27d1f733720adcc6b199 + ReactCommon-Samples: 29bb01444a2dfa0d8f593bdf88b8f788e4265aab + ScreenshotManager: cd9e43b0c749ba38101effc22be58f4a69440d5f SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 - Yoga: c4e80f1c2235fa6236d71a49e5bb2ee74d987921 + Yoga: 800c0181de7a68d38ee64fe1a7b327de1c7fe61c -PODFILE CHECKSUM: 8591f96a513620a2a83a0b9a125ad3fa32ea1369 +PODFILE CHECKSUM: b0abc972ac4c3a335250548a31500196b1a2c163 COCOAPODS: 1.15.2 diff --git a/packages/rn-tester/RNTesterPods.xcodeproj/project.pbxproj b/packages/rn-tester/RNTesterPods.xcodeproj/project.pbxproj index 4ceae9d500a18a..7394678f293afb 100644 --- a/packages/rn-tester/RNTesterPods.xcodeproj/project.pbxproj +++ b/packages/rn-tester/RNTesterPods.xcodeproj/project.pbxproj @@ -10,15 +10,15 @@ 0EA618032BE537D3001875EF /* RNTesterBundle.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 0EA618022BE537D3001875EF /* RNTesterBundle.bundle */; }; 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 2DDEF0101F84BF7B00DBDF73 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2DDEF00F1F84BF7B00DBDF73 /* Images.xcassets */; }; - 3584606AB7F8ADF7A07A3E14 /* libPods-RNTesterIntegrationTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DF9F45393190A3F008764D08 /* libPods-RNTesterIntegrationTests.a */; }; 383889DA23A7398900D06C3E /* RCTConvert_UIColorTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 383889D923A7398900D06C3E /* RCTConvert_UIColorTests.m */; }; 3D2AFAF51D646CF80089D1A3 /* legacy_image@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3D2AFAF41D646CF80089D1A3 /* legacy_image@2x.png */; }; + 3F4D148C63BBF774A25488A6 /* libPods-RNTesterIntegrationTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 93A243F0D4D5C54911E811C4 /* libPods-RNTesterIntegrationTests.a */; }; + 46C0FD761B0B9B1E8662B759 /* libPods-RNTesterUnitTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B312B0EEE90BA411618B015 /* libPods-RNTesterUnitTests.a */; }; 5C60EB1C226440DB0018C04F /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5C60EB1B226440DB0018C04F /* AppDelegate.mm */; }; 8145AE06241172D900A3F8DA /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8145AE05241172D900A3F8DA /* LaunchScreen.storyboard */; }; 832F45BB2A8A6E1F0097B4E6 /* SwiftTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 832F45BA2A8A6E1F0097B4E6 /* SwiftTest.swift */; }; - A36E4394472D388C2F6BBABA /* libPods-RNTester.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 48A747D61749335D863001E9 /* libPods-RNTester.a */; }; A975CA6C2C05EADF0043F72A /* RCTNetworkTaskTests.m in Sources */ = {isa = PBXBuildFile; fileRef = A975CA6B2C05EADE0043F72A /* RCTNetworkTaskTests.m */; }; - BF2C34488C1E5FF62D331DD4 /* libPods-RNTesterUnitTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E89C730A8F64BC35672D4D81 /* libPods-RNTesterUnitTests.a */; }; + C175B6D9ED9336FB66637943 /* libPods-RNTester.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C706D402EE4AF9BE838CBA9 /* libPods-RNTester.a */; }; CD10C7A5290BD4EB0033E1ED /* RCTEventEmitterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = CD10C7A4290BD4EB0033E1ED /* RCTEventEmitterTests.m */; }; E62F11832A5C6580000BF1C8 /* FlexibleSizeExampleView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 27F441E81BEBE5030039B79C /* FlexibleSizeExampleView.mm */; }; E62F11842A5C6584000BF1C8 /* UpdatePropertiesExampleView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 272E6B3C1BEA849E001FCF37 /* UpdatePropertiesExampleView.mm */; }; @@ -84,27 +84,28 @@ 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = RNTester/AppDelegate.h; sourceTree = ""; }; 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = RNTester/Info.plist; sourceTree = ""; }; 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = RNTester/main.m; sourceTree = ""; }; + 20B55D3C33B683598D2A4424 /* Pods-RNTesterIntegrationTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RNTesterIntegrationTests.debug.xcconfig"; path = "Target Support Files/Pods-RNTesterIntegrationTests/Pods-RNTesterIntegrationTests.debug.xcconfig"; sourceTree = ""; }; 272E6B3B1BEA849E001FCF37 /* UpdatePropertiesExampleView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = UpdatePropertiesExampleView.h; path = RNTester/NativeExampleViews/UpdatePropertiesExampleView.h; sourceTree = ""; }; 272E6B3C1BEA849E001FCF37 /* UpdatePropertiesExampleView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = UpdatePropertiesExampleView.mm; path = RNTester/NativeExampleViews/UpdatePropertiesExampleView.mm; sourceTree = ""; }; - 2734C5E31C1D7A09BF872585 /* Pods-RNTester.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RNTester.debug.xcconfig"; path = "Target Support Files/Pods-RNTester/Pods-RNTester.debug.xcconfig"; sourceTree = ""; }; 27F441E81BEBE5030039B79C /* FlexibleSizeExampleView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = FlexibleSizeExampleView.mm; path = RNTester/NativeExampleViews/FlexibleSizeExampleView.mm; sourceTree = ""; }; 27F441EA1BEBE5030039B79C /* FlexibleSizeExampleView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FlexibleSizeExampleView.h; path = RNTester/NativeExampleViews/FlexibleSizeExampleView.h; sourceTree = ""; }; + 2B312B0EEE90BA411618B015 /* libPods-RNTesterUnitTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RNTesterUnitTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 2DDEF00F1F84BF7B00DBDF73 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = RNTester/Images.xcassets; sourceTree = ""; }; - 359825B9A5AE4A3F4AA612DD /* Pods-RNTesterUnitTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RNTesterUnitTests.debug.xcconfig"; path = "Target Support Files/Pods-RNTesterUnitTests/Pods-RNTesterUnitTests.debug.xcconfig"; sourceTree = ""; }; 383889D923A7398900D06C3E /* RCTConvert_UIColorTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTConvert_UIColorTests.m; sourceTree = ""; }; 3D2AFAF41D646CF80089D1A3 /* legacy_image@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "legacy_image@2x.png"; path = "RNTester/legacy_image@2x.png"; sourceTree = ""; }; - 48A747D61749335D863001E9 /* libPods-RNTester.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RNTester.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 3FF60722627F93D8F62FA1E3 /* Pods-RNTesterUnitTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RNTesterUnitTests.release.xcconfig"; path = "Target Support Files/Pods-RNTesterUnitTests/Pods-RNTesterUnitTests.release.xcconfig"; sourceTree = ""; }; + 4C706D402EE4AF9BE838CBA9 /* libPods-RNTester.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RNTester.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 51BC9297B6C3163C14532020 /* Pods-RNTester.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RNTester.release.xcconfig"; path = "Target Support Files/Pods-RNTester/Pods-RNTester.release.xcconfig"; sourceTree = ""; }; 5C60EB1B226440DB0018C04F /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = RNTester/AppDelegate.mm; sourceTree = ""; }; - 66C3087F2D5BF762FE9E6422 /* Pods-RNTesterIntegrationTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RNTesterIntegrationTests.debug.xcconfig"; path = "Target Support Files/Pods-RNTesterIntegrationTests/Pods-RNTesterIntegrationTests.debug.xcconfig"; sourceTree = ""; }; - 7CDA7A212644C6BB8C0D00D8 /* Pods-RNTesterIntegrationTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RNTesterIntegrationTests.release.xcconfig"; path = "Target Support Files/Pods-RNTesterIntegrationTests/Pods-RNTesterIntegrationTests.release.xcconfig"; sourceTree = ""; }; 8145AE05241172D900A3F8DA /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = RNTester/LaunchScreen.storyboard; sourceTree = ""; }; 832F45BA2A8A6E1F0097B4E6 /* SwiftTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = SwiftTest.swift; path = RNTester/SwiftTest.swift; sourceTree = ""; }; - 8BFB9C61D7BDE894E24BF24F /* Pods-RNTesterUnitTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RNTesterUnitTests.release.xcconfig"; path = "Target Support Files/Pods-RNTesterUnitTests/Pods-RNTesterUnitTests.release.xcconfig"; sourceTree = ""; }; - 9B8542B8C590B51BD0588751 /* Pods-RNTester.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RNTester.release.xcconfig"; path = "Target Support Files/Pods-RNTester/Pods-RNTester.release.xcconfig"; sourceTree = ""; }; + 93A243F0D4D5C54911E811C4 /* libPods-RNTesterIntegrationTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RNTesterIntegrationTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; A975CA6B2C05EADE0043F72A /* RCTNetworkTaskTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RCTNetworkTaskTests.m; sourceTree = ""; }; AC474BFB29BBD4A1002BDAED /* RNTester.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; name = RNTester.xctestplan; path = RNTester/RNTester.xctestplan; sourceTree = ""; }; + B0E70A8A05E03E868F8703FE /* Pods-RNTesterIntegrationTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RNTesterIntegrationTests.release.xcconfig"; path = "Target Support Files/Pods-RNTesterIntegrationTests/Pods-RNTesterIntegrationTests.release.xcconfig"; sourceTree = ""; }; + CA59C9994B1822826D8983F0 /* Pods-RNTester.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RNTester.debug.xcconfig"; path = "Target Support Files/Pods-RNTester/Pods-RNTester.debug.xcconfig"; sourceTree = ""; }; CD10C7A4290BD4EB0033E1ED /* RCTEventEmitterTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTEventEmitterTests.m; sourceTree = ""; }; - DF9F45393190A3F008764D08 /* libPods-RNTesterIntegrationTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RNTesterIntegrationTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + D134EB89DD98253FCF879A47 /* Pods-RNTesterUnitTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RNTesterUnitTests.debug.xcconfig"; path = "Target Support Files/Pods-RNTesterUnitTests/Pods-RNTesterUnitTests.debug.xcconfig"; sourceTree = ""; }; E771AEEA22B44E3100EA1189 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = RNTester/Info.plist; sourceTree = ""; }; E7C1241922BEC44B00DA25C0 /* RNTesterIntegrationTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RNTesterIntegrationTests.m; sourceTree = ""; }; E7DB209F22B2BA84005AC45F /* RNTesterUnitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RNTesterUnitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -166,7 +167,6 @@ E7DB215E22B2F3EC005AC45F /* RCTLoggingTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTLoggingTests.m; sourceTree = ""; }; E7DB215F22B2F3EC005AC45F /* RCTUIManagerScenarioTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTUIManagerScenarioTests.m; sourceTree = ""; }; E7DB218B22B41FCD005AC45F /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = XCTest.framework; sourceTree = DEVELOPER_DIR; }; - E89C730A8F64BC35672D4D81 /* libPods-RNTesterUnitTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RNTesterUnitTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; F0D621C22BBB9E38005960AC /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = ""; }; /* End PBXFileReference section */ @@ -175,7 +175,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A36E4394472D388C2F6BBABA /* libPods-RNTester.a in Frameworks */, + C175B6D9ED9336FB66637943 /* libPods-RNTester.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -184,7 +184,7 @@ buildActionMask = 2147483647; files = ( E7DB213122B2C649005AC45F /* JavaScriptCore.framework in Frameworks */, - BF2C34488C1E5FF62D331DD4 /* libPods-RNTesterUnitTests.a in Frameworks */, + 46C0FD761B0B9B1E8662B759 /* libPods-RNTesterUnitTests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -194,7 +194,7 @@ files = ( E7DB218C22B41FCD005AC45F /* XCTest.framework in Frameworks */, E7DB216722B2F69F005AC45F /* JavaScriptCore.framework in Frameworks */, - 3584606AB7F8ADF7A07A3E14 /* libPods-RNTesterIntegrationTests.a in Frameworks */, + 3F4D148C63BBF774A25488A6 /* libPods-RNTesterIntegrationTests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -265,9 +265,9 @@ E7DB211822B2BD53005AC45F /* libReact-RCTText.a */, E7DB211A22B2BD53005AC45F /* libReact-RCTVibration.a */, E7DB212222B2BD53005AC45F /* libyoga.a */, - 48A747D61749335D863001E9 /* libPods-RNTester.a */, - DF9F45393190A3F008764D08 /* libPods-RNTesterIntegrationTests.a */, - E89C730A8F64BC35672D4D81 /* libPods-RNTesterUnitTests.a */, + 4C706D402EE4AF9BE838CBA9 /* libPods-RNTester.a */, + 93A243F0D4D5C54911E811C4 /* libPods-RNTesterIntegrationTests.a */, + 2B312B0EEE90BA411618B015 /* libPods-RNTesterUnitTests.a */, ); name = Frameworks; sourceTree = ""; @@ -308,12 +308,12 @@ E23BD6487B06BD71F1A86914 /* Pods */ = { isa = PBXGroup; children = ( - 2734C5E31C1D7A09BF872585 /* Pods-RNTester.debug.xcconfig */, - 9B8542B8C590B51BD0588751 /* Pods-RNTester.release.xcconfig */, - 66C3087F2D5BF762FE9E6422 /* Pods-RNTesterIntegrationTests.debug.xcconfig */, - 7CDA7A212644C6BB8C0D00D8 /* Pods-RNTesterIntegrationTests.release.xcconfig */, - 359825B9A5AE4A3F4AA612DD /* Pods-RNTesterUnitTests.debug.xcconfig */, - 8BFB9C61D7BDE894E24BF24F /* Pods-RNTesterUnitTests.release.xcconfig */, + CA59C9994B1822826D8983F0 /* Pods-RNTester.debug.xcconfig */, + 51BC9297B6C3163C14532020 /* Pods-RNTester.release.xcconfig */, + 20B55D3C33B683598D2A4424 /* Pods-RNTesterIntegrationTests.debug.xcconfig */, + B0E70A8A05E03E868F8703FE /* Pods-RNTesterIntegrationTests.release.xcconfig */, + D134EB89DD98253FCF879A47 /* Pods-RNTesterUnitTests.debug.xcconfig */, + 3FF60722627F93D8F62FA1E3 /* Pods-RNTesterUnitTests.release.xcconfig */, ); path = Pods; sourceTree = ""; @@ -378,14 +378,14 @@ isa = PBXNativeTarget; buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "RNTester" */; buildPhases = ( - ABDE2A52ACD1B95E14790B5E /* [CP] Check Pods Manifest.lock */, + F28F13DD10D40D98C0BB7BE8 /* [CP] Check Pods Manifest.lock */, 13B07F871A680F5B00A75B9A /* Sources */, 13B07F8C1A680F5B00A75B9A /* Frameworks */, 13B07F8E1A680F5B00A75B9A /* Resources */, 68CD48B71D2BCB2C007E06A9 /* Build JS Bundle */, 79E8BE2B119D4C5CCD2F04B3 /* [RN] Copy Hermes Framework */, - 02B6FEF7E86B613B42F31284 /* [CP] Embed Pods Frameworks */, - 5625E703156DD564DE9175B0 /* [CP] Copy Pods Resources */, + 17FE348EDF12252D972FFC2F /* [CP] Embed Pods Frameworks */, + DFEE284B22AD5E88BBF1026A /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -400,12 +400,12 @@ isa = PBXNativeTarget; buildConfigurationList = E7DB20A622B2BA84005AC45F /* Build configuration list for PBXNativeTarget "RNTesterUnitTests" */; buildPhases = ( - 4F76596957F7356516B534CE /* [CP] Check Pods Manifest.lock */, + B8A88048D4E22316B9E74600 /* [CP] Check Pods Manifest.lock */, E7DB209B22B2BA84005AC45F /* Sources */, E7DB209C22B2BA84005AC45F /* Frameworks */, E7DB209D22B2BA84005AC45F /* Resources */, - A904658C20543C2EDC217D15 /* [CP] Embed Pods Frameworks */, - 01934C30687B8C926E4F59CD /* [CP] Copy Pods Resources */, + FD96BE05C0CECDF7D53C7CC9 /* [CP] Embed Pods Frameworks */, + 5ECFFC3767E171859C7610A6 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -421,12 +421,12 @@ isa = PBXNativeTarget; buildConfigurationList = E7DB215A22B2F332005AC45F /* Build configuration list for PBXNativeTarget "RNTesterIntegrationTests" */; buildPhases = ( - B7EB74515CDE78D98087DD53 /* [CP] Check Pods Manifest.lock */, + 2978D2EE0533828E5DB62B8F /* [CP] Check Pods Manifest.lock */, E7DB214F22B2F332005AC45F /* Sources */, E7DB215022B2F332005AC45F /* Frameworks */, E7DB215122B2F332005AC45F /* Resources */, - 4F27ACC9DB890B37D6C267F1 /* [CP] Embed Pods Frameworks */, - E446637427ECD101CAACE52B /* [CP] Copy Pods Resources */, + A27E74B2EEF82EC119BCB5A2 /* [CP] Embed Pods Frameworks */, + 48BF6B9FD13CB20F2C71C2A2 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -510,24 +510,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 01934C30687B8C926E4F59CD /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-RNTesterUnitTests/Pods-RNTesterUnitTests-resources-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-RNTesterUnitTests/Pods-RNTesterUnitTests-resources-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-RNTesterUnitTests/Pods-RNTesterUnitTests-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; - 02B6FEF7E86B613B42F31284 /* [CP] Embed Pods Frameworks */ = { + 17FE348EDF12252D972FFC2F /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -544,60 +527,60 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-RNTester/Pods-RNTester-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 4F27ACC9DB890B37D6C267F1 /* [CP] Embed Pods Frameworks */ = { + 2978D2EE0533828E5DB62B8F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-RNTesterIntegrationTests/Pods-RNTesterIntegrationTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-RNTesterIntegrationTests/Pods-RNTesterIntegrationTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RNTesterIntegrationTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-RNTesterIntegrationTests/Pods-RNTesterIntegrationTests-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 4F76596957F7356516B534CE /* [CP] Check Pods Manifest.lock */ = { + 48BF6B9FD13CB20F2C71C2A2 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-RNTesterIntegrationTests/Pods-RNTesterIntegrationTests-resources-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RNTesterUnitTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-RNTesterIntegrationTests/Pods-RNTesterIntegrationTests-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-RNTesterIntegrationTests/Pods-RNTesterIntegrationTests-resources.sh\"\n"; showEnvVarsInLog = 0; }; - 5625E703156DD564DE9175B0 /* [CP] Copy Pods Resources */ = { + 5ECFFC3767E171859C7610A6 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-RNTester/Pods-RNTester-resources-${CONFIGURATION}-input-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-RNTesterUnitTests/Pods-RNTesterUnitTests-resources-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-RNTester/Pods-RNTester-resources-${CONFIGURATION}-output-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-RNTesterUnitTests/Pods-RNTesterUnitTests-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-RNTester/Pods-RNTester-resources.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-RNTesterUnitTests/Pods-RNTesterUnitTests-resources.sh\"\n"; showEnvVarsInLog = 0; }; 68CD48B71D2BCB2C007E06A9 /* Build JS Bundle */ = { @@ -634,24 +617,24 @@ shellPath = /bin/sh; shellScript = ". ../react-native/sdks/hermes-engine/utils/copy-hermes-xcode.sh\n"; }; - A904658C20543C2EDC217D15 /* [CP] Embed Pods Frameworks */ = { + A27E74B2EEF82EC119BCB5A2 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-RNTesterUnitTests/Pods-RNTesterUnitTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-RNTesterIntegrationTests/Pods-RNTesterIntegrationTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-RNTesterUnitTests/Pods-RNTesterUnitTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-RNTesterIntegrationTests/Pods-RNTesterIntegrationTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-RNTesterUnitTests/Pods-RNTesterUnitTests-frameworks.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-RNTesterIntegrationTests/Pods-RNTesterIntegrationTests-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - ABDE2A52ACD1B95E14790B5E /* [CP] Check Pods Manifest.lock */ = { + B8A88048D4E22316B9E74600 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -666,14 +649,31 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RNTester-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RNTesterUnitTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - B7EB74515CDE78D98087DD53 /* [CP] Check Pods Manifest.lock */ = { + DFEE284B22AD5E88BBF1026A /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-RNTester/Pods-RNTester-resources-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-RNTester/Pods-RNTester-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-RNTester/Pods-RNTester-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + F28F13DD10D40D98C0BB7BE8 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -688,28 +688,28 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RNTesterIntegrationTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RNTester-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E446637427ECD101CAACE52B /* [CP] Copy Pods Resources */ = { + FD96BE05C0CECDF7D53C7CC9 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-RNTesterIntegrationTests/Pods-RNTesterIntegrationTests-resources-${CONFIGURATION}-input-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-RNTesterUnitTests/Pods-RNTesterUnitTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Copy Pods Resources"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-RNTesterIntegrationTests/Pods-RNTesterIntegrationTests-resources-${CONFIGURATION}-output-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-RNTesterUnitTests/Pods-RNTesterUnitTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-RNTesterIntegrationTests/Pods-RNTesterIntegrationTests-resources.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-RNTesterUnitTests/Pods-RNTesterUnitTests-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -794,7 +794,7 @@ /* Begin XCBuildConfiguration section */ 13B07F941A680F5B00A75B9A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2734C5E31C1D7A09BF872585 /* Pods-RNTester.debug.xcconfig */; + baseConfigurationReference = CA59C9994B1822826D8983F0 /* Pods-RNTester.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; @@ -832,7 +832,7 @@ }; 13B07F951A680F5B00A75B9A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9B8542B8C590B51BD0588751 /* Pods-RNTester.release.xcconfig */; + baseConfigurationReference = 51BC9297B6C3163C14532020 /* Pods-RNTester.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; @@ -1063,7 +1063,7 @@ }; E7DB20A722B2BA84005AC45F /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 359825B9A5AE4A3F4AA612DD /* Pods-RNTesterUnitTests.debug.xcconfig */; + baseConfigurationReference = D134EB89DD98253FCF879A47 /* Pods-RNTesterUnitTests.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CLANG_ANALYZER_NONNULL = YES; @@ -1101,7 +1101,7 @@ }; E7DB20A822B2BA84005AC45F /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8BFB9C61D7BDE894E24BF24F /* Pods-RNTesterUnitTests.release.xcconfig */; + baseConfigurationReference = 3FF60722627F93D8F62FA1E3 /* Pods-RNTesterUnitTests.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CLANG_ANALYZER_NONNULL = YES; @@ -1139,7 +1139,7 @@ }; E7DB215B22B2F332005AC45F /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 66C3087F2D5BF762FE9E6422 /* Pods-RNTesterIntegrationTests.debug.xcconfig */; + baseConfigurationReference = 20B55D3C33B683598D2A4424 /* Pods-RNTesterIntegrationTests.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; BUNDLE_LOADER = "$(TEST_HOST)"; @@ -1178,7 +1178,7 @@ }; E7DB215C22B2F332005AC45F /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7CDA7A212644C6BB8C0D00D8 /* Pods-RNTesterIntegrationTests.release.xcconfig */; + baseConfigurationReference = B0E70A8A05E03E868F8703FE /* Pods-RNTesterIntegrationTests.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; BUNDLE_LOADER = "$(TEST_HOST)"; diff --git a/packages/rn-tester/js/examples/Filter/FilterExample.js b/packages/rn-tester/js/examples/Filter/FilterExample.js index 987e1da56232be..72a5550cff6d2f 100644 --- a/packages/rn-tester/js/examples/Filter/FilterExample.js +++ b/packages/rn-tester/js/examples/Filter/FilterExample.js @@ -189,7 +189,6 @@ exports.examples = [ title: 'Blur', description: 'blur(10)', name: 'blur', - platform: 'android', render(): React.Node { return ( Date: Wed, 9 Jul 2025 07:20:18 +0530 Subject: [PATCH 02/12] nit --- .../react-native/React/SwiftUtils/RCTSwiftUIContainerView.swift | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerView.swift b/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerView.swift index 14353117b7d9df..dd8bbfceea92b0 100644 --- a/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerView.swift +++ b/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerView.swift @@ -18,11 +18,9 @@ import UIKit guard let view = hostingController?.view else { return } - view.backgroundColor = .clear; } - @objc public func updateContentView(_ view: UIView) { containerViewModel.contentView = view } From 3191ee83e6b7d2df3a8973c948ed84125cf8cf80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nishan=20=28o=5E=E2=96=BD=5Eo=29?= Date: Wed, 9 Jul 2025 07:20:59 +0530 Subject: [PATCH 03/12] nit --- .../React/SwiftUtils/RCTSwiftUIContainerViewWrapper.m | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerViewWrapper.m b/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerViewWrapper.m index 898d090ef1738c..e358bf3bea6283 100644 --- a/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerViewWrapper.m +++ b/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerViewWrapper.m @@ -21,7 +21,6 @@ - (instancetype)init { return self; } - - (UIView *)contentView { return [self.swiftContainerView contentView]; } From 870b49e3641a4a26457ac1e691236505f4e2f894 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nishan=20=28o=5E=E2=96=BD=5Eo=29?= Date: Wed, 30 Jul 2025 11:44:42 +0530 Subject: [PATCH 04/12] remove grayscale filter --- .../Mounting/ComponentViews/View/RCTViewComponentView.mm | 2 -- .../React/SwiftUtils/RCTSwiftUIContainerView.swift | 9 --------- .../React/SwiftUtils/RCTSwiftUIContainerViewWrapper.h | 1 - .../React/SwiftUtils/RCTSwiftUIContainerViewWrapper.m | 4 ---- 4 files changed, 16 deletions(-) diff --git a/packages/react-native/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm b/packages/react-native/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm index 9e3c1d047c704d..ecc253ed200d7b 100644 --- a/packages/react-native/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +++ b/packages/react-native/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm @@ -51,8 +51,6 @@ @implementation RCTViewComponentView { UIView *_containerView; BOOL _useCustomContainerView; NSMutableSet *_accessibilityOrderNativeIDs; - NSMutableArray *_accessibilityElements; - RCTViewAccessibilityElement *_axElementDescribingSelf; RCTSwiftUIContainerViewWrapper* _swiftUIWrapper; } diff --git a/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerView.swift b/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerView.swift index dd8bbfceea92b0..2334f6fe526250 100644 --- a/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerView.swift +++ b/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerView.swift @@ -38,20 +38,13 @@ import UIKit containerViewModel.blurRadius = blurRadius } - @objc public func updateGrayScale(_ amount: NSNumber) { - let amount = CGFloat(amount.floatValue) - containerViewModel.grayScale = amount; - } - @objc public func resetStyles() { containerViewModel.blurRadius = 0 - containerViewModel.grayScale = 0 } } class ContainerViewModel: ObservableObject { @Published var blurRadius: CGFloat = 0 - @Published var grayScale: CGFloat = 0 @Published var contentView: UIView? } @@ -62,8 +55,6 @@ struct SwiftUIContainerView: View { if let contentView = viewModel.contentView { UIViewWrapper(view: contentView) .blur(radius: viewModel.blurRadius) - .grayscale(viewModel.grayScale) - } } } diff --git a/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerViewWrapper.h b/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerViewWrapper.h index 74cc6a9ccc09b5..ffcf4504cc329f 100644 --- a/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerViewWrapper.h +++ b/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerViewWrapper.h @@ -14,7 +14,6 @@ NS_ASSUME_NONNULL_BEGIN - (UIView *)contentView; - (void)updateBlurRadius:(NSNumber *)radius; -- (void)updateGrayScale:(NSNumber *)amount; - (void)updateContentView:(UIView *)view; - (UIView *)hostingView; - (void)resetStyles; diff --git a/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerViewWrapper.m b/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerViewWrapper.m index e358bf3bea6283..ea051129e61209 100644 --- a/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerViewWrapper.m +++ b/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerViewWrapper.m @@ -41,8 +41,4 @@ - (void)updateBlurRadius:(NSNumber *)radius { [self.swiftContainerView updateBlurRadius:radius]; } -- (void)updateGrayScale:(NSNumber *)amount { - [self.swiftContainerView updateGrayScale:amount]; -} - @end From 1172ad0edfbdc114bc4c77222fee20aa928a6c1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nishan=20=28o=5E=E2=96=BD=5Eo=29?= Date: Wed, 30 Jul 2025 15:37:01 +0530 Subject: [PATCH 05/12] add blur with box shadow example --- .../View/RCTViewComponentView.mm | 10 +-- .../SwiftUtils/RCTSwiftUIContainerView.swift | 5 ++ .../RCTSwiftUIContainerViewWrapper.h | 1 + .../RCTSwiftUIContainerViewWrapper.m | 4 ++ .../components/view/ViewShadowNode.cpp | 2 +- .../js/examples/Filter/FilterExample.js | 65 ++++++++++++++++++- 6 files changed, 78 insertions(+), 9 deletions(-) diff --git a/packages/react-native/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm b/packages/react-native/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm index ecc253ed200d7b..2d224b4862384a 100644 --- a/packages/react-native/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +++ b/packages/react-native/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm @@ -580,10 +580,7 @@ - (void)updateLayoutMetrics:(const LayoutMetrics &)layoutMetrics } if (_swiftUIWrapper) { - _swiftUIWrapper.hostingView.frame = self.bounds; - if (_swiftUIWrapper.contentView) { - _swiftUIWrapper.contentView.frame = self.bounds; - } + [_swiftUIWrapper updateLayoutWithBounds:self.bounds]; } } @@ -809,9 +806,7 @@ - (UIView *)childContainerView if (self.styleNeedsSwiftUIContainer) { if (!_swiftUIWrapper) { _swiftUIWrapper = [RCTSwiftUIContainerViewWrapper new]; - _swiftUIWrapper.hostingView.frame = CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height); - UIView *swiftUIContentView = - [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height)]; + UIView *swiftUIContentView = [[UIView alloc] init]; for (UIView *subview in self.subviews) { [swiftUIContentView addSubview:subview]; } @@ -820,6 +815,7 @@ - (UIView *)childContainerView swiftUIContentView.layer.mask = self.layer.mask; self.layer.mask = nil; [_swiftUIWrapper updateContentView:swiftUIContentView]; + [_swiftUIWrapper updateLayoutWithBounds:self.bounds]; [self addSubview:_swiftUIWrapper.hostingView]; [self transferVisualPropertiesFromView:self toView:swiftUIContentView]; diff --git a/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerView.swift b/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerView.swift index 2334f6fe526250..905e6597f71904 100644 --- a/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerView.swift +++ b/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerView.swift @@ -38,6 +38,11 @@ import UIKit containerViewModel.blurRadius = blurRadius } + @objc public func updateLayout(withBounds bounds: CGRect) { + hostingController?.view.frame = bounds + containerViewModel.contentView?.frame = bounds + } + @objc public func resetStyles() { containerViewModel.blurRadius = 0 } diff --git a/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerViewWrapper.h b/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerViewWrapper.h index ffcf4504cc329f..37d00a65f594b1 100644 --- a/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerViewWrapper.h +++ b/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerViewWrapper.h @@ -17,6 +17,7 @@ NS_ASSUME_NONNULL_BEGIN - (void)updateContentView:(UIView *)view; - (UIView *)hostingView; - (void)resetStyles; +- (void)updateLayoutWithBounds:(CGRect)bounds; @end diff --git a/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerViewWrapper.m b/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerViewWrapper.m index ea051129e61209..0db7ecd21fbcaf 100644 --- a/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerViewWrapper.m +++ b/packages/react-native/React/SwiftUtils/RCTSwiftUIContainerViewWrapper.m @@ -41,4 +41,8 @@ - (void)updateBlurRadius:(NSNumber *)radius { [self.swiftContainerView updateBlurRadius:radius]; } +- (void)updateLayoutWithBounds:(CGRect)bounds { + [self.swiftContainerView updateLayoutWithBounds:bounds]; +} + @end diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/ViewShadowNode.cpp b/packages/react-native/ReactCommon/react/renderer/components/view/ViewShadowNode.cpp index 5206268014ae5a..19e6f2106e005b 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/ViewShadowNode.cpp +++ b/packages/react-native/ReactCommon/react/renderer/components/view/ViewShadowNode.cpp @@ -63,7 +63,7 @@ void ViewShadowNode::initialize() noexcept { viewProps.mixBlendMode != BlendMode::Normal || viewProps.isolation == Isolation::Isolate || HostPlatformViewTraitsInitializer::formsStackingContext(viewProps) || - !viewProps.accessibilityOrder.empty() || !viewProps.filter.empty(); + !viewProps.accessibilityOrder.empty(); bool formsView = formsStackingContext || isColorMeaningful(viewProps.backgroundColor) || hasBorder() || diff --git a/packages/rn-tester/js/examples/Filter/FilterExample.js b/packages/rn-tester/js/examples/Filter/FilterExample.js index 72a5550cff6d2f..339aa928b9179a 100644 --- a/packages/rn-tester/js/examples/Filter/FilterExample.js +++ b/packages/rn-tester/js/examples/Filter/FilterExample.js @@ -15,7 +15,7 @@ import type {ViewStyleProp} from 'react-native/Libraries/StyleSheet/StyleSheet'; import React from 'react'; import {useState} from 'react'; -import {Image, StyleSheet, Text, View} from 'react-native'; +import {Animated, Image, StyleSheet, Text, View, Button} from 'react-native'; const alphaHotdog = require('../../assets/alpha-hotdog.png'); const hotdog = require('../../assets/hotdog.jpg'); @@ -67,6 +67,14 @@ function StaticViewAndImageWithState(props: Props): React.Node { } const styles = StyleSheet.create({ + blurWithShadow: { + filter: [{blur: 10}], + boxShadow: '0 0 10px 10px black', + overflow: 'hidden', + backgroundColor: 'pink', + height: 100, + width: 100, + }, commonView: { width: 150, height: 150, @@ -198,6 +206,27 @@ exports.examples = [ ); }, }, + { + title: 'Blur with boxShadow + overflow hidden + outline', + description: 'This tests container view with blur and outline on iOS', + name: 'blur', + render(): React.Node { + return ( + + ); + }, + }, + { + title: 'Animated Blur', + description: 'Animated blur', + name: 'animated-blur', + render(): React.Node { + return ; + }, + }, { title: 'Drop Shadow', description: 'drop-shadow(30px 10px 4px #4444dd)', @@ -252,3 +281,37 @@ exports.examples = [ }, }, ] as Array; + +const AnimatedBlurExample = () => { + const animatedValue = React.useRef(new Animated.Value(0)).current; + const [isBlurred, setIsBlurred] = React.useState(false); + + const onPress = () => { + Animated.timing(animatedValue, { + toValue: isBlurred ? 0 : 20, + duration: 1000, + useNativeDriver: false, + }).start(() => setIsBlurred(!isBlurred)); + }; + + return ( + + +