react-native-tvos 0.72.5-0 → 0.72.6-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/Libraries/Animated/NativeAnimatedHelper.js +6 -3
  2. package/Libraries/AppDelegate/React-RCTAppDelegate.podspec +6 -2
  3. package/Libraries/Core/ReactNativeVersion.js +2 -2
  4. package/Libraries/LogBox/Data/LogBoxData.js +2 -1
  5. package/Libraries/promiseRejectionTrackingOptions.js +21 -7
  6. package/Libraries/vendor/emitter/EventEmitter.js +3 -1
  7. package/React/Base/RCTTouchHandlerTV.m +35 -0
  8. package/React/Base/RCTVersion.m +2 -2
  9. package/React/Fabric/RCTSurfacePointerHandlerTV.mm +37 -0
  10. package/React/Fabric/RCTSurfaceTouchHandlerTV.mm +30 -0
  11. package/React/React-RCTFabric.podspec +5 -1
  12. package/React/Views/RCTTVView.m +2 -2
  13. package/React-Core.podspec +4 -2
  14. package/ReactAndroid/gradle.properties +1 -1
  15. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java +2 -2
  16. package/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.java +5 -0
  17. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagersPropertyCache.java +19 -2
  18. package/ReactCommon/cxxreact/ReactNativeVersion.h +2 -2
  19. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropComponentDescriptor.mm +22 -6
  20. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/RCTLegacyViewManagerInteropCoordinator.mm +4 -0
  21. package/package.json +5 -5
  22. package/scripts/cocoapods/utils.rb +17 -11
  23. package/scripts/codegen/generate-legacy-interop-components.js +8 -2
  24. package/sdks/hermesc/linux64-bin/hermesc +0 -0
  25. package/sdks/hermesc/osx-bin/hermesc +0 -0
  26. package/sdks/hermesc/win64-bin/hermesc.exe +0 -0
  27. package/template/Gemfile +2 -1
  28. package/template/package.json +1 -1
  29. package/types/public/ReactNativeTVTypes.d.ts +25 -25
  30. package/React/Fabric/RCTThirdPartyFabricComponentsProvider.h +0 -29
  31. package/React/Fabric/RCTThirdPartyFabricComponentsProvider.mm +0 -29
  32. package/ReactAndroid/src/main/java/com/facebook/react/ReactAndroidHWInputDeviceHelper.java +0 -98
  33. package/ReactCommon/react/renderer/components/rncore/ComponentDescriptors.h +0 -29
  34. package/ReactCommon/react/renderer/components/rncore/EventEmitters.cpp +0 -111
  35. package/ReactCommon/react/renderer/components/rncore/EventEmitters.h +0 -186
  36. package/ReactCommon/react/renderer/components/rncore/Props.cpp +0 -157
  37. package/ReactCommon/react/renderer/components/rncore/Props.h +0 -395
  38. package/ReactCommon/react/renderer/components/rncore/RCTComponentViewHelpers.h +0 -257
  39. package/ReactCommon/react/renderer/components/rncore/ShadowNodes.cpp +0 -26
  40. package/ReactCommon/react/renderer/components/rncore/ShadowNodes.h +0 -111
  41. package/ReactCommon/react/renderer/components/rncore/States.cpp +0 -18
  42. package/ReactCommon/react/renderer/components/rncore/States.h +0 -141
