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.
Files changed (37) hide show
  1. package/Libraries/AppDelegate/RCTAppDelegate.mm +10 -5
  2. package/Libraries/AppDelegate/RCTRootViewFactory.h +12 -2
  3. package/Libraries/AppDelegate/RCTRootViewFactory.mm +25 -10
  4. package/Libraries/Core/ReactNativeVersion.js +1 -1
  5. package/React/Base/RCTBridgeProxy.h +6 -1
  6. package/React/Base/RCTBridgeProxy.mm +4 -2
  7. package/React/Base/RCTVersion.m +1 -1
  8. package/React/CoreModules/RCTDevMenu.mm +1 -1
  9. package/React/CoreModules/RCTDevSettings.mm +9 -4
  10. package/React/CoreModules/RCTDeviceInfo.mm +6 -9
  11. package/ReactAndroid/api/ReactAndroid.api +1 -0
  12. package/ReactAndroid/gradle.properties +1 -1
  13. package/ReactAndroid/src/main/java/com/facebook/react/ReactActivityDelegate.java +5 -1
  14. package/ReactAndroid/src/main/java/com/facebook/react/ReactDelegate.java +9 -0
  15. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java +1 -1
  16. package/ReactAndroid/src/main/java/com/facebook/react/runtime/BridgelessCatalystInstance.kt +4 -4
  17. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIImplementation.java +1 -7
  18. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java +6 -1
  19. package/ReactCommon/cxxreact/ReactNativeVersion.h +1 -1
  20. package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm +1 -1
  21. package/ReactCommon/react/runtime/iostests/RCTHostTests.mm +2 -1
  22. package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTHost+Internal.h +0 -2
  23. package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTHost.h +10 -1
  24. package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTHost.mm +32 -9
  25. package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTInstance.h +2 -1
  26. package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTInstance.mm +5 -12
  27. package/ReactCommon/react/test_utils/ios/Shims/ShimRCTInstance.h +1 -1
  28. package/ReactCommon/react/test_utils/ios/Shims/ShimRCTInstance.mm +3 -2
  29. package/package.json +8 -8
  30. package/scripts/cocoapods/utils.rb +56 -3
  31. package/scripts/react_native_pods.rb +1 -0
  32. package/sdks/hermesc/osx-bin/hermes +0 -0
  33. package/sdks/hermesc/osx-bin/hermesc +0 -0
  34. package/sdks/hermesc/win64-bin/hermesc.exe +0 -0
  35. package/template/ios/HelloWorld/PrivacyInfo.xcprivacy +38 -0
  36. package/template/ios/HelloWorld.xcodeproj/project.pbxproj +2 -0
  37. 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] initWithBundleURL:self.bundleURL
238
- newArchEnabled:self.fabricEnabled
239
- turboModuleEnabled:self.turboModuleEnabled
240
- bridgelessEnabled:self.bridgelessEnabled];
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) NSURL *bundleURL;
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
- _bundleURL = bundleURL;
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] initWithBundleURL:[self bundleURL]
217
- hostDelegate:nil
218
- turboModuleManagerDelegate:_turboModuleManagerDelegate
219
- jsEngineProvider:^std::shared_ptr<facebook::react::JSRuntimeFactory>() {
220
- return [weakSelf createJSRuntimeFactory];
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.bundleURL;
265
+ return self->_configuration.bundleURLBlock();
251
266
  }
252
267
 
253
268
  @end
@@ -17,7 +17,7 @@ const version: $ReadOnly<{
17
17
  major: 0,
18
18
  minor: 74,
19
19
  patch: 0,
20
- prerelease: 'rc.7',
20
+ prerelease: 'rc.9',
21
21
  };
22
22
 
23
23
  module.exports = {version};
@@ -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 NS_DESIGNATED_INITIALIZER;
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
- [self logError:@"This method is not supported. Returning nil." cmd:_cmd];
195
- return nil;
197
+ return _launchOptions;
196
198
  }
197
199
 
198
200
  - (BOOL)loading
