Skip to content

Commit f9ebfbb

Browse files
authored
Merge pull request #14 from artsy/chore/add-new-architecture-support
chore: support new architecture
2 parents fbd800c + 576b1bd commit f9ebfbb

File tree

10 files changed

+123
-17
lines changed

10 files changed

+123
-17
lines changed

android/build.gradle

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ def safeExtGet(prop, fallback) {
4040
rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback
4141
}
4242

43+
def isNewArchitectureEnabled() {
44+
return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true"
45+
}
46+
4347
android {
4448
compileSdkVersion safeExtGet('compileSdkVersion', DEFAULT_COMPILE_SDK_VERSION)
4549
buildToolsVersion safeExtGet('buildToolsVersion', DEFAULT_BUILD_TOOLS_VERSION)
@@ -48,6 +52,7 @@ android {
4852
targetSdkVersion safeExtGet('targetSdkVersion', DEFAULT_TARGET_SDK_VERSION)
4953
versionCode 1
5054
versionName "1.0"
55+
buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
5156
}
5257
lintOptions {
5358
abortOnError false

android/src/main/java/com/reactnativelauncharguments/LaunchArgumentsModule.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020

2121
public class LaunchArgumentsModule extends ReactContextBaseJavaModule {
2222

23+
public static final String NAME = "LaunchArguments";
24+
2325
private static final long ACTIVITY_WAIT_INTERVAL = 100L;
2426
private static final int ACTIVITY_WAIT_TRIES = 200;
2527

@@ -32,7 +34,7 @@ public class LaunchArgumentsModule extends ReactContextBaseJavaModule {
3234
@NonNull
3335
@Override
3436
public String getName() {
35-
return "LaunchArguments";
37+
return NAME;
3638
}
3739

3840
@Nullable
Lines changed: 35 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,47 @@
11
package com.reactnativelauncharguments;
22

3-
import com.facebook.react.ReactPackage;
3+
import com.facebook.react.BaseReactPackage;
44
import com.facebook.react.bridge.NativeModule;
55
import com.facebook.react.bridge.ReactApplicationContext;
6-
import com.facebook.react.uimanager.ViewManager;
6+
import com.facebook.react.module.model.ReactModuleInfo;
7+
import com.facebook.react.module.model.ReactModuleInfoProvider;
8+
import com.facebook.react.TurboReactPackage;
79

8-
import java.util.Collections;
9-
import java.util.List;
10+
import java.util.HashMap;
11+
import java.util.Map;
1012

11-
public class LaunchArgumentsPackage implements ReactPackage {
12-
13+
import javax.annotation.Nonnull;
14+
import javax.annotation.Nullable;
15+
16+
public class LaunchArgumentsPackage extends TurboReactPackage {
17+
18+
@Nullable
1319
@Override
14-
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
15-
return Collections.emptyList();
20+
public NativeModule getModule(String name, @Nonnull ReactApplicationContext reactContext) {
21+
if (name.equals(LaunchArgumentsModule.NAME)) {
22+
return new LaunchArgumentsModule(reactContext);
23+
} else {
24+
return null;
25+
}
1626
}
1727

1828
@Override
19-
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
20-
final NativeModule nativeModule = new LaunchArgumentsModule(reactContext);
21-
return Collections.singletonList(nativeModule);
29+
public ReactModuleInfoProvider getReactModuleInfoProvider() {
30+
return () -> {
31+
final Map<String, ReactModuleInfo> moduleInfos = new HashMap<>();
32+
boolean isTurboModule = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;
33+
moduleInfos.put(
34+
LaunchArgumentsModule.NAME,
35+
new ReactModuleInfo(
36+
LaunchArgumentsModule.NAME,
37+
LaunchArgumentsModule.NAME,
38+
false, // canOverrideExistingModule
39+
false, // needsEagerInit
40+
true, // hasConstants
41+
false, // isCxxModule
42+
isTurboModule // isTurboModule
43+
));
44+
return moduleInfos;
45+
};
2246
}
2347
}

ios/LaunchArguments.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
11
#import <React/RCTBridgeModule.h>
22

3+
#ifdef RCT_NEW_ARCH_ENABLED
4+
#import <React/RCTTurboModule.h>
5+
#import "RCTNativeLaunchArgumentsSpec.h"
6+
7+
@interface LaunchArguments : NSObject <NativeLaunchArgumentsSpec>
8+
#else
39
@interface LaunchArguments : NSObject <RCTBridgeModule>
10+
#endif
11+
412
@end

ios/LaunchArguments.m

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,14 @@ @implementation LaunchArguments
44

55
RCT_EXPORT_MODULE()
66

7+
#ifdef RCT_NEW_ARCH_ENABLED
8+
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
9+
(const facebook::react::ObjCTurboModule::InitParams &)params
10+
{
11+
return std::make_shared<facebook::react::NativeLaunchArgumentsSpecJSI>(params);
12+
}
13+
#endif
14+
715
- (dispatch_queue_t)methodQueue
816
{
917
return dispatch_get_main_queue();
@@ -107,4 +115,12 @@ - (NSString *)cleanValue:(NSString *)arg
107115
return [arg stringByReplacingOccurrencesOfString:@"-" withString:@""];
108116
}
109117

118+
#ifdef RCT_NEW_ARCH_ENABLED
119+
- (facebook::react::ModuleConstants<JS::NativeLaunchArguments::Constants>)getConstants {
120+
return facebook::react::typedConstants<JS::NativeLaunchArguments::Constants>({
121+
.value = facebook::react::toDynamic([self argsToDictionary])
122+
});
123+
}
124+
#endif
125+
110126
@end

package.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,10 @@
3434
"react": "^16.9.0",
3535
"react-native": "^0.62.2",
3636
"typescript": "^3.8.3"
37+
},
38+
"codegenConfig": {
39+
"name": "RNLaunchArgumentsSpec",
40+
"type": "modules",
41+
"jsSrcsDir": "src"
3742
}
3843
}

react-native-launch-arguments.podspec

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,18 @@ Pod::Spec.new do |s|
1212
s.platforms = { :ios => "9.0" }
1313
s.source = { :git => "#{package["repository"]["baseUrl"]}.git", :tag => "#{s.version}" }
1414

15-
s.source_files = "ios/**/*.{h,m,swift}"
15+
s.source_files = "ios/**/*.{h,m,mm}"
1616
s.requires_arc = true
1717

18-
s.dependency "React"
19-
end
18+
install_modules_dependencies(s)
19+
20+
if ENV['RCT_NEW_ARCH_ENABLED'] == '1'
21+
s.pod_target_xcconfig = {
22+
"HEADER_SEARCH_PATHS" => "\"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/RCT-Folly\"",
23+
"DEFINES_MODULE" => "YES",
24+
"SWIFT_OBJC_INTERFACE_HEADER_NAME" => "$(SWIFT_MODULE_NAME)-Swift.h"
25+
}
2026

27+
s.compiler_flags = '-DRCT_NEW_ARCH_ENABLED'
28+
end
29+
end

react-native.config.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
module.exports = {
2+
dependency: {
3+
platforms: {
4+
android: {
5+
sourceDir: '../android/src/main/java/com/reactnativelauncharguments',
6+
packageImportPath: 'import com.reactnativelauncharguments.LaunchArgumentsPackage;',
7+
componentDescriptors: null,
8+
cmakeListsPath: null,
9+
},
10+
ios: {
11+
libraryFolder: '../ios',
12+
sharedLibraries: [],
13+
project: 'LaunchArguments.xcodeproj',
14+
podspecPath: '../react-native-launch-arguments.podspec',
15+
},
16+
},
17+
},
18+
};

src/NativeLaunchArguments.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import type { TurboModule } from 'react-native';
2+
import { TurboModuleRegistry } from 'react-native';
3+
4+
export interface Spec extends TurboModule {
5+
getConstants(): {
6+
value: { [key: string]: string };
7+
};
8+
}
9+
10+
export default TurboModuleRegistry.getEnforcing<Spec>('LaunchArguments');

src/index.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,12 @@ const LINKING_ERROR =
66
"- You rebuilt the app after installing the package\n" +
77
"- You are not using Expo managed workflow\n";
88

9-
const LaunchArgumentsModule = NativeModules.LaunchArguments
9+
// @ts-expect-error
10+
const isTurboModuleEnabled = global.__turboModuleProxy != null;
11+
12+
const LaunchArgumentsModule = isTurboModuleEnabled
13+
? require('./NativeLaunchArguments').default
14+
: NativeModules.LaunchArguments
1015
? NativeModules.LaunchArguments
1116
: new Proxy(
1217
{},
@@ -35,7 +40,11 @@ export const LaunchArguments: LaunchArgumentsType = {
3540

3641
parsed = {};
3742

38-
const raw = LaunchArgumentsModule.value as RawMap;
43+
const constants = isTurboModuleEnabled
44+
? LaunchArgumentsModule.getConstants()
45+
: LaunchArgumentsModule;
46+
47+
const raw = constants.value as RawMap;
3948

4049
for (const k in raw) {
4150
const rawValue = raw[k];

0 commit comments

Comments
 (0)