diff --git a/Libraries/NativeAnimation/RCTNativeAnimatedModule.h b/Libraries/NativeAnimation/RCTNativeAnimatedModule.h index a6c4b0b2f..e4ffa3aa9 100644 --- a/Libraries/NativeAnimation/RCTNativeAnimatedModule.h +++ b/Libraries/NativeAnimation/RCTNativeAnimatedModule.h @@ -12,6 +12,7 @@ #import #import #import +#import #import "RCTValueAnimatedNode.h" diff --git a/React/Modules/RCTUIManager.h b/React/Modules/RCTUIManager.h index 6fddf984f..6fde6ae31 100644 --- a/React/Modules/RCTUIManager.h +++ b/React/Modules/RCTUIManager.h @@ -15,27 +15,6 @@ #import #import -/** - * UIManager queue - */ -RCT_EXTERN dispatch_queue_t RCTGetUIManagerQueue(void); - -/** - * Default name for the UIManager queue - */ -RCT_EXTERN char *const RCTUIManagerQueueName; - -/** - * Check if we are currently on UIManager queue. - */ -RCT_EXTERN BOOL RCTIsUIManagerQueue(void); - -/** - * Convenience macro for asserting that we're running on UIManager queue. - */ -#define RCTAssertUIManagerQueue() RCTAssert(RCTIsUIManagerQueue(), \ -@"This function must be called on the UIManager queue") - /** * Posted right before re-render happens. This is a chance for views to invalidate their state so * next render cycle will pick up updated views and layout appropriately. diff --git a/React/Modules/RCTUIManager.m b/React/Modules/RCTUIManager.m index 805b7da42..91ada0713 100644 --- a/React/Modules/RCTUIManager.m +++ b/React/Modules/RCTUIManager.m @@ -36,6 +36,7 @@ #import "RCTShadowView+Internal.h" #import "RCTShadowView.h" #import "RCTUIManagerObserverCoordinator.h" +#import "RCTUIManagerUtils.h" #import "RCTUtils.h" #import "RCTView.h" #import "RCTViewManager.h" @@ -52,7 +53,6 @@ static void RCTTraverseViewNodes(id view, void (^block)(id + +#import +#import + +/** + * Returns UIManager queue. + */ +RCT_EXTERN dispatch_queue_t RCTGetUIManagerQueue(void); + +/** + * Default name for the UIManager queue. + */ +RCT_EXTERN char *const RCTUIManagerQueueName; + +/** + * Check if we are currently on UIManager queue. + */ +RCT_EXTERN BOOL RCTIsUIManagerQueue(void); + +/** + * *Asynchronously* executes the specified block on the UIManager queue. + * Unlike `dispatch_async()` this will execute the block immediately + * if we're already on the UIManager queue. + */ +RCT_EXTERN void RCTExecuteOnUIManagerQueue(dispatch_block_t block); + +/** + * *Synchorously* executes the specified block on the UIManager queue. + * Unlike `dispatch_sync()` this will execute the block immediately + * if we're already on the UIManager queue. + * Please do not use this unless you really know what you're doing. + */ +RCT_EXTERN void RCTUnsafeExecuteOnUIManagerQueueSync(dispatch_block_t block); + +/** + * Convenience macro for asserting that we're running on UIManager queue. + */ +#define RCTAssertUIManagerQueue() RCTAssert(RCTIsUIManagerQueue(), \ +@"This function must be called on the UIManager queue") diff --git a/React/Modules/RCTUIManagerUtils.m b/React/Modules/RCTUIManagerUtils.m new file mode 100644 index 000000000..f2fef9cc8 --- /dev/null +++ b/React/Modules/RCTUIManagerUtils.m @@ -0,0 +1,62 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "RCTUIManagerUtils.h" + +#import "RCTAssert.h" + +char *const RCTUIManagerQueueName = "com.facebook.react.ShadowQueue"; + +dispatch_queue_t RCTGetUIManagerQueue(void) +{ + static dispatch_queue_t shadowQueue; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + if ([NSOperation instancesRespondToSelector:@selector(qualityOfService)]) { + dispatch_queue_attr_t attr = dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL, QOS_CLASS_USER_INTERACTIVE, 0); + shadowQueue = dispatch_queue_create(RCTUIManagerQueueName, attr); + } else { + shadowQueue = dispatch_queue_create(RCTUIManagerQueueName, DISPATCH_QUEUE_SERIAL); + dispatch_set_target_queue(shadowQueue, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)); + } + }); + return shadowQueue; +} + +BOOL RCTIsUIManagerQueue() +{ + static void *queueKey = &queueKey; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + dispatch_queue_set_specific(RCTGetUIManagerQueue(), queueKey, queueKey, NULL); + }); + return dispatch_get_specific(queueKey) == queueKey; +} + +void RCTExecuteOnUIManagerQueue(dispatch_block_t block) +{ + if (RCTIsUIManagerQueue()) { + block(); + } else { + dispatch_async(RCTGetUIManagerQueue(), ^{ + block(); + }); + } +} + +void RCTUnsafeExecuteOnUIManagerQueueSync(dispatch_block_t block) +{ + if (RCTIsUIManagerQueue()) { + block(); + } else { + dispatch_sync(RCTGetUIManagerQueue(), ^{ + block(); + }); + } +} diff --git a/React/Profiler/RCTProfile.m b/React/Profiler/RCTProfile.m index a69e73a62..1c94a3b67 100644 --- a/React/Profiler/RCTProfile.m +++ b/React/Profiler/RCTProfile.m @@ -10,10 +10,10 @@ #import "RCTProfile.h" #import -#import #import #import #import +#import #import @@ -25,6 +25,7 @@ #import "RCTLog.h" #import "RCTModuleData.h" #import "RCTUIManager.h" +#import "RCTUIManagerUtils.h" #import "RCTUtils.h" NSString *const RCTProfileDidStartProfiling = @"RCTProfileDidStartProfiling"; diff --git a/React/React.xcodeproj/project.pbxproj b/React/React.xcodeproj/project.pbxproj index b6677d57f..603c16ca1 100644 --- a/React/React.xcodeproj/project.pbxproj +++ b/React/React.xcodeproj/project.pbxproj @@ -999,6 +999,12 @@ 590D7BFE1EBD458B00D8A370 /* RCTShadowView+Layout.h in Headers */ = {isa = PBXBuildFile; fileRef = 590D7BFB1EBD458B00D8A370 /* RCTShadowView+Layout.h */; }; 590D7BFF1EBD458B00D8A370 /* RCTShadowView+Layout.m in Sources */ = {isa = PBXBuildFile; fileRef = 590D7BFC1EBD458B00D8A370 /* RCTShadowView+Layout.m */; }; 590D7C001EBD458B00D8A370 /* RCTShadowView+Layout.m in Sources */ = {isa = PBXBuildFile; fileRef = 590D7BFC1EBD458B00D8A370 /* RCTShadowView+Layout.m */; }; + 59500D431F71C63F00B122B7 /* RCTUIManagerUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 59500D411F71C63700B122B7 /* RCTUIManagerUtils.h */; }; + 59500D441F71C63F00B122B7 /* RCTUIManagerUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 59500D411F71C63700B122B7 /* RCTUIManagerUtils.h */; }; + 59500D451F71C63F00B122B7 /* RCTUIManagerUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 59500D421F71C63F00B122B7 /* RCTUIManagerUtils.m */; }; + 59500D461F71C63F00B122B7 /* RCTUIManagerUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 59500D421F71C63F00B122B7 /* RCTUIManagerUtils.m */; }; + 59500D471F71C66700B122B7 /* RCTUIManagerUtils.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 59500D411F71C63700B122B7 /* RCTUIManagerUtils.h */; }; + 59500D481F71C67600B122B7 /* RCTUIManagerUtils.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 59500D411F71C63700B122B7 /* RCTUIManagerUtils.h */; }; 5960C1B51F0804A00066FD5B /* RCTLayoutAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 5960C1B11F0804A00066FD5B /* RCTLayoutAnimation.h */; }; 5960C1B61F0804A00066FD5B /* RCTLayoutAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 5960C1B11F0804A00066FD5B /* RCTLayoutAnimation.h */; }; 5960C1B71F0804A00066FD5B /* RCTLayoutAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 5960C1B21F0804A00066FD5B /* RCTLayoutAnimation.m */; }; @@ -1250,6 +1256,7 @@ dstPath = include/React; dstSubfolderSpec = 16; files = ( + 59500D481F71C67600B122B7 /* RCTUIManagerUtils.h in Copy Headers */, 3D0E37901F1CC5E100DCAC9F /* RCTWebSocketModule.h in Copy Headers */, 5960C1BF1F0804F50066FD5B /* RCTLayoutAnimation.h in Copy Headers */, 5960C1C01F0804F50066FD5B /* RCTLayoutAnimationGroup.h in Copy Headers */, @@ -1471,6 +1478,7 @@ dstPath = include/React; dstSubfolderSpec = 16; files = ( + 59500D471F71C66700B122B7 /* RCTUIManagerUtils.h in Copy Headers */, 3D0E378F1F1CC5CF00DCAC9F /* RCTWebSocketModule.h in Copy Headers */, 5960C1BD1F0804DF0066FD5B /* RCTLayoutAnimation.h in Copy Headers */, 5960C1BE1F0804DF0066FD5B /* RCTLayoutAnimationGroup.h in Copy Headers */, @@ -2029,6 +2037,8 @@ 58C571C01AA56C1900CDF9C8 /* RCTDatePickerManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = RCTDatePickerManager.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; 590D7BFB1EBD458B00D8A370 /* RCTShadowView+Layout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "RCTShadowView+Layout.h"; sourceTree = ""; }; 590D7BFC1EBD458B00D8A370 /* RCTShadowView+Layout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "RCTShadowView+Layout.m"; sourceTree = ""; }; + 59500D411F71C63700B122B7 /* RCTUIManagerUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTUIManagerUtils.h; sourceTree = ""; }; + 59500D421F71C63F00B122B7 /* RCTUIManagerUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTUIManagerUtils.m; sourceTree = ""; }; 5960C1B11F0804A00066FD5B /* RCTLayoutAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTLayoutAnimation.h; sourceTree = ""; }; 5960C1B21F0804A00066FD5B /* RCTLayoutAnimation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTLayoutAnimation.m; sourceTree = ""; }; 5960C1B31F0804A00066FD5B /* RCTLayoutAnimationGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTLayoutAnimationGroup.h; sourceTree = ""; }; @@ -2337,6 +2347,8 @@ 13E067491A70F434002CDEE1 /* RCTUIManager.m */, 59EB6DB91EBD6FC90072A5E7 /* RCTUIManagerObserverCoordinator.h */, 59EB6DBA1EBD6FC90072A5E7 /* RCTUIManagerObserverCoordinator.mm */, + 59500D411F71C63700B122B7 /* RCTUIManagerUtils.h */, + 59500D421F71C63F00B122B7 /* RCTUIManagerUtils.m */, ); path = Modules; sourceTree = ""; @@ -2902,6 +2914,7 @@ 3D7BFD221EA8E351008DFB7A /* RCTReloadPackagerMethod.h in Headers */, 3D302F4D1DF828F800D6DDAE /* RCTURLRequestDelegate.h in Headers */, 3D302F4E1DF828F800D6DDAE /* RCTURLRequestHandler.h in Headers */, + 59500D441F71C63F00B122B7 /* RCTUIManagerUtils.h in Headers */, 3D302F4F1DF828F800D6DDAE /* RCTUtils.h in Headers */, 3D302F541DF828F800D6DDAE /* RCTJSCSamplingProfiler.h in Headers */, 3D302F551DF828F800D6DDAE /* RCTAccessibilityManager.h in Headers */, @@ -3221,6 +3234,7 @@ 3D80DA5E1DF820620028D040 /* RCTProfile.h in Headers */, 3D80DA5F1DF820620028D040 /* RCTActivityIndicatorView.h in Headers */, 3D80DA601DF820620028D040 /* RCTActivityIndicatorViewManager.h in Headers */, + 59500D431F71C63F00B122B7 /* RCTUIManagerUtils.h in Headers */, 5960C1B91F0804A00066FD5B /* RCTLayoutAnimationGroup.h in Headers */, C6194AB01EF156280034D062 /* RCTPackagerConnectionConfig.h in Headers */, CF2731C01E7B8DE40044CA4F /* RCTDeviceInfo.h in Headers */, @@ -3778,6 +3792,7 @@ 2D3B5EAE1D9B08F800451313 /* RCTEventEmitter.m in Sources */, 2D3B5ECA1D9B095F00451313 /* RCTComponentData.m in Sources */, 2D3B5EA31D9B08BE00451313 /* RCTParserUtils.m in Sources */, + 59500D461F71C63F00B122B7 /* RCTUIManagerUtils.m in Sources */, 2D3B5EA01D9B08B200451313 /* RCTLog.mm in Sources */, 2D3B5EE21D9B09B400451313 /* RCTScrollViewManager.m in Sources */, 5960C1BC1F0804A00066FD5B /* RCTLayoutAnimationGroup.m in Sources */, @@ -4023,6 +4038,7 @@ buildActionMask = 2147483647; files = ( 13134C9A1E296B2A00B9F3CB /* RCTCxxMethod.mm in Sources */, + 59500D451F71C63F00B122B7 /* RCTUIManagerUtils.m in Sources */, 597633361F4E021D005BE8A4 /* RCTShadowView+Internal.m in Sources */, 59FBEFB61E46D91C0095D885 /* RCTScrollContentViewManager.m in Sources */, 13723B501A82FD3C00F88898 /* RCTStatusBarManager.m in Sources */, diff --git a/React/ReactLegacy.xcodeproj/project.pbxproj b/React/ReactLegacy.xcodeproj/project.pbxproj index ba6fcfaa6..8b8f8fb3d 100644 --- a/React/ReactLegacy.xcodeproj/project.pbxproj +++ b/React/ReactLegacy.xcodeproj/project.pbxproj @@ -709,10 +709,16 @@ 597AD1C01E577D7800152581 /* RCTRootContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 597AD1BC1E577D7800152581 /* RCTRootContentView.m */; }; 598C22D61EDCBEE1009AF445 /* RCTUIManagerObserverCoordinator.h in Headers */ = {isa = PBXBuildFile; fileRef = 598C22D41EDCBEE1009AF445 /* RCTUIManagerObserverCoordinator.h */; }; 598C22D71EDCBEE1009AF445 /* RCTUIManagerObserverCoordinator.h in Headers */ = {isa = PBXBuildFile; fileRef = 598C22D41EDCBEE1009AF445 /* RCTUIManagerObserverCoordinator.h */; }; - 598C22D81EDCBEE1009AF445 /* RCTUIManagerObserverCoordinator.m in Sources */ = {isa = PBXBuildFile; fileRef = 598C22D51EDCBEE1009AF445 /* RCTUIManagerObserverCoordinator.m */; }; - 598C22D91EDCBEE1009AF445 /* RCTUIManagerObserverCoordinator.m in Sources */ = {isa = PBXBuildFile; fileRef = 598C22D51EDCBEE1009AF445 /* RCTUIManagerObserverCoordinator.m */; }; + 598C22D81EDCBEE1009AF445 /* RCTUIManagerObserverCoordinator.mm in Sources */ = {isa = PBXBuildFile; fileRef = 598C22D51EDCBEE1009AF445 /* RCTUIManagerObserverCoordinator.mm */; }; + 598C22D91EDCBEE1009AF445 /* RCTUIManagerObserverCoordinator.mm in Sources */ = {isa = PBXBuildFile; fileRef = 598C22D51EDCBEE1009AF445 /* RCTUIManagerObserverCoordinator.mm */; }; 598C22DA1EDCBF61009AF445 /* RCTUIManagerObserverCoordinator.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 598C22D41EDCBEE1009AF445 /* RCTUIManagerObserverCoordinator.h */; }; 598C22DB1EDCBF82009AF445 /* RCTUIManagerObserverCoordinator.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 598C22D41EDCBEE1009AF445 /* RCTUIManagerObserverCoordinator.h */; }; + 59DA562B1F71C6C700D9EADA /* RCTUIManagerUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 59DA56291F71C6C600D9EADA /* RCTUIManagerUtils.h */; }; + 59DA562C1F71C6C700D9EADA /* RCTUIManagerUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 59DA56291F71C6C600D9EADA /* RCTUIManagerUtils.h */; }; + 59DA562D1F71C6C700D9EADA /* RCTUIManagerUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 59DA562A1F71C6C700D9EADA /* RCTUIManagerUtils.m */; }; + 59DA562E1F71C6C700D9EADA /* RCTUIManagerUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 59DA562A1F71C6C700D9EADA /* RCTUIManagerUtils.m */; }; + 59DA562F1F71C73400D9EADA /* RCTUIManagerUtils.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 59DA56291F71C6C600D9EADA /* RCTUIManagerUtils.h */; }; + 59DA56301F71C73F00D9EADA /* RCTUIManagerUtils.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 59DA56291F71C6C600D9EADA /* RCTUIManagerUtils.h */; }; 68EFE4EE1CF6EB3900A1DE13 /* RCTBundleURLProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 68EFE4ED1CF6EB3900A1DE13 /* RCTBundleURLProvider.m */; }; 830A229E1A66C68A008503DA /* RCTRootView.m in Sources */ = {isa = PBXBuildFile; fileRef = 830A229D1A66C68A008503DA /* RCTRootView.m */; }; 83392EB31B6634E10013B15F /* RCTModalHostViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 83392EB21B6634E10013B15F /* RCTModalHostViewController.m */; }; @@ -846,6 +852,7 @@ dstPath = include/React; dstSubfolderSpec = 16; files = ( + 59DA56301F71C73F00D9EADA /* RCTUIManagerUtils.h in Copy Headers */, C6827DFE1EF1804600D66BEF /* RCTJSEnvironment.h in Copy Headers */, 598C22DB1EDCBF82009AF445 /* RCTUIManagerObserverCoordinator.h in Copy Headers */, 5954055C1EC03A8E00766D3C /* RCTShadowView+Layout.h in Copy Headers */, @@ -1008,6 +1015,7 @@ dstPath = include/React; dstSubfolderSpec = 16; files = ( + 59DA562F1F71C73400D9EADA /* RCTUIManagerUtils.h in Copy Headers */, C6827DFD1EF1803F00D66BEF /* RCTJSEnvironment.h in Copy Headers */, 598C22DA1EDCBF61009AF445 /* RCTUIManagerObserverCoordinator.h in Copy Headers */, 5954055B1EC03A7F00766D3C /* RCTShadowView+Layout.h in Copy Headers */, @@ -1381,7 +1389,9 @@ 597AD1BB1E577D7800152581 /* RCTRootContentView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTRootContentView.h; sourceTree = ""; }; 597AD1BC1E577D7800152581 /* RCTRootContentView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTRootContentView.m; sourceTree = ""; }; 598C22D41EDCBEE1009AF445 /* RCTUIManagerObserverCoordinator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTUIManagerObserverCoordinator.h; sourceTree = ""; }; - 598C22D51EDCBEE1009AF445 /* RCTUIManagerObserverCoordinator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTUIManagerObserverCoordinator.m; sourceTree = ""; }; + 598C22D51EDCBEE1009AF445 /* RCTUIManagerObserverCoordinator.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RCTUIManagerObserverCoordinator.mm; sourceTree = ""; }; + 59DA56291F71C6C600D9EADA /* RCTUIManagerUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTUIManagerUtils.h; sourceTree = ""; }; + 59DA562A1F71C6C700D9EADA /* RCTUIManagerUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTUIManagerUtils.m; sourceTree = ""; }; 65F3E41D1E73031C009375BD /* systemJSCWrapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = systemJSCWrapper.cpp; sourceTree = ""; }; 68EFE4EC1CF6EB3000A1DE13 /* RCTBundleURLProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTBundleURLProvider.h; sourceTree = ""; }; 68EFE4ED1CF6EB3900A1DE13 /* RCTBundleURLProvider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTBundleURLProvider.m; sourceTree = ""; }; @@ -1550,7 +1560,9 @@ 13E067481A70F434002CDEE1 /* RCTUIManager.h */, 13E067491A70F434002CDEE1 /* RCTUIManager.m */, 598C22D41EDCBEE1009AF445 /* RCTUIManagerObserverCoordinator.h */, - 598C22D51EDCBEE1009AF445 /* RCTUIManagerObserverCoordinator.m */, + 598C22D51EDCBEE1009AF445 /* RCTUIManagerObserverCoordinator.mm */, + 59DA56291F71C6C600D9EADA /* RCTUIManagerUtils.h */, + 59DA562A1F71C6C700D9EADA /* RCTUIManagerUtils.m */, ); path = Modules; sourceTree = ""; @@ -1927,6 +1939,7 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( + 59DA562C1F71C6C700D9EADA /* RCTUIManagerUtils.h in Headers */, 3D6B76D31E83DD1C008FA614 /* RCTJSCErrorHandling.h in Headers */, 3D6B76D41E83DD1C008FA614 /* RCTConvert+Transform.h in Headers */, A12E9E231E5DEB160029001B /* RCTPackagerClient.h in Headers */, @@ -2246,6 +2259,7 @@ 3D80DA7C1DF820620028D040 /* RCTRefreshControlManager.h in Headers */, 3D80DA7D1DF820620028D040 /* RCTRootShadowView.h in Headers */, 594AD5D11E46D87500B07237 /* RCTScrollContentViewManager.h in Headers */, + 59DA562B1F71C6C700D9EADA /* RCTUIManagerUtils.h in Headers */, 3D80DA7E1DF820620028D040 /* RCTScrollableProtocol.h in Headers */, 3D80DA7F1DF820620028D040 /* RCTScrollView.h in Headers */, 3D80DA801DF820620028D040 /* RCTScrollViewManager.h in Headers */, @@ -2559,6 +2573,7 @@ 2D3B5ED51D9B098000451313 /* RCTModalHostViewController.m in Sources */, 2D3B5EBC1D9B092600451313 /* RCTKeyboardObserver.m in Sources */, 3D4153571F276EE1005B8EFE /* RCTLayoutAnimation.m in Sources */, + 59DA562E1F71C6C700D9EADA /* RCTUIManagerUtils.m in Sources */, 2D3B5E971D9B089000451313 /* RCTBridge.m in Sources */, C6194AB81EF1569C0034D062 /* RCTPackagerConnectionBridgeConfig.m in Sources */, 2D3B5E9B1D9B08A000451313 /* RCTFrameUpdate.m in Sources */, @@ -2584,7 +2599,7 @@ 2D3B5E9F1D9B08AF00451313 /* RCTKeyCommands.m in Sources */, 2D3B5EA51D9B08C700451313 /* RCTRootView.m in Sources */, 2D3B5EAC1D9B08EF00451313 /* RCTJSCExecutor.mm in Sources */, - 598C22D91EDCBEE1009AF445 /* RCTUIManagerObserverCoordinator.m in Sources */, + 598C22D91EDCBEE1009AF445 /* RCTUIManagerObserverCoordinator.mm in Sources */, 2D3B5EB11D9B090100451313 /* RCTAppState.m in Sources */, 2D3B5EC21D9B093B00451313 /* RCTProfile.m in Sources */, 2D3B5ECB1D9B096200451313 /* RCTConvert+CoreLocation.m in Sources */, @@ -2703,6 +2718,7 @@ buildActionMask = 2147483647; files = ( 597AD1BF1E577D7800152581 /* RCTRootContentView.m in Sources */, + 59DA562D1F71C6C700D9EADA /* RCTUIManagerUtils.m in Sources */, 13723B501A82FD3C00F88898 /* RCTStatusBarManager.m in Sources */, 000E6CEB1AB0E980000CDF4D /* RCTSourceCode.m in Sources */, 916F9C2E1F743F7E002E5920 /* RCTModalManager.m in Sources */, @@ -2727,7 +2743,7 @@ 83CBBA511A601E3B00E9B192 /* RCTAssert.m in Sources */, 13AF20451AE707F9005F5298 /* RCTSlider.m in Sources */, 58114A501AAE93D500E7D092 /* RCTAsyncLocalStorage.m in Sources */, - 598C22D81EDCBEE1009AF445 /* RCTUIManagerObserverCoordinator.m in Sources */, + 598C22D81EDCBEE1009AF445 /* RCTUIManagerObserverCoordinator.mm in Sources */, 13513F3C1B1F43F400FCE529 /* RCTProgressViewManager.m in Sources */, 14F7A0F01BDA714B003C6C10 /* RCTFPSGraph.m in Sources */, 14F3620D1AABD06A001CE568 /* RCTSwitch.m in Sources */, diff --git a/React/Views/RCTViewManager.m b/React/Views/RCTViewManager.m index aa305671d..fd936ec3a 100644 --- a/React/Views/RCTViewManager.m +++ b/React/Views/RCTViewManager.m @@ -16,6 +16,7 @@ #import "RCTLog.h" #import "RCTShadowView.h" #import "RCTUIManager.h" +#import "RCTUIManagerUtils.h" #import "RCTUtils.h" #import "RCTView.h" #import "UIView+React.h"