@rnx-kit/react-native-host 0.4.9 → 0.4.11

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/README.md CHANGED
@@ -26,12 +26,32 @@ npm add --save-dev @rnx-kit/react-native-host
26
26
 
27
27
  ### iOS/macOS
28
28
 
29
- > To see a working example how to use this library for iOS/macOS, please refer
30
- > to
31
- > [react-native-test-app](https://github.com/microsoft/react-native-test-app/tree/trunk/ios/ReactTestApp).
29
+ > [!NOTE]
30
+ >
31
+ > For a working example how to use this library for iOS/macOS, see
32
+ > [react-native-test-app](https://github.com/microsoft/react-native-test-app/commit/241ddaf83e74f5d53a9144bcfd52f8f948425fcb#diff-8c45578b4f5841935bf037692cf65041333e9415552dcde4ac6c77bac00cd1b5).
32
33
 
33
- [Autolinking](https://github.com/react-native-community/cli/blob/10.x/docs/autolinking.md)
34
- should make this module available to your app project.
34
+ To avoid accidental autolinking, `@rnx-kit/react-native-host` must be manually
35
+ linked. In your `Podfile`, add the following line:
36
+
37
+ ```rb
38
+ pod 'ReactNativeHost', :path => '../node_modules/@rnx-kit/react-native-host'
39
+ ```
40
+
41
+ Adjust the path accordingly to your project setup. If you prefer a more dynamic
42
+ approach, you can also try using this script:
43
+
44
+ ```rb
45
+ proj_dir = Pathname.new(__dir__)
46
+ proj_dir = proj_dir.parent until
47
+ File.exist?("#{proj_dir}/node_modules/@rnx-kit/react-native-host/ReactNativeHost.podspec") ||
48
+ proj_dir.expand_path.to_s == '/'
49
+
50
+ pod 'ReactNativeHost', :path => "#{proj_dir}/node_modules/@rnx-kit/react-native-host"
51
+ ```
52
+
53
+ Run `pod install` at least once to make sure it gets added to your project. Then
54
+ make the following changes:
35
55
 
36
56
  - Replace instances of `RCTBridgeDelegate` with `RNXHostConfig`. The latter is a
37
57
  superset and is backwards compatible.
@@ -12,6 +12,12 @@
12
12
 
13
13
  #import <react/config/ReactNativeConfig.h>
14
14
 
15
+ #if __has_include(<react/featureflags/ReactNativeFeatureFlags.h>)
16
+ #import <react/featureflags/ReactNativeFeatureFlags.h>
17
+ #import <react/featureflags/ReactNativeFeatureFlagsDefaults.h>
18
+ #define USE_FEATURE_FLAGS
19
+ #endif // __has_include(<react/featureflags/ReactNativeFeatureFlags.h>)
20
+
15
21
  #if __has_include(<react/runtime/JSEngineInstance.h>)
16
22
  using SharedJSRuntimeFactory = std::shared_ptr<facebook::react::JSEngineInstance>;
17
23
  #else
@@ -42,6 +48,28 @@ using SharedJSRuntimeFactory = std::shared_ptr<facebook::react::JSRuntimeFactory
42
48
  - (RCTSurfacePresenter *)getSurfacePresenter; // Deprecated in 0.74, and removed in 0.75
43
49
  @end
44
50
 
51
+ #ifdef USE_FEATURE_FLAGS
52
+ // https://github.com/facebook/react-native/blob/0.74-stable/packages/react-native/Libraries/AppDelegate/RCTAppDelegate.mm#L272-L286
53
+ class RNXBridgelessFeatureFlags : public facebook::react::ReactNativeFeatureFlagsDefaults
54
+ {
55
+ public:
56
+ bool useModernRuntimeScheduler() override
57
+ {
58
+ return true;
59
+ }
60
+
61
+ bool enableMicrotasks() override
62
+ {
63
+ return true;
64
+ }
65
+
66
+ bool batchRenderingUpdatesInEventLoop() override
67
+ {
68
+ return true;
69
+ }
70
+ };
71
+ #endif // USE_FEATURE_FLAGS
72
+
45
73
  #elif USE_FABRIC
46
74
 
47
75
  #import <React/RCTSurfacePresenterBridgeAdapter.h>
@@ -49,6 +49,23 @@ using ReactNativeConfig = facebook::react::EmptyReactNativeConfig const;
49
49
  - (instancetype)initWithConfig:(id<RNXHostConfig>)config launchOptions:(NSDictionary *)launchOptions
50
50
  {
51
51
  if (self = [super init]) {
52
+ _config = config;
53
+ _launchOptions = launchOptions;
54
+ [self enableTurboModule];
55
+ _isShuttingDown = [[NSLock alloc] init];
56
+
57
+ if ([config respondsToSelector:@selector(shouldReleaseBridgeWhenBackgrounded)] &&
58
+ [config shouldReleaseBridgeWhenBackgrounded]) {
59
+ _hostReleaser = [[RNXHostReleaser alloc] initWithHost:self];
60
+ }
61
+
62
+ #ifdef USE_FEATURE_FLAGS
63
+ if (self.isBridgelessEnabled) {
64
+ facebook::react::ReactNativeFeatureFlags::override(
65
+ std::make_unique<RNXBridgelessFeatureFlags>());
66
+ }
67
+ #endif // USE_FEATURE_FLAGS
68
+
52
69
  if ([config respondsToSelector:@selector(isDevLoadingViewEnabled)]) {
53
70
  RCTDevLoadingViewSetEnabled([config isDevLoadingViewEnabled]);
54
71
  }
@@ -69,16 +86,6 @@ using ReactNativeConfig = facebook::react::EmptyReactNativeConfig const;
69
86
  });
70
87
  }
71
88
 
72
- _config = config;
73
- _launchOptions = launchOptions;
74
- [self enableTurboModule];
75
- _isShuttingDown = [[NSLock alloc] init];
76
-
77
- if ([config respondsToSelector:@selector(shouldReleaseBridgeWhenBackgrounded)] &&
78
- [config shouldReleaseBridgeWhenBackgrounded]) {
79
- _hostReleaser = [[RNXHostReleaser alloc] initWithHost:self];
80
- }
81
-
82
89
  [self initializeReactHost];
83
90
  }
84
91
  return self;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rnx-kit/react-native-host",
3
- "version": "0.4.9",
3
+ "version": "0.4.11",
4
4
  "description": "Simplify React Native initialization",
5
5
  "homepage": "https://github.com/microsoft/rnx-kit/tree/main/packages/react-native-host#readme",
6
6
  "license": "MIT",