1
0
mirror of https://gitcode.com/gh_mirrors/re/react-native-pushy.git synced 2025-09-18 02:36:10 +08:00
Code Issues Packages Projects Releases Wiki Activity GitHub Gitee

Compare commits

..

19 Commits

Author SHA1 Message Date
sunnylqm
147d4e6cc1 10.15.1 2024-10-19 09:25:02 +08:00
sunnylqm
a13d6aa21a yarn v4 2024-10-19 09:19:40 +08:00
Sunny Luo
60e446d2b3 ensure logger is ready 2024-10-18 12:36:05 +08:00
Sunny Luo
b85889cf22 feat/rn725 (#451)
* 0.72.5

* fix android build

* fix ios build
2024-10-11 23:47:27 +08:00
sunnylqm
a8705ca0e4 cleanup 2024-10-03 21:58:12 +08:00
sunnylqm
04ac3f3384 lint 2024-10-03 21:45:38 +08:00
sunnylqm
94431ee6f7 improve cleanup and rollout 2024-10-03 21:41:47 +08:00
Sunny Luo
2467b0c119 Update provider.tsx 2024-09-30 21:25:08 +08:00
Sunny Luo
b71626d7d4 Update client.ts 2024-09-30 21:23:30 +08:00
sunnylqm
20d09529d2 v10.14.0 2024-09-22 22:57:02 +08:00
sunnylqm
34bc16ad70 add rollout strategy 2024-09-22 21:59:33 +08:00
sunnylqm
a40d627edf v10.13.2 2024-08-26 18:57:21 +08:00
sunnylqm
462a342172 v10.13.1 2024-08-26 18:54:17 +08:00
sunnylqm
94d2e18900 v10.13.0 2024-08-26 18:52:44 +08:00
sunnylqm
d000c40e0f v10.12.0 2024-08-24 15:28:27 +08:00
sunnylqm
5659c79726 v10.11.8 2024-08-21 20:02:47 +08:00
sunnylqm
b20d987473 fix marksuccess 2024-08-21 19:58:28 +08:00
sunnylqm
14c9c0b1f5 v10.11.7 2024-08-16 11:03:25 +08:00
sunnylqm
10178e1e64 chore: Update switchVersion and switchVersionLater to be async functions 2024-08-16 10:49:35 +08:00
45 changed files with 28319 additions and 19727 deletions

2
.gitignore vendored
View File

@@ -46,3 +46,5 @@ Example/**/.pushy
Example/testHotUpdate/artifacts Example/testHotUpdate/artifacts
yarn-error.log yarn-error.log
Example/testHotUpdate/.yarn
android/bin

BIN
.yarn/install-state.gz Normal file

Binary file not shown.

1
.yarnrc.yml Normal file
View File

@@ -0,0 +1 @@
nodeLinker: node-modules

View File

@@ -1,4 +1,4 @@
module.exports = { module.exports = {
root: true, root: true,
extends: '@react-native-community', extends: '@react-native',
}; };

View File

@@ -0,0 +1 @@
nodeLinker: node-modules

View File

@@ -1,226 +1,87 @@
plugins { apply plugin: "com.android.application"
id 'com.android.application' apply plugin: "com.facebook.react"
id 'org.jetbrains.kotlin.android' apply plugin: "kotlin-android"
apply plugin: "kotlin-android-extensions"
/**
* This is the configuration block to customize your React Native Android app.
* By default you don't need to apply any configuration, just uncomment the lines you need.
*/
react {
/* Folders */
// The root of your project, i.e. where "package.json" lives. Default is '..'
// root = file("../")
// The folder where the react-native NPM package is. Default is ../node_modules/react-native
// reactNativeDir = file("../node_modules/react-native")
// The folder where the react-native Codegen package is. Default is ../node_modules/@react-native/codegen
// codegenDir = file("../node_modules/@react-native/codegen")
// The cli.js file which is the React Native CLI entrypoint. Default is ../node_modules/react-native/cli.js
// cliFile = file("../node_modules/react-native/cli.js")
/* Variants */
// The list of variants to that are debuggable. For those we're going to
// skip the bundling of the JS bundle and the assets. By default is just 'debug'.
// If you add flavors like lite, prod, etc. you'll have to list your debuggableVariants.
// debuggableVariants = ["liteDebug", "prodDebug"]
/* Bundling */
// A list containing the node command and its flags. Default is just 'node'.
// nodeExecutableAndArgs = ["node"]
//
// The command to run when bundling. By default is 'bundle'
// bundleCommand = "ram-bundle"
//
// The path to the CLI configuration file. Default is empty.
// bundleConfig = file(../rn-cli.config.js)
//
// The name of the generated asset file containing your JS bundle
// bundleAssetName = "MyApplication.android.bundle"
//
// The entry file for bundle generation. Default is 'index.android.js' or 'index.js'
// entryFile = file("../js/MyApplication.android.js")
//
// A list of extra flags to pass to the 'bundle' commands.
// See https://github.com/react-native-community/cli/blob/main/docs/commands.md#bundle
// extraPackagerArgs = []
/* Hermes Commands */
// The hermes compiler command to run. By default it is 'hermesc'
// hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc"
//
// The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map"
// hermesFlags = ["-O", "-output-source-map"]
} }
import com.android.build.OutputFile
/** /**
* The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets * Set this to true to Run Proguard on Release builds to minify the Java bytecode.
* and bundleReleaseJsAndAssets).
* These basically call `react-native bundle` with the correct arguments during the Android build
* cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the
* bundle directly from the development server. Below you can see all the possible configurations
* and their defaults. If you decide to add a configuration block, make sure to add it before the
* `apply from: "../../node_modules/react-native/react.gradle"` line.
*
* project.ext.react = [
* // the name of the generated asset file containing your JS bundle
* bundleAssetName: "index.android.bundle",
*
* // the entry file for bundle generation. If none specified and
* // "index.android.js" exists, it will be used. Otherwise "index.js" is
* // default. Can be overridden with ENTRY_FILE environment variable.
* entryFile: "index.android.js",
*
* // https://reactnative.dev/docs/performance#enable-the-ram-format
* bundleCommand: "ram-bundle",
*
* // whether to bundle JS and assets in debug mode
* bundleInDebug: false,
*
* // whether to bundle JS and assets in release mode
* bundleInRelease: true,
*
* // whether to bundle JS and assets in another build variant (if configured).
* // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants
* // The configuration property can be in the following formats
* // 'bundleIn${productFlavor}${buildType}'
* // 'bundleIn${buildType}'
* // bundleInFreeDebug: true,
* // bundleInPaidRelease: true,
* // bundleInBeta: true,
*
* // whether to disable dev mode in custom build variants (by default only disabled in release)
* // for example: to disable dev mode in the staging build type (if configured)
* devDisabledInStaging: true,
* // The configuration property can be in the following formats
* // 'devDisabledIn${productFlavor}${buildType}'
* // 'devDisabledIn${buildType}'
*
* // the root of your project, i.e. where "package.json" lives
* root: "../../",
*
* // where to put the JS bundle asset in debug mode
* jsBundleDirDebug: "$buildDir/intermediates/assets/debug",
*
* // where to put the JS bundle asset in release mode
* jsBundleDirRelease: "$buildDir/intermediates/assets/release",
*
* // where to put drawable resources / React Native assets, e.g. the ones you use via
* // require('./image.png')), in debug mode
* resourcesDirDebug: "$buildDir/intermediates/res/merged/debug",
*
* // where to put drawable resources / React Native assets, e.g. the ones you use via
* // require('./image.png')), in release mode
* resourcesDirRelease: "$buildDir/intermediates/res/merged/release",
*
* // by default the gradle tasks are skipped if none of the JS files or assets change; this means
* // that we don't look at files in android/ or ios/ to determine whether the tasks are up to
* // date; if you have any other folders that you want to ignore for performance reasons (gradle
* // indexes the entire tree), add them here. Alternatively, if you have JS files in android/
* // for example, you might want to remove it from here.
* inputExcludes: ["android/**", "ios/**"],
*
* // override which node gets called and with what additional arguments
* nodeExecutableAndArgs: ["node"],
*
* // supply additional arguments to the packager
* extraPackagerArgs: []
* ]
*/
project.ext.react = [
enableHermes: false, // clean and rebuild if changing
]
apply from: "../../node_modules/react-native/react.gradle"
/**
* Set this to true to create two separate APKs instead of one:
* - An APK that only works on ARM devices
* - An APK that only works on x86 devices
* The advantage is the size of the APK is reduced by about 4MB.
* Upload all the APKs to the Play Store and people will download
* the correct one based on the CPU architecture of their device.
*/
def enableSeparateBuildPerCPUArchitecture = true
/**
* Run Proguard to shrink the Java bytecode in release builds.
*/ */
def enableProguardInReleaseBuilds = false def enableProguardInReleaseBuilds = false
/** /**
* The preferred build flavor of JavaScriptCore. * The preferred build flavor of JavaScriptCore (JSC)
* *
* For example, to use the international variant, you can use: * For example, to use the international variant, you can use:
* `def jscFlavor = 'org.webkit:android-jsc-intl:+'` * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`
* *
* The international variant includes ICU i18n library and necessary data * The international variant includes ICU i18n library and necessary data
* allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that
* give correct results when using with locales other than en-US. Note that * give correct results when using with locales other than en-US. Note that
* this variant is about 6MiB larger per architecture than default. * this variant is about 6MiB larger per architecture than default.
*/ */
def jscFlavor = 'org.webkit:android-jsc:+' def jscFlavor = 'org.webkit:android-jsc:+'
/**
* Whether to enable the Hermes VM.
*
* This should be set on project.ext.react and that value will be read here. If it is not set
* on project.ext.react, JavaScript will not be compiled to Hermes Bytecode
* and the benefits of using Hermes will therefore be sharply reduced.
*/
def enableHermes = project.ext.react.get("enableHermes", false);
/**
* Architectures to build native code for.
*/
def reactNativeArchitectures() {
def value = project.getProperties().get("reactNativeArchitectures")
return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"]
}
android { android {
ndkVersion rootProject.ext.ndkVersion ndkVersion rootProject.ext.ndkVersion
compileSdkVersion rootProject.ext.compileSdkVersion compileSdkVersion rootProject.ext.compileSdkVersion
namespace "com.awesomeproject"
defaultConfig { defaultConfig {
applicationId "com.awesomeproject" applicationId "com.awesomeproject"
minSdkVersion rootProject.ext.minSdkVersion minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1 versionCode 1
versionName "2.0" versionName "1.0"
testBuildType System.getProperty('testBuildType', 'debug')
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
if (isNewArchitectureEnabled()) {
// We configure the NDK build only if you decide to opt-in for the New Architecture.
externalNativeBuild {
ndkBuild {
arguments "APP_PLATFORM=android-21",
"APP_STL=c++_shared",
"NDK_TOOLCHAIN_VERSION=clang",
"GENERATED_SRC_DIR=$buildDir/generated/source",
"PROJECT_BUILD_DIR=$buildDir",
"REACT_ANDROID_DIR=$rootDir/../node_modules/react-native/ReactAndroid",
"REACT_ANDROID_BUILD_DIR=$rootDir/../node_modules/react-native/ReactAndroid/build",
"NODE_MODULES_DIR=$rootDir/../node_modules"
cFlags "-Wall", "-Werror", "-fexceptions", "-frtti", "-DWITH_INSPECTOR=1"
cppFlags "-std=c++17"
// Make sure this target name is the same you specify inside the
// src/main/jni/Android.mk file for the `LOCAL_MODULE` variable.
targets "awesomeproject_appmodules"
}
}
if (!enableSeparateBuildPerCPUArchitecture) {
ndk {
abiFilters (*reactNativeArchitectures())
}
}
}
}
if (isNewArchitectureEnabled()) {
// We configure the NDK build only if you decide to opt-in for the New Architecture.
externalNativeBuild {
ndkBuild {
path "$projectDir/src/main/jni/Android.mk"
}
}
def reactAndroidProjectDir = project(':ReactAndroid').projectDir
def packageReactNdkDebugLibs = tasks.register("packageReactNdkDebugLibs", Copy) {
dependsOn(":ReactAndroid:packageReactNdkDebugLibsForBuck")
from("$reactAndroidProjectDir/src/main/jni/prebuilt/lib")
into("$buildDir/react-ndk/exported")
}
def packageReactNdkReleaseLibs = tasks.register("packageReactNdkReleaseLibs", Copy) {
dependsOn(":ReactAndroid:packageReactNdkReleaseLibsForBuck")
from("$reactAndroidProjectDir/src/main/jni/prebuilt/lib")
into("$buildDir/react-ndk/exported")
}
afterEvaluate {
// If you wish to add a custom TurboModule or component locally,
// you should uncomment this line.
// preBuild.dependsOn("generateCodegenArtifactsFromSchema")
preDebugBuild.dependsOn(packageReactNdkDebugLibs)
preReleaseBuild.dependsOn(packageReactNdkReleaseLibs)
// Due to a bug inside AGP, we have to explicitly set a dependency
// between configureNdkBuild* tasks and the preBuild tasks.
// This can be removed once this is solved: https://issuetracker.google.com/issues/207403732
configureNdkBuildRelease.dependsOn(preReleaseBuild)
configureNdkBuildDebug.dependsOn(preDebugBuild)
reactNativeArchitectures().each { architecture ->
tasks.findByName("configureNdkBuildDebug[${architecture}]")?.configure {
dependsOn("preDebugBuild")
}
tasks.findByName("configureNdkBuildRelease[${architecture}]")?.configure {
dependsOn("preReleaseBuild")
}
}
}
}
splits {
abi {
reset()
enable enableSeparateBuildPerCPUArchitecture
universalApk false // If true, also generate a universal APK
include (*reactNativeArchitectures())
}
} }
signingConfigs { signingConfigs {
debug { debug {
@@ -237,93 +98,28 @@ android {
release { release {
// Caution! In production, you need to generate your own keystore file. // Caution! In production, you need to generate your own keystore file.
// see https://reactnative.dev/docs/signed-apk-android. // see https://reactnative.dev/docs/signed-apk-android.
crunchPngs false
signingConfig signingConfigs.debug signingConfig signingConfigs.debug
minifyEnabled enableProguardInReleaseBuilds minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
proguardFile "${rootProject.projectDir}/../node_modules/detox/android/detox/proguard-rules-app.pro"
}
}
// applicationVariants are e.g. debug, release
applicationVariants.all { variant ->
variant.outputs.each { output ->
// For each separate APK per architecture, set a unique version code as described here:
// https://developer.android.com/studio/build/configure-apk-splits.html
// Example: versionCode 1 will generate 1001 for armeabi-v7a, 1002 for x86, etc.
def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4]
def abi = output.getFilter(OutputFile.ABI)
if (abi != null) { // null for the universal-debug, universal-release variants
output.versionCodeOverride =
defaultConfig.versionCode * 1000 + versionCodes.get(abi)
}
} }
} }
} }
dependencies { dependencies {
androidTestImplementation('com.wix:detox:+') // The version of react-native is set by the React Native Gradle Plugin
implementation 'androidx.appcompat:appcompat:1.1.0' implementation("com.facebook.react:react-android")
implementation fileTree(dir: "libs", include: ["*.jar"])
//noinspection GradleDynamicVersion
implementation "com.facebook.react:react-native:+" // From node_modules
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0"
debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") {
exclude group:'com.facebook.fbjni'
}
debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}")
debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") { debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") {
exclude group:'com.facebook.flipper'
exclude group:'com.squareup.okhttp3', module:'okhttp' exclude group:'com.squareup.okhttp3', module:'okhttp'
} }
debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}") { debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}")
exclude group:'com.facebook.flipper' if (hermesEnabled.toBoolean()) {
} implementation("com.facebook.react:hermes-android")
if (enableHermes) {
//noinspection GradleDynamicVersion
implementation("com.facebook.react:hermes-engine:+") { // From node_modules
exclude group:'com.facebook.fbjni'
}
} else { } else {
implementation jscFlavor implementation jscFlavor
} }
} }
if (isNewArchitectureEnabled()) {
// If new architecture is enabled, we let you build RN from source
// Otherwise we fallback to a prebuilt .aar bundled in the NPM package.
// This will be applied to all the imported transtitive dependency.
configurations.all {
resolutionStrategy.dependencySubstitution {
substitute(module("com.facebook.react:react-native"))
.using(project(":ReactAndroid"))
.because("On New Architecture we're building React Native from source")
substitute(module("com.facebook.react:hermes-engine"))
.using(project(":ReactAndroid:hermes-engine"))
.because("On New Architecture we're building Hermes from source")
}
}
}
// Run this once to be able to run the application with BUCK
// puts all compile dependencies into folder libs for BUCK to use
task copyDownloadableDepsToLibs(type: Copy) {
from configurations.implementation
into 'libs'
}
apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)
def isNewArchitectureEnabled() {
// To opt-in for the New Architecture, you can either:
// - Set `newArchEnabled` to true inside the `gradle.properties` file
// - Invoke gradle with `-newArchEnabled=true`
// - Set an environment variable `ORG_GRADLE_PROJECT_newArchEnabled=true`
return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true"
}

