react-native 0.73.1 → 0.73.3

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 (44) hide show
  1. package/Libraries/AppDelegate/RCTAppDelegate.h +0 -2
  2. package/Libraries/AppDelegate/RCTAppDelegate.mm +20 -13
  3. package/Libraries/Components/Touchable/TouchableBounce.js +4 -0
  4. package/Libraries/Components/Touchable/TouchableHighlight.js +1 -0
  5. package/Libraries/Components/Touchable/TouchableNativeFeedback.js +4 -0
  6. package/Libraries/Components/Touchable/TouchableOpacity.js +4 -0
  7. package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +4 -0
  8. package/Libraries/Core/ReactNativeVersion.js +1 -1
  9. package/Libraries/promiseRejectionTrackingOptions.js +5 -0
  10. package/React/Base/RCTVersion.m +1 -1
  11. package/React/CoreModules/RCTDeviceInfo.mm +33 -0
  12. package/React/DevSupport/RCTInspectorDevServerHelper.mm +60 -4
  13. package/React/Modules/RCTUIManager.m +4 -3
  14. package/React/Views/ScrollView/RCTScrollView.m +4 -0
  15. package/ReactAndroid/build.gradle +1 -1
  16. package/ReactAndroid/gradle.properties +1 -1
  17. package/ReactAndroid/src/main/java/com/facebook/react/ReactActivity.java +1 -0
  18. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevServerHelper.java +70 -5
  19. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java +1 -1
  20. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagersPropertyCache.java +19 -2
  21. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java +29 -4
  22. package/ReactCommon/cxxreact/ReactNativeVersion.h +1 -1
  23. package/ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.cpp +2 -2
  24. package/ReactCommon/react/renderer/debug/flags.h +2 -4
  25. package/ReactCommon/react/renderer/debug/tests/DebugStringConvertibleTest.cpp +2 -0
  26. package/ReactCommon/react/renderer/templateprocessor/tests/UITemplateProcessorTest.cpp +4 -0
  27. package/package.json +14 -13
  28. package/scripts/cocoapods/utils.rb +4 -40
  29. package/scripts/react-native-xcode.sh +2 -2
  30. package/scripts/react_native_pods.rb +1 -2
  31. package/sdks/hermes-engine/utils/replace_hermes_version.js +1 -1
  32. package/sdks/hermesc/osx-bin/hermes +0 -0
  33. package/sdks/hermesc/osx-bin/hermesc +0 -0
  34. package/sdks/hermesc/win64-bin/hermesc.exe +0 -0
  35. package/template/Gemfile +4 -2
  36. package/template/android/app/src/main/java/com/helloworld/MainApplication.kt +5 -5
  37. package/template/package.json +5 -5
  38. package/third-party-podspecs/boost.podspec +1 -1
  39. package/ReactAndroid/src/main/res/devsupport/values-cb/strings.xml +0 -6
  40. package/ReactAndroid/src/main/res/devsupport/values-fb/strings.xml +0 -8
  41. package/ReactAndroid/src/main/res/devsupport/values-fb-rLS/strings.xml +0 -8
  42. package/ReactAndroid/src/main/res/views/uimanager/values-cb/strings.xml +0 -13
  43. package/ReactAndroid/src/main/res/views/uimanager/values-fb/strings.xml +0 -31
  44. package/ReactAndroid/src/main/res/views/uimanager/values-fb-rLS/strings.xml +0 -26
@@ -100,8 +100,6 @@
100
100
  * By default, it assigns the rootView to the view property of the rootViewController
101
101
  * If you are not using a simple UIViewController, then there could be other methods to use to setup the rootView.
102
102
  * For example: UISplitViewController requires `setViewController(_:for:)`
103
- *
104
- * @return: void
105
103
  */
106
104
  - (void)setRootView:(UIView *)rootView toRootViewController:(UIViewController *)rootViewController;
107
105
 
@@ -49,6 +49,19 @@ static NSString *const kRNConcurrentRoot = @"concurrentRoot";
49
49
 
50
50
  #endif
51
51
 
52
+ static NSDictionary *updateInitialProps(NSDictionary *initialProps, BOOL isFabricEnabled)
53
+ {
54
+ #ifdef RCT_NEW_ARCH_ENABLED
55
+ NSMutableDictionary *mutableProps = [initialProps mutableCopy] ?: [NSMutableDictionary new];
56
+ // Hardcoding the Concurrent Root as it it not recommended to
57
+ // have the concurrentRoot turned off when Fabric is enabled.
58
+ mutableProps[kRNConcurrentRoot] = @(isFabricEnabled);
59
+ return mutableProps;
60
+ #else
61
+ return initialProps;
62
+ #endif
63
+ }
64
+
52
65
  @interface RCTAppDelegate () <RCTCxxBridgeDelegate> {
53
66
  std::shared_ptr<facebook::react::RuntimeScheduler> _runtimeScheduler;
54
67
  }
