diff --git a/React/Modules/RCTUIManager.m b/React/Modules/RCTUIManager.m index d60cdf99d5..501a68680f 100644 --- a/React/Modules/RCTUIManager.m +++ b/React/Modules/RCTUIManager.m @@ -905,6 +905,10 @@ RCT_EXPORT_METHOD(createView:(nonnull NSNumber *)reactTag [uiManager->_bridgeTransactionListeners addObject:view]; } ((NSMutableDictionary *)viewRegistry)[reactTag] = view; + +#if RCT_DEV + [view _DEBUG_setReactShadowView:shadowView]; +#endif } }]; } diff --git a/React/Views/UIView+React.h b/React/Views/UIView+React.h index 3cb442afb5..794c977e9e 100644 --- a/React/Views/UIView+React.h +++ b/React/Views/UIView+React.h @@ -9,6 +9,8 @@ #import +@class RCTShadowView; + #import "RCTComponent.h" //TODO: let's try to eliminate this category if possible @@ -49,4 +51,11 @@ - (void)reactDidMakeFirstResponder; - (BOOL)reactRespondsToTouch:(UITouch *)touch; +/** + Tools for debugging + */ +#if RCT_DEV +@property (nonatomic, strong, setter=_DEBUG_setReactShadowView:) RCTShadowView *_DEBUG_reactShadowView; +#endif + @end diff --git a/React/Views/UIView+React.m b/React/Views/UIView+React.m index bbc74901e3..36bd37df6b 100644 --- a/React/Views/UIView+React.m +++ b/React/Views/UIView+React.m @@ -13,6 +13,7 @@ #import "RCTAssert.h" #import "RCTLog.h" +#import "RCTShadowView.h" @implementation UIView (React) @@ -26,6 +27,21 @@ objc_setAssociatedObject(self, @selector(reactTag), reactTag, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } +#if RCT_DEBUG + +- (RCTShadowView *)_DEBUG_reactShadowView +{ + return objc_getAssociatedObject(self, _cmd); +} + +- (void)_DEBUG_setReactShadowView:(RCTShadowView *)shadowView +{ + // Use assign to avoid keeping the shadowView alive it if no longer exists + objc_setAssociatedObject(self, @selector(_DEBUG_reactShadowView), shadowView, OBJC_ASSOCIATION_ASSIGN); +} + +#endif + - (BOOL)isReactRootView { return RCTIsReactRootView(self.reactTag);