View File

@@ -2,7 +2,8 @@ package com.awesomeproject;
import com.facebook.react.ReactActivity; import com.facebook.react.ReactActivity;
import com.facebook.react.ReactActivityDelegate; import com.facebook.react.ReactActivityDelegate;
import com.facebook.react.ReactRootView; import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint;
import com.facebook.react.defaults.DefaultReactActivityDelegate;
public class MainActivity extends ReactActivity { public class MainActivity extends ReactActivity {
@@ -16,33 +17,16 @@ public class MainActivity extends ReactActivity {
} }
/** /**
* Returns the instance of the {@link ReactActivityDelegate}. There the RootView is created and * Returns the instance of the {@link ReactActivityDelegate}. Here we use a util class {@link
* you can specify the renderer you wish to use - the new renderer (Fabric) or the old renderer * DefaultReactActivityDelegate} which allows you to easily enable Fabric and Concurrent React
* (Paper). * (aka React 18) with two boolean flags.
*/ */
@Override @Override
protected ReactActivityDelegate createReactActivityDelegate() { protected ReactActivityDelegate createReactActivityDelegate() {
return new MainActivityDelegate(this, getMainComponentName()); return new DefaultReactActivityDelegate(
} this,
getMainComponentName(),
public static class MainActivityDelegate extends ReactActivityDelegate { // If you opted-in for the New Architecture, we enable the Fabric Renderer.
public MainActivityDelegate(ReactActivity activity, String mainComponentName) { DefaultNewArchitectureEntryPoint.getFabricEnabled());
super(activity, mainComponentName);
}
@Override
protected ReactRootView createRootView() {
ReactRootView reactRootView = new ReactRootView(getContext());
// If you opted-in for the New Architecture, we enable the Fabric Renderer.
reactRootView.setIsFabric(BuildConfig.IS_NEW_ARCHITECTURE_ENABLED);
return reactRootView;
}
@Override
protected boolean isConcurrentRootEnabled() {
// If you opted-in for the New Architecture, we enable Concurrent Root (i.e. React 18).
// More on this on https://reactjs.org/blog/2022/03/29/react-v18.html
return BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;
}
} }
} }

View File

@@ -1,104 +1,70 @@
package com.awesomeproject; package com.awesomeproject;
import android.app.Application; import android.app.Application;
import android.content.Context;
import androidx.annotation.Nullable;
import com.facebook.react.PackageList; import com.facebook.react.PackageList;
import com.facebook.react.ReactApplication; import com.facebook.react.ReactApplication;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.ReactNativeHost; import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage; import com.facebook.react.ReactPackage;
import com.facebook.react.config.ReactFeatureFlags; import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint;
import com.facebook.react.shell.MainReactPackage; import com.facebook.react.defaults.DefaultReactNativeHost;
import com.facebook.soloader.SoLoader; import com.facebook.soloader.SoLoader;
import com.awesomeproject.newarchitecture.MainApplicationReactNativeHost;
import java.lang.reflect.InvocationTargetException;
import java.util.Arrays;
import java.util.List; import java.util.List;
import cn.reactnative.modules.update.UpdateContext; import cn.reactnative.modules.update.UpdateContext;
import cn.reactnative.modules.update.UpdatePackage;
public class MainApplication extends Application implements ReactApplication { public class MainApplication extends Application implements ReactApplication {
private final ReactNativeHost mReactNativeHost = private final ReactNativeHost mReactNativeHost =
new ReactNativeHost(this) { new DefaultReactNativeHost(this) {
@Override @Override
public boolean getUseDeveloperSupport() { public boolean getUseDeveloperSupport() {
return BuildConfig.DEBUG; return BuildConfig.DEBUG;
} }
@Nullable @Override
@Override protected String getJSBundleFile() {
protected String getJSBundleFile() { return UpdateContext.getBundleUrl(MainApplication.this);
return UpdateContext.getBundleUrl(MainApplication.this); }
}
@Override @Override
protected List<ReactPackage> getPackages() { protected List<ReactPackage> getPackages() {
@SuppressWarnings("UnnecessaryLocalVariable") @SuppressWarnings("UnnecessaryLocalVariable")
List<ReactPackage> packages = new PackageList(this).getPackages(); List<ReactPackage> packages = new PackageList(this).getPackages();
// Packages that cannot be autolinked yet can be added manually here, for example: // Packages that cannot be autolinked yet can be added manually here, for example:
// packages.add(new MyReactNativePackage()); // packages.add(new MyReactNativePackage());
return packages; return packages;
} }
@Override @Override
protected String getJSMainModuleName() { protected boolean isNewArchEnabled() {
return "index"; return BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;
} }
};
@Override
protected Boolean isHermesEnabled() {
return BuildConfig.IS_HERMES_ENABLED;
}
@Override
protected String getJSMainModuleName() {
return "index";
}
};
private final ReactNativeHost mNewArchitectureNativeHost =
new MainApplicationReactNativeHost(this);
@Override @Override
public ReactNativeHost getReactNativeHost() { public ReactNativeHost getReactNativeHost() {
if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { return mReactNativeHost;
return mNewArchitectureNativeHost;
} else {
return mReactNativeHost;
}
} }
@Override @Override
public void onCreate() { public void onCreate() {
super.onCreate(); super.onCreate();
// If you opted-in for the New Architecture, we enable the TurboModule system
ReactFeatureFlags.useTurboModules = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;
SoLoader.init(this, /* native exopackage */ false); SoLoader.init(this, /* native exopackage */ false);
initializeFlipper(this, getReactNativeHost().getReactInstanceManager()); if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
} // If you opted-in for the New Architecture, we load the native entry point for this app.
DefaultNewArchitectureEntryPoint.load();
/**
* Loads Flipper in React Native templates. Call this in the onCreate method with something like
* initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
*
* @param context
* @param reactInstanceManager
*/
private static void initializeFlipper(
Context context, ReactInstanceManager reactInstanceManager) {
if (BuildConfig.DEBUG) {
try {
/*
We use reflection here to pick up the class that initializes Flipper,
since Flipper library is not available in release mode
*/
Class<?> aClass = Class.forName("com.awesomeproject.ReactNativeFlipper");
aClass
.getMethod("initializeFlipper", Context.class, ReactInstanceManager.class)
.invoke(null, context, reactInstanceManager);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
} }
ReactNativeFlipper.initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
} }
} }

View File

@@ -1,116 +0,0 @@
package com.awesomeproject.newarchitecture;
import android.app.Application;
import androidx.annotation.NonNull;
import com.facebook.react.PackageList;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.react.ReactPackageTurboModuleManagerDelegate;
import com.facebook.react.bridge.JSIModulePackage;
import com.facebook.react.bridge.JSIModuleProvider;
import com.facebook.react.bridge.JSIModuleSpec;
import com.facebook.react.bridge.JSIModuleType;
import com.facebook.react.bridge.JavaScriptContextHolder;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.UIManager;
import com.facebook.react.fabric.ComponentFactory;
import com.facebook.react.fabric.CoreComponentsRegistry;
import com.facebook.react.fabric.FabricJSIModuleProvider;
import com.facebook.react.fabric.ReactNativeConfig;
import com.facebook.react.uimanager.ViewManagerRegistry;
import com.awesomeproject.BuildConfig;
import com.awesomeproject.newarchitecture.components.MainComponentsRegistry;
import com.awesomeproject.newarchitecture.modules.MainApplicationTurboModuleManagerDelegate;
import java.util.ArrayList;
import java.util.List;
/**
* A {@link ReactNativeHost} that helps you load everything needed for the New Architecture, both
* TurboModule delegates and the Fabric Renderer.
*
* <p>Please note that this class is used ONLY if you opt-in for the New Architecture (see the
* `newArchEnabled` property). Is ignored otherwise.
*/
public class MainApplicationReactNativeHost extends ReactNativeHost {
public MainApplicationReactNativeHost(Application application) {
super(application);
}
@Override
public boolean getUseDeveloperSupport() {
return BuildConfig.DEBUG;
}
@Override
protected List<ReactPackage> getPackages() {
List<ReactPackage> packages = new PackageList(this).getPackages();
// Packages that cannot be autolinked yet can be added manually here, for example:
// packages.add(new MyReactNativePackage());
// TurboModules must also be loaded here providing a valid TurboReactPackage implementation:
// packages.add(new TurboReactPackage() { ... });
// If you have custom Fabric Components, their ViewManagers should also be loaded here
// inside a ReactPackage.
return packages;
}
@Override
protected String getJSMainModuleName() {
return "index";
}
@NonNull
@Override
protected ReactPackageTurboModuleManagerDelegate.Builder
getReactPackageTurboModuleManagerDelegateBuilder() {
// Here we provide the ReactPackageTurboModuleManagerDelegate Builder. This is necessary
// for the new architecture and to use TurboModules correctly.
return new MainApplicationTurboModuleManagerDelegate.Builder();
}
@Override
protected JSIModulePackage getJSIModulePackage() {
return new JSIModulePackage() {
@Override
public List<JSIModuleSpec> getJSIModules(
final ReactApplicationContext reactApplicationContext,
final JavaScriptContextHolder jsContext) {
final List<JSIModuleSpec> specs = new ArrayList<>();
// Here we provide a new JSIModuleSpec that will be responsible of providing the
// custom Fabric Components.
specs.add(
new JSIModuleSpec() {
@Override
public JSIModuleType getJSIModuleType() {
return JSIModuleType.UIManager;
}
@Override
public JSIModuleProvider<UIManager> getJSIModuleProvider() {
final ComponentFactory componentFactory = new ComponentFactory();
CoreComponentsRegistry.register(componentFactory);
// Here we register a Components Registry.
// The one that is generated with the template contains no components
// and just provides you the one from React Native core.
MainComponentsRegistry.register(componentFactory);
final ReactInstanceManager reactInstanceManager = getReactInstanceManager();
ViewManagerRegistry viewManagerRegistry =
new ViewManagerRegistry(
reactInstanceManager.getOrCreateViewManagers(reactApplicationContext));
return new FabricJSIModuleProvider(
reactApplicationContext,
componentFactory,
ReactNativeConfig.DEFAULT_CONFIG,
viewManagerRegistry);
}
});
return specs;
}
};
}
}

View File

@@ -1,36 +0,0 @@
package com.awesomeproject.newarchitecture.components;
import com.facebook.jni.HybridData;
import com.facebook.proguard.annotations.DoNotStrip;
import com.facebook.react.fabric.ComponentFactory;
import com.facebook.soloader.SoLoader;
/**
* Class responsible to load the custom Fabric Components. This class has native methods and needs a
* corresponding C++ implementation/header file to work correctly (already placed inside the jni/
* folder for you).
*
* <p>Please note that this class is used ONLY if you opt-in for the New Architecture (see the
* `newArchEnabled` property). Is ignored otherwise.
*/
@DoNotStrip
public class MainComponentsRegistry {
static {
SoLoader.loadLibrary("fabricjni");
}
@DoNotStrip private final HybridData mHybridData;
@DoNotStrip
private native HybridData initHybrid(ComponentFactory componentFactory);
@DoNotStrip
private MainComponentsRegistry(ComponentFactory componentFactory) {
mHybridData = initHybrid(componentFactory);
}
@DoNotStrip
public static MainComponentsRegistry register(ComponentFactory componentFactory) {
return new MainComponentsRegistry(componentFactory);
}
}

View File

@@ -1,48 +0,0 @@
package com.awesomeproject.newarchitecture.modules;
import com.facebook.jni.HybridData;
import com.facebook.react.ReactPackage;
import com.facebook.react.ReactPackageTurboModuleManagerDelegate;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.soloader.SoLoader;
import java.util.List;
/**
* Class responsible to load the TurboModules. This class has native methods and needs a
* corresponding C++ implementation/header file to work correctly (already placed inside the jni/
* folder for you).
*
* <p>Please note that this class is used ONLY if you opt-in for the New Architecture (see the
* `newArchEnabled` property). Is ignored otherwise.
*/
public class MainApplicationTurboModuleManagerDelegate
extends ReactPackageTurboModuleManagerDelegate {
private static volatile boolean sIsSoLibraryLoaded;
protected MainApplicationTurboModuleManagerDelegate(
ReactApplicationContext reactApplicationContext, List<ReactPackage> packages) {
super(reactApplicationContext, packages);
}
protected native HybridData initHybrid();
native boolean canCreateTurboModule(String moduleName);
public static class Builder extends ReactPackageTurboModuleManagerDelegate.Builder {
protected MainApplicationTurboModuleManagerDelegate build(
ReactApplicationContext context, List<ReactPackage> packages) {
return new MainApplicationTurboModuleManagerDelegate(context, packages);
}
}
@Override
protected synchronized void maybeLoadOtherSoLibraries() {
if (!sIsSoLibraryLoaded) {
// If you change the name of your application .so file in the Android.mk file,
// make sure you update the name here as well.
SoLoader.loadLibrary("awesomeproject_appmodules");
sIsSoLibraryLoaded = true;
}
}
}

View File