@@ -76,10 +89,13 @@ static NSString *const kRNConcurrentRoot = @"concurrentRoot";
76
89
  {
77
90
  BOOL enableTM = NO;
78
91
  BOOL enableBridgeless = NO;
92
+ BOOL fabricEnabled = NO;
79
93
  #if RCT_NEW_ARCH_ENABLED
80
94
  enableTM = self.turboModuleEnabled;
81
95
  enableBridgeless = self.bridgelessEnabled;
96
+ fabricEnabled = [self fabricEnabled];
82
97
  #endif
98
+ NSDictionary *initProps = updateInitialProps([self prepareInitialProps], fabricEnabled);
83
99
 
84
100
  RCTAppSetupPrepareApp(application, enableTM);
85
101
 
@@ -88,7 +104,7 @@ static NSString *const kRNConcurrentRoot = @"concurrentRoot";
88
104
  if (enableBridgeless) {
89
105
  #if RCT_NEW_ARCH_ENABLED
90
106
  // Enable native view config interop only if both bridgeless mode and Fabric is enabled.
91
- RCTSetUseNativeViewConfigsInBridgelessMode([self fabricEnabled]);
107
+ RCTSetUseNativeViewConfigsInBridgelessMode(fabricEnabled);
92
108
 
93
109
  // Enable TurboModule interop by default in Bridgeless mode
94
110
  RCTEnableTurboModuleInterop(YES);
@@ -97,8 +113,7 @@ static NSString *const kRNConcurrentRoot = @"concurrentRoot";
97
113
  [self createReactHost];
98
114
  [self unstable_registerLegacyComponents];
99
115
  [RCTComponentViewFactory currentComponentViewFactory].thirdPartyFabricComponentsProvider = self;
100
- RCTFabricSurface *surface = [_reactHost createSurfaceWithModuleName:self.moduleName
101
- initialProperties:launchOptions];
116
+ RCTFabricSurface *surface = [_reactHost createSurfaceWithModuleName:self.moduleName initialProperties:initProps];
102
117
 
103
118
  RCTSurfaceHostingProxyRootView *surfaceHostingProxyRootView = [[RCTSurfaceHostingProxyRootView alloc]
104
119
  initWithSurface:surface
@@ -118,7 +133,7 @@ static NSString *const kRNConcurrentRoot = @"concurrentRoot";
118
133
  [self unstable_registerLegacyComponents];
119
134
  [RCTComponentViewFactory currentComponentViewFactory].thirdPartyFabricComponentsProvider = self;
120
135
  #endif
121
- NSDictionary *initProps = [self prepareInitialProps];
136
+
122
137
  rootView = [self createRootViewWithBridge:self.bridge moduleName:self.moduleName initProps:initProps];
123
138
  }
124
139
  self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
@@ -140,15 +155,7 @@ static NSString *const kRNConcurrentRoot = @"concurrentRoot";
140
155
 
141
156
  - (NSDictionary *)prepareInitialProps
142
157
  {
143
- NSMutableDictionary *initProps = self.initialProps ? [self.initialProps mutableCopy] : [NSMutableDictionary new];
144
-
145
- #ifdef RCT_NEW_ARCH_ENABLED
146
- // Hardcoding the Concurrent Root as it it not recommended to
147
- // have the concurrentRoot turned off when Fabric is enabled.
148
- initProps[kRNConcurrentRoot] = @([self fabricEnabled]);
149
- #endif
150
-
151
- return initProps;
158
+ return self.initialProps;
152
159
  }
153
160
 
154
161
  - (RCTBridge *)createBridgeWithDelegate:(id<RCTBridgeDelegate>)delegate launchOptions:(NSDictionary *)launchOptions
@@ -203,6 +203,10 @@ class TouchableBounce extends React.Component<Props, State> {
203
203
  this.state.pressability.configure(this._createPressabilityConfig());
204
204
  }
205
205
 
206
+ componentDidMount(): mixed {
207
+ this.state.pressability.configure(this._createPressabilityConfig());
208
+ }
209
+
206
210
  componentWillUnmount(): void {
207
211
  this.state.pressability.reset();
208
212
  }
@@ -363,6 +363,7 @@ class TouchableHighlight extends React.Component<Props, State> {
363
363
 
364
364
  componentDidMount(): void {
365
365
  this._isMounted = true;
366
+ this.state.pressability.configure(this._createPressabilityConfig());
366
367
  }
367
368
 
368
369
  componentDidUpdate(prevProps: Props, prevState: State) {
@@ -339,6 +339,10 @@ class TouchableNativeFeedback extends React.Component<Props, State> {
339
339
  this.state.pressability.configure(this._createPressabilityConfig());
340
340
  }
341
341
 
342
+ componentDidMount(): mixed {
343
+ this.state.pressability.configure(this._createPressabilityConfig());
344
+ }
345
+
342
346
  componentWillUnmount(): void {
343
347
  this.state.pressability.reset();
344
348
  }
@@ -314,6 +314,10 @@ class TouchableOpacity extends React.Component<Props, State> {
314
314
  }
315
315
  }
316
316
 
317
+ componentDidMount(): void {
318
+ this.state.pressability.configure(this._createPressabilityConfig());
319
+ }
320
+
317
321
  componentWillUnmount(): void {
318
322
  this.state.pressability.reset();
319
323
  }
@@ -189,6 +189,10 @@ class TouchableWithoutFeedback extends React.Component<Props, State> {
189
189
  this.state.pressability.configure(createPressabilityConfig(this.props));
190
190
  }
191
191
 
192
+ componentDidMount(): mixed {
193
+ this.state.pressability.configure(createPressabilityConfig(this.props));
194
+ }
195
+
192
196
  componentWillUnmount(): void {
193
197
  this.state.pressability.reset();
194
198
  }
@@ -12,6 +12,6 @@
12
12
  exports.version = {
13
13
  major: 0,
14
14
  minor: 73,
15
- patch: 1,
15
+ patch: 3,
16
16
  prerelease: null,
17
17
  };
@@ -34,6 +34,11 @@ let rejectionTrackingOptions: $NonMaybeType<Parameters<enable>[0]> = {
34
34
  ? rejection
35
35
  : JSON.stringify((rejection: $FlowFixMe));
36
36
  }
37
+ // It could although this object is not a standard error, it still has stack information to unwind
38
+ // $FlowFixMe ignore types just check if stack is there
39
+ if (rejection.stack && typeof rejection.stack === 'string') {
40
+ stack = rejection.stack;
41
+ }
37
42
  }
38
43
 
39
44
  const warning = `Possible unhandled promise rejection (id: ${id}):\n${
@@ -23,7 +23,7 @@ NSDictionary* RCTGetReactNativeVersion(void)
23
23
  __rnVersion = @{
24
24
  RCTVersionMajor: @(0),
25
25
  RCTVersionMinor: @(73),
26
- RCTVersionPatch: @(1),
26
+ RCTVersionPatch: @(3),
27
27
  RCTVersionPrerelease: [NSNull null],
28
28
  };
29
29
  });
@@ -75,11 +75,44 @@ RCT_EXPORT_MODULE()
75
75
  selector:@selector(interfaceFrameDidChange)
76
76
  name:RCTWindowFrameDidChangeNotification
77
77
  object:nil];
78
+
79
+ // TODO T175901725 - Registering the RCTDeviceInfo module to the notification is a short-term fix to unblock 0.73
80
+ // The actual behavior should be that the module is properly registered in the TurboModule/Bridge infrastructure
81
+ // and the infrastructure imperatively invoke the `invalidate` method, rather than listening to a notification.
82
+ // This is a temporary workaround until we can investigate the issue better as there might be other modules in a
83
+ // similar situation.
84
+ [[NSNotificationCenter defaultCenter] addObserver:self
85
+ selector:@selector(invalidate)
86
+ name:RCTBridgeWillInvalidateModulesNotification
87
+ object:nil];
78
88
  }
79
89
 
80
90
  - (void)invalidate
81
91
  {
82
92
  _invalidated = YES;
93
+ [self _cleanupObservers];
94
+ }
95
+
96
+ - (void)_cleanupObservers
97
+ {
98
+ [[NSNotificationCenter defaultCenter] removeObserver:self
99
+ name:RCTAccessibilityManagerDidUpdateMultiplierNotification
100
+ object:[_moduleRegistry moduleForName:"AccessibilityManager"]];
101
+
102
+ [[NSNotificationCenter defaultCenter] removeObserver:self
103
+ name:UIApplicationDidChangeStatusBarOrientationNotification
104
+ object:nil];
105
+
106
+ [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidBecomeActiveNotification object:nil];
107
+
108
+ [[NSNotificationCenter defaultCenter] removeObserver:self name:RCTUserInterfaceStyleDidChangeNotification object:nil];
109
+
110
+ [[NSNotificationCenter defaultCenter] removeObserver:self name:RCTWindowFrameDidChangeNotification object:nil];
111
+
112
+ [[NSNotificationCenter defaultCenter] addObserver:self
113
+ selector:@selector(invalidate)
114
+ name:RCTBridgeWillInvalidateModulesNotification
115
+ object:nil];
83
116
  }
84
117
 
85
118
  static BOOL RCTIsIPhoneNotched()
@@ -15,6 +15,8 @@
15
15
  #import <React/RCTDefines.h>
16
16
  #import <React/RCTInspectorPackagerConnection.h>
17
17
 
18
+ #import <CommonCrypto/CommonCrypto.h>
19
+
18
20
  static NSString *const kDebuggerMsgDisable = @"{ \"id\":1,\"method\":\"Debugger.disable\" }";
19
21
 
20
22
  static NSString *getServerHost(NSURL *bundleURL)
@@ -40,16 +42,65 @@ static NSString *getServerHost(NSURL *bundleURL)
40
42
  return [NSString stringWithFormat:@"%@:%@", host, port];
41
43
  }
42
44
 
45
+ static NSString *getSHA256(NSString *string)
46
+ {
47
+ const char *str = string.UTF8String;
48
+ unsigned char result[CC_SHA256_DIGEST_LENGTH];
49
+ CC_SHA256(str, (CC_LONG)strlen(str), result);
50
+
51
+ return [NSString stringWithFormat:@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
52
+ result[0],
53
+ result[1],
54
+ result[2],
55
+ result[3],
56
+ result[4],
57
+ result[5],
58
+ result[6],
59
+ result[7],
60
+ result[8],
61
+ result[9],
62
+ result[10],
63
+ result[11],
64
+ result[12],
65
+ result[13],
66
+ result[14],
67
+ result[15],
68
+ result[16],
69
+ result[17],
70
+ result[18],
71
+ result[19]];
72
+ }
73
+
74
+ // Returns an opaque ID which is stable for the current combination of device and app, stable across installs,
75
+ // and unique across devices.
76
+ static NSString *getInspectorDeviceId()
77
+ {
78
+ // A bundle ID uniquely identifies a single app throughout the system. [Source: Apple docs]
79
+ NSString *bundleId = [[NSBundle mainBundle] bundleIdentifier];
80
+
81
+ // An alphanumeric string that uniquely identifies a device to the app's vendor. [Source: Apple docs]
82
+ NSString *identifierForVendor = [[UIDevice currentDevice] identifierForVendor].UUIDString;
83
+
84
+ NSString *rawDeviceId = [NSString stringWithFormat:@"apple-%@-%@", identifierForVendor, bundleId];
85
+
86
+ return getSHA256(rawDeviceId);
87
+ }
88
+
43
89
  static NSURL *getInspectorDeviceUrl(NSURL *bundleURL)
44
90
  {
45
91
  NSString *escapedDeviceName = [[[UIDevice currentDevice] name]
46
92
  stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet.URLQueryAllowedCharacterSet];
47
93
  NSString *escapedAppName = [[[NSBundle mainBundle] bundleIdentifier]
48
94
  stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet.URLQueryAllowedCharacterSet];
49
- return [NSURL URLWithString:[NSString stringWithFormat:@"http://%@/inspector/device?name=%@&app=%@",
95
+
96
+ NSString *escapedInspectorDeviceId = [getInspectorDeviceId()
97
+ stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet.URLQueryAllowedCharacterSet];
98
+
99
+ return [NSURL URLWithString:[NSString stringWithFormat:@"http://%@/inspector/device?name=%@&app=%@&device=%@",
50
100
  getServerHost(bundleURL),
51
101
  escapedDeviceName,
52
- escapedAppName]];
102
+ escapedAppName,
103
+ escapedInspectorDeviceId]];
53
104
  }
54
105
 
55
106
  @implementation RCTInspectorDevServerHelper
@@ -70,8 +121,13 @@ static void sendEventToAllConnections(NSString *event)
70
121
  NSString *appId = [[[NSBundle mainBundle] bundleIdentifier]
71
122
  stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet.URLQueryAllowedCharacterSet];
72
123
 
73
- NSURL *url = [NSURL
74
- URLWithString:[NSString stringWithFormat:@"http://%@/open-debugger?appId=%@", getServerHost(bundleURL), appId]];
124
+ NSString *escapedInspectorDeviceId = [getInspectorDeviceId()
125
+ stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet.URLQueryAllowedCharacterSet];
126
+
127
+ NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@/open-debugger?appId=%@&device=%@",
128
+ getServerHost(bundleURL),
129
+ appId,
130
+ escapedInspectorDeviceId]];
75
131
  NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
76
132
  [request setHTTPMethod:@"POST"];
77
133
 
@@ -181,12 +181,13 @@ RCT_EXPORT_MODULE()
181
181
  }
182
182
 
183
183
  // This dispatch_async avoids a deadlock while configuring native modules
184
- dispatch_async(dispatch_get_main_queue(), ^{
184
+ dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0), ^{
185
+ id a11yManager = [self->_bridge moduleForName:@"AccessibilityManager"
186
+ lazilyLoadIfNecessary:YES];
185
187
  [[NSNotificationCenter defaultCenter] addObserver:self
186
188
  selector:@selector(didReceiveNewContentSizeMultiplier)
187
189
  name:@"RCTAccessibilityManagerDidUpdateMultiplierNotification"
188
- object:[self->_bridge moduleForName:@"AccessibilityManager"
189
- lazilyLoadIfNecessary:YES]];
190
+ object:a11yManager];
190
191
  });
191
192
  [[NSNotificationCenter defaultCenter] addObserver:self
192
193
  selector:@selector(namedOrientationDidChange)
@@ -568,6 +568,10 @@ static inline void RCTApplyTransformationAccordingLayoutDirection(
568
568
 
569
569
  - (void)scrollToOffset:(CGPoint)offset animated:(BOOL)animated
570
570
  {
571
+ if ([self reactLayoutDirection] == UIUserInterfaceLayoutDirectionRightToLeft) {
572
+ offset.x = _scrollView.contentSize.width - _scrollView.frame.size.width - offset.x;
573
+ }
574
+
571
575
  if (!CGPointEqualToPoint(_scrollView.contentOffset, offset)) {
572
576
  CGRect maxRect = CGRectMake(
573
577
  fmin(-_scrollView.contentInset.left, 0),
@@ -261,7 +261,7 @@ task createNativeDepsDirectories {
261
261
  }
262
262
 
263
263
  task downloadBoost(dependsOn: createNativeDepsDirectories, type: Download) {
264
- src("https://boostorg.jfrog.io/artifactory/main/release/${BOOST_VERSION.replace("_", ".")}/source/boost_${BOOST_VERSION}.tar.gz")
264
+ src("https://archives.boost.io/release/${BOOST_VERSION.replace("_", ".")}/source/boost_${BOOST_VERSION}.tar.gz")
265
265
  onlyIfModified(true)
266
266
  overwrite(false)
267
267
  retries(5)
@@ -1,4 +1,4 @@
1
- VERSION_NAME=0.73.1
1
+ VERSION_NAME=0.73.3
2
2
  react.internal.publishingGroup=com.facebook.react
3
3
 
4
4
  android.useAndroidX=true
@@ -113,6 +113,7 @@ public abstract class ReactActivity extends AppCompatActivity
113
113
  @Override
114
114
  public void onRequestPermissionsResult(
115
115
  int requestCode, String[] permissions, int[] grantResults) {
116
+ super.onRequestPermissionsResult(requestCode, permissions, grantResults);
116
117
  mDelegate.onRequestPermissionsResult(requestCode, permissions, grantResults);
117
118
  }
118
119
 
@@ -9,6 +9,7 @@ package com.facebook.react.devsupport;
9
9
 
10
10
  import android.net.Uri;
11
11
  import android.os.AsyncTask;
12
+ import android.provider.Settings;
12
13
  import androidx.annotation.NonNull;
13
14
  import androidx.annotation.Nullable;
14
15
  import com.facebook.common.logging.FLog;
@@ -30,6 +31,9 @@ import com.facebook.react.packagerconnection.Responder;
30
31
  import com.facebook.react.util.RNLog;
31
32
  import java.io.File;
32
33
  import java.io.IOException;
34
+ import java.io.UnsupportedEncodingException;
35
+ import java.security.MessageDigest;
36
+ import java.security.NoSuchAlgorithmException;
33
37
  import java.util.HashMap;
34
38
  import java.util.Locale;
35
39
  import java.util.Map;
@@ -244,13 +248,73 @@ public class DevServerHelper {
244
248
  mPackagerConnectionSettings.getDebugServerHost());
245
249
  }
246
250
 
251
+ private static String getSHA256(String string) {
252
+ MessageDigest digest = null;
253
+ try {
254
+ digest = MessageDigest.getInstance("SHA-256");
255
+ } catch (NoSuchAlgorithmException e) {
256
+ throw new AssertionError("Could not get standard SHA-256 algorithm", e);
257
+ }
258
+ digest.reset();
259
+ byte[] result;
260
+ try {
261
+ result = digest.digest(string.getBytes("UTF-8"));
262
+ } catch (UnsupportedEncodingException e) {
263
+ throw new AssertionError("This environment doesn't support UTF-8 encoding", e);
264
+ }
265
+ return String.format(
266
+ "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
267
+ result[0],
268
+ result[1],
269
+ result[2],
270
+ result[3],
271
+ result[4],
272
+ result[5],
273
+ result[6],
274
+ result[7],
275
+ result[8],
276
+ result[9],
277
+ result[10],
278
+ result[11],
279
+ result[12],
280
+ result[13],
281
+ result[14],
282
+ result[15],
283
+ result[16],
284
+ result[17],
285
+ result[18],
286
+ result[19]);
287
+ }
288
+
289
+ // Returns an opaque ID which is stable for the current combination of device and app, stable
290
+ // across installs, and unique across devices.
291
+ private String getInspectorDeviceId() {
292
+ // Every Android app has a unique application ID that looks like a Java or Kotlin package name,
293
+ // such as com.example.myapp. This ID uniquely identifies your app on the device and in the
294
+ // Google Play Store.
295
+ // [Source: Android docs]
296
+ String packageName = mPackageName;
297
+
298
+ // A 64-bit number expressed as a hexadecimal string, which is either:
299
+ // * unique to each combination of app-signing key, user, and device (API level >= 26), or
300
+ // * randomly generated when the user first sets up the device and should remain constant for
301
+ // the lifetime of the user's device (API level < 26).
302
+ // [Source: Android docs]
303
+ String androidId = Settings.Secure.ANDROID_ID;
304
+
305
+ String rawDeviceId = String.format(Locale.US, "android-%s-%s", packageName, androidId);
306
+
307
+ return getSHA256(rawDeviceId);
308
+ }
309
+
247
310
  private String getInspectorDeviceUrl() {
248
311
  return String.format(
249
312
  Locale.US,
250
- "http://%s/inspector/device?name=%s&app=%s",
313
+ "http://%s/inspector/device?name=%s&app=%s&device=%s",
251
314
  mPackagerConnectionSettings.getInspectorServerHost(),
252
- AndroidInfoHelpers.getFriendlyDeviceName(),
253
- mPackageName);
315
+ Uri.encode(AndroidInfoHelpers.getFriendlyDeviceName()),
316
+ Uri.encode(mPackageName),
317
+ Uri.encode(getInspectorDeviceId()));
254
318
  }
255
319
 
256
320
  public void downloadBundleFromURL(
@@ -425,9 +489,10 @@ public class DevServerHelper {
425
489
  String requestUrl =
426
490
  String.format(
427
491
  Locale.US,
428
- "http://%s/open-debugger?appId=%s",
492
+ "http://%s/open-debugger?appId=%s&device=%s",
429
493
  mPackagerConnectionSettings.getInspectorServerHost(),
430
- Uri.encode(mPackageName));
494
+ Uri.encode(mPackageName),
495
+ Uri.encode(getInspectorDeviceId()));
431
496
  Request request =
432
497
  new Request.Builder().url(requestUrl).method("POST", RequestBody.create(null, "")).build();
433
498
 
@@ -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", 73,
20
- "patch", 1,
20
+ "patch", 3,
21
21
  "prerelease", null);
22
22
  }
@@ -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) {
@@ -468,7 +477,11 @@ import java.util.Map;
468
477
  }
469
478
  } else if (propTypeClass == int.class) {
470
479
  for (int i = 0; i < names.length; i++) {
471
- props.put(names[i], new IntPropSetter(annotation, method, i, annotation.defaultInt()));
480
+ if ("Color".equals(annotation.customType())) {
481
+ props.put(names[i], new ColorPropSetter(annotation, method, i, annotation.defaultInt()));
482
+ } else {
483
+ props.put(names[i], new IntPropSetter(annotation, method, i, annotation.defaultInt()));
484
+ }
472
485
  }
473
486
  } else if (propTypeClass == float.class) {
474
487
  for (int i = 0; i < names.length; i++) {
@@ -481,7 +494,11 @@ import java.util.Map;
481
494
  }
482
495
  } else if (propTypeClass == Integer.class) {
483
496
  for (int i = 0; i < names.length; i++) {
484
- props.put(names[i], new BoxedIntPropSetter(annotation, method, i));
497
+ if ("Color".equals(annotation.customType())) {
498
+ props.put(names[i], new BoxedColorPropSetter(annotation, method, i));
499
+ } else {
500
+ props.put(names[i], new BoxedIntPropSetter(annotation, method, i));
501
+ }
485
502
  }
486
503
  } else {
487
504
  throw new RuntimeException(
@@ -9,6 +9,8 @@ package com.facebook.react.views.textinput;
9
9
 
10
10
  import static com.facebook.react.uimanager.UIManagerHelper.getReactContext;
11
11
 
12
+ import android.content.ClipData;
13
+ import android.content.ClipboardManager;
12
14
  import android.content.Context;
13
15
  import android.graphics.Color;
14
16
  import android.graphics.Paint;
@@ -208,7 +210,9 @@ public class ReactEditText extends AppCompatEditText {
208
210
  public void onDestroyActionMode(ActionMode mode) {}
209
211
  };
210
212
  setCustomSelectionActionModeCallback(customActionModeCallback);
211
- setCustomInsertionActionModeCallback(customActionModeCallback);
213
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
214
+ setCustomInsertionActionModeCallback(customActionModeCallback);
215
+ }
212
216
  }
213
217
 
214
218
  @Override
@@ -304,7 +308,26 @@ public class ReactEditText extends AppCompatEditText {
304
308
  @Override
305
309
  public boolean onTextContextMenuItem(int id) {
306
310
  if (id == android.R.id.paste) {
307
- id = android.R.id.pasteAsPlainText;
311
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
312
+ id = android.R.id.pasteAsPlainText;
313
+ } else {
314
+ ClipboardManager clipboard =
315
+ (ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE);
316
+ ClipData previousClipData = clipboard.getPrimaryClip();
317
+ if (previousClipData != null) {
318
+ for (int i = 0; i < previousClipData.getItemCount(); i++) {
319
+ final CharSequence text = previousClipData.getItemAt(i).coerceToText(getContext());
320
+ final CharSequence paste = (text instanceof Spanned) ? text.toString() : text;
321
+ if (paste != null) {
322
+ ClipData clipData = ClipData.newPlainText(null, text);
323
+ clipboard.setPrimaryClip(clipData);
324
+ }
325
+ }
326
+ boolean actionPerformed = super.onTextContextMenuItem(id);
327
+ clipboard.setPrimaryClip(previousClipData);
328
+ return actionPerformed;
329
+ }
330
+ }
308
331
  }
309
332
  return super.onTextContextMenuItem(id);
310
333
  }
@@ -679,8 +702,10 @@ public class ReactEditText extends AppCompatEditText {
679
702
  }
680
703
  mDisableTextDiffing = false;
681
704
 
682
- if (getBreakStrategy() != reactTextUpdate.getTextBreakStrategy()) {
683
- setBreakStrategy(reactTextUpdate.getTextBreakStrategy());
705
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
706
+ if (getBreakStrategy() != reactTextUpdate.getTextBreakStrategy()) {
707
+ setBreakStrategy(reactTextUpdate.getTextBreakStrategy());
708
+ }
684
709
  }
685
710
 
686
711
  // Update cached spans (in Fabric only).
@@ -17,7 +17,7 @@ namespace facebook::react {
17
17
  constexpr struct {
18
18
  int32_t Major = 0;
19
19
  int32_t Minor = 73;
20
- int32_t Patch = 1;
20
+ int32_t Patch = 3;
21
21
  std::string_view Prerelease = "";
22
22
  } ReactNativeVersion;
23
23
 
@@ -991,7 +991,7 @@ void YogaLayoutableShadowNode::ensureConsistency() const {
991
991
  }
992
992
 
993
993
  void YogaLayoutableShadowNode::ensureYogaChildrenLookFine() const {
994
- #ifdef REACT_NATIVE_DEBUG
994
+ #if defined(REACT_NATIVE_DEBUG) && defined(WITH_FBSYSTRACE)
995
995
  // Checking that the shapes of Yoga node children object look fine.
996
996
  // This is the only heuristic that might produce false-positive results
997
997
  // (really broken dangled nodes might look fine). This is useful as an early
@@ -1009,7 +1009,7 @@ void YogaLayoutableShadowNode::ensureYogaChildrenLookFine() const {
1009
1009
  }
1010
1010
 
1011
1011
  void YogaLayoutableShadowNode::ensureYogaChildrenAlignment() const {
1012
- #ifdef REACT_NATIVE_DEBUG
1012
+ #if defined(REACT_NATIVE_DEBUG) && defined(WITH_FBSYSTRACE)
1013
1013
  // If the node is not a leaf node, checking that:
1014
1014
  // - All children are `YogaLayoutableShadowNode` subclasses.
1015
1015
  // - All Yoga children are owned/connected to corresponding children of
@@ -26,7 +26,7 @@
26
26
  // Enables some Shadow Tree introspection features (maintains a StubViewTree,
27
27
  // and logs prev/next tree and mutations if there are any discrepancies). If you
28
28
  // define this, also define `RN_DEBUG_STRING_CONVERTIBLE`.
29
- #ifdef REACT_NATIVE_DEBUG
29
+ #if (defined(REACT_NATIVE_DEBUG) && defined(WITH_FBSYSTRACE))
30
30
  #define RN_SHADOW_TREE_INTROSPECTION 1
31
31
  #endif
32
32
 
@@ -34,9 +34,7 @@
34
34
  // Enable if `RN_SHADOW_TREE_INTROSPECTION` is enabled.
35
35
  #ifdef RN_SHADOW_TREE_INTROSPECTION
36
36
  #define RN_DEBUG_STRING_CONVERTIBLE 1
37
- #endif
38
-
39
- #ifndef RN_DEBUG_STRING_CONVERTIBLE
37
+ #else
40
38
  #define RN_DEBUG_STRING_CONVERTIBLE 0
41
39
  #endif
42
40
 
@@ -5,6 +5,7 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
+ #if RN_DEBUG_STRING_CONVERTIBLE
8
9
  #include <memory>
9
10
 
10
11
  #include <gtest/gtest.h>
@@ -82,3 +83,4 @@ TEST(DebugStringConvertibleTest, handleNodeWithComplexProps) {
82
83
  item->getDebugDescription().c_str(),
83
84
  "<View=hello x=1(height=100 width=200)/>");
84
85
  }
86
+ #endif
@@ -5,6 +5,8 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
+ #if RN_DEBUG_STRING_CONVERTIBLE
9
+
8
10
  #include <exception>
9
11
 
10
12
  #include <glog/logging.h>
@@ -164,3 +166,5 @@ TEST(UITemplateProcessorTest, testConditionalBytecode) {
164
166
  root2->getChildren().at(0)->getProps());
165
167
  ASSERT_STREQ(child_props2->testId.c_str(), "cond_false");
166
168
  }
169
+
170
+ #endif
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native",
3
- "version": "0.73.1",
3
+ "version": "0.73.3",
4
4
  "description": "A framework for building native apps using React",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -93,20 +93,21 @@
93
93
  },
94
94
  "dependencies": {
95
95
  "@jest/create-cache-key-function": "^29.6.3",
96
- "@react-native-community/cli": "12.3.0",
97
- "@react-native-community/cli-platform-android": "12.3.0",
98
- "@react-native-community/cli-platform-ios": "12.3.0",
99
- "@react-native/assets-registry": "^0.73.1",
100
- "@react-native/community-cli-plugin": "0.73.11",
101
- "@react-native/codegen": "^0.73.2",
102
- "@react-native/gradle-plugin": "^0.73.4",
103
- "@react-native/js-polyfills": "^0.73.1",
104
- "@react-native/normalize-colors": "^0.73.2",
105
- "@react-native/virtualized-lists": "^0.73.4",
96
+ "@react-native-community/cli": "12.3.2",
97
+ "@react-native-community/cli-platform-android": "12.3.2",
98
+ "@react-native-community/cli-platform-ios": "12.3.2",
99
+ "@react-native/assets-registry": "0.73.1",
100
+ "@react-native/community-cli-plugin": "0.73.14",
101
+ "@react-native/codegen": "0.73.2",
102
+ "@react-native/gradle-plugin": "0.73.4",
103
+ "@react-native/js-polyfills": "0.73.1",
104
+ "@react-native/normalize-colors": "0.73.2",
105
+ "@react-native/virtualized-lists": "0.73.4",
106
106
  "abort-controller": "^3.0.0",
107
107
  "anser": "^1.4.9",
108
108
  "ansi-regex": "^5.0.0",
109
109
  "base64-js": "^1.5.1",
110
+ "chalk": "^4.0.0",
110
111
  "deprecated-react-native-prop-types": "^5.0.0",
111
112
  "event-target-shim": "^5.0.1",
112
113
  "flow-enums-runtime": "^0.0.6",
@@ -114,8 +115,8 @@
114
115
  "jest-environment-node": "^29.6.3",
115
116
  "jsc-android": "^250231.0.0",
116
117
  "memoize-one": "^5.0.0",
117
- "metro-runtime": "^0.80.0",
118
- "metro-source-map": "^0.80.0",
118
+ "metro-runtime": "^0.80.3",
119
+ "metro-source-map": "^0.80.3",
119
120
  "mkdirp": "^0.5.1",
120
121
  "nullthrows": "^1.1.1",
121
122
  "pretty-format": "^26.5.2",
@@ -162,7 +162,7 @@ class ReactNativePodsUtils
162
162
  project.build_configurations.each do |config|
163
163
  # fix for weak linking
164
164
  self.safe_init(config, other_ld_flags_key)
165
- if self.is_using_xcode15_or_greater(:xcodebuild_manager => xcodebuild_manager)
165
+ if self.is_using_xcode15_0(:xcodebuild_manager => xcodebuild_manager)
166
166
  self.add_value_to_setting_if_missing(config, other_ld_flags_key, xcode15_compatibility_flags)
167
167
  else
168
168
  self.remove_value_to_setting_if_present(config, other_ld_flags_key, xcode15_compatibility_flags)
@@ -387,7 +387,7 @@ class ReactNativePodsUtils
387
387
  end
388
388
  end
389
389
 
390
- def self.is_using_xcode15_or_greater(xcodebuild_manager: Xcodebuild)
390
+ def self.is_using_xcode15_0(xcodebuild_manager: Xcodebuild)
391
391
  xcodebuild_version = xcodebuild_manager.version
392
392
 
393
393
  # The output of xcodebuild -version is something like
@@ -398,7 +398,8 @@ class ReactNativePodsUtils
398
398
  regex = /(\d+)\.(\d+)(?:\.(\d+))?/
399
399
  if match_data = xcodebuild_version.match(regex)
400
400
  major = match_data[1].to_i
401
- return major >= 15
401
+ minor = match_data[2].to_i
402
+ return major == 15 && minor == 0
402
403
  end
403
404
 
404
405
  return false
@@ -538,43 +539,6 @@ class ReactNativePodsUtils
538
539
  ReactNativePodsUtils.update_header_paths_if_depends_on(target_installation_result, "React-ImageManager", header_search_paths)
539
540
  end
540
541
 
541
- def self.get_plist_paths_from(user_project)
542
- info_plists = user_project
543
- .files
544
- .select { |p|
545
- p.name&.end_with?('Info.plist')
546
- }
547
- return info_plists
548
- end
549
-
550
- def self.update_ats_in_plist(plistPaths, parent)
551
- plistPaths.each do |plistPath|
552
- fullPlistPath = File.join(parent, plistPath.path)
553
- plist = Xcodeproj::Plist.read_from_path(fullPlistPath)
554
- ats_configs = {
555
- "NSAllowsArbitraryLoads" => false,
556
- "NSAllowsLocalNetworking" => true,
557
- }
558
- if plist.nil?
559
- plist = {
560
- "NSAppTransportSecurity" => ats_configs
561
- }
562
- else
563
- plist["NSAppTransportSecurity"] ||= {}
564
- plist["NSAppTransportSecurity"] = plist["NSAppTransportSecurity"].merge(ats_configs)
565
- end
566
- Xcodeproj::Plist.write_to_path(plist, fullPlistPath)
567
- end
568
- end
569
-
570
- def self.apply_ats_config(installer)
571
- user_project = installer.aggregate_targets
572
- .map{ |t| t.user_project }
573
- .first
574
- plistPaths = self.get_plist_paths_from(user_project)
575
- self.update_ats_in_plist(plistPaths, user_project.path.parent)
576
- end
577
-
578
542
  def self.react_native_pods
579
543
  return [
580
544
  "DoubleConversion",
@@ -15,7 +15,7 @@ DEST=$CONFIGURATION_BUILD_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH
15
15
  # Enables iOS devices to get the IP address of the machine running Metro
16
16
  if [[ ! "$SKIP_BUNDLING_METRO_IP" && "$CONFIGURATION" = *Debug* && ! "$PLATFORM_NAME" == *simulator ]]; then
17
17
  for num in 0 1 2 3 4 5 6 7 8; do
18
- IP=$(ipconfig getifaddr en${num})
18
+ IP=$(ipconfig getifaddr en${num} || echo "")
19
19
  if [ ! -z "$IP" ]; then
20
20
  break
21
21
  fi
@@ -127,7 +127,7 @@ fi
127
127
  PACKAGER_SOURCEMAP_FILE=
128
128
  if [[ $EMIT_SOURCEMAP == true ]]; then
129
129
  if [[ $USE_HERMES != false ]]; then
130
- PACKAGER_SOURCEMAP_FILE="$CONFIGURATION_BUILD_DIR/$(basename $SOURCEMAP_FILE)"
130
+ PACKAGER_SOURCEMAP_FILE="$CONFIGURATION_BUILD_DIR/$(basename "$SOURCEMAP_FILE")"
131
131
  else
132
132
  PACKAGER_SOURCEMAP_FILE="$SOURCEMAP_FILE"
133
133
  fi
@@ -294,7 +294,7 @@ def react_native_post_install(
294
294
  end
295
295
 
296
296
  fabric_enabled = ENV['RCT_FABRIC_ENABLED'] == '1'
297
- hermes_enabled = ReactNativePodsUtils.has_pod(installer, "React-hermes")
297
+ hermes_enabled = ENV['USE_HERMES'] == '1'
298
298
 
299
299
  if hermes_enabled
300
300
  ReactNativePodsUtils.set_gcc_preprocessor_definition_for_React_hermes(installer)
@@ -307,7 +307,6 @@ def react_native_post_install(
307
307
  ReactNativePodsUtils.set_node_modules_user_settings(installer, react_native_path)
308
308
  ReactNativePodsUtils.apply_flags_for_fabric(installer, fabric_enabled: fabric_enabled)
309
309
  ReactNativePodsUtils.apply_xcode_15_patch(installer)
310
- ReactNativePodsUtils.apply_ats_config(installer)
311
310
  ReactNativePodsUtils.updateOSDeploymentTarget(installer)
312
311
 
313
312
  NewArchitectureHelper.set_clang_cxx_language_standard_if_needed(installer)
@@ -53,7 +53,7 @@ function shouldReplaceHermesConfiguration(configuration) {
53
53
  }
54
54
 
55
55
  function replaceHermesConfiguration(configuration, version, podsRoot) {
56
- const tarballURLPath = `${podsRoot}/hermes-engine-artifacts/hermes-ios-${version}-${configuration}.tar.gz`;
56
+ const tarballURLPath = `${podsRoot}/hermes-engine-artifacts/hermes-ios-${version.toLowerCase()}-${configuration.toLowerCase()}.tar.gz`;
57
57
 
58
58
  const finalLocation = 'hermes-engine';
59
59
  console.log('Preparing the final location');
Binary file
Binary file
Binary file
package/template/Gemfile CHANGED
@@ -3,5 +3,7 @@ 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.13'
7
- gem 'activesupport', '>= 6.1.7.3', '< 7.1.0'
6
+ # Cocoapods 1.15 introduced a bug which break the build. We will remove the upper
7
+ # bound in the template on Cocoapods with next React Native release.
8
+ gem 'cocoapods', '>= 1.13', '< 1.15'
9
+ gem 'activesupport', '>= 6.1.7.5', '< 7.1.0'
@@ -16,11 +16,11 @@ class MainApplication : Application(), ReactApplication {
16
16
 
17
17
  override val reactNativeHost: ReactNativeHost =
18
18
  object : DefaultReactNativeHost(this) {
19
- override fun getPackages(): List<ReactPackage> {
20
- // Packages that cannot be autolinked yet can be added manually here, for example:
21
- // packages.add(new MyReactNativePackage());
22
- return PackageList(this).packages
23
- }
19
+ override fun getPackages(): List<ReactPackage> =
20
+ PackageList(this).packages.apply {
21
+ // Packages that cannot be autolinked yet can be added manually here, for example:
22
+ // add(MyReactNativePackage())
23
+ }
24
24
 
25
25
  override fun getJSMainModuleName(): String = "index"
26
26
 
@@ -11,16 +11,16 @@
11
11
  },
12
12
  "dependencies": {
13
13
  "react": "18.2.0",
14
- "react-native": "0.73.1"
14
+ "react-native": "0.73.3"
15
15
  },
16
16
  "devDependencies": {
17
17
  "@babel/core": "^7.20.0",
18
18
  "@babel/preset-env": "^7.20.0",
19
19
  "@babel/runtime": "^7.20.0",
20
- "@react-native/babel-preset": "^0.73.18",
21
- "@react-native/eslint-config": "^0.73.1",
22
- "@react-native/metro-config": "^0.73.2",
23
- "@react-native/typescript-config": "^0.73.1",
20
+ "@react-native/babel-preset": "0.73.20",
21
+ "@react-native/eslint-config": "0.73.2",
22
+ "@react-native/metro-config": "0.73.4",
23
+ "@react-native/typescript-config": "0.73.1",
24
24
  "@types/react": "^18.2.6",
25
25
  "@types/react-test-renderer": "^18.0.0",
26
26
  "babel-jest": "^29.6.3",
@@ -10,7 +10,7 @@ Pod::Spec.new do |spec|
10
10
  spec.homepage = 'http://www.boost.org'
11
11
  spec.summary = 'Boost provides free peer-reviewed portable C++ source libraries.'
12
12
  spec.authors = 'Rene Rivera'
13
- spec.source = { :http => 'https://boostorg.jfrog.io/artifactory/main/release/1.83.0/source/boost_1_83_0.tar.bz2',
13
+ spec.source = { :http => 'https://archives.boost.io/release/1.83.0/source/boost_1_83_0.tar.bz2',
14
14
  :sha256 => '6478edfe2f3305127cffe8caf73ea0176c53769f4bf1585be237eb30798c3b8e' }
15
15
 
16
16
  # Pinning to the same version as React.podspec.
@@ -1,6 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <!-- See fburl.com/140690840 for information about i18n on Android -->
3
- <!-- @generated -->
4
- <!-- FB Locale: cb_IQ -->
5
- <resources exclude-from-buck-resource-map="true">
6
- </resources>
@@ -1,8 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <!-- See fburl.com/140690840 for information about i18n on Android -->
3
- <!-- @generated -->
4
- <!-- FB Locale: fb_HA -->
5
- <resources exclude-from-buck-resource-map="true">
6
- <string name="catalyst_dev_menu_header" gender="unknown">[React Native Dev Menu (%1$s)#f560753940a8856cdc2de8717c0295df:1]</string>
7
- <string name="catalyst_dev_menu_sub_header" gender="unknown">[Running %1$s#c566f94d6bbe163799a3235b4b55f9d1:1]</string>
8
- </resources>
@@ -1,8 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <!-- See fburl.com/140690840 for information about i18n on Android -->
3
- <!-- @generated -->
4
- <!-- FB Locale: fb_LS -->
5
- <resources exclude-from-buck-resource-map="true">
6
- <string name="catalyst_dev_menu_header" gender="unknown">React Native Dev Menu (%1$s)\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@</string>
7
- <string name="catalyst_dev_menu_sub_header" gender="unknown">Running %1$s\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@</string>
8
- </resources>
@@ -1,13 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <!-- See fburl.com/140690840 for information about i18n on Android -->
3
- <!-- @generated -->
4
- <!-- FB Locale: cb_IQ -->
5
- <resources exclude-from-buck-resource-map="true">
6
- <string name="link_description" gender="unknown">بەستەر</string>
7
- <string name="image_description" gender="unknown">وێنە</string>
8
- <string name="imagebutton_description" gender="unknown">دوگمە، وێنە</string>
9
- <string name="combobox_description" gender="unknown">خشتەی دیاریکردن</string>
10
- <string name="menu_description" gender="unknown">پێڕست</string>
11
- <string name="state_on_description" gender="unknown">کارا</string>
12
- <string name="state_off_description" gender="unknown">کوژاندنەوە</string>
13
- </resources>
@@ -1,31 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <!-- See fburl.com/140690840 for information about i18n on Android -->
3
- <!-- @generated -->
4
- <!-- FB Locale: fb_HA -->
5
- <resources exclude-from-buck-resource-map="true">
6
- <string name="link_description" gender="unknown">[Link#a31d26668a679e44a0843994a6744274:1]</string>
7
- <string name="image_description" gender="unknown">[Image#d8aa55c15c7118a635092b092bcf1d33:1]</string>
8
- <string name="imagebutton_description" gender="unknown">[Button, Image#2b5b423bf3daff8f8b188f5d5733ec14:1]</string>
9
- <string name="header_description" gender="unknown">[Heading#03d19d231fd31bc5dae409f337e4fea3:1]</string>
10
- <string name="alert_description" gender="unknown">[Alert#f230077c00a8397fcc7138dfd8b37405:1]</string>
11
- <string name="combobox_description" gender="unknown">[Combo Box#c399e5a30d2d764efcced424465cacc4:1]</string>
12
- <string name="menu_description" gender="unknown">[Menu#a2c49a9b7c94c31d6f53f5f59329a558:1]</string>
13
- <string name="menubar_description" gender="unknown">[Menu Bar#9ede63b4972815fe4810781f1f15770c:1]</string>
14
- <string name="menuitem_description" gender="unknown">[Menu Item#ba3a1d642e7bfae7a60f57181ff5a91f:1]</string>
15
- <string name="progressbar_description" gender="unknown">[Progress Bar#fc1ee5dacc16eb35a88ca3aff9355683:1]</string>
16
- <string name="radiogroup_description" gender="unknown">[Radio Group#382586bc34074311334bc929c63f69e4:1]</string>
17
- <string name="scrollbar_description" gender="unknown">[Scroll Bar#8c5cb8c1bbbac0ed64bb63c240b9a415:1]</string>
18
- <string name="spinbutton_description" gender="unknown">[Spin Button#8af18737c08f4adab8e7103876d29955:1]</string>
19
- <string name="rn_tab_description" gender="unknown">[Tab#60c56bd22945b4d1532f474bfc568a66:1]</string>
20
- <string name="tablist_description" gender="unknown">[Tab List#8daaf7f9316191f0e35f3ba31ed11aec:1]</string>
21
- <string name="timer_description" gender="unknown">[Timer#2f3aa4d3a05064a96945540d06072632:1]</string>
22
- <string name="toolbar_description" gender="unknown">[Tool Bar#13851684ac57a6612b478471e4894082:1]</string>
23
- <string name="summary_description" gender="unknown">[Summary#12f17d5316cde76d270ad4534e1d9f35:1]</string>
24
- <string name="state_busy_description" gender="unknown">[busy#c38a44fbc4bbf985a9e846c05e60b947:1]</string>
25
- <string name="state_expanded_description" gender="unknown">[expanded#45ee23081f04143c5be90131a7b0e3c5:1]</string>
26
- <string name="state_collapsed_description" gender="unknown">[collapsed#850739bd3f1cb1a9b82c3a6f68399233:1]</string>
27
- <string name="state_unselected_description" gender="unknown">[unselected#815cb61a1bc6c57ed0a65707d8c0c2d2:1]</string>
28
- <string name="state_on_description" gender="unknown">[on#86ddae449e2a1cb3b1fc5fed82bfc660:1]</string>
29
- <string name="state_off_description" gender="unknown">[off#f1ca5b210c9adef0fe7f14fe85ba521d:1]</string>
30
- <string name="state_mixed_description" gender="unknown">[mixed#30d19e1c3c088ba70e30538143bad3a8:1]</string>
31
- </resources>
@@ -1,26 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <!-- See fburl.com/140690840 for information about i18n on Android -->
3
- <!-- @generated -->
4
- <!-- FB Locale: fb_LS -->
5
- <resources exclude-from-buck-resource-map="true">
6
- <string name="image_description" gender="unknown">Image \@\@\@</string>
7
- <string name="imagebutton_description" gender="unknown">Button, Image\@\@\@\@\@\@</string>
8
- <string name="header_description" gender="unknown">Heading \@\@\@ \@\@\@</string>
9
- <string name="combobox_description" gender="unknown">Combo Box \@\@\@</string>
10
- <string name="menu_description" gender="unknown">Menu \@\@\@</string>
11
- <string name="menubar_description" gender="unknown">Menu Bar \@\@\@</string>
12
- <string name="menuitem_description" gender="unknown">Menu Item\@\@\@\@\@\@</string>
13
- <string name="progressbar_description" gender="unknown">Progress Bar\@\@\@\@\@\@</string>
14
- <string name="radiogroup_description" gender="unknown">Radio Group\@\@\@\@\@\@\@\@\@</string>
15
- <string name="scrollbar_description" gender="unknown">Scroll Bar\@\@\@\@\@\@\@\@\@</string>
16
- <string name="spinbutton_description" gender="unknown">Spin Button \@\@\@ \@\@\@</string>
17
- <string name="tablist_description" gender="unknown">Tab List\@\@\@</string>
18
- <string name="timer_description" gender="unknown">Timer \@\@\@</string>
19
- <string name="toolbar_description" gender="unknown">Tool Bar\@\@\@\@\@\@</string>
20
- <string name="summary_description" gender="unknown">Summary\@\@\@\@\@\@</string>
21
- <string name="state_expanded_description" gender="unknown">expanded \@\@\@ \@\@\@</string>
22
- <string name="state_collapsed_description" gender="unknown">collapsed \@\@\@ \@\@\@ \@\@\@</string>
23
- <string name="state_unselected_description" gender="unknown">unselected\@\@\@</string>
24
- <string name="state_off_description" gender="unknown">off \@\@\@</string>
25
- <string name="state_mixed_description" gender="unknown">mixed\@\@\@</string>
26
- </resources>