From 61638a239e59437756e7bfe6fe1ff130d8115672 Mon Sep 17 00:00:00 2001 From: Tom Underhill Date: Thu, 7 May 2020 19:58:08 -0700 Subject: [PATCH] Fix Dimension for macOS (#348) * Update scripts to publish react-native-macos-init * Clean up merge markers * Restored ios:macos RNTester parity except for InputAccessoryView. * Revert "Restored ios:macos RNTester parity except for InputAccessoryView." This reverts commit 5a67ae06b01301ac43533e7e20dd7fed24a0937f. * Remove unnecessary android builds and tar file upload. * Fix Dimensions for macOS * Update Podlock.file * Restore previous 'window' dim behavior. * Renamed windowSize to size. Co-authored-by: React-Native Bot <53619745+rnbot@users.noreply.github.com> --- RNTester/Podfile.lock | 52 +++++++++++++++++------------------ React-Core.podspec | 1 - React/Modules/RCTDeviceInfo.m | 32 +++------------------ React/UIUtils/RCTUIUtils.h | 6 ++++ React/UIUtils/RCTUIUtils.m | 44 +++++++++++++++++++++++++++++ scripts/react-native-xcode.sh | 2 +- 6 files changed, 81 insertions(+), 56 deletions(-) diff --git a/RNTester/Podfile.lock b/RNTester/Podfile.lock index 9383de51ea84b6..487ff013c0b78a 100644 --- a/RNTester/Podfile.lock +++ b/RNTester/Podfile.lock @@ -348,34 +348,34 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: boost-for-react-native: a110407d9db2642fd2e1bcd7c5a51c81f2521dc9 DoubleConversion: a1bc12a74baa397a2609e0f10e19b8062d864053 - FBLazyVector: c1a4e0c7c94510ed45096fd47fce665424d8c00a - FBReactNativeSpec: 9ae539b7e366b481cd690a3241bdd677af33bde1 + FBLazyVector: f0e0df84578f80a66fd746f051e447b860b47bf3 + FBReactNativeSpec: d3e3e305a38696069a21420e6c2dd79d067c73a9 Folly: feff29ba9d0b7c2e4f793a94942831d6cc5bbad7 glog: b3f6d74f3e2d33396addc0ee724d2b2b79fc3e00 - RCTRequired: 313773d7d9e5e30b68fba394a49755ef2cbe2741 - RCTTypeSafety: cdd9e2617c3692199c3bc5da791730472d440ae2 - React: 151e5b0a6dbee207a711306a2ab3cf6b2d3059ea - React-ART: 7f68acd3818c6fe7e6430e0c0ef009383e68aee3 - React-Core: fb668c18bbeb6812d55e86019e1bec201c3a059d - React-CoreModules: 396acc98714e3af464f1153252f8dfdb8507d016 - React-cxxreact: 30dd117c1143c92c3cbb74b761bb44edbad801bd - React-jsi: c38f0d09305a4afa22e5d54f3a1622dd1d6be644 - React-jsiexecutor: 72399803b25bafec90791d56c21f20f0240d32ce - React-jsinspector: 3513ab27e5587f87ee8e295c4a2b54485424547a - React-RCTActionSheet: 07e9fac815d5399b12a7f79a5593ce23135bcd1f - React-RCTAnimation: 3dd140a28b092e8a2562bcda3dfecf30ae07f064 - React-RCTBlob: 602e263532c6bbfa9a6feedaac177b13eeeb8ff5 - React-RCTImage: 54934276dea15f319e768b45f711e07009a2fdba - React-RCTLinking: 86c0eb052a95ae447e0d2b666ba6523b26ca58e1 - React-RCTNetwork: 0b8a8d1e18a66dafced8c2cfc369a53ac68dce34 - React-RCTPushNotification: dfce10fd71a0d171a64668156f4d8356ee1a9e82 - React-RCTSettings: 59554f1a1a762c845997e380b83fd8041e29facd - React-RCTTest: 9ab0918fa68e349e0d0347a81e3404104037d88d - React-RCTText: 00a855d78dcaa9b992ff12e6fd282d654e8e300b - React-RCTVibration: 67d42e894e29edf4b33ba729e9f5885c04e41303 - ReactCommon: 1ec21feb4a8d44be66747bd06134f587b8ae499f - Yoga: 22ba96ecfbe709bfef9b658a631013af9f6ebd45 + RCTRequired: a573cb908cfc02fdaaf6e63e7e1c55e8153fc977 + RCTTypeSafety: d58e22c29cb25122c11172a3121484a517b48ca5 + React: 2b0d09dac43fd5a442dd412b2a07dcba5038b223 + React-ART: 8b1fba341468349688d8c055d7305ee2b9fb0ac9 + React-Core: 118f5e89b085aa6be453da4c31e30fd38c7bd7e3 + React-CoreModules: 1eccf9a46ef23e9a31fc445a01225ee0a2a05936 + React-cxxreact: 4c23c5df9b8d304a7daf572152bd0155ba38ca00 + React-jsi: 54f8e7208d44c3f4cacbdee580c8bff7dc9a6655 + React-jsiexecutor: 42cb111d20bee4f18a994f6c33a9973f3157da65 + React-jsinspector: 60e026ea8263b4dcea8df64b12fac06642f6fdda + React-RCTActionSheet: 99c8723f606fd1b55cd5a3b794fd86d8b14677a5 + React-RCTAnimation: bd0ee82d577e61e2c485903bf387d36294d954ac + React-RCTBlob: 20e60087c155b0f3bd0b2401ea43ffdd4a625648 + React-RCTImage: 9afd4553833185d6099e82c990ff604ebc0a3804 + React-RCTLinking: 9c03f63acb0da803efc3218509743e63d22256c0 + React-RCTNetwork: 0893c8dff3c0cbf2bdb61444e9aae842f7824399 + React-RCTPushNotification: 416b0e93705ca217c63e1ecd6d6b494281bea375 + React-RCTSettings: 1778d7ecf07703bbfc7f565eac820447355513c0 + React-RCTTest: 53a3563d3bf54d4342dd599518748f62cd0def14 + React-RCTText: 8d87a5dcd9a50bfef8ae61d4a6da95e39dc9d2b3 + React-RCTVibration: b7b18d0cf7cffa5ba48a006b13e5cac337b61701 + ReactCommon: a309e51dec398e5095e9e07410fa25d9ef0fd4c2 + Yoga: 135abc3b97d777f821297e5dff54e5cec85568f8 -PODFILE CHECKSUM: 9bfdd5bfee61814974e42ca8fda603a38c2e241e +PODFILE CHECKSUM: 2bf56de39dc7e153b4f1637e0f4874f2591fc55a COCOAPODS: 1.8.4 diff --git a/React-Core.podspec b/React-Core.podspec index ecc14336dd1717..b69127dea48cc7 100644 --- a/React-Core.podspec +++ b/React-Core.podspec @@ -64,7 +64,6 @@ Pod::Spec.new do |s| # [TODO(macOS ISS#2323203) "**/MacOS/*" ss.osx.exclude_files = "React/Modules/RCTRedBoxExtraDataViewController.{h,m}", - "React/UIUtils/*", "React/Profiler/{RCTFPSGraph,RCTPerfMonitor}.*", "React/Profiler/RCTProfileTrampoline-{arm,arm64,i386}.S", "React/Base/RCTKeyCommands.*", diff --git a/React/Modules/RCTDeviceInfo.m b/React/Modules/RCTDeviceInfo.m index 25e7d012a25fe1..78a8d4d8bfc4e2 100644 --- a/React/Modules/RCTDeviceInfo.m +++ b/React/Modules/RCTDeviceInfo.m @@ -10,9 +10,7 @@ #import "RCTAccessibilityManager.h" #import "RCTAssert.h" #import "RCTEventDispatcher.h" -#if !TARGET_OS_OSX // TODO(macOS ISS#2323203) #import "RCTUIUtils.h" -#endif // TODO(macOS ISS#2323203) #import "RCTUtils.h" #import // TODO(macOS ISS#2323203) #import "UIView+React.h" // TODO(macOS ISS#2323203) @@ -98,6 +96,10 @@ static BOOL RCTIsIPhoneX() { #if !TARGET_OS_OSX // TODO(macOS ISS#2323203) RCTDimensions dimensions = RCTGetDimensions(bridge.accessibilityManager.multiplier); +#else // [TODO(macOS ISS#2323203) + RCTDimensions dimensions = RCTGetDimensions(rootView); +#endif // ]TODO(macOS ISS#2323203) + typeof (dimensions.window) window = dimensions.window; NSDictionary *dimsWindow = @{ @"width": @(window.width), @@ -116,32 +118,6 @@ static BOOL RCTIsIPhoneX() { @"window": dimsWindow, @"screen": dimsScreen }; -#else // [TODO(macOS ISS#2323203) - if (rootView != nil) { - NSWindow *window = rootView.window; - if (window != nil) { - NSSize size = rootView.bounds.size; - return @{ - @"window": @{ - @"width": @(size.width), - @"height": @(size.height), - @"scale": @(window.backingScaleFactor), - }, - @"rootTag" : rootView.reactTag, - }; - } - } - - // We don't have a root view or window yet so make something up - NSScreen *screen = [NSScreen screens].firstObject; - return @{ - @"window": @{ - @"width": @(screen.frame.size.width), - @"height": @(screen.frame.size.height), - @"scale": @(screen.backingScaleFactor), - }, - }; -#endif // ]TODO(macOS ISS#2323203) } - (void)dealloc diff --git a/React/UIUtils/RCTUIUtils.h b/React/UIUtils/RCTUIUtils.h index 3abee752ae1cc3..c1c4ff006e17d2 100644 --- a/React/UIUtils/RCTUIUtils.h +++ b/React/UIUtils/RCTUIUtils.h @@ -22,11 +22,17 @@ typedef struct { } window, screen; } RCTDimensions; extern __attribute__((visibility("default"))) +#if !TARGET_OS_OSX // TODO(macOS ISS#2323203) RCTDimensions RCTGetDimensions(CGFloat fontScale); +#else // [TODO(macOS ISS#2323203) +RCTDimensions RCTGetDimensions(RCTPlatformView *rootView); +#endif // ]TODO(macOS ISS#2323203) +#if !TARGET_OS_OSX // TODO(macOS ISS#2323203) // Get font size multiplier for font base size (Large) by content size category extern __attribute__((visibility("default"))) CGFloat RCTGetMultiplierForContentSizeCategory(UIContentSizeCategory category); +#endif // TODO(macOS ISS#2323203) #ifdef __cplusplus } diff --git a/React/UIUtils/RCTUIUtils.m b/React/UIUtils/RCTUIUtils.m index 961c9426e3564c..3818ed78b8f1f9 100644 --- a/React/UIUtils/RCTUIUtils.m +++ b/React/UIUtils/RCTUIUtils.m @@ -9,6 +9,7 @@ #import "RCTUtils.h" +#if !TARGET_OS_OSX // TODO(macOS ISS#2323203) RCTDimensions RCTGetDimensions(CGFloat fontScale) { UIScreen *mainScreen = UIScreen.mainScreen; @@ -61,3 +62,46 @@ CGFloat RCTGetMultiplierForContentSizeCategory(UIContentSizeCategory category) double value = multipliers[category].doubleValue; return value > 0.0 ? value : 1.0; } + +#else // [TODO(macOS ISS#2323203) + +RCTDimensions RCTGetDimensions(RCTPlatformView *rootView) { + RCTDimensions dimensions = { + { 0, 0, 0, /*fontScale*/ 1 }, + { 0, 0, 0, /*fontScale*/ 1 } + }; + NSScreen *screen = nil; + NSWindow *window = nil; + NSSize size; + if (rootView != nil) { + window = [rootView window]; + size = [rootView frame].size; + } else { + // We don't have a root view so fall back to the app's key window + window = [NSApp keyWindow]; + size = [window frame].size; + } + + if (window != nil) { + screen = [window screen]; + dimensions.window.width = size.width; + dimensions.window.height = size.height; + dimensions.window.scale = [window backingScaleFactor]; + } else { + // We don't have a window yet so make something up + screen = [NSScreen mainScreen]; + NSSize screenSize = [screen frame].size; + dimensions.window.width = screenSize.width; + dimensions.window.height = screenSize.height; + dimensions.window.scale = [screen backingScaleFactor]; + } + + NSSize screenSize = [screen frame].size; + dimensions.screen.width = screenSize.width; + dimensions.screen.height = screenSize.height; + dimensions.screen.scale = [screen backingScaleFactor]; + + return dimensions; +} + +#endif // ]TODO(macOS ISS#2323203) diff --git a/scripts/react-native-xcode.sh b/scripts/react-native-xcode.sh index 31a87ed36a555c..a1590f3e8e5797 100755 --- a/scripts/react-native-xcode.sh +++ b/scripts/react-native-xcode.sh @@ -32,7 +32,7 @@ fi case "$CONFIGURATION" in *Debug*) - if [[ "$PLATFORM_NAME" == *simulator ]]; then + if [[ "$PLATFORM_NAME" == *simulator || "$PLATFORM_NAME" == macosx ]]; then if [[ "$FORCE_BUNDLING" ]]; then echo "FORCE_BUNDLING enabled; continuing to bundle." else