@@ -1,48 +0,0 @@
THIS_DIR := $(call my-dir)
include $(REACT_ANDROID_DIR)/Android-prebuilt.mk
# If you wish to add a custom TurboModule or Fabric component in your app you
# will have to include the following autogenerated makefile.
# include $(GENERATED_SRC_DIR)/codegen/jni/Android.mk
include $(CLEAR_VARS)
LOCAL_PATH := $(THIS_DIR)
# You can customize the name of your application .so file here.
LOCAL_MODULE := awesomeproject_appmodules
LOCAL_C_INCLUDES := $(LOCAL_PATH)
LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/*.cpp)
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
# If you wish to add a custom TurboModule or Fabric component in your app you
# will have to uncomment those lines to include the generated source
# files from the codegen (placed in $(GENERATED_SRC_DIR)/codegen/jni)
#
# LOCAL_C_INCLUDES += $(GENERATED_SRC_DIR)/codegen/jni
# LOCAL_SRC_FILES += $(wildcard $(GENERATED_SRC_DIR)/codegen/jni/*.cpp)
# LOCAL_EXPORT_C_INCLUDES += $(GENERATED_SRC_DIR)/codegen/jni
# Here you should add any native library you wish to depend on.
LOCAL_SHARED_LIBRARIES := \
libfabricjni \
libfbjni \
libfolly_runtime \
libglog \
libjsi \
libreact_codegen_rncore \
libreact_debug \
libreact_nativemodule_core \
libreact_render_componentregistry \
libreact_render_core \
libreact_render_debug \
libreact_render_graphics \
librrc_view \
libruntimeexecutor \
libturbomodulejsijni \
libyoga
LOCAL_CFLAGS := -DLOG_TAG=\"ReactNative\" -fexceptions -frtti -std=c++17 -Wall
include $(BUILD_SHARED_LIBRARY)

View File

@@ -1,24 +0,0 @@
#include "MainApplicationModuleProvider.h"
#include <rncore.h>
namespace facebook {
namespace react {
std::shared_ptr<TurboModule> MainApplicationModuleProvider(
const std::string moduleName,
const JavaTurboModule::InitParams &params) {
// Here you can provide your own module provider for TurboModules coming from
// either your application or from external libraries. The approach to follow
// is similar to the following (for a library called `samplelibrary`:
//
// auto module = samplelibrary_ModuleProvider(moduleName, params);
// if (module != nullptr) {
// return module;
// }
// return rncore_ModuleProvider(moduleName, params);
return rncore_ModuleProvider(moduleName, params);
}
} // namespace react
} // namespace facebook

View File

@@ -1,16 +0,0 @@
#pragma once
#include <memory>
#include <string>
#include <ReactCommon/JavaTurboModule.h>
namespace facebook {
namespace react {
std::shared_ptr<TurboModule> MainApplicationModuleProvider(
const std::string moduleName,
const JavaTurboModule::InitParams &params);
} // namespace react
} // namespace facebook

View File

@@ -1,45 +0,0 @@
#include "MainApplicationTurboModuleManagerDelegate.h"
#include "MainApplicationModuleProvider.h"
namespace facebook {
namespace react {
jni::local_ref<MainApplicationTurboModuleManagerDelegate::jhybriddata>
MainApplicationTurboModuleManagerDelegate::initHybrid(
jni::alias_ref<jhybridobject>) {
return makeCxxInstance();
}
void MainApplicationTurboModuleManagerDelegate::registerNatives() {
registerHybrid({
makeNativeMethod(
"initHybrid", MainApplicationTurboModuleManagerDelegate::initHybrid),
makeNativeMethod(
"canCreateTurboModule",
MainApplicationTurboModuleManagerDelegate::canCreateTurboModule),
});
}
std::shared_ptr<TurboModule>
MainApplicationTurboModuleManagerDelegate::getTurboModule(
const std::string name,
const std::shared_ptr<CallInvoker> jsInvoker) {
// Not implemented yet: provide pure-C++ NativeModules here.
return nullptr;
}
std::shared_ptr<TurboModule>
MainApplicationTurboModuleManagerDelegate::getTurboModule(
const std::string name,
const JavaTurboModule::InitParams &params) {
return MainApplicationModuleProvider(name, params);
}
bool MainApplicationTurboModuleManagerDelegate::canCreateTurboModule(
std::string name) {
return getTurboModule(name, nullptr) != nullptr ||
getTurboModule(name, {.moduleName = name}) != nullptr;
}
} // namespace react
} // namespace facebook

View File

@@ -1,38 +0,0 @@
#include <memory>
#include <string>
#include <ReactCommon/TurboModuleManagerDelegate.h>
#include <fbjni/fbjni.h>
namespace facebook {
namespace react {
class MainApplicationTurboModuleManagerDelegate
: public jni::HybridClass<
MainApplicationTurboModuleManagerDelegate,
TurboModuleManagerDelegate> {
public:
// Adapt it to the package you used for your Java class.
static constexpr auto kJavaDescriptor =
"Lcom/awesomeproject/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate;";
static jni::local_ref<jhybriddata> initHybrid(jni::alias_ref<jhybridobject>);
static void registerNatives();
std::shared_ptr<TurboModule> getTurboModule(
const std::string name,
const std::shared_ptr<CallInvoker> jsInvoker) override;
std::shared_ptr<TurboModule> getTurboModule(
const std::string name,
const JavaTurboModule::InitParams &params) override;
/**
* Test-only method. Allows user to verify whether a TurboModule can be
* created by instances of this class.
*/
bool canCreateTurboModule(std::string name);
};
} // namespace react
} // namespace facebook

View File

@@ -1,61 +0,0 @@
#include "MainComponentsRegistry.h"
#include <CoreComponentsRegistry.h>
#include <fbjni/fbjni.h>
#include <react/renderer/componentregistry/ComponentDescriptorProviderRegistry.h>
#include <react/renderer/components/rncore/ComponentDescriptors.h>
namespace facebook {
namespace react {
MainComponentsRegistry::MainComponentsRegistry(ComponentFactory *delegate) {}
std::shared_ptr<ComponentDescriptorProviderRegistry const>
MainComponentsRegistry::sharedProviderRegistry() {
auto providerRegistry = CoreComponentsRegistry::sharedProviderRegistry();
// Custom Fabric Components go here. You can register custom
// components coming from your App or from 3rd party libraries here.
//
// providerRegistry->add(concreteComponentDescriptorProvider<
// AocViewerComponentDescriptor>());
return providerRegistry;
}
jni::local_ref<MainComponentsRegistry::jhybriddata>
MainComponentsRegistry::initHybrid(
jni::alias_ref<jclass>,
ComponentFactory *delegate) {
auto instance = makeCxxInstance(delegate);
auto buildRegistryFunction =
[](EventDispatcher::Weak const &eventDispatcher,
ContextContainer::Shared const &contextContainer)
-> ComponentDescriptorRegistry::Shared {
auto registry = MainComponentsRegistry::sharedProviderRegistry()
->createComponentDescriptorRegistry(
{eventDispatcher, contextContainer});
auto mutableRegistry =
std::const_pointer_cast<ComponentDescriptorRegistry>(registry);
mutableRegistry->setFallbackComponentDescriptor(
std::make_shared<UnimplementedNativeViewComponentDescriptor>(
ComponentDescriptorParameters{
eventDispatcher, contextContainer, nullptr}));
return registry;
};
delegate->buildRegistryFunction = buildRegistryFunction;
return instance;
}
void MainComponentsRegistry::registerNatives() {
registerHybrid({
makeNativeMethod("initHybrid", MainComponentsRegistry::initHybrid),
});
}
} // namespace react
} // namespace facebook

View File

@@ -1,32 +0,0 @@
#pragma once
#include <ComponentFactory.h>
#include <fbjni/fbjni.h>
#include <react/renderer/componentregistry/ComponentDescriptorProviderRegistry.h>
#include <react/renderer/componentregistry/ComponentDescriptorRegistry.h>
namespace facebook {
namespace react {
class MainComponentsRegistry
: public facebook::jni::HybridClass<MainComponentsRegistry> {
public:
// Adapt it to the package you used for your Java class.
constexpr static auto kJavaDescriptor =
"Lcom/awesomeproject/newarchitecture/components/MainComponentsRegistry;";
static void registerNatives();
MainComponentsRegistry(ComponentFactory *delegate);
private:
static std::shared_ptr<ComponentDescriptorProviderRegistry const>
sharedProviderRegistry();
static jni::local_ref<jhybriddata> initHybrid(
jni::alias_ref<jclass>,
ComponentFactory *delegate);
};
} // namespace react
} // namespace facebook

View File

@@ -1,11 +0,0 @@
#include <fbjni/fbjni.h>
#include "MainApplicationTurboModuleManagerDelegate.h"
#include "MainComponentsRegistry.h"
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *) {
return facebook::jni::initialize(vm, [] {
facebook::react::MainApplicationTurboModuleManagerDelegate::
registerNatives();
facebook::react::MainComponentsRegistry::registerNatives();
});
}

View File

@@ -1,59 +1,24 @@
import org.apache.tools.ant.taskdefs.condition.Os
// Top-level build file where you can add configuration options common to all sub-projects/modules. // Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript { buildscript {
ext { ext {
buildToolsVersion = "31.0.0" buildToolsVersion = "33.0.0"
minSdkVersion = 23 minSdkVersion = 23
compileSdkVersion = 31 compileSdkVersion = 33
targetSdkVersion = 31 targetSdkVersion = 33
kotlinVersion = '1.7.20'
kotlin_version = '1.7.20'
if (System.properties['os.arch'] == "aarch64") { // We use NDK 23 which has both M1 support and is the side-by-side NDK version from AGP.
// For M1 Users we need to use the NDK 24 which added support for aarch64 ndkVersion = "23.1.7779620"
ndkVersion = "24.0.8215888"
} else { kotlin_version = '1.7.20'
// Otherwise we default to the side-by-side NDK version from AGP.
ndkVersion = "21.4.7075529"
}
} }
repositories { repositories {
google() google()
mavenCentral() mavenCentral()
} }
dependencies { dependencies {
classpath("com.android.tools.build:gradle:7.1.1") classpath("com.android.tools.build:gradle")
classpath("com.facebook.react:react-native-gradle-plugin") classpath("com.facebook.react:react-native-gradle-plugin")
classpath("de.undercouch:gradle-download-task:5.0.1") classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version")
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion")
}
}
allprojects {
repositories {
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url("$rootDir/../node_modules/react-native/android")
}
maven {
// Android JSC is installed from npm
url("$rootDir/../node_modules/jsc-android/dist")
}
mavenCentral {
// We don't want to fetch react-native from Maven Central as there are
// older versions over there.
content {
excludeGroup "com.facebook.react"
}
}
google()
maven {
url("$rootDir/../node_modules/detox/Detox-android")
}
maven { url 'https://www.jitpack.io' }
} }
} }

View File

@@ -25,7 +25,7 @@ android.useAndroidX=true
android.enableJetifier=true android.enableJetifier=true
# Version of flipper SDK to use with React Native # Version of flipper SDK to use with React Native
FLIPPER_VERSION=0.125.0 FLIPPER_VERSION=0.182.0
# Use this property to specify which architecture you want to build. # Use this property to specify which architecture you want to build.
# You can also override it from the CLI using # You can also override it from the CLI using
@@ -38,3 +38,7 @@ reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64
# to write custom TurboModules/Fabric components OR use libraries that # to write custom TurboModules/Fabric components OR use libraries that
# are providing them. # are providing them.
newArchEnabled=false newArchEnabled=false
# Use this property to enable or disable the Hermes JS engine.
# If set to false, you will be using JSC instead.
hermesEnabled=true

View File

@@ -1,5 +1,6 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-all.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.1-all.zip
networkTimeout=10000
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

View File

@@ -55,7 +55,7 @@
# Darwin, MinGW, and NonStop. # Darwin, MinGW, and NonStop.
# #
# (3) This script is generated from the Groovy template # (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project. # within the Gradle project.
# #
# You can find Gradle at https://github.com/gradle/gradle/. # You can find Gradle at https://github.com/gradle/gradle/.
@@ -80,10 +80,10 @@ do
esac esac
done done
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit # This is normally unused
# shellcheck disable=SC2034
APP_NAME="Gradle"
APP_BASE_NAME=${0##*/} APP_BASE_NAME=${0##*/}
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
@@ -143,12 +143,16 @@ fi
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #( case $MAX_FD in #(
max*) max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
MAX_FD=$( ulimit -H -n ) || MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit" warn "Could not query maximum file descriptor limit"
esac esac
case $MAX_FD in #( case $MAX_FD in #(
'' | soft) :;; #( '' | soft) :;; #(
*) *)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
ulimit -n "$MAX_FD" || ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD" warn "Could not set maximum file descriptor limit to $MAX_FD"
esac esac
@@ -205,6 +209,12 @@ set -- \
org.gradle.wrapper.GradleWrapperMain \ org.gradle.wrapper.GradleWrapperMain \
"$@" "$@"
# Stop when "xargs" is not available.
if ! command -v xargs >/dev/null 2>&1
then
die "xargs is not available"
fi
# Use "xargs" to parse quoted args. # Use "xargs" to parse quoted args.
# #
# With -n1 it outputs one arg per line, with the quotes and backslashes removed. # With -n1 it outputs one arg per line, with the quotes and backslashes removed.

View File

@@ -14,7 +14,7 @@
@rem limitations under the License. @rem limitations under the License.
@rem @rem
@if "%DEBUG%" == "" @echo off @if "%DEBUG%"=="" @echo off
@rem ########################################################################## @rem ##########################################################################
@rem @rem
@rem Gradle startup script for Windows @rem Gradle startup script for Windows
@@ -25,7 +25,8 @@
if "%OS%"=="Windows_NT" setlocal if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0 set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=. if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0 set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME% set APP_HOME=%DIRNAME%
@@ -40,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1 %JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto execute if %ERRORLEVEL% equ 0 goto execute
echo. echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
@@ -75,13 +76,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
:end :end
@rem End local scope for the variables with windows NT shell @rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd if %ERRORLEVEL% equ 0 goto mainEnd
:fail :fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code! rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 set EXIT_CODE=%ERRORLEVEL%
exit /b 1 if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE%
:mainEnd :mainEnd
if "%OS%"=="Windows_NT" endlocal if "%OS%"=="Windows_NT" endlocal

View File

@@ -1,11 +1,4 @@
rootProject.name = 'AwesomeProject' rootProject.name = 'AwesomeProject'
apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)
include ':app' include ':app'
includeBuild('../node_modules/react-native-gradle-plugin') includeBuild('../node_modules/@react-native/gradle-plugin')
if (settings.hasProperty("newArchEnabled") && settings.newArchEnabled == "true") {
include(":ReactAndroid")
project(":ReactAndroid").projectDir = file('../node_modules/react-native/ReactAndroid')
include(":ReactAndroid:hermes-engine")
project(":ReactAndroid:hermes-engine").projectDir = file('../node_modules/react-native/ReactAndroid/hermes-engine')
}

View File