@@ -562,10 +562,13 @@ function transformDataType(value: number | string): number | string {
562
562
  if (typeof value !== 'string') {
563
563
  return value;
564
564
  }
565
- if (/deg$/.test(value)) {
565
+
566
+ // Normalize degrees and radians to a number expressed in radians
567
+ if (value.endsWith('deg')) {
566
568
  const degrees = parseFloat(value) || 0;
567
- const radians = (degrees * Math.PI) / 180.0;
568
- return radians;
569
+ return (degrees * Math.PI) / 180.0;
570
+ } else if (value.endsWith('rad')) {
571
+ return parseFloat(value) || 0;
569
572
  } else {
570
573
  return value;
571
574
  }
@@ -96,15 +96,19 @@ Pod::Spec.new do |s|
96
96
  s.dependency "React-utils"
97
97
  s.dependency "React-debug"
98
98
 
99
+ rel_path_from_pods_root_to_app = Pathname.new(ENV['APP_PATH']).relative_path_from(Pod::Config.instance.installation_root)
100
+ rel_path_from_pods_to_app = Pathname.new(ENV['APP_PATH']).relative_path_from(File.join(Pod::Config.instance.installation_root, 'Pods'))
101
+
102
+
99
103
  s.script_phases = {
100
104
  :name => "Generate Legacy Components Interop",
101
105
  :script => "
102
106
  WITH_ENVIRONMENT=\"$REACT_NATIVE_PATH/scripts/xcode/with-environment.sh\"
103
107
  source $WITH_ENVIRONMENT
104
- ${NODE_BINARY} ${REACT_NATIVE_PATH}/scripts/codegen/generate-legacy-interop-components.js -p #{ENV['APP_PATH']} -o ${REACT_NATIVE_PATH}/Libraries/AppDelegate
108
+ ${NODE_BINARY} ${REACT_NATIVE_PATH}/scripts/codegen/generate-legacy-interop-components.js -p #{rel_path_from_pods_to_app} -o ${REACT_NATIVE_PATH}/Libraries/AppDelegate
105
109
  ",
106
110
  :execution_position => :before_compile,
107
- :input_files => ["#{ENV['APP_PATH']}/react-native.config.js"],
111
+ :input_files => ["#{rel_path_from_pods_root_to_app}/react-native.config.js"],
108
112
  :output_files => ["${REACT_NATIVE_PATH}/Libraries/AppDelegate/RCTLegacyInteropComponents.mm"],
109
113
  }
110
114
  end
@@ -12,6 +12,6 @@
12
12
  exports.version = {
13
13
  major: 0,
14
14
  minor: 72,
15
- patch: 5,
16
- prerelease: '0',
15
+ patch: 6,
16
+ prerelease: '1',
17
17
  };
@@ -30,6 +30,7 @@ export type LogData = $ReadOnly<{|
30
30
  message: Message,
31
31
  category: Category,
32
32
  componentStack: ComponentStack,
33
+ stack?: string,
33
34
  |}>;
34
35
 
35
36
  export type Observer = (
@@ -198,7 +199,7 @@ export function addLog(log: LogData): void {
198
199
  // otherwise spammy logs would pause rendering.
199
200
  setImmediate(() => {
200
201
  try {
201
- const stack = parseErrorStack(errorForStackTrace?.stack);
202
+ const stack = parseErrorStack(log.stack ?? errorForStackTrace?.stack);
202
203
 
203
204
  appendNewLog(
204
205
  new LogBoxLog({
@@ -10,6 +10,8 @@
10
10
 
11
11
  import typeof {enable} from 'promise/setimmediate/rejection-tracking';
12
12
 
13
+ import LogBox from './LogBox/LogBox';
14
+
13
15
  type ExtractOptionsType = <P>(((options?: ?P) => void)) => P;
14
16
 
15
17
  let rejectionTrackingOptions: $Call<ExtractOptionsType, enable> = {
@@ -36,17 +38,29 @@ let rejectionTrackingOptions: $Call<ExtractOptionsType, enable> = {
36
38
  }
37
39
  }
38
40
 
39
- const warning =
40
- `Possible Unhandled Promise Rejection (id: ${id}):\n` +
41
- `${message ?? ''}\n` +
42
- (stack == null ? '' : stack);
43
- console.warn(warning);
41
+ const warning = `Possible unhandled promise rejection (id: ${id}):\n${
42
+ message ?? ''
43
+ }`;
44
+ if (__DEV__) {
45
+ LogBox.addLog({
46
+ level: 'warn',
47
+ message: {
48
+ content: warning,
49
+ substitutions: [],
50
+ },
51
+ componentStack: [],
52
+ stack,
53
+ category: 'possible_unhandled_promise_rejection',
54
+ });
55
+ } else {
56
+ console.warn(warning);
57
+ }
44
58
  },
45
59
  onHandled: id => {
46
60
  const warning =
47
- `Promise Rejection Handled (id: ${id})\n` +
61
+ `Promise rejection handled (id: ${id})\n` +
48
62
  'This means you can ignore any previous messages of the form ' +
49
- `"Possible Unhandled Promise Rejection (id: ${id}):"`;
63
+ `"Possible unhandled promise rejection (id: ${id}):"`;
50
64
  console.warn(warning);
51
65
  },
52
66
  };
@@ -109,7 +109,9 @@ export default class EventEmitter<TEventToArgsMap: {...}>
109
109
  Registration<$ElementType<TEventToArgsMap, TEvent>>,
110
110
  > = this._registry[eventType];
111
111
  if (registrations != null) {
112
- for (const registration of [...registrations]) {
112
+ // Copy `registrations` to take a snapshot when we invoke `emit`, in case
113
+ // registrations are added or removed when listeners are invoked.
114
+ for (const registration of Array.from(registrations)) {
113
115
  registration.listener.apply(registration.context, args);
114
116
  }
115
117
  }
@@ -0,0 +1,35 @@
1
+ #import <Foundation/Foundation.h>
2
+
3
+ #import "RCTTouchHandler.h"
4
+
5
+ #import "RCTAssert.h"
6
+ #import "RCTBridge.h"
7
+ #import "RCTEventDispatcherProtocol.h"
8
+ #import "RCTLog.h"
9
+ #import "RCTSurfaceView.h"
10
+ #import "RCTTouchEvent.h"
11
+ #import "RCTUIManager.h"
12
+ #import "RCTUtils.h"
13
+ #import "UIView+React.h"
14
+
15
+ @interface RCTTouchHandler () <UIGestureRecognizerDelegate>
16
+ @end
17
+
18
+ // The touch handler should not be active on tvOS, so tvOS uses this
19
+ // stub implementation that does nothing.
20
+ // Fixes https://github.com/react-native-tvos/react-native-tvos/issues/595
21
+ //
22
+ @implementation RCTTouchHandler
23
+
24
+ - (instancetype)initWithBridge:(RCTBridge *)bridge
25
+ {
26
+ return [super initWithTarget:nil action:NULL];
27
+ }
28
+
29
+ RCT_NOT_IMPLEMENTED(-(instancetype)initWithTarget : (id)target action : (SEL)action)
30
+
31
+ - (void)attachToView:(UIView *)view {}
32
+ - (void)detachFromView:(UIView *)view {}
33
+ - (void)cancel {}
34
+
35
+ @end
@@ -23,8 +23,8 @@ NSDictionary* RCTGetReactNativeVersion(void)
23
23
  __rnVersion = @{
24
24
  RCTVersionMajor: @(0),
25
25
  RCTVersionMinor: @(72),
26
- RCTVersionPatch: @(5),
27
- RCTVersionPrerelease: @"0",
26
+ RCTVersionPatch: @(6),
27
+ RCTVersionPrerelease: @"1",
28
28
  };
29
29
  });
30
30
  return __rnVersion;
@@ -0,0 +1,37 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #import "RCTSurfacePointerHandler.h"
9
+
10
+ #import <React/RCTIdentifierPool.h>
11
+ #import <React/RCTReactTaggedView.h>
12
+ #import <React/RCTUtils.h>
13
+ #import <React/RCTViewComponentView.h>
14
+
15
+ #import "RCTConversions.h"
16
+ #import "RCTTouchableComponentViewProtocol.h"
17
+
18
+ @interface RCTSurfacePointerHandler () <UIGestureRecognizerDelegate>
19
+ @end
20
+
21
+ // The touch handler should not be active on tvOS, so tvOS uses this
22
+ // stub implementation that does nothing.
23
+ // Fixes https://github.com/react-native-tvos/react-native-tvos/issues/595
24
+ //
25
+ @implementation RCTSurfacePointerHandler
26
+
27
+ - (instancetype)init
28
+ {
29
+ return [super initWithTarget:nil action:nil];
30
+ }
31
+
32
+ RCT_NOT_IMPLEMENTED(-(instancetype)initWithTarget : (id)target action : (SEL)action)
33
+
34
+ - (void)attachToView:(UIView *)view {}
35
+ - (void)detachFromView:(UIView *)view {}
36
+
37
+ @end
@@ -0,0 +1,30 @@
1
+ #import "RCTSurfaceTouchHandler.h"
2
+
3
+ #import <React/RCTIdentifierPool.h>
4
+ #import <React/RCTUtils.h>
5
+ #import <React/RCTViewComponentView.h>
6
+
7
+ #import "RCTConversions.h"
8
+ #import "RCTSurfacePointerHandler.h"
9
+ #import "RCTTouchableComponentViewProtocol.h"
10
+
11
+ // The touch handler should not be active on tvOS, so tvOS uses this
12
+ // stub implementation that does nothing.
13
+ // Fixes https://github.com/react-native-tvos/react-native-tvos/issues/595
14
+ //
15
+ @interface RCTSurfaceTouchHandler () <UIGestureRecognizerDelegate>
16
+ @end
17
+
18
+ @implementation RCTSurfaceTouchHandler
19
+
20
+ - (instancetype)init
21
+ {
22
+ return [super initWithTarget:nil action:nil];
23
+ }
24
+
25
+ RCT_NOT_IMPLEMENTED(-(instancetype)initWithTarget : (id)target action : (SEL)action)
26
+
27
+ - (void)attachToView:(UIView *)view {}
28
+ - (void)detachFromView:(UIView *)view {}
29
+
30
+ @end
@@ -56,7 +56,11 @@ Pod::Spec.new do |s|
56
56
  s.source = source
57
57
  s.source_files = "Fabric/**/*.{c,h,m,mm,S,cpp}"
58
58
  s.exclude_files = "**/tests/*",
59
- "**/android/*",
59
+ "**/android/*"
60
+ s.tvos.exclude_files = "Fabric/**/RCTSurfaceTouchHandler.mm",
61
+ "Fabric/**/RCTSurfacePointerHandler.mm"
62
+ s.ios.exclude_files = "Fabric/**/RCTSurfaceTouchHandlerTV.mm",
63
+ "Fabric/**/RCTSurfacePointerHandlerTV.mm"
60
64
  s.compiler_flags = folly_compiler_flags + ' ' + boost_compiler_flags
61
65
  s.header_dir = "React"
62
66
  s.module_name = "RCTFabric"
@@ -200,12 +200,12 @@ RCT_NOT_IMPLEMENTED(-(instancetype)initWithCoder : unused)
200
200
  // CATransform3D value for minimumRelativeValue
201
201
  CATransform3D transMinimumTiltAboutX = CATransform3DIdentity;
202
202
  transMinimumTiltAboutX.m34 = 1.0 / 500;
203
- transMinimumTiltAboutX = CATransform3DRotate(transMinimumTiltAboutX, tiltAngle * -1.0, 1, 0, 0);
203
+ transMinimumTiltAboutX = CATransform3DRotate(transMinimumTiltAboutX, tiltAngle, 1, 0, 0);
204
204
 
205
205
  // CATransform3D value for minimumRelativeValue
206
206
  CATransform3D transMaximumTiltAboutX = CATransform3DIdentity;
207
207
  transMaximumTiltAboutX.m34 = 1.0 / 500;
208
- transMaximumTiltAboutX = CATransform3DRotate(transMaximumTiltAboutX, tiltAngle, 1, 0, 0);
208
+ transMaximumTiltAboutX = CATransform3DRotate(transMaximumTiltAboutX, tiltAngle * -1.0, 1, 0, 0);
209
209
 
210
210
  // Set the transform property boundaries for the interpolation
211
211
  yTilt.minimumRelativeValue = [NSValue valueWithCATransform3D:transMinimumTiltAboutX];
@@ -100,13 +100,15 @@ Pod::Spec.new do |s|
100
100
  exclude_files = exclude_files.append("React/CxxBridge/JSCExecutorFactory.{h,mm}")
101
101
  end
102
102
  ss.exclude_files = exclude_files
103
- ss.ios.exclude_files = "React/**/RCTTV*.*"
103
+ ss.ios.exclude_files = "React/**/RCTTV*.*",
104
+ "React/Base/RCTTouchHandlerTV.m"
104
105
  ss.tvos.exclude_files = "React/Modules/RCTClipboard*",
105
106
  "React/Views/RCTDatePicker*",
106
107
  "React/Views/RCTPicker*",
107
108
  "React/Views/RefreshControl/*",
108
109
  "React/Views/RCTSlider*",
109
- "React/Views/RCTSwitch*"
110
+ "React/Views/RCTSwitch*",
111
+ "React/Base/RCTTouchHandler.m"
110
112
  ss.private_header_files = "React/Cxx*/*.h"
111
113
  end
112
114
 
@@ -1,4 +1,4 @@
1
- VERSION_NAME=0.72.5-0
1
+ VERSION_NAME=0.72.6-1
2
2
 
3
3
  # GROUP=com.facebook.react
4
4
  # Group for the TV repo
@@ -17,6 +17,6 @@ public class ReactNativeVersion {
17
17
  public static final Map<String, Object> VERSION = MapBuilder.<String, Object>of(
18
18
  "major", 0,
19
19
  "minor", 72,
20
- "patch", 5,
21
- "prerelease", "0");
20
+ "patch", 6,
21
+ "prerelease", "1");
22
22
  }
@@ -25,6 +25,7 @@ import com.facebook.react.modules.blob.BlobModule;
25
25
  import com.facebook.react.modules.blob.FileReaderModule;
26
26
  import com.facebook.react.modules.camera.ImageStoreManager;
27
27
  import com.facebook.react.modules.clipboard.ClipboardModule;
28
+ import com.facebook.react.modules.devloading.DevLoadingModule;
28
29
  import com.facebook.react.modules.devtoolssettings.DevToolsSettingsManagerModule;
29
30
  import com.facebook.react.modules.dialog.DialogModule;
30
31
  import com.facebook.react.modules.fresco.FrescoModule;
@@ -72,6 +73,7 @@ import javax.inject.Provider;
72
73
  AppearanceModule.class,
73
74
  AppStateModule.class,
74
75
  BlobModule.class,
76
+ DevLoadingModule.class,
75
77
  FileReaderModule.class,
76
78
  ClipboardModule.class,
77
79
  DialogModule.class,
@@ -113,6 +115,8 @@ public class MainReactPackage extends TurboReactPackage implements ViewManagerOn
113
115
  return new AppStateModule(context);
114
116
  case BlobModule.NAME:
115
117
  return new BlobModule(context);
118
+ case DevLoadingModule.NAME:
119
+ return new DevLoadingModule(context);
116
120
  case FileReaderModule.NAME:
117
121
  return new FileReaderModule(context);
118
122
  case ClipboardModule.NAME:
@@ -371,6 +375,7 @@ public class MainReactPackage extends TurboReactPackage implements ViewManagerOn
371
375
  AppearanceModule.class,
372
376
  AppStateModule.class,
373
377
  BlobModule.class,
378
+ DevLoadingModule.class,
374
379
  FileReaderModule.class,
375
380
  ClipboardModule.class,
376
381
  DialogModule.class,
@@ -204,6 +204,11 @@ import java.util.Map;
204
204
  mDefaultValue = defaultValue;
205
205
  }
206
206
 
207
+ public ColorPropSetter(ReactPropGroup prop, Method setter, int index, int defaultValue) {
208
+ super(prop, "mixed", setter, index);
209
+ mDefaultValue = defaultValue;
210
+ }
211
+
207
212
  @Override
208
213
  protected Object getValueOrDefault(Object value, Context context) {
209
214
  if (value == null) {
@@ -331,6 +336,10 @@ import java.util.Map;
331
336
  super(prop, "mixed", setter);
332
337
  }
333
338
 
339
+ public BoxedColorPropSetter(ReactPropGroup prop, Method setter, int index) {
340
+ super(prop, "mixed", setter, index);
341
+ }
342
+
334
343
  @Override
335
344
  protected @Nullable Object getValueOrDefault(Object value, Context context) {
336
345
  if (value != null) {
@@ -463,7 +472,11 @@ import java.util.Map;
463
472
  }
464
473
  } else if (propTypeClass == int.class) {
465
474
  for (int i = 0; i < names.length; i++) {
466
- props.put(names[i], new IntPropSetter(annotation, method, i, annotation.defaultInt()));
475
+ if ("Color".equals(annotation.customType())) {
476
+ props.put(names[i], new ColorPropSetter(annotation, method, i, annotation.defaultInt()));
477
+ } else {
478
+ props.put(names[i], new IntPropSetter(annotation, method, i, annotation.defaultInt()));
479
+ }
467
480
  }
468
481
  } else if (propTypeClass == float.class) {
469
482
  for (int i = 0; i < names.length; i++) {
@@ -476,7 +489,11 @@ import java.util.Map;
476
489
  }
477
490
  } else if (propTypeClass == Integer.class) {
478
491
  for (int i = 0; i < names.length; i++) {
479
- props.put(names[i], new BoxedIntPropSetter(annotation, method, i));
492
+ if ("Color".equals(annotation.customType())) {
493
+ props.put(names[i], new BoxedColorPropSetter(annotation, method, i));
494
+ } else {
495
+ props.put(names[i], new BoxedIntPropSetter(annotation, method, i));
496
+ }
480
497
  }
481
498
  } else {
482
499
  throw new RuntimeException(
@@ -17,8 +17,8 @@ namespace facebook::react {
17
17
  constexpr struct {
18
18
  int32_t Major = 0;
19
19
  int32_t Minor = 72;
20
- int32_t Patch = 5;
21
- std::string_view Prerelease = "0";
20
+ int32_t Patch = 6;
21
+ std::string_view Prerelease = "1";
22
22
  } ReactNativeVersion;
23
23
 
24
24
  } // namespace facebook::react
@@ -74,19 +74,35 @@ static Class getViewManagerFromComponentName(const std::string &componentName)
74
74
  return nil;
75
75
  }
76
76
 
77
- static std::shared_ptr<void> const constructCoordinator(
78
- ContextContainer::Shared const &contextContainer,
79
- ComponentDescriptor::Flavor const &flavor)
77
+ static Class getViewManagerClass(const std::string &componentName, RCTBridge *bridge)
78
+ {
79
+ Class viewManager = getViewManagerFromComponentName(componentName);
80
+ if (viewManager != nil) {
81
+ return viewManager;
82
+ }
83
+
84
+ // If all the heuristics fail, let's try to retrieve the view manager from the bridge/bridgeProxy
85
+ if (bridge != nil) {
86
+ return [[bridge moduleForName:RCTNSStringFromString(componentName)] class];
87
+ }
88
+
89
+ return nil;
90
+ }
91
+
92
+ static const std::shared_ptr<void> constructCoordinator(
93
+ const ContextContainer::Shared &contextContainer,
94
+ const ComponentDescriptor::Flavor &flavor)
80
95
  {
81
- auto componentName = *std::static_pointer_cast<std::string const>(flavor);
82
- Class viewManagerClass = getViewManagerFromComponentName(componentName);
83
- assert(viewManagerClass);
84
96
  auto optionalBridge = contextContainer->find<std::shared_ptr<void>>("Bridge");
85
97
  RCTBridge *bridge;
86
98
  if (optionalBridge) {
87
99
  bridge = unwrapManagedObjectWeakly(optionalBridge.value());
88
100
  }
89
101
 
102
+ auto componentName = *std::static_pointer_cast<std::string const>(flavor);
103
+ Class viewManagerClass = getViewManagerClass(componentName, bridge);
104
+ assert(viewManagerClass);
105
+
90
106
  auto optionalEventDispatcher = contextContainer->find<std::shared_ptr<void>>("RCTEventDispatcher");
91
107
  RCTEventDispatcher *eventDispatcher;
92
108
  if (optionalEventDispatcher) {
@@ -92,6 +92,10 @@ using namespace facebook::react;
92
92
  if (props.isObject()) {
93
93
  NSDictionary<NSString *, id> *convertedProps = convertFollyDynamicToId(props);
94
94
  [_componentData setProps:convertedProps forView:view];
95
+
96
+ if ([view respondsToSelector:@selector(didSetProps:)]) {
97
+ [view performSelector:@selector(didSetProps:) withObject:[convertedProps allKeys]];
98
+ }
95
99
  }
96
100
  }
97
101
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-tvos",
3
- "version": "0.72.5-0",
3
+ "version": "0.72.6-1",
4
4
  "bin": "./cli.js",
5
5
  "description": "A framework for building native apps using React",
6
6
  "license": "MIT",
@@ -80,9 +80,9 @@
80
80
  },
81
81
  "dependencies": {
82
82
  "@jest/create-cache-key-function": "^29.2.1",
83
- "@react-native-community/cli": "11.3.7",
84
- "@react-native-community/cli-platform-android": "11.3.7",
85
- "@react-native-community/cli-platform-ios": "11.3.7",
83
+ "@react-native-community/cli": "11.3.10",
84
+ "@react-native-community/cli-platform-android": "11.3.10",
85
+ "@react-native-community/cli-platform-ios": "11.3.10",
86
86
  "@react-native/assets-registry": "^0.72.0",
87
87
  "@react-native/codegen": "^0.72.7",
88
88
  "@react-native/gradle-plugin": "^0.72.11",
@@ -92,7 +92,7 @@
92
92
  "abort-controller": "^3.0.0",
93
93
  "anser": "^1.4.9",
94
94
  "base64-js": "^1.1.2",
95
- "deprecated-react-native-prop-types": "4.1.0",
95
+ "deprecated-react-native-prop-types": "^4.2.3",
96
96
  "event-target-shim": "^5.0.1",
97
97
  "flow-enums-runtime": "^0.0.5",
98
98
  "invariant": "^2.2.4",
@@ -141,7 +141,7 @@ class ReactNativePodsUtils
141
141
  if self.is_using_xcode15_or_greter(:xcodebuild_manager => xcodebuild_manager)
142
142
  self.add_value_to_setting_if_missing(config, other_ld_flags_key, xcode15_compatibility_flags)
143
143
  else
144
- self.remove_value_to_setting_if_present(config, other_ld_flags_key, xcode15_compatibility_flags)
144
+ self.remove_value_from_setting_if_present(config, other_ld_flags_key, xcode15_compatibility_flags)
145
145
  end
146
146
  end
147
147
  project.save()
@@ -300,20 +300,26 @@ class ReactNativePodsUtils
300
300
 
301
301
  def self.add_value_to_setting_if_missing(config, setting_name, value)
302
302
  old_config = config.build_settings[setting_name]
303
- if !old_config.include?(value)
304
- config.build_settings[setting_name] << value
303
+ if old_config.is_a?(Array)
304
+ old_config = old_config.join(" ")
305
+ end
306
+
307
+ trimmed_value = value.strip()
308
+ if !old_config.include?(trimmed_value)
309
+ config.build_settings[setting_name] = "#{old_config.strip()} #{trimmed_value}".strip()
305
310
  end
306
311
  end
307
312
 
308
- def self.remove_value_to_setting_if_present(config, setting_name, value)
313
+ def self.remove_value_from_setting_if_present(config, setting_name, value)
309
314
  old_config = config.build_settings[setting_name]
310
- if old_config.include?(value)
311
- # Old config can be either an Array or a String
312
- if old_config.is_a?(Array)
313
- old_config = old_config.join(" ")
314
- end
315
- new_config = old_config.gsub(value, "")
316
- config.build_settings[setting_name] = new_config
315
+ if old_config.is_a?(Array)
316
+ old_config = old_config.join(" ")
317
+ end
318
+
319
+ trimmed_value = value.strip()
320
+ if old_config.include?(trimmed_value)
321
+ new_config = old_config.gsub(trimmed_value, "")
322
+ config.build_settings[setting_name] = new_config.strip()
317
323
  end
318
324
  end
319
325
 
@@ -11,6 +11,7 @@
11
11
 
12
12
  const yargs = require('yargs');
13
13
  const fs = require('fs');
14
+ const p = require('path');
14
15
 
15
16
  const CONFIG_FILE_NAME = 'react-native.config.js';
16
17
  const PROJECT_FIELD = 'project';
@@ -93,7 +94,11 @@ function extractComponentsNames(reactNativeConfig) {
93
94
  }
94
95
 
95
96
  function generateRCTLegacyInteropComponents() {
96
- const configFilePath = `${appRoot}/${CONFIG_FILE_NAME}`;
97
+ const cwd = process.cwd();
98
+ const configFilePath = p.join(cwd, appRoot, CONFIG_FILE_NAME);
99
+ console.log(
100
+ `Looking for a react-native.config.js file at ${configFilePath}...`,
101
+ );
97
102
  let reactNativeConfig = null;
98
103
  try {
99
104
  reactNativeConfig = require(configFilePath);
@@ -107,7 +112,7 @@ function generateRCTLegacyInteropComponents() {
107
112
  console.log('Skip LegacyInterop generation');
108
113
  return;
109
114
  }
110
-
115
+ console.log(`Components found: ${componentNames}`);
111
116
  let componentsArray = componentNames.map(name => `\t\t\t@"${name}",`);
112
117
  // Remove the last comma
113
118
  if (componentsArray.length > 0) {
@@ -118,6 +123,7 @@ function generateRCTLegacyInteropComponents() {
118
123
 
119
124
  const filePath = `${outputPath}/${OUTPUT_FILE_NAME}`;
120
125
  fs.writeFileSync(filePath, fileBody(componentsArray.join('\n')));
126
+ console.log(`${filePath} updated!`);
121
127
  }
122
128
 
123
129
  generateRCTLegacyInteropComponents();
Binary file
Binary file
Binary file
package/template/Gemfile CHANGED
@@ -3,4 +3,5 @@ source 'https://rubygems.org'
3
3
  # You may use http://rbenv.org/ or https://rvm.io/ to install and use this version
4
4
  ruby ">= 2.6.10"
5
5
 
6
- gem 'cocoapods', '~> 1.12'
6
+ gem 'cocoapods', '~> 1.13'
7
+ gem 'activesupport', '>= 6.1.7.3', '< 7.1.0'
@@ -13,7 +13,7 @@
13
13
  "dependencies": {
14
14
  "expo": "^49.0.7",
15
15
  "react": "18.2.0",
16
- "react-native": "npm:react-native-tvos@0.72.5-0"
16
+ "react-native": "npm:react-native-tvos@0.72.6-1"
17
17
  },
18
18
  "devDependencies": {
19
19
  "@babel/core": "^7.20.0",