react-native 0.74.0-rc.7 → 0.74.0-rc.9
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.mm +10 -5
- package/Libraries/AppDelegate/RCTRootViewFactory.h +12 -2
- package/Libraries/AppDelegate/RCTRootViewFactory.mm +25 -10
- package/Libraries/Core/ReactNativeVersion.js +1 -1
- package/React/Base/RCTBridgeProxy.h +6 -1
- package/React/Base/RCTBridgeProxy.mm +4 -2
- package/React/Base/RCTVersion.m +1 -1
- package/React/CoreModules/RCTDevMenu.mm +1 -1
- package/React/CoreModules/RCTDevSettings.mm +9 -4
- package/React/CoreModules/RCTDeviceInfo.mm +6 -9
- package/ReactAndroid/api/ReactAndroid.api +1 -0
- package/ReactAndroid/gradle.properties +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/ReactActivityDelegate.java +5 -1
- package/ReactAndroid/src/main/java/com/facebook/react/ReactDelegate.java +9 -0
- package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/runtime/BridgelessCatalystInstance.kt +4 -4
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIImplementation.java +1 -7
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java +6 -1
- package/ReactCommon/cxxreact/ReactNativeVersion.h +1 -1
- package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm +1 -1
- package/ReactCommon/react/runtime/iostests/RCTHostTests.mm +2 -1
- package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTHost+Internal.h +0 -2
- package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTHost.h +10 -1
- package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTHost.mm +32 -9
- package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTInstance.h +2 -1
- package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTInstance.mm +5 -12
- package/ReactCommon/react/test_utils/ios/Shims/ShimRCTInstance.h +1 -1
- package/ReactCommon/react/test_utils/ios/Shims/ShimRCTInstance.mm +3 -2
- package/package.json +8 -8
- package/scripts/cocoapods/utils.rb +56 -3
- package/scripts/react_native_pods.rb +1 -0
- 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/ios/HelloWorld/PrivacyInfo.xcprivacy +38 -0
- package/template/ios/HelloWorld.xcodeproj/project.pbxproj +2 -0
- package/template/package.json +5 -5
|
@@ -233,13 +233,18 @@
|
|
|
233
233
|
|
|
234
234
|
- (RCTRootViewFactory *)createRCTRootViewFactory
|
|
235
235
|
{
|
|
236
|
+
__weak __typeof(self) weakSelf = self;
|
|
237
|
+
RCTBundleURLBlock bundleUrlBlock = ^{
|
|
238
|
+
RCTAppDelegate *strongSelf = weakSelf;
|
|
239
|
+
return strongSelf.bundleURL;
|
|
240
|
+
};
|
|
241
|
+
|
|
236
242
|
RCTRootViewFactoryConfiguration *configuration =
|
|
237
|
-
[[RCTRootViewFactoryConfiguration alloc]
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
243
|
+
[[RCTRootViewFactoryConfiguration alloc] initWithBundleURLBlock:bundleUrlBlock
|
|
244
|
+
newArchEnabled:self.fabricEnabled
|
|
245
|
+
turboModuleEnabled:self.turboModuleEnabled
|
|
246
|
+
bridgelessEnabled:self.bridgelessEnabled];
|
|
241
247
|
|
|
242
|
-
__weak __typeof(self) weakSelf = self;
|
|
243
248
|
configuration.createRootViewWithBridge = ^UIView *(RCTBridge *bridge, NSString *moduleName, NSDictionary *initProps)
|
|
244
249
|
{
|
|
245
250
|
return [weakSelf createRootViewWithBridge:bridge moduleName:moduleName initProps:initProps];
|
|
@@ -23,6 +23,11 @@ typedef UIView *_Nonnull (
|
|
|
23
23
|
^RCTCreateRootViewWithBridgeBlock)(RCTBridge *bridge, NSString *moduleName, NSDictionary *initProps);
|
|
24
24
|
typedef RCTBridge *_Nonnull (
|
|
25
25
|
^RCTCreateBridgeWithDelegateBlock)(id<RCTBridgeDelegate> delegate, NSDictionary *launchOptions);
|
|
26
|
+
typedef NSURL *_Nullable (^RCTSourceURLForBridgeBlock)(RCTBridge *bridge);
|
|
27
|
+
typedef NSURL *_Nullable (^RCTBundleURLBlock)(void);
|
|
28
|
+
typedef NSArray<id<RCTBridgeModule>> *_Nonnull (^RCTExtraModulesForBridgeBlock)(RCTBridge *bridge);
|
|
29
|
+
typedef NSDictionary<NSString *, Class> *_Nonnull (^RCTExtraLazyModuleClassesForBridge)(RCTBridge *bridge);
|
|
30
|
+
typedef BOOL (^RCTBridgeDidNotFindModuleBlock)(RCTBridge *bridge, NSString *moduleName);
|
|
26
31
|
|
|
27
32
|
#pragma mark - RCTRootViewFactory Configuration
|
|
28
33
|
@interface RCTRootViewFactoryConfiguration : NSObject
|
|
@@ -37,7 +42,7 @@ typedef RCTBridge *_Nonnull (
|
|
|
37
42
|
@property (nonatomic, assign, readonly) BOOL turboModuleEnabled;
|
|
38
43
|
|
|
39
44
|
/// Return the bundle URL for the main bundle.
|
|
40
|
-
@property (nonatomic)
|
|
45
|
+
@property (nonatomic, nonnull) RCTBundleURLBlock bundleURLBlock;
|
|
41
46
|
|
|
42
47
|
/**
|
|
43
48
|
* Use this method to initialize a new instance of `RCTRootViewFactoryConfiguration` by passing a `bundleURL`
|
|
@@ -48,10 +53,15 @@ typedef RCTBridge *_Nonnull (
|
|
|
48
53
|
* pointing to a path inside the app resources, e.g. `file://.../main.jsbundle`.
|
|
49
54
|
*
|
|
50
55
|
*/
|
|
56
|
+
- (instancetype)initWithBundleURLBlock:(RCTBundleURLBlock)bundleURLBlock
|
|
57
|
+
newArchEnabled:(BOOL)newArchEnabled
|
|
58
|
+
turboModuleEnabled:(BOOL)turboModuleEnabled
|
|
59
|
+
bridgelessEnabled:(BOOL)bridgelessEnabled NS_DESIGNATED_INITIALIZER;
|
|
60
|
+
|
|
51
61
|
- (instancetype)initWithBundleURL:(NSURL *)bundleURL
|
|
52
62
|
newArchEnabled:(BOOL)newArchEnabled
|
|
53
63
|
turboModuleEnabled:(BOOL)turboModuleEnabled
|
|
54
|
-
bridgelessEnabled:(BOOL)bridgelessEnabled;
|
|
64
|
+
bridgelessEnabled:(BOOL)bridgelessEnabled __deprecated;
|
|
55
65
|
|
|
56
66
|
/**
|
|
57
67
|
* Block that allows to override logic of creating root view instance.
|
|
@@ -57,9 +57,23 @@ static NSDictionary *updateInitialProps(NSDictionary *initialProps, BOOL isFabri
|
|
|
57
57
|
newArchEnabled:(BOOL)newArchEnabled
|
|
58
58
|
turboModuleEnabled:(BOOL)turboModuleEnabled
|
|
59
59
|
bridgelessEnabled:(BOOL)bridgelessEnabled
|
|
60
|
+
{
|
|
61
|
+
return [self
|
|
62
|
+
initWithBundleURLBlock:^{
|
|
63
|
+
return bundleURL;
|
|
64
|
+
}
|
|
65
|
+
newArchEnabled:newArchEnabled
|
|
66
|
+
turboModuleEnabled:turboModuleEnabled
|
|
67
|
+
bridgelessEnabled:bridgelessEnabled];
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
- (instancetype)initWithBundleURLBlock:(RCTBundleURLBlock)bundleURLBlock
|
|
71
|
+
newArchEnabled:(BOOL)newArchEnabled
|
|
72
|
+
turboModuleEnabled:(BOOL)turboModuleEnabled
|
|
73
|
+
bridgelessEnabled:(BOOL)bridgelessEnabled
|
|
60
74
|
{
|
|
61
75
|
if (self = [super init]) {
|
|
62
|
-
|
|
76
|
+
_bundleURLBlock = bundleURLBlock;
|
|
63
77
|
_fabricEnabled = newArchEnabled;
|
|
64
78
|
_turboModuleEnabled = turboModuleEnabled;
|
|
65
79
|
_bridgelessEnabled = bridgelessEnabled;
|
|
@@ -123,7 +137,7 @@ static NSDictionary *updateInitialProps(NSDictionary *initialProps, BOOL isFabri
|
|
|
123
137
|
RCTEnableTurboModuleInterop(YES);
|
|
124
138
|
RCTEnableTurboModuleInteropBridgeProxy(YES);
|
|
125
139
|
|
|
126
|
-
[self createReactHostIfNeeded];
|
|
140
|
+
[self createReactHostIfNeeded:launchOptions];
|
|
127
141
|
|
|
128
142
|
RCTFabricSurface *surface = [_reactHost createSurfaceWithModuleName:moduleName initialProperties:initProps];
|
|
129
143
|
|
|
@@ -206,19 +220,20 @@ static NSDictionary *updateInitialProps(NSDictionary *initialProps, BOOL isFabri
|
|
|
206
220
|
|
|
207
221
|
#pragma mark - New Arch Utilities
|
|
208
222
|
|
|
209
|
-
- (void)createReactHostIfNeeded
|
|
223
|
+
- (void)createReactHostIfNeeded:(NSDictionary *)launchOptions
|
|
210
224
|
{
|
|
211
225
|
if (_reactHost) {
|
|
212
226
|
return;
|
|
213
227
|
}
|
|
214
228
|
|
|
215
229
|
__weak __typeof(self) weakSelf = self;
|
|
216
|
-
_reactHost = [[RCTHost alloc]
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
230
|
+
_reactHost = [[RCTHost alloc] initWithBundleURLProvider:self->_configuration.bundleURLBlock
|
|
231
|
+
hostDelegate:nil
|
|
232
|
+
turboModuleManagerDelegate:_turboModuleManagerDelegate
|
|
233
|
+
jsEngineProvider:^std::shared_ptr<facebook::react::JSRuntimeFactory>() {
|
|
234
|
+
return [weakSelf createJSRuntimeFactory];
|
|
235
|
+
}
|
|
236
|
+
launchOptions:launchOptions];
|
|
222
237
|
[_reactHost setBundleURLProvider:^NSURL *() {
|
|
223
238
|
return [weakSelf bundleURL];
|
|
224
239
|
}];
|
|
@@ -247,7 +262,7 @@ static NSDictionary *updateInitialProps(NSDictionary *initialProps, BOOL isFabri
|
|
|
247
262
|
|
|
248
263
|
- (NSURL *)bundleURL
|
|
249
264
|
{
|
|
250
|
-
return self->_configuration.
|
|
265
|
+
return self->_configuration.bundleURLBlock();
|
|
251
266
|
}
|
|
252
267
|
|
|
253
268
|
@end
|
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
|
|
10
10
|
#import "RCTBridgeModule.h"
|
|
11
11
|
|
|
12
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
13
|
+
|
|
12
14
|
@class RCTBundleManager;
|
|
13
15
|
@class RCTCallableJSModules;
|
|
14
16
|
@class RCTModuleRegistry;
|
|
@@ -22,7 +24,8 @@
|
|
|
22
24
|
callableJSModules:(RCTCallableJSModules *)callableJSModules
|
|
23
25
|
dispatchToJSThread:(void (^)(dispatch_block_t))dispatchToJSThread
|
|
24
26
|
registerSegmentWithId:(void (^)(NSNumber *, NSString *))registerSegmentWithId
|
|
25
|
-
runtime:(void *)runtime
|
|
27
|
+
runtime:(void *)runtime
|
|
28
|
+
launchOptions:(nullable NSDictionary *)launchOptions NS_DESIGNATED_INITIALIZER;
|
|
26
29
|
|
|
27
30
|
- (NSMethodSignature *)methodSignatureForSelector:(SEL)sel;
|
|
28
31
|
- (void)forwardInvocation:(NSInvocation *)invocation;
|
|
@@ -37,3 +40,5 @@
|
|
|
37
40
|
- (id)moduleForName:(NSString *)moduleName lazilyLoadIfNecessary:(BOOL)lazilyLoad;
|
|
38
41
|
|
|
39
42
|
@end
|
|
43
|
+
|
|
44
|
+
NS_ASSUME_NONNULL_END
|
|
@@ -35,6 +35,7 @@ using namespace facebook;
|
|
|
35
35
|
RCTModuleRegistry *_moduleRegistry;
|
|
36
36
|
RCTBundleManager *_bundleManager;
|
|
37
37
|
RCTCallableJSModules *_callableJSModules;
|
|
38
|
+
NSDictionary *_launchOptions;
|
|
38
39
|
void (^_dispatchToJSThread)(dispatch_block_t);
|
|
39
40
|
void (^_registerSegmentWithId)(NSNumber *, NSString *);
|
|
40
41
|
void *_runtime;
|
|
@@ -47,6 +48,7 @@ using namespace facebook;
|
|
|
47
48
|
dispatchToJSThread:(void (^)(dispatch_block_t))dispatchToJSThread
|
|
48
49
|
registerSegmentWithId:(void (^)(NSNumber *, NSString *))registerSegmentWithId
|
|
49
50
|
runtime:(void *)runtime
|
|
51
|
+
launchOptions:(nullable NSDictionary *)launchOptions
|
|
50
52
|
{
|
|
51
53
|
self = [super self];
|
|
52
54
|
if (self) {
|
|
@@ -57,6 +59,7 @@ using namespace facebook;
|
|
|
57
59
|
_dispatchToJSThread = dispatchToJSThread;
|
|
58
60
|
_registerSegmentWithId = registerSegmentWithId;
|
|
59
61
|
_runtime = runtime;
|
|
62
|
+
_launchOptions = [launchOptions copy];
|
|
60
63
|
}
|
|
61
64
|
return self;
|
|
62
65
|
}
|
|
@@ -191,8 +194,7 @@ using namespace facebook;
|
|
|
191
194
|
|
|
192
195
|
- (NSDictionary *)launchOptions
|
|
193
196
|
{
|
|
194
|
-
|
|
195
|
-
return nil;
|
|
197
|
+
return _launchOptions;
|
|
196
198
|
}
|
|
197
199
|
|
|
198
200
|
- (BOOL)loading
|
package/React/Base/RCTVersion.m
CHANGED
|
@@ -396,7 +396,7 @@ RCT_EXPORT_METHOD(show)
|
|
|
396
396
|
? UIAlertControllerStyleActionSheet
|
|
397
397
|
: UIAlertControllerStyleAlert;
|
|
398
398
|
|
|
399
|
-
NSString *devMenuType = self.bridge ? @"Bridge" : @"Bridgeless";
|
|
399
|
+
NSString *devMenuType = [self.bridge isKindOfClass:RCTBridge.class] ? @"Bridge" : @"Bridgeless";
|
|
400
400
|
NSString *devMenuTitle = [NSString stringWithFormat:@"React Native Dev Menu (%@)", devMenuType];
|
|
401
401
|
|
|
402
402
|
_actionSheet = [UIAlertController alertControllerWithTitle:devMenuTitle message:description preferredStyle:style];
|
|
@@ -158,6 +158,11 @@ RCT_EXPORT_MODULE()
|
|
|
158
158
|
return NO;
|
|
159
159
|
}
|
|
160
160
|
|
|
161
|
+
- (BOOL)_isBridgeMode
|
|
162
|
+
{
|
|
163
|
+
return [self.bridge isKindOfClass:[RCTBridge class]];
|
|
164
|
+
}
|
|
165
|
+
|
|
161
166
|
- (instancetype)initWithDataSource:(id<RCTDevSettingsDataSource>)dataSource
|
|
162
167
|
{
|
|
163
168
|
if (self = [super init]) {
|
|
@@ -178,7 +183,7 @@ RCT_EXPORT_MODULE()
|
|
|
178
183
|
- (void)initialize
|
|
179
184
|
{
|
|
180
185
|
#if RCT_DEV_SETTINGS_ENABLE_PACKAGER_CONNECTION
|
|
181
|
-
if (self
|
|
186
|
+
if ([self _isBridgeMode]) {
|
|
182
187
|
RCTBridge *__weak weakBridge = self.bridge;
|
|
183
188
|
_bridgeExecutorOverrideToken = [[RCTPackagerConnection sharedPackagerConnection]
|
|
184
189
|
addNotificationHandler:^(id params) {
|
|
@@ -209,7 +214,7 @@ RCT_EXPORT_MODULE()
|
|
|
209
214
|
#endif
|
|
210
215
|
|
|
211
216
|
#if RCT_ENABLE_INSPECTOR
|
|
212
|
-
if (self
|
|
217
|
+
if ([self _isBridgeMode]) {
|
|
213
218
|
// We need this dispatch to the main thread because the bridge is not yet
|
|
214
219
|
// finished with its initialisation. By the time it relinquishes control of
|
|
215
220
|
// the main thread, this operation can be performed.
|
|
@@ -250,7 +255,7 @@ RCT_EXPORT_MODULE()
|
|
|
250
255
|
{
|
|
251
256
|
[super invalidate];
|
|
252
257
|
#if RCT_DEV_SETTINGS_ENABLE_PACKAGER_CONNECTION
|
|
253
|
-
if (self
|
|
258
|
+
if ([self _isBridgeMode]) {
|
|
254
259
|
[[RCTPackagerConnection sharedPackagerConnection] removeHandler:_bridgeExecutorOverrideToken];
|
|
255
260
|
}
|
|
256
261
|
|
|
@@ -281,7 +286,7 @@ RCT_EXPORT_MODULE()
|
|
|
281
286
|
- (BOOL)isDeviceDebuggingAvailable
|
|
282
287
|
{
|
|
283
288
|
#if RCT_ENABLE_INSPECTOR
|
|
284
|
-
if (self
|
|
289
|
+
if ([self _isBridgeMode]) {
|
|
285
290
|
return self.bridge.isInspectable;
|
|
286
291
|
} else {
|
|
287
292
|
return self.isInspectable;
|
|
@@ -54,11 +54,6 @@ RCT_EXPORT_MODULE()
|
|
|
54
54
|
|
|
55
55
|
_currentInterfaceOrientation = [RCTSharedApplication() statusBarOrientation];
|
|
56
56
|
|
|
57
|
-
[[NSNotificationCenter defaultCenter] addObserver:self
|
|
58
|
-
selector:@selector(interfaceOrientationDidChange)
|
|
59
|
-
name:UIApplicationDidChangeStatusBarOrientationNotification
|
|
60
|
-
object:nil];
|
|
61
|
-
|
|
62
57
|
_currentInterfaceDimensions = [self _exportedDimensions];
|
|
63
58
|
|
|
64
59
|
[[NSNotificationCenter defaultCenter] addObserver:self
|
|
@@ -75,6 +70,10 @@ RCT_EXPORT_MODULE()
|
|
|
75
70
|
selector:@selector(interfaceFrameDidChange)
|
|
76
71
|
name:RCTWindowFrameDidChangeNotification
|
|
77
72
|
object:nil];
|
|
73
|
+
[[NSNotificationCenter defaultCenter] addObserver:self
|
|
74
|
+
selector:@selector(interfaceFrameDidChange)
|
|
75
|
+
name:UIDeviceOrientationDidChangeNotification
|
|
76
|
+
object:nil];
|
|
78
77
|
|
|
79
78
|
// TODO T175901725 - Registering the RCTDeviceInfo module to the notification is a short-term fix to unblock 0.73
|
|
80
79
|
// The actual behavior should be that the module is properly registered in the TurboModule/Bridge infrastructure
|
|
@@ -102,10 +101,6 @@ RCT_EXPORT_MODULE()
|
|
|
102
101
|
name:RCTAccessibilityManagerDidUpdateMultiplierNotification
|
|
103
102
|
object:[_moduleRegistry moduleForName:"AccessibilityManager"]];
|
|
104
103
|
|
|
105
|
-
[[NSNotificationCenter defaultCenter] removeObserver:self
|
|
106
|
-
name:UIApplicationDidChangeStatusBarOrientationNotification
|
|
107
|
-
object:nil];
|
|
108
|
-
|
|
109
104
|
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidBecomeActiveNotification object:nil];
|
|
110
105
|
|
|
111
106
|
[[NSNotificationCenter defaultCenter] removeObserver:self name:RCTUserInterfaceStyleDidChangeNotification object:nil];
|
|
@@ -113,6 +108,8 @@ RCT_EXPORT_MODULE()
|
|
|
113
108
|
[[NSNotificationCenter defaultCenter] removeObserver:self name:RCTWindowFrameDidChangeNotification object:nil];
|
|
114
109
|
|
|
115
110
|
[[NSNotificationCenter defaultCenter] removeObserver:self name:RCTBridgeWillInvalidateModulesNotification object:nil];
|
|
111
|
+
|
|
112
|
+
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil];
|
|
116
113
|
}
|
|
117
114
|
|
|
118
115
|
static BOOL RCTIsIPhoneNotched()
|
|
@@ -4897,6 +4897,7 @@ public class com/facebook/react/uimanager/UIImplementation {
|
|
|
4897
4897
|
public fun dispatchViewUpdates (I)V
|
|
4898
4898
|
public fun findSubviewIn (IFFLcom/facebook/react/bridge/Callback;)V
|
|
4899
4899
|
public fun getProfiledBatchPerfCounters ()Ljava/util/Map;
|
|
4900
|
+
public fun getRootViewNum ()I
|
|
4900
4901
|
protected fun handleCreateView (Lcom/facebook/react/uimanager/ReactShadowNode;ILcom/facebook/react/uimanager/ReactStylesDiffMap;)V
|
|
4901
4902
|
protected fun handleUpdateView (Lcom/facebook/react/uimanager/ReactShadowNode;Ljava/lang/String;Lcom/facebook/react/uimanager/ReactStylesDiffMap;)V
|
|
4902
4903
|
public fun manageChildren (ILcom/facebook/react/bridge/ReadableArray;Lcom/facebook/react/bridge/ReadableArray;Lcom/facebook/react/bridge/ReadableArray;Lcom/facebook/react/bridge/ReadableArray;Lcom/facebook/react/bridge/ReadableArray;)V
|
|
@@ -109,7 +109,11 @@ public class ReactActivityDelegate {
|
|
|
109
109
|
} else {
|
|
110
110
|
mReactDelegate =
|
|
111
111
|
new ReactDelegate(
|
|
112
|
-
getPlainActivity(),
|
|
112
|
+
getPlainActivity(),
|
|
113
|
+
getReactNativeHost(),
|
|
114
|
+
mainComponentName,
|
|
115
|
+
launchOptions,
|
|
116
|
+
isFabricEnabled()) {
|
|
113
117
|
@Override
|
|
114
118
|
protected ReactRootView createRootView() {
|
|
115
119
|
return ReactActivityDelegate.this.createRootView(launchOptions);
|
|
@@ -45,6 +45,15 @@ public class ReactDelegate {
|
|
|
45
45
|
|
|
46
46
|
private boolean mFabricEnabled = false;
|
|
47
47
|
|
|
48
|
+
/**
|
|
49
|
+
* Do not use this constructor as it's not accounting for New Architecture at all. You should
|
|
50
|
+
* either use {@link ReactDelegate#ReactDelegate(Activity, ReactHost, String, Bundle)} if you're
|
|
51
|
+
* on bridgeless mode or {@link ReactDelegate#ReactDelegate(Activity, ReactNativeHost, String,
|
|
52
|
+
* Bundle, boolean)} and use the last parameter to toggle paper/fabric.
|
|
53
|
+
*
|
|
54
|
+
* @deprecated Use one of the other constructors instead to account for New Architecture.
|
|
55
|
+
*/
|
|
56
|
+
@Deprecated
|
|
48
57
|
public ReactDelegate(
|
|
49
58
|
Activity activity,
|
|
50
59
|
ReactNativeHost reactNativeHost,
|
|
@@ -145,12 +145,12 @@ public class BridgelessCatalystInstance(private val reactHost: ReactHostImpl) :
|
|
|
145
145
|
}
|
|
146
146
|
|
|
147
147
|
@Deprecated(message = "This API is unsupported in the New Architecture.")
|
|
148
|
-
override fun getJavaScriptContextHolder(): JavaScriptContextHolder {
|
|
149
|
-
|
|
148
|
+
override fun getJavaScriptContextHolder(): JavaScriptContextHolder? {
|
|
149
|
+
return reactHost.getJavaScriptContextHolder()
|
|
150
150
|
}
|
|
151
151
|
|
|
152
|
-
override fun getRuntimeExecutor(): RuntimeExecutor {
|
|
153
|
-
|
|
152
|
+
override fun getRuntimeExecutor(): RuntimeExecutor? {
|
|
153
|
+
return reactHost.getRuntimeExecutor()
|
|
154
154
|
}
|
|
155
155
|
|
|
156
156
|
override fun getRuntimeScheduler(): RuntimeScheduler {
|
|
@@ -177,7 +177,7 @@ public class UIImplementation {
|
|
|
177
177
|
*
|
|
178
178
|
* @return The num of root view
|
|
179
179
|
*/
|
|
180
|
-
|
|
180
|
+
public int getRootViewNum() {
|
|
181
181
|
return mOperationsQueue.getNativeViewHierarchyManager().getRootViewNum();
|
|
182
182
|
}
|
|
183
183
|
|
|
@@ -589,12 +589,6 @@ public class UIImplementation {
|
|
|
589
589
|
|
|
590
590
|
/** Invoked at the end of the transaction to commit any updates to the node hierarchy. */
|
|
591
591
|
public void dispatchViewUpdates(int batchId) {
|
|
592
|
-
if (getRootViewNum() <= 0) {
|
|
593
|
-
// If there are no RootViews registered, there will be no View updates to dispatch.
|
|
594
|
-
// This is a hack to prevent this from being called when Fabric is used everywhere.
|
|
595
|
-
// This should no longer be necessary in Bridgeless Mode.
|
|
596
|
-
return;
|
|
597
|
-
}
|
|
598
592
|
SystraceMessage.beginSection(
|
|
599
593
|
Systrace.TRACE_TAG_REACT_JAVA_BRIDGE, "UIImplementation.dispatchViewUpdates")
|
|
600
594
|
.arg("batchId", batchId)
|
|
@@ -707,7 +707,12 @@ public class UIManagerModule extends ReactContextBaseJavaModule
|
|
|
707
707
|
listener.willDispatchViewUpdates(this);
|
|
708
708
|
}
|
|
709
709
|
try {
|
|
710
|
-
|
|
710
|
+
// If there are no RootViews registered, there will be no View updates to dispatch.
|
|
711
|
+
// This is a hack to prevent this from being called when Fabric is used everywhere.
|
|
712
|
+
// This should no longer be necessary in Bridgeless Mode.
|
|
713
|
+
if (mUIImplementation.getRootViewNum() > 0) {
|
|
714
|
+
mUIImplementation.dispatchViewUpdates(batchId);
|
|
715
|
+
}
|
|
711
716
|
} finally {
|
|
712
717
|
Systrace.endSection(Systrace.TRACE_TAG_REACT_JAVA_BRIDGE);
|
|
713
718
|
}
|
package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm
CHANGED
|
@@ -674,7 +674,7 @@ static Class getFallbackClassFromName(const char *name)
|
|
|
674
674
|
*/
|
|
675
675
|
if (_bridge) {
|
|
676
676
|
[(id)module setValue:_bridge forKey:@"bridge"];
|
|
677
|
-
} else if (_bridgeProxy
|
|
677
|
+
} else if (_bridgeProxy) {
|
|
678
678
|
[(id)module setValue:_bridgeProxy forKey:@"bridge"];
|
|
679
679
|
}
|
|
680
680
|
} @catch (NSException *exception) {
|
|
@@ -58,7 +58,8 @@ static ShimRCTInstance *shimmedRCTInstance;
|
|
|
58
58
|
turboModuleManagerDelegate:OCMProtocolMock(@protocol(RCTTurboModuleManagerDelegate))
|
|
59
59
|
jsEngineProvider:^std::shared_ptr<facebook::react::JSRuntimeFactory>() {
|
|
60
60
|
return std::make_shared<facebook::react::RCTHermesInstance>();
|
|
61
|
-
}
|
|
61
|
+
}
|
|
62
|
+
launchOptions:nil];
|
|
62
63
|
}
|
|
63
64
|
|
|
64
65
|
- (void)tearDown
|
|
@@ -21,6 +21,8 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
21
21
|
|
|
22
22
|
@protocol RCTTurboModuleManagerDelegate;
|
|
23
23
|
|
|
24
|
+
typedef NSURL *_Nullable (^RCTHostBundleURLProvider)(void);
|
|
25
|
+
|
|
24
26
|
// Runtime API
|
|
25
27
|
|
|
26
28
|
@protocol RCTHostDelegate <NSObject>
|
|
@@ -45,10 +47,17 @@ typedef std::shared_ptr<facebook::react::JSRuntimeFactory> (^RCTHostJSEngineProv
|
|
|
45
47
|
|
|
46
48
|
@interface RCTHost : NSObject
|
|
47
49
|
|
|
50
|
+
- (instancetype)initWithBundleURLProvider:(RCTHostBundleURLProvider)provider
|
|
51
|
+
hostDelegate:(id<RCTHostDelegate>)hostDelegate
|
|
52
|
+
turboModuleManagerDelegate:(id<RCTTurboModuleManagerDelegate>)turboModuleManagerDelegate
|
|
53
|
+
jsEngineProvider:(RCTHostJSEngineProvider)jsEngineProvider
|
|
54
|
+
launchOptions:(nullable NSDictionary *)launchOptions NS_DESIGNATED_INITIALIZER;
|
|
55
|
+
|
|
48
56
|
- (instancetype)initWithBundleURL:(NSURL *)bundleURL
|
|
49
57
|
hostDelegate:(id<RCTHostDelegate>)hostDelegate
|
|
50
58
|
turboModuleManagerDelegate:(id<RCTTurboModuleManagerDelegate>)turboModuleManagerDelegate
|
|
51
|
-
jsEngineProvider:(RCTHostJSEngineProvider)jsEngineProvider
|
|
59
|
+
jsEngineProvider:(RCTHostJSEngineProvider)jsEngineProvider
|
|
60
|
+
launchOptions:(nullable NSDictionary *)launchOptions __deprecated;
|
|
52
61
|
|
|
53
62
|
@property (nonatomic, weak, nullable) id<RCTHostRuntimeDelegate> runtimeDelegate;
|
|
54
63
|
|
|
@@ -58,6 +58,8 @@ class RCTHostPageTargetDelegate : public facebook::react::jsinspector_modern::Pa
|
|
|
58
58
|
RCTHostBundleURLProvider _bundleURLProvider;
|
|
59
59
|
RCTHostJSEngineProvider _jsEngineProvider;
|
|
60
60
|
|
|
61
|
+
NSDictionary *_launchOptions;
|
|
62
|
+
|
|
61
63
|
// All the surfaces that need to be started after main bundle execution
|
|
62
64
|
NSMutableArray<RCTFabricSurface *> *_surfaceStartBuffer;
|
|
63
65
|
std::mutex _surfaceStartBufferMutex;
|
|
@@ -77,14 +79,31 @@ class RCTHostPageTargetDelegate : public facebook::react::jsinspector_modern::Pa
|
|
|
77
79
|
_RCTInitializeJSThreadConstantInternal();
|
|
78
80
|
}
|
|
79
81
|
|
|
80
|
-
/**
|
|
81
|
-
Host initialization should not be resource intensive. A host may be created before any intention of using React Native
|
|
82
|
-
has been expressed.
|
|
83
|
-
*/
|
|
84
82
|
- (instancetype)initWithBundleURL:(NSURL *)bundleURL
|
|
85
83
|
hostDelegate:(id<RCTHostDelegate>)hostDelegate
|
|
86
84
|
turboModuleManagerDelegate:(id<RCTTurboModuleManagerDelegate>)turboModuleManagerDelegate
|
|
87
85
|
jsEngineProvider:(RCTHostJSEngineProvider)jsEngineProvider
|
|
86
|
+
launchOptions:(nullable NSDictionary *)launchOptions
|
|
87
|
+
{
|
|
88
|
+
return [self
|
|
89
|
+
initWithBundleURLProvider:^{
|
|
90
|
+
return bundleURL;
|
|
91
|
+
}
|
|
92
|
+
hostDelegate:hostDelegate
|
|
93
|
+
turboModuleManagerDelegate:turboModuleManagerDelegate
|
|
94
|
+
jsEngineProvider:jsEngineProvider
|
|
95
|
+
launchOptions:launchOptions];
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
Host initialization should not be resource intensive. A host may be created before any intention of using React Native
|
|
100
|
+
has been expressed.
|
|
101
|
+
*/
|
|
102
|
+
- (instancetype)initWithBundleURLProvider:(RCTHostBundleURLProvider)provider
|
|
103
|
+
hostDelegate:(id<RCTHostDelegate>)hostDelegate
|
|
104
|
+
turboModuleManagerDelegate:(id<RCTTurboModuleManagerDelegate>)turboModuleManagerDelegate
|
|
105
|
+
jsEngineProvider:(RCTHostJSEngineProvider)jsEngineProvider
|
|
106
|
+
launchOptions:(nullable NSDictionary *)launchOptions
|
|
88
107
|
{
|
|
89
108
|
if (self = [super init]) {
|
|
90
109
|
_hostDelegate = hostDelegate;
|
|
@@ -93,9 +112,9 @@ class RCTHostPageTargetDelegate : public facebook::react::jsinspector_modern::Pa
|
|
|
93
112
|
_bundleManager = [RCTBundleManager new];
|
|
94
113
|
_moduleRegistry = [RCTModuleRegistry new];
|
|
95
114
|
_jsEngineProvider = [jsEngineProvider copy];
|
|
115
|
+
_launchOptions = [launchOptions copy];
|
|
96
116
|
|
|
97
117
|
__weak RCTHost *weakSelf = self;
|
|
98
|
-
|
|
99
118
|
auto bundleURLGetter = ^NSURL *()
|
|
100
119
|
{
|
|
101
120
|
RCTHost *strongSelf = weakSelf;
|
|
@@ -107,7 +126,7 @@ class RCTHostPageTargetDelegate : public facebook::react::jsinspector_modern::Pa
|
|
|
107
126
|
};
|
|
108
127
|
|
|
109
128
|
auto bundleURLSetter = ^(NSURL *bundleURL_) {
|
|
110
|
-
[weakSelf _setBundleURL:
|
|
129
|
+
[weakSelf _setBundleURL:bundleURL_];
|
|
111
130
|
};
|
|
112
131
|
|
|
113
132
|
auto defaultBundleURLGetter = ^NSURL *()
|
|
@@ -120,7 +139,6 @@ class RCTHostPageTargetDelegate : public facebook::react::jsinspector_modern::Pa
|
|
|
120
139
|
return strongSelf->_bundleURLProvider();
|
|
121
140
|
};
|
|
122
141
|
|
|
123
|
-
[self _setBundleURL:bundleURL];
|
|
124
142
|
[_bundleManager setBridgelessBundleURLGetter:bundleURLGetter
|
|
125
143
|
andSetter:bundleURLSetter
|
|
126
144
|
andDefaultGetter:defaultBundleURLGetter];
|
|
@@ -166,6 +184,9 @@ class RCTHostPageTargetDelegate : public facebook::react::jsinspector_modern::Pa
|
|
|
166
184
|
|
|
167
185
|
- (void)start
|
|
168
186
|
{
|
|
187
|
+
if (_bundleURLProvider) {
|
|
188
|
+
[self _setBundleURL:_bundleURLProvider()];
|
|
189
|
+
}
|
|
169
190
|
auto &inspectorFlags = jsinspector_modern::InspectorFlags::getInstance();
|
|
170
191
|
if (inspectorFlags.getEnableModernCDPRegistry() && !_inspectorPageId.has_value()) {
|
|
171
192
|
_inspectorTarget =
|
|
@@ -204,7 +225,8 @@ class RCTHostPageTargetDelegate : public facebook::react::jsinspector_modern::Pa
|
|
|
204
225
|
turboModuleManagerDelegate:_turboModuleManagerDelegate
|
|
205
226
|
onInitialBundleLoad:_onInitialBundleLoad
|
|
206
227
|
moduleRegistry:_moduleRegistry
|
|
207
|
-
parentInspectorTarget:_inspectorTarget.get()
|
|
228
|
+
parentInspectorTarget:_inspectorTarget.get()
|
|
229
|
+
launchOptions:_launchOptions];
|
|
208
230
|
[_hostDelegate hostDidStart:self];
|
|
209
231
|
}
|
|
210
232
|
|
|
@@ -284,7 +306,8 @@ class RCTHostPageTargetDelegate : public facebook::react::jsinspector_modern::Pa
|
|
|
284
306
|
turboModuleManagerDelegate:_turboModuleManagerDelegate
|
|
285
307
|
onInitialBundleLoad:_onInitialBundleLoad
|
|
286
308
|
moduleRegistry:_moduleRegistry
|
|
287
|
-
parentInspectorTarget:_inspectorTarget.get()
|
|
309
|
+
parentInspectorTarget:_inspectorTarget.get()
|
|
310
|
+
launchOptions:_launchOptions];
|
|
288
311
|
[_hostDelegate hostDidStart:self];
|
|
289
312
|
|
|
290
313
|
for (RCTFabricSurface *surface in [self _getAttachedSurfaces]) {
|
|
@@ -62,7 +62,8 @@ typedef void (^_Null_unspecified RCTInstanceInitialBundleLoadCompletionBlock)();
|
|
|
62
62
|
turboModuleManagerDelegate:(id<RCTTurboModuleManagerDelegate>)turboModuleManagerDelegate
|
|
63
63
|
onInitialBundleLoad:(RCTInstanceInitialBundleLoadCompletionBlock)onInitialBundleLoad
|
|
64
64
|
moduleRegistry:(RCTModuleRegistry *)moduleRegistry
|
|
65
|
-
parentInspectorTarget:(facebook::react::jsinspector_modern::PageTarget *)parentInspectorTarget
|
|
65
|
+
parentInspectorTarget:(facebook::react::jsinspector_modern::PageTarget *)parentInspectorTarget
|
|
66
|
+
launchOptions:(nullable NSDictionary *)launchOptions;
|
|
66
67
|
|
|
67
68
|
- (void)callFunctionOnJSModule:(NSString *)moduleName method:(NSString *)method args:(NSArray *)args;
|
|
68
69
|
|
|
@@ -31,7 +31,6 @@
|
|
|
31
31
|
#import <React/RCTModuleData.h>
|
|
32
32
|
#import <React/RCTPerformanceLogger.h>
|
|
33
33
|
#import <React/RCTRedBox.h>
|
|
34
|
-
#import <React/RCTReloadCommand.h>
|
|
35
34
|
#import <React/RCTSurfacePresenter.h>
|
|
36
35
|
#import <ReactCommon/RCTTurboModuleManager.h>
|
|
37
36
|
#import <ReactCommon/RuntimeExecutor.h>
|
|
@@ -84,6 +83,7 @@ void RCTInstanceSetRuntimeDiagnosticFlags(NSString *flags)
|
|
|
84
83
|
std::mutex _invalidationMutex;
|
|
85
84
|
std::atomic<bool> _valid;
|
|
86
85
|
RCTJSThreadManager *_jsThreadManager;
|
|
86
|
+
NSDictionary *_launchOptions;
|
|
87
87
|
|
|
88
88
|
// APIs supporting interop with native modules and view managers
|
|
89
89
|
RCTBridgeModuleDecorator *_bridgeModuleDecorator;
|
|
@@ -100,6 +100,7 @@ void RCTInstanceSetRuntimeDiagnosticFlags(NSString *flags)
|
|
|
100
100
|
onInitialBundleLoad:(RCTInstanceInitialBundleLoadCompletionBlock)onInitialBundleLoad
|
|
101
101
|
moduleRegistry:(RCTModuleRegistry *)moduleRegistry
|
|
102
102
|
parentInspectorTarget:(jsinspector_modern::PageTarget *)parentInspectorTarget
|
|
103
|
+
launchOptions:(nullable NSDictionary *)launchOptions
|
|
103
104
|
{
|
|
104
105
|
if (self = [super init]) {
|
|
105
106
|
_performanceLogger = [RCTPerformanceLogger new];
|
|
@@ -125,6 +126,7 @@ void RCTInstanceSetRuntimeDiagnosticFlags(NSString *flags)
|
|
|
125
126
|
[weakSelf callFunctionOnJSModule:moduleName method:methodName args:args];
|
|
126
127
|
}];
|
|
127
128
|
}
|
|
129
|
+
_launchOptions = launchOptions;
|
|
128
130
|
|
|
129
131
|
NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];
|
|
130
132
|
|
|
@@ -133,11 +135,6 @@ void RCTInstanceSetRuntimeDiagnosticFlags(NSString *flags)
|
|
|
133
135
|
name:@"RCTNotifyEventDispatcherObserversOfEvent_DEPRECATED"
|
|
134
136
|
object:nil];
|
|
135
137
|
|
|
136
|
-
[defaultCenter addObserver:self
|
|
137
|
-
selector:@selector(didReceiveReloadCommand)
|
|
138
|
-
name:RCTTriggerReloadCommandNotification
|
|
139
|
-
object:nil];
|
|
140
|
-
|
|
141
138
|
[self _start];
|
|
142
139
|
}
|
|
143
140
|
return self;
|
|
@@ -276,7 +273,8 @@ void RCTInstanceSetRuntimeDiagnosticFlags(NSString *flags)
|
|
|
276
273
|
[strongSelf registerSegmentWithId:segmentId path:path];
|
|
277
274
|
}
|
|
278
275
|
}
|
|
279
|
-
runtime:_reactInstance->getJavaScriptContext()
|
|
276
|
+
runtime:_reactInstance->getJavaScriptContext()
|
|
277
|
+
launchOptions:_launchOptions];
|
|
280
278
|
bridgeProxy.jsCallInvoker = jsCallInvoker;
|
|
281
279
|
[RCTBridge setCurrentBridge:(RCTBridge *)bridgeProxy];
|
|
282
280
|
|
|
@@ -519,9 +517,4 @@ void RCTInstanceSetRuntimeDiagnosticFlags(NSString *flags)
|
|
|
519
517
|
isFatal:errorMap.getBool(JSErrorHandlerKey::kIsFatal)];
|
|
520
518
|
}
|
|
521
519
|
|
|
522
|
-
- (void)didReceiveReloadCommand
|
|
523
|
-
{
|
|
524
|
-
[self _loadJSBundle:[_bridgeModuleDecorator.bundleManager bundleURL]];
|
|
525
|
-
}
|
|
526
|
-
|
|
527
520
|
@end
|
|
@@ -24,7 +24,7 @@ static __weak ShimRCTInstance *weakShim = nil;
|
|
|
24
24
|
[ShimRCTInstance class],
|
|
25
25
|
@selector(initWithDelegate:
|
|
26
26
|
jsRuntimeFactory:bundleManager:turboModuleManagerDelegate:onInitialBundleLoad:moduleRegistry
|
|
27
|
-
:parentInspectorTarget:));
|
|
27
|
+
:parentInspectorTarget:launchOptions:));
|
|
28
28
|
RCTSwizzleInstanceSelector([RCTInstance class], [ShimRCTInstance class], @selector(invalidate));
|
|
29
29
|
RCTSwizzleInstanceSelector(
|
|
30
30
|
[RCTInstance class], [ShimRCTInstance class], @selector(callFunctionOnJSModule:method:args:));
|
|
@@ -40,7 +40,7 @@ static __weak ShimRCTInstance *weakShim = nil;
|
|
|
40
40
|
[ShimRCTInstance class],
|
|
41
41
|
@selector(initWithDelegate:
|
|
42
42
|
jsRuntimeFactory:bundleManager:turboModuleManagerDelegate:onInitialBundleLoad:moduleRegistry
|
|
43
|
-
:parentInspectorTarget:));
|
|
43
|
+
:parentInspectorTarget:launchOptions:));
|
|
44
44
|
RCTSwizzleInstanceSelector([RCTInstance class], [ShimRCTInstance class], @selector(invalidate));
|
|
45
45
|
RCTSwizzleInstanceSelector(
|
|
46
46
|
[RCTInstance class], [ShimRCTInstance class], @selector(callFunctionOnJSModule:method:args:));
|
|
@@ -55,6 +55,7 @@ static __weak ShimRCTInstance *weakShim = nil;
|
|
|
55
55
|
onInitialBundleLoad:(RCTInstanceInitialBundleLoadCompletionBlock)onInitialBundleLoad
|
|
56
56
|
moduleRegistry:(RCTModuleRegistry *)moduleRegistry
|
|
57
57
|
parentInspectorTarget:(facebook::react::jsinspector_modern::PageTarget *)parentInspectorTarget
|
|
58
|
+
launchOptions:(NSDictionary *)launchOptions
|
|
58
59
|
{
|
|
59
60
|
weakShim.initCount++;
|
|
60
61
|
return self;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native",
|
|
3
|
-
"version": "0.74.0-rc.
|
|
3
|
+
"version": "0.74.0-rc.9",
|
|
4
4
|
"description": "A framework for building native apps using React",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -110,13 +110,13 @@
|
|
|
110
110
|
"@react-native-community/cli": "13.6.4",
|
|
111
111
|
"@react-native-community/cli-platform-android": "13.6.4",
|
|
112
112
|
"@react-native-community/cli-platform-ios": "13.6.4",
|
|
113
|
-
"@react-native/assets-registry": "0.74.
|
|
114
|
-
"@react-native/codegen": "0.74.
|
|
115
|
-
"@react-native/community-cli-plugin": "0.74.
|
|
116
|
-
"@react-native/gradle-plugin": "0.74.
|
|
117
|
-
"@react-native/js-polyfills": "0.74.
|
|
118
|
-
"@react-native/normalize-colors": "0.74.
|
|
119
|
-
"@react-native/virtualized-lists": "0.74.
|
|
113
|
+
"@react-native/assets-registry": "0.74.80",
|
|
114
|
+
"@react-native/codegen": "0.74.80",
|
|
115
|
+
"@react-native/community-cli-plugin": "0.74.80",
|
|
116
|
+
"@react-native/gradle-plugin": "0.74.80",
|
|
117
|
+
"@react-native/js-polyfills": "0.74.80",
|
|
118
|
+
"@react-native/normalize-colors": "0.74.80",
|
|
119
|
+
"@react-native/virtualized-lists": "0.74.80",
|
|
120
120
|
"abort-controller": "^3.0.0",
|
|
121
121
|
"anser": "^1.4.9",
|
|
122
122
|
"ansi-regex": "^5.0.0",
|
|
@@ -98,11 +98,12 @@ class ReactNativePodsUtils
|
|
|
98
98
|
Pod::UI.puts("#{message_prefix}: Ccache found at #{ccache_path}")
|
|
99
99
|
end
|
|
100
100
|
|
|
101
|
+
# Using scripts wrapping the ccache executable, to allow injection of configurations
|
|
102
|
+
ccache_clang_sh = File.join("$(REACT_NATIVE_PATH)", 'scripts', 'xcode', 'ccache-clang.sh')
|
|
103
|
+
ccache_clangpp_sh = File.join("$(REACT_NATIVE_PATH)", 'scripts', 'xcode', 'ccache-clang++.sh')
|
|
104
|
+
|
|
101
105
|
if ccache_available and ccache_enabled
|
|
102
106
|
Pod::UI.puts("#{message_prefix}: Setting CC, LD, CXX & LDPLUSPLUS build settings")
|
|
103
|
-
# Using scripts wrapping the ccache executable, to allow injection of configurations
|
|
104
|
-
ccache_clang_sh = File.join("$(REACT_NATIVE_PATH)", 'scripts', 'xcode', 'ccache-clang.sh')
|
|
105
|
-
ccache_clangpp_sh = File.join("$(REACT_NATIVE_PATH)", 'scripts', 'xcode', 'ccache-clang++.sh')
|
|
106
107
|
|
|
107
108
|
projects.each do |project|
|
|
108
109
|
project.build_configurations.each do |config|
|
|
@@ -119,6 +120,20 @@ class ReactNativePodsUtils
|
|
|
119
120
|
Pod::UI.puts("#{message_prefix}: Pass ':ccache_enabled => true' to 'react_native_post_install' in your Podfile or set environment variable 'USE_CCACHE=1' to increase the speed of subsequent builds")
|
|
120
121
|
elsif !ccache_available and ccache_enabled
|
|
121
122
|
Pod::UI.warn("#{message_prefix}: Install ccache or ensure your neither passing ':ccache_enabled => true' nor setting environment variable 'USE_CCACHE=1'")
|
|
123
|
+
else
|
|
124
|
+
Pod::UI.puts("#{message_prefix}: Removing Ccache from CC, LD, CXX & LDPLUSPLUS build settings")
|
|
125
|
+
|
|
126
|
+
projects.each do |project|
|
|
127
|
+
project.build_configurations.each do |config|
|
|
128
|
+
# Using the un-qualified names means you can swap in different implementations, for example ccache
|
|
129
|
+
config.build_settings["CC"] = config.build_settings["CC"] ? config.build_settings["CC"].gsub(/#{Regexp.escape(ccache_clang_sh)}/, '') : ""
|
|
130
|
+
config.build_settings["LD"] = config.build_settings["LD"] ? config.build_settings["LD"].gsub(/#{Regexp.escape(ccache_clang_sh)}/, "") : ""
|
|
131
|
+
config.build_settings["CXX"] = config.build_settings["CXX"] ? config.build_settings["CXX"].gsub(/#{Regexp.escape(ccache_clangpp_sh)}/, "") : ""
|
|
132
|
+
config.build_settings["LDPLUSPLUS"] = config.build_settings["LDPLUSPLUS"] ? config.build_settings["LDPLUSPLUS"].gsub(/#{Regexp.escape(ccache_clangpp_sh)}/, "") : ""
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
project.save()
|
|
136
|
+
end
|
|
122
137
|
end
|
|
123
138
|
end
|
|
124
139
|
|
|
@@ -576,6 +591,44 @@ class ReactNativePodsUtils
|
|
|
576
591
|
ReactNativePodsUtils.update_header_paths_if_depends_on(target_installation_result, "React-ImageManager", header_search_paths)
|
|
577
592
|
end
|
|
578
593
|
|
|
594
|
+
def self.get_privacy_manifest_paths_from(user_project)
|
|
595
|
+
privacy_manifests = user_project
|
|
596
|
+
.files
|
|
597
|
+
.select { |p|
|
|
598
|
+
p.path&.end_with?('PrivacyInfo.xcprivacy')
|
|
599
|
+
}
|
|
600
|
+
return privacy_manifests
|
|
601
|
+
end
|
|
602
|
+
|
|
603
|
+
def self.add_privacy_manifest_if_needed(installer)
|
|
604
|
+
user_project = installer.aggregate_targets
|
|
605
|
+
.map{ |t| t.user_project }
|
|
606
|
+
.first
|
|
607
|
+
privacy_manifest = self.get_privacy_manifest_paths_from(user_project).first
|
|
608
|
+
if privacy_manifest.nil?
|
|
609
|
+
file_timestamp_reason = {
|
|
610
|
+
"NSPrivacyAccessedAPIType" => "NSPrivacyAccessedAPICategoryFileTimestamp",
|
|
611
|
+
"NSPrivacyAccessedAPITypeReasons" => ["C617.1"],
|
|
612
|
+
}
|
|
613
|
+
user_defaults_reason = {
|
|
614
|
+
"NSPrivacyAccessedAPIType" => "NSPrivacyAccessedAPICategoryUserDefaults",
|
|
615
|
+
"NSPrivacyAccessedAPITypeReasons" => ["CA92.1"],
|
|
616
|
+
}
|
|
617
|
+
boot_time_reason = {
|
|
618
|
+
"NSPrivacyAccessedAPIType" => "NSPrivacyAccessedAPICategorySystemBootTime",
|
|
619
|
+
"NSPrivacyAccessedAPITypeReasons" => ["35F9.1"],
|
|
620
|
+
}
|
|
621
|
+
privacy_manifest = {
|
|
622
|
+
"NSPrivacyCollectedDataTypes" => [],
|
|
623
|
+
"NSPrivacyTracking" => false,
|
|
624
|
+
"NSPrivacyAccessedAPITypes" => [file_timestamp_reason, user_defaults_reason, boot_time_reason]
|
|
625
|
+
}
|
|
626
|
+
path = File.join(user_project.path.parent, "PrivacyInfo.xcprivacy")
|
|
627
|
+
Xcodeproj::Plist.write_to_path(privacy_manifest, path)
|
|
628
|
+
Pod::UI.puts "Your app does not have a privacy manifest! A template has been generated containing Required Reasons API usage in the core React Native library. Please add the PrivacyInfo.xcprivacy file to your project and complete data use, tracking and any additional required reasons your app is using according to Apple's guidance: https://developer.apple.com/.../privacy_manifest_files. Then, you will need to manually add this file to your project in Xcode.".red
|
|
629
|
+
end
|
|
630
|
+
end
|
|
631
|
+
|
|
579
632
|
def self.react_native_pods
|
|
580
633
|
return [
|
|
581
634
|
"DoubleConversion",
|
|
@@ -292,6 +292,7 @@ def react_native_post_install(
|
|
|
292
292
|
ReactNativePodsUtils.updateOSDeploymentTarget(installer)
|
|
293
293
|
ReactNativePodsUtils.set_dynamic_frameworks_flags(installer)
|
|
294
294
|
ReactNativePodsUtils.add_ndebug_flag_to_pods_in_release(installer)
|
|
295
|
+
ReactNativePodsUtils.add_privacy_manifest_if_needed(installer)
|
|
295
296
|
|
|
296
297
|
NewArchitectureHelper.set_clang_cxx_language_standard_if_needed(installer)
|
|
297
298
|
NewArchitectureHelper.modify_flags_for_new_architecture(installer, NewArchitectureHelper.new_arch_enabled)
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
+
<plist version="1.0">
|
|
4
|
+
<dict>
|
|
5
|
+
<key>NSPrivacyCollectedDataTypes</key>
|
|
6
|
+
<array>
|
|
7
|
+
</array>
|
|
8
|
+
<key>NSPrivacyAccessedAPITypes</key>
|
|
9
|
+
<array>
|
|
10
|
+
<dict>
|
|
11
|
+
<key>NSPrivacyAccessedAPIType</key>
|
|
12
|
+
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
|
|
13
|
+
<key>NSPrivacyAccessedAPITypeReasons</key>
|
|
14
|
+
<array>
|
|
15
|
+
<string>C617.1</string>
|
|
16
|
+
</array>
|
|
17
|
+
</dict>
|
|
18
|
+
<dict>
|
|
19
|
+
<key>NSPrivacyAccessedAPIType</key>
|
|
20
|
+
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
|
|
21
|
+
<key>NSPrivacyAccessedAPITypeReasons</key>
|
|
22
|
+
<array>
|
|
23
|
+
<string>CA92.1</string>
|
|
24
|
+
</array>
|
|
25
|
+
</dict>
|
|
26
|
+
<dict>
|
|
27
|
+
<key>NSPrivacyAccessedAPIType</key>
|
|
28
|
+
<string>NSPrivacyAccessedAPICategorySystemBootTime</string>
|
|
29
|
+
<key>NSPrivacyAccessedAPITypeReasons</key>
|
|
30
|
+
<array>
|
|
31
|
+
<string>35F9.1</string>
|
|
32
|
+
</array>
|
|
33
|
+
</dict>
|
|
34
|
+
</array>
|
|
35
|
+
<key>NSPrivacyTracking</key>
|
|
36
|
+
<false/>
|
|
37
|
+
</dict>
|
|
38
|
+
</plist>
|
|
@@ -36,6 +36,7 @@
|
|
|
36
36
|
13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = HelloWorld/Images.xcassets; sourceTree = "<group>"; };
|
|
37
37
|
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = HelloWorld/Info.plist; sourceTree = "<group>"; };
|
|
38
38
|
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = HelloWorld/main.m; sourceTree = "<group>"; };
|
|
39
|
+
13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = PrivacyInfo.xcprivacy; path = HelloWorld/PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
|
|
39
40
|
19F6CBCC0A4E27FBF8BF4A61 /* libPods-HelloWorld-HelloWorldTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-HelloWorld-HelloWorldTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
40
41
|
3B4392A12AC88292D35C810B /* Pods-HelloWorld.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HelloWorld.debug.xcconfig"; path = "Target Support Files/Pods-HelloWorld/Pods-HelloWorld.debug.xcconfig"; sourceTree = "<group>"; };
|
|
41
42
|
5709B34CF0A7D63546082F79 /* Pods-HelloWorld.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HelloWorld.release.xcconfig"; path = "Target Support Files/Pods-HelloWorld/Pods-HelloWorld.release.xcconfig"; sourceTree = "<group>"; };
|
|
@@ -92,6 +93,7 @@
|
|
|
92
93
|
13B07FB61A68108700A75B9A /* Info.plist */,
|
|
93
94
|
81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */,
|
|
94
95
|
13B07FB71A68108700A75B9A /* main.m */,
|
|
96
|
+
13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */,
|
|
95
97
|
);
|
|
96
98
|
name = HelloWorld;
|
|
97
99
|
sourceTree = "<group>";
|
package/template/package.json
CHANGED
|
@@ -11,16 +11,16 @@
|
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"react": "18.2.0",
|
|
14
|
-
"react-native": "0.74.0-rc.
|
|
14
|
+
"react-native": "0.74.0-rc.9"
|
|
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.74.
|
|
21
|
-
"@react-native/eslint-config": "0.74.
|
|
22
|
-
"@react-native/metro-config": "0.74.
|
|
23
|
-
"@react-native/typescript-config": "0.74.
|
|
20
|
+
"@react-native/babel-preset": "0.74.80",
|
|
21
|
+
"@react-native/eslint-config": "0.74.80",
|
|
22
|
+
"@react-native/metro-config": "0.74.80",
|
|
23
|
+
"@react-native/typescript-config": "0.74.80",
|
|
24
24
|
"@types/react": "^18.2.6",
|
|
25
25
|
"@types/react-test-renderer": "^18.0.0",
|
|
26
26
|
"babel-jest": "^29.6.3",
|