@@ -120,6 +120,7 @@
13B07F8E1A680F5B00A75B9A /* Resources */, 13B07F8E1A680F5B00A75B9A /* Resources */,
00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
E235C05ADACE081382539298 /* [CP] Copy Pods Resources */, E235C05ADACE081382539298 /* [CP] Copy Pods Resources */,
2177C9C260D54703D642190E /* [CP] Embed Pods Frameworks */,
); );
buildRules = ( buildRules = (
); );
@@ -190,6 +191,23 @@
shellPath = /bin/sh; shellPath = /bin/sh;
shellScript = "set -e\n\nWITH_ENVIRONMENT=\"../node_modules/react-native/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"../node_modules/react-native/scripts/react-native-xcode.sh\"\n\n/bin/sh -c \"$WITH_ENVIRONMENT $REACT_NATIVE_XCODE\"\n"; shellScript = "set -e\n\nWITH_ENVIRONMENT=\"../node_modules/react-native/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"../node_modules/react-native/scripts/react-native-xcode.sh\"\n\n/bin/sh -c \"$WITH_ENVIRONMENT $REACT_NATIVE_XCODE\"\n";
}; };
2177C9C260D54703D642190E /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-AwesomeProject/Pods-AwesomeProject-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Embed Pods Frameworks";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-AwesomeProject/Pods-AwesomeProject-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-AwesomeProject/Pods-AwesomeProject-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */ = { C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
@@ -346,7 +364,7 @@
COPY_PHASE_STRIP = NO; COPY_PHASE_STRIP = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES; ENABLE_TESTABILITY = YES;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386;
GCC_C_LANGUAGE_STANDARD = gnu99; GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO; GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES; GCC_NO_COMMON_BLOCKS = YES;
@@ -354,6 +372,7 @@
GCC_PREPROCESSOR_DEFINITIONS = ( GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1", "DEBUG=1",
"$(inherited)", "$(inherited)",
_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION,
); );
GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_SYMBOLS_PRIVATE_EXTERN = NO;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
@@ -374,12 +393,20 @@
); );
MTL_ENABLE_DEBUG_INFO = YES; MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES; ONLY_ACTIVE_ARCH = YES;
OTHER_CFLAGS = "$(inherited)";
OTHER_CPLUSPLUSFLAGS = ( OTHER_CPLUSPLUSFLAGS = (
"$(OTHER_CFLAGS)", "$(OTHER_CFLAGS)",
"-DFOLLY_NO_CONFIG", "-DFOLLY_NO_CONFIG",
"-DFOLLY_MOBILE=1", "-DFOLLY_MOBILE=1",
"-DFOLLY_USE_LIBCPP=1", "-DFOLLY_USE_LIBCPP=1",
); );
OTHER_LDFLAGS = (
"$(inherited)",
"-Wl",
"-ld_classic",
" ",
"-Wl -ld_classic ",
);
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
SDKROOT = iphoneos; SDKROOT = iphoneos;
}; };
@@ -418,9 +445,13 @@
COPY_PHASE_STRIP = YES; COPY_PHASE_STRIP = YES;
ENABLE_NS_ASSERTIONS = NO; ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_STRICT_OBJC_MSGSEND = YES;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386;
GCC_C_LANGUAGE_STANDARD = gnu99; GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES; GCC_NO_COMMON_BLOCKS = YES;
GCC_PREPROCESSOR_DEFINITIONS = (
"$(inherited)",
_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION,
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNDECLARED_SELECTOR = YES;
@@ -438,12 +469,20 @@
"\"$(inherited)\"", "\"$(inherited)\"",
); );
MTL_ENABLE_DEBUG_INFO = NO; MTL_ENABLE_DEBUG_INFO = NO;
OTHER_CFLAGS = "$(inherited)";
OTHER_CPLUSPLUSFLAGS = ( OTHER_CPLUSPLUSFLAGS = (
"$(OTHER_CFLAGS)", "$(OTHER_CFLAGS)",
"-DFOLLY_NO_CONFIG", "-DFOLLY_NO_CONFIG",
"-DFOLLY_MOBILE=1", "-DFOLLY_MOBILE=1",
"-DFOLLY_USE_LIBCPP=1", "-DFOLLY_USE_LIBCPP=1",
); );
OTHER_LDFLAGS = (
"$(inherited)",
"-Wl",
"-ld_classic",
" ",
"-Wl -ld_classic ",
);
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
SDKROOT = iphoneos; SDKROOT = iphoneos;
VALIDATE_PRODUCT = YES; VALIDATE_PRODUCT = YES;

View File

@@ -1,8 +1,6 @@
#import <React/RCTBridgeDelegate.h> #import <RCTAppDelegate.h>
#import <UIKit/UIKit.h> #import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate, RCTBridgeDelegate> @interface AppDelegate : RCTAppDelegate
@property (nonatomic, strong) UIWindow *window;
@end @end

View File

@@ -1,85 +1,18 @@
#import "AppDelegate.h" #import "AppDelegate.h"
#import "RCTPushy.h" #import "RCTPushy.h"
#import <React/RCTBridge.h>
#import <React/RCTBundleURLProvider.h> #import <React/RCTBundleURLProvider.h>
#import <React/RCTRootView.h>
#import <React/RCTAppSetupUtils.h>
#if RCT_NEW_ARCH_ENABLED
#import <React/CoreModulesPlugins.h>
#import <React/RCTCxxBridgeDelegate.h>
#import <React/RCTFabricSurfaceHostingProxyRootView.h>
#import <React/RCTSurfacePresenter.h>
#import <React/RCTSurfacePresenterBridgeAdapter.h>
#import <ReactCommon/RCTTurboModuleManager.h>
#import <react/config/ReactNativeConfig.h>
static NSString *const kRNConcurrentRoot = @"concurrentRoot";
@interface AppDelegate () <RCTCxxBridgeDelegate, RCTTurboModuleManagerDelegate> {
RCTTurboModuleManager *_turboModuleManager;
RCTSurfacePresenterBridgeAdapter *_bridgeAdapter;
std::shared_ptr<const facebook::react::ReactNativeConfig> _reactNativeConfig;
facebook::react::ContextContainer::Shared _contextContainer;
}
@end
#endif
@implementation AppDelegate @implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{ {
RCTAppSetupPrepareApp(application); self.moduleName = @"AwesomeProject";
// You can add your custom initial props in the dictionary below.
// They will be passed down to the ViewController used by React Native.
self.initialProps = @{};
RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions]; return [super application:application didFinishLaunchingWithOptions:launchOptions];
#if RCT_NEW_ARCH_ENABLED
_contextContainer = std::make_shared<facebook::react::ContextContainer const>();
_reactNativeConfig = std::make_shared<facebook::react::EmptyReactNativeConfig const>();
_contextContainer->insert("ReactNativeConfig", _reactNativeConfig);
_bridgeAdapter = [[RCTSurfacePresenterBridgeAdapter alloc] initWithBridge:bridge contextContainer:_contextContainer];
bridge.surfacePresenter = _bridgeAdapter.surfacePresenter;
#endif
NSDictionary *initProps = [self prepareInitialProps];
UIView *rootView = RCTAppSetupDefaultRootView(bridge, @"AwesomeProject", initProps);
if (@available(iOS 13.0, *)) {
rootView.backgroundColor = [UIColor systemBackgroundColor];
} else {
rootView.backgroundColor = [UIColor whiteColor];
}
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
UIViewController *rootViewController = [UIViewController new];
rootViewController.view = rootView;
self.window.rootViewController = rootViewController;
[self.window makeKeyAndVisible];
return YES;
}
/// This method controls whether the `concurrentRoot`feature of React18 is turned on or off.
///
/// @see: https://reactjs.org/blog/2022/03/29/react-v18.html
/// @note: This requires to be rendering on Fabric (i.e. on the New Architecture).
/// @return: `true` if the `concurrentRoot` feture is enabled. Otherwise, it returns `false`.
- (BOOL)concurrentRootEnabled
{
// Switch this bool to turn on and off the concurrent root
return true;
}
- (NSDictionary *)prepareInitialProps
{
NSMutableDictionary *initProps = [NSMutableDictionary new];
#ifdef RCT_NEW_ARCH_ENABLED
initProps[kRNConcurrentRoot] = @([self concurrentRootEnabled]);
#endif
return initProps;
} }
- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
@@ -91,43 +24,4 @@ static NSString *const kRNConcurrentRoot = @"concurrentRoot";
#endif #endif
} }
#if RCT_NEW_ARCH_ENABLED
#pragma mark - RCTCxxBridgeDelegate
- (std::unique_ptr<facebook::react::JSExecutorFactory>)jsExecutorFactoryForBridge:(RCTBridge *)bridge
{
_turboModuleManager = [[RCTTurboModuleManager alloc] initWithBridge:bridge
delegate:self
jsInvoker:bridge.jsCallInvoker];
return RCTAppSetupDefaultJsExecutorFactory(bridge, _turboModuleManager);
}
#pragma mark RCTTurboModuleManagerDelegate
- (Class)getModuleClassFromName:(const char *)name
{
return RCTCoreModulesClassProvider(name);
}
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:(const std::string &)name
jsInvoker:(std::shared_ptr<facebook::react::CallInvoker>)jsInvoker
{
return nullptr;
}
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:(const std::string &)name
initParams:
(const facebook::react::ObjCTurboModule::InitParams &)params
{
return nullptr;
}
- (id<RCTTurboModule>)getModuleInstanceFromClass:(Class)moduleClass
{
return RCTAppSetupDefaultModuleFromClass(moduleClass);
}
#endif
@end @end

View File

@@ -1,10 +1,29 @@
require_relative '../node_modules/react-native/scripts/react_native_pods' # Resolve react_native_pods.rb with node to allow for hoisting
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules' require Pod::Executable.execute_command('node', ['-p',
'require.resolve(
"react-native/scripts/react_native_pods.rb",
{paths: [process.argv[1]]},
)', __dir__]).strip
platform :ios, '12.4' platform :ios, min_ios_version_supported
install! 'cocoapods', :deterministic_uuids => false prepare_react_native_project!
production = ENV["PRODUCTION"] == "1" # If you are using a `react-native-flipper` your iOS build will fail when `NO_FLIPPER=1` is set.
# because `react-native-flipper` depends on (FlipperKit,...) that will be excluded
#
# To fix this you can also exclude `react-native-flipper` using a `react-native.config.js`
# ```js
# module.exports = {
# dependencies: {
# ...(process.env.NO_FLIPPER ? { 'react-native-flipper': { platforms: { ios: null } } } : {}),
# ```
flipper_config = FlipperConfiguration.disabled
linkage = ENV['USE_FRAMEWORKS']
if linkage != nil
Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green
use_frameworks! :linkage => linkage.to_sym
end
target 'AwesomeProject' do target 'AwesomeProject' do
config = use_native_modules! config = use_native_modules!
@@ -14,17 +33,25 @@ target 'AwesomeProject' do
use_react_native!( use_react_native!(
:path => config[:reactNativePath], :path => config[:reactNativePath],
# to enable hermes on iOS, change `false` to `true` and then install pods # Hermes is now enabled by default. Disable by setting this flag to false.
:production => production,
:hermes_enabled => flags[:hermes_enabled], :hermes_enabled => flags[:hermes_enabled],
:fabric_enabled => flags[:fabric_enabled], :fabric_enabled => flags[:fabric_enabled],
:flipper_configuration => false, # Enables Flipper.
#
# Note that if you have use_frameworks! enabled, Flipper will not work and
# you should disable the next line.
:flipper_configuration => flipper_config,
# An absolute path to your application root. # An absolute path to your application root.
:app_path => "#{Pod::Config.instance.installation_root}/.." :app_path => "#{Pod::Config.instance.installation_root}/.."
) )
post_install do |installer| post_install do |installer|
react_native_post_install(installer) # https://github.com/facebook/react-native/blob/main/packages/react-native/scripts/react_native_pods.rb#L197-L202
react_native_post_install(
installer,
config[:reactNativePath],
:mac_catalyst_enabled => false
)
__apply_Xcode_12_5_M1_post_install_workaround(installer) __apply_Xcode_12_5_M1_post_install_workaround(installer)
end end
end end

View File

