@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 +25 -5
- package/cocoa/RNXBridgelessHeaders.h +28 -0
- package/cocoa/ReactNativeHost.mm +17 -10
- package/package.json +1 -1
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
|
-
>
|
|
30
|
-
>
|
|
31
|
-
>
|
|
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
|
-
|
|
34
|
-
|
|
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>
|
package/cocoa/ReactNativeHost.mm
CHANGED
|
@@ -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