@@ -24,7 +24,7 @@ NSDictionary* RCTGetReactNativeVersion(void)
24
24
  RCTVersionMajor: @(0),
25
25
  RCTVersionMinor: @(74),
26
26
  RCTVersionPatch: @(0),
27
- RCTVersionPrerelease: @"rc.7",
27
+ RCTVersionPrerelease: @"rc.9",
28
28
  };
29
29
  });
30
30
  return __rnVersion;
@@ -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.bridge) {
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.bridge) {
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.bridge) {
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.bridge) {
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
@@ -1,4 +1,4 @@
1
- VERSION_NAME=0.74.0-rc.7
1
+ VERSION_NAME=0.74.0-rc.9
2
2
  react.internal.publishingGroup=com.facebook.react
3
3
 
4
4
  android.useAndroidX=true
@@ -109,7 +109,11 @@ public class ReactActivityDelegate {
109
109
  } else {
110
110
  mReactDelegate =
111
111
  new ReactDelegate(
112
- getPlainActivity(), getReactNativeHost(), mainComponentName, launchOptions) {
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,
@@ -18,5 +18,5 @@ public class ReactNativeVersion {
18
18
  "major", 0,
19
19
  "minor", 74,
20
20
  "patch", 0,
21
- "prerelease", "rc.7");
21
+ "prerelease", "rc.9");
22
22
  }
@@ -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
- throw UnsupportedOperationException("Unimplemented method 'getJavaScriptContextHolder'")
148
+ override fun getJavaScriptContextHolder(): JavaScriptContextHolder? {
149
+ return reactHost.getJavaScriptContextHolder()
150
150
  }
151
151
 
152
- override fun getRuntimeExecutor(): RuntimeExecutor {
153
- throw UnsupportedOperationException("Unimplemented method 'getRuntimeExecutor'")
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
- private int getRootViewNum() {
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
- mUIImplementation.dispatchViewUpdates(batchId);
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
  }
@@ -18,7 +18,7 @@ constexpr struct {
18
18
  int32_t Major = 0;
19
19
  int32_t Minor = 74;
20
20
  int32_t Patch = 0;
21
- std::string_view Prerelease = "rc.7";
21
+ std::string_view Prerelease = "rc.9";
22
22
  } ReactNativeVersion;
23
23
 
24
24
  } // namespace facebook::react
@@ -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 && [self _isLegacyModuleClass:[module class]]) {
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
@@ -9,8 +9,6 @@
9
9
 
10
10
  #import "RCTContextContainerHandling.h"
11
11
 
12
- typedef NSURL * (^RCTHostBundleURLProvider)(void);
13
-
14
12
  @interface RCTHost (Internal)
15
13
 
16
14
  - (void)registerSegmentWithId:(NSNumber *)segmentId path:(NSString *)path;
@@ -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 NS_DESIGNATED_INITIALIZER;
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:bundleURL];
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
@@ -11,7 +11,7 @@
11
11
 
12
12
  @property int initCount;
13
13
  @property int invalidateCount;
14
-
14
+ @property NSDictionary *launchOptions;
15
15
  @property NSString *jsModuleName;
16
16
  @property NSString *method;
17
17
  @property NSArray *args;
@@ -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.7",
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.78",
114
- "@react-native/codegen": "0.74.78",
115
- "@react-native/community-cli-plugin": "0.74.78",
116
- "@react-native/gradle-plugin": "0.74.78",
117
- "@react-native/js-polyfills": "0.74.78",
118
- "@react-native/normalize-colors": "0.74.78",
119
- "@react-native/virtualized-lists": "0.74.78",
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>";
@@ -11,16 +11,16 @@
11
11
  },
12
12
  "dependencies": {
13
13
  "react": "18.2.0",
14
- "react-native": "0.74.0-rc.7"
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.78",
21
- "@react-native/eslint-config": "0.74.78",
22
- "@react-native/metro-config": "0.74.78",
23
- "@react-native/typescript-config": "0.74.78",
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",