@@ -1,311 +1,455 @@
PODS: PODS:
- boost (1.76.0) - boost (1.76.0)
- DoubleConversion (1.1.6) - DoubleConversion (1.1.6)
- FBLazyVector (0.69.8) - FBLazyVector (0.72.5)
- FBReactNativeSpec (0.69.8): - FBReactNativeSpec (0.72.5):
- RCT-Folly (= 2021.06.28.00-v2) - RCT-Folly (= 2021.07.22.00)
- RCTRequired (= 0.69.8) - RCTRequired (= 0.72.5)
- RCTTypeSafety (= 0.69.8) - RCTTypeSafety (= 0.72.5)
- React-Core (= 0.69.8) - React-Core (= 0.72.5)
- React-jsi (= 0.69.8) - React-jsi (= 0.72.5)
- ReactCommon/turbomodule/core (= 0.69.8) - ReactCommon/turbomodule/core (= 0.72.5)
- fmt (6.2.1) - fmt (6.2.1)
- glog (0.3.5) - glog (0.3.5)
- RCT-Folly (2021.06.28.00-v2): - hermes-engine (0.72.5):
- hermes-engine/Pre-built (= 0.72.5)
- hermes-engine/Pre-built (0.72.5)
- libevent (2.1.12)
- RCT-Folly (2021.07.22.00):
- boost - boost
- DoubleConversion - DoubleConversion
- fmt (~> 6.2.1) - fmt (~> 6.2.1)
- glog - glog
- RCT-Folly/Default (= 2021.06.28.00-v2) - RCT-Folly/Default (= 2021.07.22.00)
- RCT-Folly/Default (2021.06.28.00-v2): - RCT-Folly/Default (2021.07.22.00):
- boost - boost
- DoubleConversion - DoubleConversion
- fmt (~> 6.2.1) - fmt (~> 6.2.1)
- glog - glog
- RCTRequired (0.69.8) - RCT-Folly/Futures (2021.07.22.00):
- RCTTypeSafety (0.69.8): - boost
- FBLazyVector (= 0.69.8) - DoubleConversion
- RCTRequired (= 0.69.8) - fmt (~> 6.2.1)
- React-Core (= 0.69.8)
- React (0.69.8):
- React-Core (= 0.69.8)
- React-Core/DevSupport (= 0.69.8)
- React-Core/RCTWebSocket (= 0.69.8)
- React-RCTActionSheet (= 0.69.8)
- React-RCTAnimation (= 0.69.8)
- React-RCTBlob (= 0.69.8)
- React-RCTImage (= 0.69.8)
- React-RCTLinking (= 0.69.8)
- React-RCTNetwork (= 0.69.8)
- React-RCTSettings (= 0.69.8)
- React-RCTText (= 0.69.8)
- React-RCTVibration (= 0.69.8)
- React-bridging (0.69.8):
- RCT-Folly (= 2021.06.28.00-v2)
- React-jsi (= 0.69.8)
- React-callinvoker (0.69.8)
- React-Codegen (0.69.8):
- FBReactNativeSpec (= 0.69.8)
- RCT-Folly (= 2021.06.28.00-v2)
- RCTRequired (= 0.69.8)
- RCTTypeSafety (= 0.69.8)
- React-Core (= 0.69.8)
- React-jsi (= 0.69.8)
- React-jsiexecutor (= 0.69.8)
- ReactCommon/turbomodule/core (= 0.69.8)
- React-Core (0.69.8):
- glog - glog
- RCT-Folly (= 2021.06.28.00-v2) - libevent
- React-Core/Default (= 0.69.8) - RCTRequired (0.72.5)
- React-cxxreact (= 0.69.8) - RCTTypeSafety (0.72.5):
- React-jsi (= 0.69.8) - FBLazyVector (= 0.72.5)
- React-jsiexecutor (= 0.69.8) - RCTRequired (= 0.72.5)
- React-perflogger (= 0.69.8) - React-Core (= 0.72.5)
- React (0.72.5):
- React-Core (= 0.72.5)
- React-Core/DevSupport (= 0.72.5)
- React-Core/RCTWebSocket (= 0.72.5)
- React-RCTActionSheet (= 0.72.5)
- React-RCTAnimation (= 0.72.5)
- React-RCTBlob (= 0.72.5)
- React-RCTImage (= 0.72.5)
- React-RCTLinking (= 0.72.5)
- React-RCTNetwork (= 0.72.5)
- React-RCTSettings (= 0.72.5)
- React-RCTText (= 0.72.5)
- React-RCTVibration (= 0.72.5)
- React-callinvoker (0.72.5)
- React-Codegen (0.72.5):
- DoubleConversion
- FBReactNativeSpec
- glog
- hermes-engine
- RCT-Folly
- RCTRequired
- RCTTypeSafety
- React-Core
- React-jsi
- React-jsiexecutor
- React-NativeModulesApple
- React-rncore
- ReactCommon/turbomodule/bridging
- ReactCommon/turbomodule/core
- React-Core (0.72.5):
- glog
- hermes-engine
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default (= 0.72.5)
- React-cxxreact
- React-hermes
- React-jsi
- React-jsiexecutor
- React-perflogger
- React-runtimeexecutor
- React-utils
- SocketRocket (= 0.6.1)
- Yoga - Yoga
- React-Core/CoreModulesHeaders (0.69.8): - React-Core/CoreModulesHeaders (0.72.5):
- glog - glog
- RCT-Folly (= 2021.06.28.00-v2) - hermes-engine
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default - React-Core/Default
- React-cxxreact (= 0.69.8) - React-cxxreact
- React-jsi (= 0.69.8) - React-hermes
- React-jsiexecutor (= 0.69.8) - React-jsi
- React-perflogger (= 0.69.8) - React-jsiexecutor
- React-perflogger
- React-runtimeexecutor
- React-utils
- SocketRocket (= 0.6.1)
- Yoga - Yoga
- React-Core/Default (0.69.8): - React-Core/Default (0.72.5):
- glog - glog
- RCT-Folly (= 2021.06.28.00-v2) - hermes-engine
- React-cxxreact (= 0.69.8) - RCT-Folly (= 2021.07.22.00)
- React-jsi (= 0.69.8) - React-cxxreact
- React-jsiexecutor (= 0.69.8) - React-hermes
- React-perflogger (= 0.69.8) - React-jsi
- React-jsiexecutor
- React-perflogger
- React-runtimeexecutor
- React-utils
- SocketRocket (= 0.6.1)
- Yoga - Yoga
- React-Core/DevSupport (0.69.8): - React-Core/DevSupport (0.72.5):
- glog - glog
- RCT-Folly (= 2021.06.28.00-v2) - hermes-engine
- React-Core/Default (= 0.69.8) - RCT-Folly (= 2021.07.22.00)
- React-Core/RCTWebSocket (= 0.69.8) - React-Core/Default (= 0.72.5)
- React-cxxreact (= 0.69.8) - React-Core/RCTWebSocket (= 0.72.5)
- React-jsi (= 0.69.8) - React-cxxreact
- React-jsiexecutor (= 0.69.8) - React-hermes
- React-jsinspector (= 0.69.8) - React-jsi
- React-perflogger (= 0.69.8) - React-jsiexecutor
- React-jsinspector (= 0.72.5)
- React-perflogger
- React-runtimeexecutor
- React-utils
- SocketRocket (= 0.6.1)
- Yoga - Yoga
- React-Core/RCTActionSheetHeaders (0.69.8): - React-Core/RCTActionSheetHeaders (0.72.5):
- glog - glog
- RCT-Folly (= 2021.06.28.00-v2) - hermes-engine
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default - React-Core/Default
- React-cxxreact (= 0.69.8) - React-cxxreact
- React-jsi (= 0.69.8) - React-hermes
- React-jsiexecutor (= 0.69.8) - React-jsi
- React-perflogger (= 0.69.8) - React-jsiexecutor
- React-perflogger
- React-runtimeexecutor
- React-utils
- SocketRocket (= 0.6.1)
- Yoga - Yoga
- React-Core/RCTAnimationHeaders (0.69.8): - React-Core/RCTAnimationHeaders (0.72.5):
- glog - glog
- RCT-Folly (= 2021.06.28.00-v2) - hermes-engine
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default - React-Core/Default
- React-cxxreact (= 0.69.8) - React-cxxreact
- React-jsi (= 0.69.8) - React-hermes
- React-jsiexecutor (= 0.69.8) - React-jsi
- React-perflogger (= 0.69.8) - React-jsiexecutor
- React-perflogger
- React-runtimeexecutor
- React-utils
- SocketRocket (= 0.6.1)
- Yoga - Yoga
- React-Core/RCTBlobHeaders (0.69.8): - React-Core/RCTBlobHeaders (0.72.5):
- glog - glog
- RCT-Folly (= 2021.06.28.00-v2) - hermes-engine
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default - React-Core/Default
- React-cxxreact (= 0.69.8) - React-cxxreact
- React-jsi (= 0.69.8) - React-hermes
- React-jsiexecutor (= 0.69.8) - React-jsi
- React-perflogger (= 0.69.8) - React-jsiexecutor
- React-perflogger
- React-runtimeexecutor
- React-utils
- SocketRocket (= 0.6.1)
- Yoga - Yoga
- React-Core/RCTImageHeaders (0.69.8): - React-Core/RCTImageHeaders (0.72.5):
- glog - glog
- RCT-Folly (= 2021.06.28.00-v2) - hermes-engine
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default - React-Core/Default
- React-cxxreact (= 0.69.8) - React-cxxreact
- React-jsi (= 0.69.8) - React-hermes
- React-jsiexecutor (= 0.69.8) - React-jsi
- React-perflogger (= 0.69.8) - React-jsiexecutor
- React-perflogger
- React-runtimeexecutor
- React-utils
- SocketRocket (= 0.6.1)
- Yoga - Yoga
- React-Core/RCTLinkingHeaders (0.69.8): - React-Core/RCTLinkingHeaders (0.72.5):
- glog - glog
- RCT-Folly (= 2021.06.28.00-v2) - hermes-engine
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default - React-Core/Default
- React-cxxreact (= 0.69.8) - React-cxxreact
- React-jsi (= 0.69.8) - React-hermes
- React-jsiexecutor (= 0.69.8) - React-jsi
- React-perflogger (= 0.69.8) - React-jsiexecutor
- React-perflogger
- React-runtimeexecutor
- React-utils
- SocketRocket (= 0.6.1)
- Yoga - Yoga
- React-Core/RCTNetworkHeaders (0.69.8): - React-Core/RCTNetworkHeaders (0.72.5):
- glog - glog
- RCT-Folly (= 2021.06.28.00-v2) - hermes-engine
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default - React-Core/Default
- React-cxxreact (= 0.69.8) - React-cxxreact
- React-jsi (= 0.69.8) - React-hermes
- React-jsiexecutor (= 0.69.8) - React-jsi
- React-perflogger (= 0.69.8) - React-jsiexecutor
- React-perflogger
- React-runtimeexecutor
- React-utils
- SocketRocket (= 0.6.1)
- Yoga - Yoga
- React-Core/RCTSettingsHeaders (0.69.8): - React-Core/RCTSettingsHeaders (0.72.5):
- glog - glog
- RCT-Folly (= 2021.06.28.00-v2) - hermes-engine
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default - React-Core/Default
- React-cxxreact (= 0.69.8) - React-cxxreact
- React-jsi (= 0.69.8) - React-hermes
- React-jsiexecutor (= 0.69.8) - React-jsi
- React-perflogger (= 0.69.8) - React-jsiexecutor
- React-perflogger
- React-runtimeexecutor
- React-utils
- SocketRocket (= 0.6.1)
- Yoga - Yoga
- React-Core/RCTTextHeaders (0.69.8): - React-Core/RCTTextHeaders (0.72.5):
- glog - glog
- RCT-Folly (= 2021.06.28.00-v2) - hermes-engine
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default - React-Core/Default
- React-cxxreact (= 0.69.8) - React-cxxreact
- React-jsi (= 0.69.8) - React-hermes
- React-jsiexecutor (= 0.69.8) - React-jsi
- React-perflogger (= 0.69.8) - React-jsiexecutor
- React-perflogger
- React-runtimeexecutor
- React-utils
- SocketRocket (= 0.6.1)
- Yoga - Yoga
- React-Core/RCTVibrationHeaders (0.69.8): - React-Core/RCTVibrationHeaders (0.72.5):
- glog - glog
- RCT-Folly (= 2021.06.28.00-v2) - hermes-engine
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default - React-Core/Default
- React-cxxreact (= 0.69.8) - React-cxxreact
- React-jsi (= 0.69.8) - React-hermes
- React-jsiexecutor (= 0.69.8) - React-jsi
- React-perflogger (= 0.69.8) - React-jsiexecutor
- React-perflogger
- React-runtimeexecutor
- React-utils
- SocketRocket (= 0.6.1)
- Yoga - Yoga
- React-Core/RCTWebSocket (0.69.8): - React-Core/RCTWebSocket (0.72.5):
- glog - glog
- RCT-Folly (= 2021.06.28.00-v2) - hermes-engine
- React-Core/Default (= 0.69.8) - RCT-Folly (= 2021.07.22.00)
- React-cxxreact (= 0.69.8) - React-Core/Default (= 0.72.5)
- React-jsi (= 0.69.8) - React-cxxreact
- React-jsiexecutor (= 0.69.8) - React-hermes
- React-perflogger (= 0.69.8) - React-jsi
- React-jsiexecutor
- React-perflogger
- React-runtimeexecutor
- React-utils
- SocketRocket (= 0.6.1)
- Yoga - Yoga
- React-CoreModules (0.69.8): - React-CoreModules (0.72.5):
- RCT-Folly (= 2021.06.28.00-v2) - RCT-Folly (= 2021.07.22.00)
- RCTTypeSafety (= 0.69.8) - RCTTypeSafety (= 0.72.5)
- React-Codegen (= 0.69.8) - React-Codegen (= 0.72.5)
- React-Core/CoreModulesHeaders (= 0.69.8) - React-Core/CoreModulesHeaders (= 0.72.5)
- React-jsi (= 0.69.8) - React-jsi (= 0.72.5)
- React-RCTImage (= 0.69.8) - React-RCTBlob
- ReactCommon/turbomodule/core (= 0.69.8) - React-RCTImage (= 0.72.5)
- React-cxxreact (0.69.8): - ReactCommon/turbomodule/core (= 0.72.5)
- SocketRocket (= 0.6.1)
- React-cxxreact (0.72.5):
- boost (= 1.76.0) - boost (= 1.76.0)
- DoubleConversion - DoubleConversion
- glog - glog
- RCT-Folly (= 2021.06.28.00-v2) - hermes-engine
- React-callinvoker (= 0.69.8) - RCT-Folly (= 2021.07.22.00)
- React-jsi (= 0.69.8) - React-callinvoker (= 0.72.5)
- React-jsinspector (= 0.69.8) - React-debug (= 0.72.5)
- React-logger (= 0.69.8) - React-jsi (= 0.72.5)
- React-perflogger (= 0.69.8) - React-jsinspector (= 0.72.5)
- React-runtimeexecutor (= 0.69.8) - React-logger (= 0.72.5)
- React-jsi (0.69.8): - React-perflogger (= 0.72.5)
- React-runtimeexecutor (= 0.72.5)
- React-debug (0.72.5)
- React-hermes (0.72.5):
- DoubleConversion
- glog
- hermes-engine
- RCT-Folly (= 2021.07.22.00)
- RCT-Folly/Futures (= 2021.07.22.00)
- React-cxxreact (= 0.72.5)
- React-jsi
- React-jsiexecutor (= 0.72.5)
- React-jsinspector (= 0.72.5)
- React-perflogger (= 0.72.5)
- React-jsi (0.72.5):
- boost (= 1.76.0) - boost (= 1.76.0)
- DoubleConversion - DoubleConversion
- glog - glog
- RCT-Folly (= 2021.06.28.00-v2) - hermes-engine
- React-jsi/Default (= 0.69.8) - RCT-Folly (= 2021.07.22.00)
- React-jsi/Default (0.69.8): - React-jsiexecutor (0.72.5):
- boost (= 1.76.0)
- DoubleConversion - DoubleConversion
- glog - glog
- RCT-Folly (= 2021.06.28.00-v2) - hermes-engine
- React-jsiexecutor (0.69.8): - RCT-Folly (= 2021.07.22.00)
- DoubleConversion - React-cxxreact (= 0.72.5)
- React-jsi (= 0.72.5)
- React-perflogger (= 0.72.5)
- React-jsinspector (0.72.5)
- React-logger (0.72.5):
- glog - glog
- RCT-Folly (= 2021.06.28.00-v2) - react-native-safe-area-context (4.11.0):
- React-cxxreact (= 0.69.8)
- React-jsi (= 0.69.8)
- React-perflogger (= 0.69.8)
- React-jsinspector (0.69.8)
- React-logger (0.69.8):
- glog
- react-native-safe-area-context (4.8.2):
- React-Core - React-Core
- react-native-update (10.10.0): - react-native-update (10.15.0):
- RCT-Folly (= 2021.07.22.00)
- React - React
- React-Core - React-Core
- react-native-update/HDiffPatch (= 10.10.0) - react-native-update/HDiffPatch (= 10.15.0)
- react-native-update/RCTPushy (= 10.10.0) - react-native-update/RCTPushy (= 10.15.0)
- SSZipArchive - SSZipArchive
- react-native-update/HDiffPatch (10.10.0): - react-native-update/HDiffPatch (10.15.0):
- RCT-Folly (= 2021.07.22.00)
- React - React
- React-Core - React-Core
- SSZipArchive - SSZipArchive
- react-native-update/RCTPushy (10.10.0): - react-native-update/RCTPushy (10.15.0):
- RCT-Folly (= 2021.07.22.00)
- React - React
- React-Core - React-Core
- SSZipArchive - SSZipArchive
- React-perflogger (0.69.8) - React-NativeModulesApple (0.72.5):
- React-RCTActionSheet (0.69.8): - hermes-engine
- React-Core/RCTActionSheetHeaders (= 0.69.8) - React-callinvoker
- React-RCTAnimation (0.69.8): - React-Core
- RCT-Folly (= 2021.06.28.00-v2) - React-cxxreact
- RCTTypeSafety (= 0.69.8) - React-jsi
- React-Codegen (= 0.69.8) - React-runtimeexecutor
- React-Core/RCTAnimationHeaders (= 0.69.8) - ReactCommon/turbomodule/bridging
- React-jsi (= 0.69.8) - ReactCommon/turbomodule/core
- ReactCommon/turbomodule/core (= 0.69.8) - React-perflogger (0.72.5)
- React-RCTBlob (0.69.8): - React-RCTActionSheet (0.72.5):
- RCT-Folly (= 2021.06.28.00-v2) - React-Core/RCTActionSheetHeaders (= 0.72.5)
- React-Codegen (= 0.69.8) - React-RCTAnimation (0.72.5):
- React-Core/RCTBlobHeaders (= 0.69.8) - RCT-Folly (= 2021.07.22.00)
- React-Core/RCTWebSocket (= 0.69.8) - RCTTypeSafety (= 0.72.5)
- React-jsi (= 0.69.8) - React-Codegen (= 0.72.5)
- React-RCTNetwork (= 0.69.8) - React-Core/RCTAnimationHeaders (= 0.72.5)
- ReactCommon/turbomodule/core (= 0.69.8) - React-jsi (= 0.72.5)
- React-RCTImage (0.69.8): - ReactCommon/turbomodule/core (= 0.72.5)
- RCT-Folly (= 2021.06.28.00-v2) - React-RCTAppDelegate (0.72.5):
- RCTTypeSafety (= 0.69.8) - RCT-Folly
- React-Codegen (= 0.69.8) - RCTRequired
- React-Core/RCTImageHeaders (= 0.69.8) - RCTTypeSafety
- React-jsi (= 0.69.8) - React-Core
- React-RCTNetwork (= 0.69.8) - React-CoreModules
- ReactCommon/turbomodule/core (= 0.69.8) - React-hermes
- React-RCTLinking (0.69.8): - React-NativeModulesApple
- React-Codegen (= 0.69.8) - React-RCTImage
- React-Core/RCTLinkingHeaders (= 0.69.8) - React-RCTNetwork
- React-jsi (= 0.69.8) - React-runtimescheduler
- ReactCommon/turbomodule/core (= 0.69.8) - ReactCommon/turbomodule/core
- React-RCTNetwork (0.69.8): - React-RCTBlob (0.72.5):
- RCT-Folly (= 2021.06.28.00-v2) - hermes-engine
- RCTTypeSafety (= 0.69.8) - RCT-Folly (= 2021.07.22.00)
- React-Codegen (= 0.69.8) - React-Codegen (= 0.72.5)
- React-Core/RCTNetworkHeaders (= 0.69.8) - React-Core/RCTBlobHeaders (= 0.72.5)
- React-jsi (= 0.69.8) - React-Core/RCTWebSocket (= 0.72.5)
- ReactCommon/turbomodule/core (= 0.69.8) - React-jsi (= 0.72.5)
- React-RCTSettings (0.69.8): - React-RCTNetwork (= 0.72.5)
- RCT-Folly (= 2021.06.28.00-v2) - ReactCommon/turbomodule/core (= 0.72.5)
- RCTTypeSafety (= 0.69.8) - React-RCTImage (0.72.5):
- React-Codegen (= 0.69.8) - RCT-Folly (= 2021.07.22.00)
- React-Core/RCTSettingsHeaders (= 0.69.8) - RCTTypeSafety (= 0.72.5)
- React-jsi (= 0.69.8) - React-Codegen (= 0.72.5)
- ReactCommon/turbomodule/core (= 0.69.8) - React-Core/RCTImageHeaders (= 0.72.5)
- React-RCTText (0.69.8): - React-jsi (= 0.72.5)
- React-Core/RCTTextHeaders (= 0.69.8) - React-RCTNetwork (= 0.72.5)
- React-RCTVibration (0.69.8): - ReactCommon/turbomodule/core (= 0.72.5)
- RCT-Folly (= 2021.06.28.00-v2) - React-RCTLinking (0.72.5):
- React-Codegen (= 0.69.8) - React-Codegen (= 0.72.5)
- React-Core/RCTVibrationHeaders (= 0.69.8) - React-Core/RCTLinkingHeaders (= 0.72.5)
- React-jsi (= 0.69.8) - React-jsi (= 0.72.5)
- ReactCommon/turbomodule/core (= 0.69.8) - ReactCommon/turbomodule/core (= 0.72.5)
- React-runtimeexecutor (0.69.8): - React-RCTNetwork (0.72.5):
- React-jsi (= 0.69.8) - RCT-Folly (= 2021.07.22.00)
- ReactCommon/turbomodule/core (0.69.8): - RCTTypeSafety (= 0.72.5)
- React-Codegen (= 0.72.5)
- React-Core/RCTNetworkHeaders (= 0.72.5)
- React-jsi (= 0.72.5)
- ReactCommon/turbomodule/core (= 0.72.5)
- React-RCTSettings (0.72.5):
- RCT-Folly (= 2021.07.22.00)
- RCTTypeSafety (= 0.72.5)
- React-Codegen (= 0.72.5)
- React-Core/RCTSettingsHeaders (= 0.72.5)
- React-jsi (= 0.72.5)
- ReactCommon/turbomodule/core (= 0.72.5)
- React-RCTText (0.72.5):
- React-Core/RCTTextHeaders (= 0.72.5)
- React-RCTVibration (0.72.5):
- RCT-Folly (= 2021.07.22.00)
- React-Codegen (= 0.72.5)
- React-Core/RCTVibrationHeaders (= 0.72.5)
- React-jsi (= 0.72.5)
- ReactCommon/turbomodule/core (= 0.72.5)
- React-rncore (0.72.5)
- React-runtimeexecutor (0.72.5):
- React-jsi (= 0.72.5)
- React-runtimescheduler (0.72.5):
- glog
- hermes-engine
- RCT-Folly (= 2021.07.22.00)
- React-callinvoker
- React-debug
- React-jsi
- React-runtimeexecutor
- React-utils (0.72.5):
- glog
- RCT-Folly (= 2021.07.22.00)
- React-debug
- ReactCommon/turbomodule/bridging (0.72.5):
- DoubleConversion - DoubleConversion
- glog - glog
- RCT-Folly (= 2021.06.28.00-v2) - hermes-engine
- React-bridging (= 0.69.8) - RCT-Folly (= 2021.07.22.00)
- React-callinvoker (= 0.69.8) - React-callinvoker (= 0.72.5)
- React-Core (= 0.69.8) - React-cxxreact (= 0.72.5)
- React-cxxreact (= 0.69.8) - React-jsi (= 0.72.5)
- React-jsi (= 0.69.8) - React-logger (= 0.72.5)
- React-logger (= 0.69.8) - React-perflogger (= 0.72.5)
- React-perflogger (= 0.69.8) - ReactCommon/turbomodule/core (0.72.5):
- DoubleConversion
- glog
- hermes-engine
- RCT-Folly (= 2021.07.22.00)
- React-callinvoker (= 0.72.5)
- React-cxxreact (= 0.72.5)
- React-jsi (= 0.72.5)
- React-logger (= 0.72.5)
- React-perflogger (= 0.72.5)
- ReactNativeCameraKit (14.0.0-beta9): - ReactNativeCameraKit (14.0.0-beta9):
- React-Core - React-Core
- RNVectorIcons (10.0.3): - RNVectorIcons (10.2.0):
- RCT-Folly (= 2021.07.22.00)
- React-Core - React-Core
- SocketRocket (0.6.1)
- SSZipArchive (2.4.3) - SSZipArchive (2.4.3)
- Yoga (1.14.0) - Yoga (1.14.0)
@@ -315,26 +459,31 @@ DEPENDENCIES:
- FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
- FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`) - FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`)
- glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
- hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`)
- libevent (~> 2.1.12)
- RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`)
- RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`) - RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`)
- RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`)
- React (from `../node_modules/react-native/`) - React (from `../node_modules/react-native/`)
- React-bridging (from `../node_modules/react-native/ReactCommon`)
- React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`) - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`)
- React-Codegen (from `build/generated/ios`) - React-Codegen (from `build/generated/ios`)
- React-Core (from `../node_modules/react-native/`) - React-Core (from `../node_modules/react-native/`)
- React-Core/RCTWebSocket (from `../node_modules/react-native/`) - React-Core/RCTWebSocket (from `../node_modules/react-native/`)
- React-CoreModules (from `../node_modules/react-native/React/CoreModules`) - React-CoreModules (from `../node_modules/react-native/React/CoreModules`)
- React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`) - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`)
- React-debug (from `../node_modules/react-native/ReactCommon/react/debug`)
- React-hermes (from `../node_modules/react-native/ReactCommon/hermes`)
- React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`)
- React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`)
- React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`) - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`)
- React-logger (from `../node_modules/react-native/ReactCommon/logger`) - React-logger (from `../node_modules/react-native/ReactCommon/logger`)
- react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`) - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
- react-native-update (from `../node_modules/react-native-update`) - react-native-update (from `../node_modules/react-native-update`)
- React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`)
- React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`) - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`)
- React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`) - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`)
- React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`) - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`)
- React-RCTAppDelegate (from `../node_modules/react-native/Libraries/AppDelegate`)
- React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`) - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`)
- React-RCTImage (from `../node_modules/react-native/Libraries/Image`) - React-RCTImage (from `../node_modules/react-native/Libraries/Image`)
- React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`) - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`)
@@ -342,7 +491,10 @@ DEPENDENCIES:
- React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`) - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`)
- React-RCTText (from `../node_modules/react-native/Libraries/Text`) - React-RCTText (from `../node_modules/react-native/Libraries/Text`)
- React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`) - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`)
- React-rncore (from `../node_modules/react-native/ReactCommon`)
- React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`) - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`)
- React-runtimescheduler (from `../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`)
- React-utils (from `../node_modules/react-native/ReactCommon/react/utils`)
- ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
- ReactNativeCameraKit (from `../node_modules/react-native-camera-kit`) - ReactNativeCameraKit (from `../node_modules/react-native-camera-kit`)
- RNVectorIcons (from `../node_modules/react-native-vector-icons`) - RNVectorIcons (from `../node_modules/react-native-vector-icons`)
@@ -351,6 +503,8 @@ DEPENDENCIES:
SPEC REPOS: SPEC REPOS:
trunk: trunk:
- fmt - fmt
- libevent
- SocketRocket
- SSZipArchive - SSZipArchive
EXTERNAL SOURCES: EXTERNAL SOURCES:
@@ -364,6 +518,9 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/React/FBReactNativeSpec" :path: "../node_modules/react-native/React/FBReactNativeSpec"
glog: glog:
:podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec"
hermes-engine:
:podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec"
:tag: hermes-2023-08-07-RNv0.72.4-813b2def12bc9df02654b3e3653ae4a68d0572e0
RCT-Folly: RCT-Folly:
:podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec"
RCTRequired: RCTRequired:
@@ -372,8 +529,6 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/Libraries/TypeSafety" :path: "../node_modules/react-native/Libraries/TypeSafety"
React: React:
:path: "../node_modules/react-native/" :path: "../node_modules/react-native/"
React-bridging:
:path: "../node_modules/react-native/ReactCommon"
React-callinvoker: React-callinvoker:
:path: "../node_modules/react-native/ReactCommon/callinvoker" :path: "../node_modules/react-native/ReactCommon/callinvoker"
React-Codegen: React-Codegen:
@@ -384,6 +539,10 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/React/CoreModules" :path: "../node_modules/react-native/React/CoreModules"
React-cxxreact: React-cxxreact:
:path: "../node_modules/react-native/ReactCommon/cxxreact" :path: "../node_modules/react-native/ReactCommon/cxxreact"
React-debug:
:path: "../node_modules/react-native/ReactCommon/react/debug"
React-hermes:
:path: "../node_modules/react-native/ReactCommon/hermes"
React-jsi: React-jsi:
:path: "../node_modules/react-native/ReactCommon/jsi" :path: "../node_modules/react-native/ReactCommon/jsi"
React-jsiexecutor: React-jsiexecutor:
@@ -396,12 +555,16 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native-safe-area-context" :path: "../node_modules/react-native-safe-area-context"
react-native-update: react-native-update:
:path: "../node_modules/react-native-update" :path: "../node_modules/react-native-update"
React-NativeModulesApple:
:path: "../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios"
React-perflogger: React-perflogger:
:path: "../node_modules/react-native/ReactCommon/reactperflogger" :path: "../node_modules/react-native/ReactCommon/reactperflogger"
React-RCTActionSheet: React-RCTActionSheet:
:path: "../node_modules/react-native/Libraries/ActionSheetIOS" :path: "../node_modules/react-native/Libraries/ActionSheetIOS"
React-RCTAnimation: React-RCTAnimation:
:path: "../node_modules/react-native/Libraries/NativeAnimation" :path: "../node_modules/react-native/Libraries/NativeAnimation"
React-RCTAppDelegate:
:path: "../node_modules/react-native/Libraries/AppDelegate"
React-RCTBlob: React-RCTBlob:
:path: "../node_modules/react-native/Libraries/Blob" :path: "../node_modules/react-native/Libraries/Blob"
React-RCTImage: React-RCTImage:
@@ -416,8 +579,14 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/Libraries/Text" :path: "../node_modules/react-native/Libraries/Text"
React-RCTVibration: React-RCTVibration:
:path: "../node_modules/react-native/Libraries/Vibration" :path: "../node_modules/react-native/Libraries/Vibration"
React-rncore:
:path: "../node_modules/react-native/ReactCommon"
React-runtimeexecutor: React-runtimeexecutor:
:path: "../node_modules/react-native/ReactCommon/runtimeexecutor" :path: "../node_modules/react-native/ReactCommon/runtimeexecutor"
React-runtimescheduler:
:path: "../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler"
React-utils:
:path: "../node_modules/react-native/ReactCommon/react/utils"
ReactCommon: ReactCommon:
:path: "../node_modules/react-native/ReactCommon" :path: "../node_modules/react-native/ReactCommon"
ReactNativeCameraKit: ReactNativeCameraKit:
@@ -428,45 +597,54 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/ReactCommon/yoga" :path: "../node_modules/react-native/ReactCommon/yoga"
SPEC CHECKSUMS: SPEC CHECKSUMS:
boost: a7c83b31436843459a1961bfd74b96033dc77234 boost: 57d2868c099736d80fcd648bf211b4431e51a558
DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54 DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54
FBLazyVector: c7b6997d41fffaaaf4d18c82bc93885df731e2d0 FBLazyVector: 71803c074f6325f10b5ec891c443b6bbabef0ca7
FBReactNativeSpec: b1217c558a3ae84c2057d9c2ddce88af21379a68 FBReactNativeSpec: 448e08a759d29a96e15725ae532445bf4343567c
fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9 fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9
glog: 3d02b25ca00c2d456734d0bcff864cbc62f6ae1a glog: 04b94705f318337d7ead9e6d17c019bd9b1f6b1b
RCT-Folly: b9d9fe1fc70114b751c076104e52f3b1b5e5a95a hermes-engine: f6cf92a471053245614d9d8097736f6337d5b86c
RCTRequired: 344fd6fb3c669da87e91294be7ee0199bf35c701 libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
RCTTypeSafety: ca608cc1d3a81229632bc0c1136b698b9337c1d8 RCT-Folly: 424b8c9a7a0b9ab2886ffe9c3b041ef628fd4fb1
React: 1d76bae8d73113b202224075f0b0bd546996b328 RCTRequired: df81ab637d35fac9e6eb94611cfd20f0feb05455
React-bridging: 2eb62dc8ba31194d285705cb62e24a15753aeaec RCTTypeSafety: 4636e4a36c7c2df332bda6d59b19b41c443d4287
React-callinvoker: f3cfb045a0fb185445542555d88b6acf385cbedc React: e0cc5197a804031a6c53fb38483c3485fcb9d6f3
React-Codegen: 808e2d4d4201583ac89fb40d6862aaa26cb88999 React-callinvoker: 1a635856fe0c3d8b13fccd4ed7e76283b99b0868
React-Core: 82c5392ab182252ce4ffbc16794e0e38b32ea9a1 React-Codegen: 78d61f981cccc68a771a598f71621cb7db14b04c
React-CoreModules: 4e891a6c0a59b01ca8406e041c7e49ab12e51d48 React-Core: 252f8e9ca5a4e91af9b9be58670846d662b1c49f
React-cxxreact: 0dc4ba3d97839bd36d422592ddb0bdfa9940a990 React-CoreModules: f8b9e91fac7bd5d18729ce961a4978c70b5031cc
React-jsi: dcd936ff5e580dba0d8644ac9ee4ca47bb166df1 React-cxxreact: 70284b32dcd367439d7dae84d9f72660544181b5
React-jsiexecutor: 2cf8ea3753afb81dfcc386613dbbb0b5d155fb34 React-debug: ee33d7ba43766d9b10b32561527b57ccfbcb6bd1
React-jsinspector: 0eda09e9cf22bbb5dbb1d23143b03a31acf37d67 React-hermes: 91f97ea2669dc5847e1f26c243aaad913319c570
React-logger: 5997ab008583826c10ffe4e1ff990363e975639d React-jsi: bd68b7779746014f01ea72d1b738809e132d7f1e
react-native-safe-area-context: 0ee144a6170530ccc37a0fd9388e28d06f516a89 React-jsiexecutor: ff70a72027dea5cc7d71cfcc6fad7f599f63987a
react-native-update: a7f136a3c87183b13c7ff5c4f9d2b614930968ad React-jsinspector: aef73cbd43b70675f572214d10fa438c89bf11ba
React-perflogger: ad1416a715d86b32f456e5d0aed99c3b52f1de37 React-logger: 2e4aee3e11b3ec4fa6cfd8004610bbb3b8d6cca4
React-RCTActionSheet: cbf7c6a953982562418ee72a1084ff7b9447b558 react-native-safe-area-context: 851c62c48dce80ccaa5637b6aa5991a1bc36eca9
React-RCTAnimation: 33df3e25824dd7313edec28dded2745542f9352b react-native-update: 805aef1caa02ec2532a4c060f3baa696aa8d0b92
React-RCTBlob: 2434411df0d2d0e6567445a995f6678e2cc1d8e3 React-NativeModulesApple: 797bc6078d566eef3fb3f74127e6e1d2e945a15f
React-RCTImage: 0b912ab4255ea5ec903d06c77f5a23cea9e9c988 React-perflogger: cd8886513f68e1c135a1e79d20575c6489641597
React-RCTLinking: eb239c24f4f5fe79c57a2fedf45f34f40481dda3 React-RCTActionSheet: 726d2615ca62a77ce3e2c13d87f65379cdc73498
React-RCTNetwork: db173a6c35c1212909944920a5aa03eb8b7b9cf4 React-RCTAnimation: 8f2716b881c37c64858e4ecee0f58bfa57ff9afd
React-RCTSettings: 687fa7538972467d80cd7729b6f86598e1369813 React-RCTAppDelegate: d4a213f29e81682f6b9c7d22f62a2ccab6d125ae
React-RCTText: 605ef414f8e72bd111945d3612cd0518de612b24 React-RCTBlob: dfaa933231c3497915bbcc9d98fcff7b6b60582c
React-RCTVibration: 5462287ee85304ba1a00474665ab292e63a41663 React-RCTImage: 747e3d7b656a67470f9c234baedb8d41bbc4e745
React-runtimeexecutor: 9df680f18497367bcf5c15b6b6406c0f2dfa2b6a React-RCTLinking: 148332b5b0396b280b05534f7d168e560a3bbd5f
ReactCommon: c10f046f3ef8561e7c8e7e9b9dae2ecc9ffc48ef React-RCTNetwork: 1d818121a8e678f064de663a6db7aaefc099e53c
React-RCTSettings: 4b95d26ebc88bfd3b6535b2d7904914ff88dbfc2
React-RCTText: ce4499e4f2d8f85dc4b93ff0559313a016c4f3e2
React-RCTVibration: 45372e61b35e96d16893540958d156675afbeb63
React-rncore: a79d1cb3d6c01b358a8aa0b31ccc04ab5f0dbebc
React-runtimeexecutor: 7e31e2bc6d0ecc83d4ba05eadc98401007abc10c
React-runtimescheduler: cc32add98c45c5df18436a6a52a7e1f6edec102c
React-utils: 7a9918a1ffdd39aba67835d42386f592ea3f8e76
ReactCommon: 91ece8350ebb3dd2be9cef662abd78b6948233c0
ReactNativeCameraKit: 4bec78d688adcd68772af2834d5c30a6a8e2a384 ReactNativeCameraKit: 4bec78d688adcd68772af2834d5c30a6a8e2a384
RNVectorIcons: bc7ee28cadf39c77a49232a14738dfce690f66cd RNVectorIcons: 084d874504f21a5452744e400537eb96b45060b6
SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17
SSZipArchive: fe6a26b2a54d5a0890f2567b5cc6de5caa600aef SSZipArchive: fe6a26b2a54d5a0890f2567b5cc6de5caa600aef
Yoga: d3820731e0ca3a4933f061ad29defaf7726e3251 Yoga: 86fed2e4d425ee4c6eab3813ba1791101ee153c6
PODFILE CHECKSUM: d91298a06dc138c1778443a87db930ad51725939 PODFILE CHECKSUM: 8896f64a5acacf96e515141601dbe49951a654b4
COCOAPODS: 1.15.2 COCOAPODS: 1.15.2

View File

@@ -1,24 +1,11 @@
// const path = require('path'); const {getDefaultConfig, mergeConfig} = require('@react-native/metro-config');
// const extraNodeModules = { /**
// react: path.resolve(__dirname, 'node_modules/react'), * Metro configuration
// 'react-native': path.resolve(__dirname, 'node_modules/react-native'), * https://facebook.github.io/metro/docs/configuration
// 'react-native-update': path.resolve(__dirname, '../..'), *
// '@babel/runtime': path.resolve(__dirname, 'node_modules/@babel/runtime'), * @type {import('metro-config').MetroConfig}
// }; */
// const watchFolders = [path.resolve(__dirname, '../..')]; const config = {};
module.exports = { module.exports = mergeConfig(getDefaultConfig(__dirname), config);
transformer: {
getTransformOptions: async () => ({
transform: {
experimentalImportSupport: false,
inlineRequires: true,
},
}),
},
// resolver: {
// extraNodeModules,
// },
// watchFolders,
};

View File

@@ -13,31 +13,35 @@
"apk": "cd android && ./gradlew assembleRelease" "apk": "cd android && ./gradlew assembleRelease"
}, },
"dependencies": { "dependencies": {
"patch-package": "^6.5.1", "patch-package": "^8.0.0",
"postinstall-postinstall": "^2.1.0", "postinstall-postinstall": "^2.1.0",
"react": "18.0.0", "react": "18.2.0",
"react-native": "0.69.8", "react-native": "0.72.5",
"react-native-camera-kit": "^14.0.0-beta15", "react-native-camera-kit": "^14.0.0-beta15",
"react-native-paper": "^5.12.1", "react-native-paper": "^5.12.5",
"react-native-safe-area-context": "^4.8.2", "react-native-safe-area-context": "^4.11.0",
"react-native-update": "^10.11.3", "react-native-update": "^10.15.0",
"react-native-vector-icons": "^10.0.3" "react-native-vector-icons": "^10.2.0"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.21.0", "@babel/core": "^7.20.0",
"@babel/runtime": "^7.21.0", "@babel/preset-env": "^7.20.0",
"@react-native-community/eslint-config": "^3.2.0", "@babel/runtime": "^7.20.0",
"babel-jest": "^29.5.0", "@react-native/eslint-config": "^0.72.2",
"detox": "^20.5.0", "@react-native/metro-config": "^0.72.11",
"eslint": "^8.36.0", "@tsconfig/react-native": "^3.0.0",
"jest": "^29.5.0", "@types/react": "^18.0.24",
"metro-react-native-babel-preset": "^0.76.0", "@types/react-test-renderer": "^18.0.0",
"pod-install": "^0.1.37", "babel-jest": "^29.2.1",
"prettier": "^2.8.4", "eslint": "^8.19.0",
"jest": "^29.2.1",
"metro-react-native-babel-preset": "0.76.8",
"prettier": "^2.4.1",
"react-test-renderer": "18.2.0", "react-test-renderer": "18.2.0",
"ts-jest": "^29.0.5" "typescript": "5.6.3"
}, },
"jest": { "engines": {
"preset": "react-native" "node": ">=16"
} },
"packageManager": "yarn@3.6.4"
} }

View File

@@ -191,6 +191,7 @@ const styles = StyleSheet.create({
const pushyClient = new Pushy({ const pushyClient = new Pushy({
appKey, appKey,
debug: true,
}); });
export default function Root() { export default function Root() {

File diff suppressed because it is too large Load Diff

View File

@@ -430,6 +430,9 @@ class DownloadTask extends AsyncTask<DownloadTaskParams, long[], Void> {
if (sub.getName().charAt(0) == '.') { if (sub.getName().charAt(0) == '.') {
continue; continue;
} }
if (isFileUpdatedWithinDays(sub, 7)) {
continue;
}
if (sub.isFile()) { if (sub.isFile()) {
sub.delete(); sub.delete();
} else { } else {
@@ -441,6 +444,13 @@ class DownloadTask extends AsyncTask<DownloadTaskParams, long[], Void> {
} }
} }
private boolean isFileUpdatedWithinDays(File file, int days) {
long currentTime = System.currentTimeMillis();
long lastModified = file.lastModified();
long daysInMillis = days * 24 * 60 * 60 * 1000L;
return (currentTime - lastModified) < daysInMillis;
}
@Override @Override
protected Void doInBackground(DownloadTaskParams... params) { protected Void doInBackground(DownloadTaskParams... params) {
int taskType = params[0].type; int taskType = params[0].type;

View File

@@ -75,7 +75,7 @@ RCT_EXPORT_MODULE(RCTPushy);
if (needClearPushyInfo) { if (needClearPushyInfo) {
[defaults setObject:nil forKey:keyPushyInfo]; [defaults setObject:nil forKey:keyPushyInfo];
[defaults setObject:@(YES) forKey:KeyPackageUpdatedMarked]; [defaults setObject:@(YES) forKey:KeyPackageUpdatedMarked];
[defaults synchronize];
// ...need clear files later // ...need clear files later
} }
else { else {
@@ -97,7 +97,7 @@ RCT_EXPORT_MODULE(RCTPushy);
newInfo[paramIsFirstTime] = @(NO); newInfo[paramIsFirstTime] = @(NO);
[defaults setObject:newInfo forKey:keyPushyInfo]; [defaults setObject:newInfo forKey:keyPushyInfo];
[defaults setObject:@(YES) forKey:keyFirstLoadMarked]; [defaults setObject:@(YES) forKey:keyFirstLoadMarked];
[defaults synchronize];
} }
NSString *downloadDir = [RCTPushy downloadDir]; NSString *downloadDir = [RCTPushy downloadDir];
@@ -137,7 +137,7 @@ RCT_EXPORT_MODULE(RCTPushy);
[defaults setObject:nil forKey:keyPushyInfo]; [defaults setObject:nil forKey:keyPushyInfo];
} }
[defaults setObject:curVersion forKey:keyRolledBackMarked]; [defaults setObject:curVersion forKey:keyRolledBackMarked];
[defaults synchronize];
return lastVersion; return lastVersion;
} }
@@ -176,7 +176,7 @@ RCT_EXPORT_MODULE(RCTPushy);
[defaults setObject:nil forKey:KeyPackageUpdatedMarked]; [defaults setObject:nil forKey:KeyPackageUpdatedMarked];
[self clearInvalidFiles]; [self clearInvalidFiles];
} }
[defaults synchronize];
return ret; return ret;
} }
@@ -196,7 +196,7 @@ RCT_EXPORT_METHOD(setUuid:(NSString *)uuid resolver:(RCTPromiseResolveBlock)res
@try { @try {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:uuid forKey:keyUuid]; [defaults setObject:uuid forKey:keyUuid];
[defaults synchronize];
resolve(@true); resolve(@true);
} }
@catch (NSException *exception) { @catch (NSException *exception) {
@@ -214,7 +214,7 @@ RCT_EXPORT_METHOD(setLocalHashInfo:(NSString *)hash
if (object && [object isKindOfClass:[NSDictionary class]]) { if (object && [object isKindOfClass:[NSDictionary class]]) {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:value forKey:[keyHashInfo stringByAppendingString:hash]]; [defaults setObject:value forKey:[keyHashInfo stringByAppendingString:hash]];
[defaults synchronize];
resolve(@true); resolve(@true);
} else { } else {
reject(@"json格式校验报错", nil, nil); reject(@"json格式校验报错", nil, nil);
@@ -295,7 +295,7 @@ RCT_EXPORT_METHOD(setNeedUpdate:(NSDictionary *)options
newInfo[paramPackageVersion] = [RCTPushy packageVersion]; newInfo[paramPackageVersion] = [RCTPushy packageVersion];
[defaults setObject:newInfo forKey:keyPushyInfo]; [defaults setObject:newInfo forKey:keyPushyInfo];
[defaults synchronize];
resolve(@true); resolve(@true);
}else{ }else{
reject(@"执行报错", nil, nil); reject(@"执行报错", nil, nil);
@@ -329,8 +329,7 @@ RCT_EXPORT_METHOD(reloadUpdate:(NSDictionary *)options
} }
} }
RCT_EXPORT_METHOD(markSuccess: RCT_EXPORT_METHOD(markSuccess:(RCTPromiseResolveBlock)resolve
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject) rejecter:(RCTPromiseRejectBlock)reject)
{ {
@@ -347,7 +346,7 @@ RCT_EXPORT_METHOD(markSuccess:
[pushyInfo removeObjectForKey:[keyHashInfo stringByAppendingString:lastVersion]]; [pushyInfo removeObjectForKey:[keyHashInfo stringByAppendingString:lastVersion]];
} }
[defaults setObject:pushyInfo forKey:keyPushyInfo]; [defaults setObject:pushyInfo forKey:keyPushyInfo];
[defaults synchronize];
// clear other package dir // clear other package dir
[self clearInvalidFiles]; [self clearInvalidFiles];
@@ -537,7 +536,15 @@ RCT_EXPORT_METHOD(markSuccess:
for(NSString *fileName in list) { for(NSString *fileName in list) {
if (![fileName isEqualToString:curVersion]) { if (![fileName isEqualToString:curVersion]) {
[_fileManager removeFile:[downloadDir stringByAppendingPathComponent:fileName] completionHandler:nil]; NSString *filePath = [downloadDir stringByAppendingPathComponent:fileName];
NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:&error];
if (error) {
continue;
}
NSDate *modificationDate = [attributes fileModificationDate];
if ([[NSDate date] timeIntervalSinceDate:modificationDate] > 7 * 24 * 60 * 60) {
[_fileManager removeFile:filePath completionHandler:nil];
}
} }
} }
} }

View File

@@ -1,6 +1,6 @@
{ {
"name": "react-native-update", "name": "react-native-update",
"version": "10.11.6", "version": "10.15.1",
"description": "react-native hot update", "description": "react-native hot update",
"main": "src/index", "main": "src/index",
"scripts": { "scripts": {
@@ -74,5 +74,6 @@
"react-native": "0.73", "react-native": "0.73",
"ts-jest": "^29.0.3", "ts-jest": "^29.0.3",
"typescript": "^5.3.3" "typescript": "^5.3.3"
} },
"packageManager": "yarn@4.5.1"
} }

View File

@@ -1,5 +1,5 @@
import { CheckResult, PushyOptions, ProgressData, EventType } from './type'; import { CheckResult, PushyOptions, ProgressData, EventType } from './type';
import { log, testUrls } from './utils'; import { joinUrls, log, testUrls } from './utils';
import { EmitterSubscription, Platform } from 'react-native'; import { EmitterSubscription, Platform } from 'react-native';
import { PermissionsAndroid } from './permissions'; import { PermissionsAndroid } from './permissions';
import { import {
@@ -11,6 +11,7 @@ import {
packageVersion, packageVersion,
rolledBackVersion, rolledBackVersion,
setLocalHashInfo, setLocalHashInfo,
isFirstTime,
isRolledBack, isRolledBack,
} from './core'; } from './core';
@@ -51,6 +52,16 @@ export class Pushy {
marked = false; marked = false;
applyingUpdate = false; applyingUpdate = false;
version = cInfo.pushy; version = cInfo.pushy;
loggerPromise = (() => {
let resolve: (value?: unknown) => void = () => {};
const promise = new Promise(res => {
resolve = res;
});
return {
promise,
resolve,
};
})();
constructor(options: PushyOptions) { constructor(options: PushyOptions) {
if (Platform.OS === 'ios' || Platform.OS === 'android') { if (Platform.OS === 'ios' || Platform.OS === 'android') {
@@ -59,28 +70,28 @@ export class Pushy {
} }
} }
this.setOptions(options); this.setOptions(options);
if (isRolledBack) {
this.report({
type: 'rollback',
data: {
rolledBackVersion,
},
});
}
} }
setOptions = (options: Partial<PushyOptions>) => { setOptions = (options: Partial<PushyOptions>) => {
for (const [key, value] of Object.entries(options)) { for (const [key, value] of Object.entries(options)) {
if (value !== undefined) { if (value !== undefined) {
// @ts-expect-error (this.options as any)[key] = value;
this.options[key] = value;
if (key === 'logger') { if (key === 'logger') {
if (isRolledBack) { this.loggerPromise.resolve();
this.report({
type: 'rollback',
data: {
rolledBackVersion,
},
});
}
} }
} }
} }
}; };
report = ({ report = async ({
type, type,
message = '', message = '',
data = {}, data = {},
@@ -90,6 +101,7 @@ export class Pushy {
data?: Record<string, string | number>; data?: Record<string, string | number>;
}) => { }) => {
log(type + ' ' + message); log(type + ' ' + message);
await this.loggerPromise.promise;
const { logger = noop, appKey } = this.options; const { logger = noop, appKey } = this.options;
logger({ logger({
type, type,
@@ -119,14 +131,14 @@ export class Pushy {
return true; return true;
}; };
markSuccess = () => { markSuccess = () => {
if (this.marked || __DEV__) { if (this.marked || __DEV__ || !isFirstTime) {
return; return;
} }
this.marked = true; this.marked = true;
PushyModule.markSuccess(); PushyModule.markSuccess();
this.report({ type: 'markSuccess' }); this.report({ type: 'markSuccess' });
}; };
switchVersion = (hash: string) => { switchVersion = async (hash: string) => {
if (__DEV__) { if (__DEV__) {
console.warn( console.warn(
'您调用了switchVersion方法但是当前是开发环境不会进行任何操作。', '您调用了switchVersion方法但是当前是开发环境不会进行任何操作。',
@@ -136,11 +148,11 @@ export class Pushy {
if (this.assertHash(hash) && !this.applyingUpdate) { if (this.assertHash(hash) && !this.applyingUpdate) {
log('switchVersion: ' + hash); log('switchVersion: ' + hash);
this.applyingUpdate = true; this.applyingUpdate = true;
PushyModule.reloadUpdate({ hash }); return PushyModule.reloadUpdate({ hash });
} }
}; };
switchVersionLater = (hash: string) => { switchVersionLater = async (hash: string) => {
if (__DEV__) { if (__DEV__) {
console.warn( console.warn(
'您调用了switchVersionLater方法但是当前是开发环境不会进行任何操作。', '您调用了switchVersionLater方法但是当前是开发环境不会进行任何操作。',
@@ -149,7 +161,7 @@ export class Pushy {
} }
if (this.assertHash(hash)) { if (this.assertHash(hash)) {
log('switchVersionLater: ' + hash); log('switchVersionLater: ' + hash);
PushyModule.setNeedUpdate({ hash }); return PushyModule.setNeedUpdate({ hash });
} }
}; };
checkUpdate = async (extra?: Record<string, any>) => { checkUpdate = async (extra?: Record<string, any>) => {
@@ -163,6 +175,13 @@ export class Pushy {
console.warn('web 端不支持热更新检查'); console.warn('web 端不支持热更新检查');
return; return;
} }
if (
this.options.beforeCheckUpdate &&
(await this.options.beforeCheckUpdate()) === false
) {
log('beforeCheckUpdate 返回 false, 忽略检查');
return;
}
const now = Date.now(); const now = Date.now();
if ( if (
this.lastRespJson && this.lastRespJson &&
@@ -180,6 +199,7 @@ export class Pushy {
...extra, ...extra,
}; };
if (__DEV__) { if (__DEV__) {
// @ts-ignore
delete fetchBody.buildTime; delete fetchBody.buildTime;
} }
const body = JSON.stringify(fetchBody); const body = JSON.stringify(fetchBody);
@@ -265,16 +285,21 @@ export class Pushy {
) => { ) => {
const { const {
hash, hash,
diffUrl: _diffUrl, diff,
diffUrls, pdiff,
pdiffUrl: _pdiffUrl, full,
pdiffUrls, paths = [],
updateUrl: _updateUrl,
updateUrls,
name, name,
description, description = '',
metaInfo, metaInfo,
} = info; } = info;
if (
this.options.beforeDownloadUpdate &&
(await this.options.beforeDownloadUpdate(info)) === false
) {
log('beforeDownloadUpdate 返回 false, 忽略下载');
return;
}
if (!info.update || !hash) { if (!info.update || !hash) {
return; return;
} }
@@ -302,7 +327,7 @@ export class Pushy {
let succeeded = ''; let succeeded = '';
this.report({ type: 'downloading' }); this.report({ type: 'downloading' });
let lastError: any; let lastError: any;
const diffUrl = (await testUrls(diffUrls)) || _diffUrl; const diffUrl = await testUrls(joinUrls(paths, diff));
if (diffUrl) { if (diffUrl) {
log('downloading diff'); log('downloading diff');
try { try {
@@ -321,7 +346,7 @@ export class Pushy {
} }
} }
} }
const pdiffUrl = (await testUrls(pdiffUrls)) || _pdiffUrl; const pdiffUrl = await testUrls(joinUrls(paths, pdiff));
if (!succeeded && pdiffUrl) { if (!succeeded && pdiffUrl) {
log('downloading pdiff'); log('downloading pdiff');
try { try {
@@ -339,12 +364,12 @@ export class Pushy {
} }
} }
} }
const updateUrl = (await testUrls(updateUrls)) || _updateUrl; const fullUrl = await testUrls(joinUrls(paths, full));
if (!succeeded && updateUrl) { if (!succeeded && fullUrl) {
log('downloading full patch'); log('downloading full patch');
try { try {
await PushyModule.downloadFullUpdate({ await PushyModule.downloadFullUpdate({
updateUrl: updateUrl, updateUrl: fullUrl,
hash, hash,
}); });
succeeded = 'full'; succeeded = 'full';

View File

@@ -7,8 +7,8 @@ const asyncNoop = () => Promise.resolve();
export const defaultContext = { export const defaultContext = {
checkUpdate: asyncNoop, checkUpdate: asyncNoop,
switchVersion: noop, switchVersion: asyncNoop,
switchVersionLater: noop, switchVersionLater: asyncNoop,
markSuccess: noop, markSuccess: noop,
dismissError: noop, dismissError: noop,
downloadUpdate: asyncNoop, downloadUpdate: asyncNoop,
@@ -21,8 +21,8 @@ export const defaultContext = {
export const PushyContext = createContext<{ export const PushyContext = createContext<{
checkUpdate: () => Promise<void>; checkUpdate: () => Promise<void>;
switchVersion: () => void; switchVersion: () => Promise<void>;
switchVersionLater: () => void; switchVersionLater: () => Promise<void>;
markSuccess: () => void; markSuccess: () => void;
dismissError: () => void; dismissError: () => void;
downloadUpdate: () => Promise<void>; downloadUpdate: () => Promise<void>;

View File

@@ -4,9 +4,7 @@ const {
version: v, version: v,
} = require('react-native/Libraries/Core/ReactNativeVersion'); } = require('react-native/Libraries/Core/ReactNativeVersion');
const RNVersion = `${v.major}.${v.minor}.${v.patch}`; const RNVersion = `${v.major}.${v.minor}.${v.patch}`;
const isTurboModuleEnabled = const isTurboModuleEnabled = (global as any).__turboModuleProxy != null;
// @ts-expect-error
global.__turboModuleProxy != null;
export const PushyModule = export const PushyModule =
Platform.OS === 'web' Platform.OS === 'web'
@@ -16,26 +14,26 @@ export const PushyModule =
: NativeModules.Pushy; : NativeModules.Pushy;
if (!PushyModule) { if (!PushyModule) {
throw new Error('react-native-update模块无法加载请对照安装文档检查配置。'); throw new Error('react-native-update 模块无法加载,请对照安装文档检查配置。');
} }
const PushyConstants = isTurboModuleEnabled const PushyConstants = isTurboModuleEnabled
? PushyModule.getConstants() ? PushyModule.getConstants()
: PushyModule; : PushyModule;
export const downloadRootDir = PushyConstants.downloadRootDir; export const downloadRootDir: string = PushyConstants.downloadRootDir;
export const packageVersion = PushyConstants.packageVersion; export const packageVersion: string = PushyConstants.packageVersion;
export const currentVersion = PushyConstants.currentVersion; export const currentVersion: string = PushyConstants.currentVersion;
export const isFirstTime = PushyConstants.isFirstTime; export const isFirstTime: boolean = PushyConstants.isFirstTime;
export const rolledBackVersion = PushyConstants.rolledBackVersion; export const rolledBackVersion: string = PushyConstants.rolledBackVersion;
export const isRolledBack = typeof rolledBackVersion === 'string'; export const isRolledBack: boolean = typeof rolledBackVersion === 'string';
export const buildTime = PushyConstants.buildTime; export const buildTime: string = PushyConstants.buildTime;
let uuid = PushyConstants.uuid; let uuid = PushyConstants.uuid;
if (Platform.OS === 'android' && !PushyConstants.isUsingBundleUrl) { if (Platform.OS === 'android' && !PushyConstants.isUsingBundleUrl) {
throw new Error( throw new Error(
'react-native-update模块无法加载请对照文档检查Bundle URL的配置', 'react-native-update 模块无法加载,请对照文档检查 Bundle URL 的配置',
); );
} }

77
src/isInRollout.ts Normal file
View File

@@ -0,0 +1,77 @@
/* eslint-disable no-fallthrough */
import { cInfo } from './core';
/* eslint-disable no-bitwise */
function murmurhash3_32_gc(key: string, seed = 0) {
let remainder, bytes, h1, h1b, c1, c2, k1, i;
remainder = key.length & 3; // key.length % 4
bytes = key.length - remainder;
h1 = seed;
c1 = 0xcc9e2d51;
c2 = 0x1b873593;
i = 0;
while (i < bytes) {
k1 =
(key.charCodeAt(i) & 0xff) |
((key.charCodeAt(++i) & 0xff) << 8) |
((key.charCodeAt(++i) & 0xff) << 16) |
((key.charCodeAt(++i) & 0xff) << 24);
++i;
((k1 & 0xffff) * c1 + ((((k1 >>> 16) * c1) & 0xffff) << 16)) & 0xffffffff;
k1 = (k1 << 15) | (k1 >>> 17);
k1 =
((k1 & 0xffff) * c2 + ((((k1 >>> 16) * c2) & 0xffff) << 16)) & 0xffffffff;
h1 ^= k1;
h1 = (h1 << 13) | (h1 >>> 19);
h1b =
((h1 & 0xffff) * 5 + ((((h1 >>> 16) * 5) & 0xffff) << 16)) & 0xffffffff;
h1 = (h1b & 0xffff) + 0x6b64 + ((((h1b >>> 16) + 0xe654) & 0xffff) << 16);
}
k1 = 0;
switch (remainder) {
case 3:
k1 ^= (key.charCodeAt(i + 2) & 0xff) << 16;
case 2:
k1 ^= (key.charCodeAt(i + 1) & 0xff) << 8;
case 1:
k1 ^= key.charCodeAt(i) & 0xff;
k1 =
((k1 & 0xffff) * c1 + ((((k1 >>> 16) * c1) & 0xffff) << 16)) &
0xffffffff;
k1 = (k1 << 15) | (k1 >>> 17);
k1 =
((k1 & 0xffff) * c2 + ((((k1 >>> 16) * c2) & 0xffff) << 16)) &
0xffffffff;
h1 ^= k1;
}
h1 ^= key.length;
h1 ^= h1 >>> 16;
h1 =
((h1 & 0xffff) * 0x85ebca6b +
((((h1 >>> 16) * 0x85ebca6b) & 0xffff) << 16)) &
0xffffffff;
h1 ^= h1 >>> 13;
h1 =
((h1 & 0xffff) * 0xc2b2ae35 +
((((h1 >>> 16) * 0xc2b2ae35) & 0xffff) << 16)) &
0xffffffff;
h1 ^= h1 >>> 16;
return h1 >>> 0;
}
const intForUUID = murmurhash3_32_gc(cInfo.uuid);
export function isInRollout(rollout: number) {
return intForUUID % 100 < rollout;
}

View File

@@ -13,15 +13,12 @@ import {
Linking, Linking,
} from 'react-native'; } from 'react-native';
import { Pushy } from './client'; import { Pushy } from './client';
import { import { currentVersion, packageVersion, getCurrentVersionInfo } from './core';
currentVersion,
isFirstTime,
packageVersion,
getCurrentVersionInfo,
} from './core';
import { CheckResult, ProgressData, PushyTestPayload } from './type'; import { CheckResult, ProgressData, PushyTestPayload } from './type';
import { PushyContext } from './context'; import { PushyContext } from './context';
import { URL } from 'react-native-url-polyfill'; import { URL } from 'react-native-url-polyfill';
import { isInRollout } from './isInRollout';
import { log } from './utils';
export const PushyProvider = ({ export const PushyProvider = ({
client, client,
@@ -73,18 +70,18 @@ export const PushyProvider = ({
); );
const switchVersion = useCallback( const switchVersion = useCallback(
(info: CheckResult | undefined = updateInfoRef.current) => { async (info: CheckResult | undefined = updateInfoRef.current) => {
if (info && info.hash) { if (info && info.hash) {
client.switchVersion(info.hash); return client.switchVersion(info.hash);
} }
}, },
[client], [client],
); );
const switchVersionLater = useCallback( const switchVersionLater = useCallback(
(info: CheckResult | undefined = updateInfoRef.current) => { async (info: CheckResult | undefined = updateInfoRef.current) => {
if (info && info.hash) { if (info && info.hash) {
client.switchVersionLater(info.hash); return client.switchVersionLater(info.hash);
} }
}, },
[client], [client],
@@ -165,6 +162,15 @@ export const PushyProvider = ({
if (!info) { if (!info) {
return; return;
} }
const rollout = info.config?.rollout?.[packageVersion];
if (rollout) {
if (!isInRollout(rollout)) {
log(`not in ${rollout}% rollout, ignored`);
return;
}
log(`in ${rollout}% rollout, continue`);
}
info.description = info.description ?? '';
updateInfoRef.current = info; updateInfoRef.current = info;
setUpdateInfo(info); setUpdateInfo(info);
if (info.expired) { if (info.expired) {
@@ -235,7 +241,7 @@ export const PushyProvider = ({
return; return;
} }
const { checkStrategy, dismissErrorAfter, autoMarkSuccess } = options; const { checkStrategy, dismissErrorAfter, autoMarkSuccess } = options;
if (isFirstTime && autoMarkSuccess) { if (autoMarkSuccess) {
markSuccess(); markSuccess();
} }
if (checkStrategy === 'both' || checkStrategy === 'onAppResume') { if (checkStrategy === 'both' || checkStrategy === 'onAppResume') {

View File

@@ -7,12 +7,16 @@ export interface CheckResult {
hash?: string; hash?: string;
description?: string; description?: string;
metaInfo?: string; metaInfo?: string;
pdiffUrl?: string; config?: {
pdiffUrls?: string[]; rollout?: {
diffUrl?: string; [packageVersion: string]: number;
diffUrls?: string[]; };
updateUrl?: string; [key: string]: any;
updateUrls?: string[]; };
pdiff?: string;
diff?: string;
full?: string;
paths?: string[];
paused?: 'app' | 'package'; paused?: 'app' | 'package';
message?: string; message?: string;
} }
@@ -45,7 +49,7 @@ export interface EventData {
uuid: string; uuid: string;
}; };
packageVersion: string; packageVersion: string;
buildTime: number; buildTime: string;
message?: string; message?: string;
rolledBackVersion?: string; rolledBackVersion?: string;
newVersion?: string; newVersion?: string;
@@ -81,6 +85,8 @@ export interface PushyOptions {
dismissErrorAfter?: number; dismissErrorAfter?: number;
debug?: boolean; debug?: boolean;
throwError?: boolean; throwError?: boolean;
beforeCheckUpdate?: () => Promise<boolean>;
beforeDownloadUpdate?: (info: CheckResult) => Promise<boolean>;
} }
export interface PushyTestPayload { export interface PushyTestPayload {

View File

@@ -31,9 +31,18 @@ const ping =
const canUseGoogle = ping('https://www.google.com'); const canUseGoogle = ping('https://www.google.com');
export function joinUrls(paths: string[], fileName?: string) {
if (fileName) {
return paths.map(path => 'https://' + path + '/' + fileName);
}
}
export const testUrls = async (urls?: string[]) => { export const testUrls = async (urls?: string[]) => {
if (!urls?.length || (await canUseGoogle)) { if (!urls?.length) {
return null; return null;
} }
if (await canUseGoogle) {
return urls[0];
}
return Promise.race(urls.map(ping)).catch(() => null); return Promise.race(urls.map(ping)).catch(() => null);
}; };

27007
yarn.lock

File diff suppressed because it is too large Load Diff