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.
- package/Libraries/AppDelegate/RCTAppDelegate.h +0 -2
- package/Libraries/AppDelegate/RCTAppDelegate.mm +20 -13
- package/Libraries/Components/Touchable/TouchableBounce.js +4 -0
- package/Libraries/Components/Touchable/TouchableHighlight.js +1 -0
- package/Libraries/Components/Touchable/TouchableNativeFeedback.js +4 -0
- package/Libraries/Components/Touchable/TouchableOpacity.js +4 -0
- package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +4 -0
- package/Libraries/Core/ReactNativeVersion.js +1 -1
- package/Libraries/promiseRejectionTrackingOptions.js +5 -0
- package/React/Base/RCTVersion.m +1 -1
- package/React/CoreModules/RCTDeviceInfo.mm +33 -0
- package/React/DevSupport/RCTInspectorDevServerHelper.mm +60 -4
- package/React/Modules/RCTUIManager.m +4 -3
- package/React/Views/ScrollView/RCTScrollView.m +4 -0
- package/ReactAndroid/build.gradle +1 -1
- package/ReactAndroid/gradle.properties +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/ReactActivity.java +1 -0
- package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevServerHelper.java +70 -5
- package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagersPropertyCache.java +19 -2
- package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java +29 -4
- package/ReactCommon/cxxreact/ReactNativeVersion.h +1 -1
- package/ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.cpp +2 -2
- package/ReactCommon/react/renderer/debug/flags.h +2 -4
- package/ReactCommon/react/renderer/debug/tests/DebugStringConvertibleTest.cpp +2 -0
- package/ReactCommon/react/renderer/templateprocessor/tests/UITemplateProcessorTest.cpp +4 -0
- package/package.json +14 -13
- package/scripts/cocoapods/utils.rb +4 -40
- package/scripts/react-native-xcode.sh +2 -2
- package/scripts/react_native_pods.rb +1 -2
- package/sdks/hermes-engine/utils/replace_hermes_version.js +1 -1
- package/sdks/hermesc/osx-bin/hermes +0 -0
- package/sdks/hermesc/osx-bin/hermesc +0 -0
- package/sdks/hermesc/win64-bin/hermesc.exe +0 -0
- package/template/Gemfile +4 -2
- package/template/android/app/src/main/java/com/helloworld/MainApplication.kt +5 -5
- package/template/package.json +5 -5
- package/third-party-podspecs/boost.podspec +1 -1
- package/ReactAndroid/src/main/res/devsupport/values-cb/strings.xml +0 -6
- package/ReactAndroid/src/main/res/devsupport/values-fb/strings.xml +0 -8
- package/ReactAndroid/src/main/res/devsupport/values-fb-rLS/strings.xml +0 -8
- package/ReactAndroid/src/main/res/views/uimanager/values-cb/strings.xml +0 -13
- package/ReactAndroid/src/main/res/views/uimanager/values-fb/strings.xml +0 -31
- 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(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
}
|
|
@@ -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${
|
package/React/Base/RCTVersion.m
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
74
|
-
|
|
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(
|
|
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:
|
|
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://
|
|
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)
|
|
@@ -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
|
|
package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagersPropertyCache.java
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 (
|
|
683
|
-
|
|
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).
|
|
@@ -991,7 +991,7 @@ void YogaLayoutableShadowNode::ensureConsistency() const {
|
|
|
991
991
|
}
|
|
992
992
|
|
|
993
993
|
void YogaLayoutableShadowNode::ensureYogaChildrenLookFine() const {
|
|
994
|
-
#
|
|
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
|
-
#
|
|
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
|
-
#
|
|
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
|
-
#
|
|
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.
|
|
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.
|
|
97
|
-
"@react-native-community/cli-platform-android": "12.3.
|
|
98
|
-
"@react-native-community/cli-platform-ios": "12.3.
|
|
99
|
-
"@react-native/assets-registry": "
|
|
100
|
-
"@react-native/community-cli-plugin": "0.73.
|
|
101
|
-
"@react-native/codegen": "
|
|
102
|
-
"@react-native/gradle-plugin": "
|
|
103
|
-
"@react-native/js-polyfills": "
|
|
104
|
-
"@react-native/normalize-colors": "
|
|
105
|
-
"@react-native/virtualized-lists": "
|
|
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.
|
|
118
|
-
"metro-source-map": "^0.80.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
7
|
-
|
|
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
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
|
package/template/package.json
CHANGED
|
@@ -11,16 +11,16 @@
|
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"react": "18.2.0",
|
|
14
|
-
"react-native": "0.73.
|
|
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": "
|
|
21
|
-
"@react-native/eslint-config": "
|
|
22
|
-
"@react-native/metro-config": "
|
|
23
|
-
"@react-native/typescript-config": "
|
|
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://
|
|
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,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>
|