diff --git a/HelloWorld/.flowconfig b/HelloWorld/.flowconfig
index 43dd26bc..74f3a75e 100644
--- a/HelloWorld/.flowconfig
+++ b/HelloWorld/.flowconfig
@@ -11,6 +11,8 @@ node_modules/react-native/Libraries/polyfills/.*
; Flow doesn't support platforms
.*/Libraries/Utilities/LoadingView.js
+.*/node_modules/resolve/test/resolver/malformed_package_json/package\.json$
+
[untyped]
.*/node_modules/@react-native-community/cli/.*/.*
@@ -23,9 +25,6 @@ node_modules/react-native/flow/
[options]
emoji=true
-esproposal.optional_chaining=enable
-esproposal.nullish_coalescing=enable
-
exact_by_default=true
format.bracket_spacing=false
@@ -53,7 +52,6 @@ nonstrict-import=warn
deprecated-type=warn
unsafe-getters-setters=warn
unnecessary-invariant=warn
-signature-verification-failure=warn
[strict]
deprecated-type
@@ -65,4 +63,4 @@ untyped-import
untyped-type-import
[version]
-^0.158.0
+^0.176.3
diff --git a/HelloWorld/.gitattributes b/HelloWorld/.gitattributes
deleted file mode 100644
index 45a3dcb2..00000000
--- a/HelloWorld/.gitattributes
+++ /dev/null
@@ -1,3 +0,0 @@
-# Windows files should use crlf line endings
-# https://help.github.com/articles/dealing-with-line-endings/
-*.bat text eol=crlf
diff --git a/HelloWorld/.gitignore b/HelloWorld/.gitignore
index ecc1e4ad..344481b2 100644
--- a/HelloWorld/.gitignore
+++ b/HelloWorld/.gitignore
@@ -20,6 +20,7 @@ DerivedData
*.hmap
*.ipa
*.xcuserstate
+ios/.xcode.env.local
# Android/IntelliJ
#
@@ -49,12 +50,14 @@ buck-out/
# For more information about the recommended setup visit:
# https://docs.fastlane.tools/best-practices/source-control/
-*/fastlane/report.xml
-*/fastlane/Preview.html
-*/fastlane/screenshots
+**/fastlane/report.xml
+**/fastlane/Preview.html
+**/fastlane/screenshots
+**/fastlane/test_output
# Bundle artifact
*.jsbundle
-# CocoaPods
-ios/Pods/
+# Ruby / CocoaPods
+/ios/Pods/
+/vendor/bundle/
diff --git a/HelloWorld/.prettierrc.js b/HelloWorld/.prettierrc.js
index 2c95e0c5..5f62afd3 100644
--- a/HelloWorld/.prettierrc.js
+++ b/HelloWorld/.prettierrc.js
@@ -1,6 +1,7 @@
module.exports = {
+ arrowParens: 'avoid',
+ bracketSameLine: true,
bracketSpacing: false,
- jsxBracketSameLine: true,
tabWidth: 2,
singleQuote: true,
trailingComma: 'all',
diff --git a/HelloWorld/Gemfile b/HelloWorld/Gemfile
new file mode 100644
index 00000000..5efda89f
--- /dev/null
+++ b/HelloWorld/Gemfile
@@ -0,0 +1,6 @@
+source 'https://rubygems.org'
+
+# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version
+ruby '2.7.5'
+
+gem 'cocoapods', '~> 1.11', '>= 1.11.2'
diff --git a/HelloWorld/_bundle/config b/HelloWorld/_bundle/config
new file mode 100644
index 00000000..848943bb
--- /dev/null
+++ b/HelloWorld/_bundle/config
@@ -0,0 +1,2 @@
+BUNDLE_PATH: "vendor/bundle"
+BUNDLE_FORCE_RUBY_PLATFORM: 1
diff --git a/HelloWorld/_ruby-version b/HelloWorld/_ruby-version
new file mode 100644
index 00000000..a603bb50
--- /dev/null
+++ b/HelloWorld/_ruby-version
@@ -0,0 +1 @@
+2.7.5
diff --git a/HelloWorld/android/app/src/debug/AndroidManifest.xml b/HelloWorld/android/app/src/debug/AndroidManifest.xml
index b2f3ad9f..4b185bc1 100644
--- a/HelloWorld/android/app/src/debug/AndroidManifest.xml
+++ b/HelloWorld/android/app/src/debug/AndroidManifest.xml
@@ -8,6 +8,6 @@
android:usesCleartextTraffic="true"
tools:targetApi="28"
tools:ignore="GoogleAppIndexingWarning">
-
+
diff --git a/HelloWorld/android/app/src/debug/java/com/helloworld/ReactNativeFlipper.java b/HelloWorld/android/app/src/debug/java/com/helloworld/ReactNativeFlipper.java
index 8b7f0913..8f18993f 100644
--- a/HelloWorld/android/app/src/debug/java/com/helloworld/ReactNativeFlipper.java
+++ b/HelloWorld/android/app/src/debug/java/com/helloworld/ReactNativeFlipper.java
@@ -1,11 +1,10 @@
/**
- * Copyright (c) Facebook, Inc. and its affiliates.
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
*
*
This source code is licensed under the MIT license found in the LICENSE file in the root
* directory of this source tree.
*/
package com.helloworld;
-
import android.content.Context;
import com.facebook.flipper.android.AndroidFlipperClient;
import com.facebook.flipper.android.utils.FlipperUtils;
@@ -19,22 +18,20 @@
import com.facebook.flipper.plugins.network.NetworkFlipperPlugin;
import com.facebook.flipper.plugins.react.ReactFlipperPlugin;
import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin;
+import com.facebook.react.ReactInstanceEventListener;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.modules.network.NetworkingModule;
import okhttp3.OkHttpClient;
-
public class ReactNativeFlipper {
public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) {
if (FlipperUtils.shouldEnableFlipper(context)) {
final FlipperClient client = AndroidFlipperClient.getInstance(context);
-
client.addPlugin(new InspectorFlipperPlugin(context, DescriptorMapping.withDefaults()));
client.addPlugin(new ReactFlipperPlugin());
client.addPlugin(new DatabasesFlipperPlugin(context));
client.addPlugin(new SharedPreferencesFlipperPlugin(context));
client.addPlugin(CrashReporterPlugin.getInstance());
-
NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin();
NetworkingModule.setCustomClientBuilder(
new NetworkingModule.CustomClientBuilder() {
@@ -45,13 +42,12 @@ public void apply(OkHttpClient.Builder builder) {
});
client.addPlugin(networkFlipperPlugin);
client.start();
-
// Fresco Plugin needs to ensure that ImagePipelineFactory is initialized
// Hence we run if after all native modules have been initialized
ReactContext reactContext = reactInstanceManager.getCurrentReactContext();
if (reactContext == null) {
reactInstanceManager.addReactInstanceEventListener(
- new ReactInstanceManager.ReactInstanceEventListener() {
+ new ReactInstanceEventListener() {
@Override
public void onReactContextInitialized(ReactContext reactContext) {
reactInstanceManager.removeReactInstanceEventListener(this);
@@ -69,4 +65,4 @@ public void run() {
}
}
}
-}
+}
\ No newline at end of file
diff --git a/HelloWorld/android/app/src/main/AndroidManifest.xml b/HelloWorld/android/app/src/main/AndroidManifest.xml
index 1cae0aad..7ba57ca1 100644
--- a/HelloWorld/android/app/src/main/AndroidManifest.xml
+++ b/HelloWorld/android/app/src/main/AndroidManifest.xml
@@ -9,15 +9,14 @@
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round"
android:allowBackup="false"
- android:theme="@style/AppTheme"
- android:usesCleartextTraffic="true"
- >
+ android:theme="@style/AppTheme">
+ android:windowSoftInputMode="adjustResize"
+ android:exported="true">
diff --git a/HelloWorld/android/app/src/main/java/com/helloworld/MainActivity.java b/HelloWorld/android/app/src/main/java/com/helloworld/MainActivity.java
index c7106d57..405d80a8 100644
--- a/HelloWorld/android/app/src/main/java/com/helloworld/MainActivity.java
+++ b/HelloWorld/android/app/src/main/java/com/helloworld/MainActivity.java
@@ -1,6 +1,8 @@
package com.helloworld;
import com.facebook.react.ReactActivity;
+import com.facebook.react.ReactActivityDelegate;
+import com.facebook.react.ReactRootView;
public class MainActivity extends ReactActivity {
@@ -12,4 +14,35 @@ public class MainActivity extends ReactActivity {
protected String getMainComponentName() {
return "HelloWorld";
}
+
+ /**
+ * Returns the instance of the {@link ReactActivityDelegate}. There the RootView is created and
+ * you can specify the renderer you wish to use - the new renderer (Fabric) or the old renderer
+ * (Paper).
+ */
+ @Override
+ protected ReactActivityDelegate createReactActivityDelegate() {
+ return new MainActivityDelegate(this, getMainComponentName());
+ }
+
+ public static class MainActivityDelegate extends ReactActivityDelegate {
+ public MainActivityDelegate(ReactActivity activity, String mainComponentName) {
+ 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;
+ }
+ }
}
diff --git a/HelloWorld/android/app/src/main/java/com/helloworld/MainApplication.java b/HelloWorld/android/app/src/main/java/com/helloworld/MainApplication.java
index e55c37b9..eedd1929 100644
--- a/HelloWorld/android/app/src/main/java/com/helloworld/MainApplication.java
+++ b/HelloWorld/android/app/src/main/java/com/helloworld/MainApplication.java
@@ -7,7 +7,9 @@
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
+import com.facebook.react.config.ReactFeatureFlags;
import com.facebook.soloader.SoLoader;
+import com.helloworld.newarchitecture.MainApplicationReactNativeHost;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
@@ -35,14 +37,23 @@ protected String getJSMainModuleName() {
}
};
+ private final ReactNativeHost mNewArchitectureNativeHost =
+ new MainApplicationReactNativeHost(this);
+
@Override
public ReactNativeHost getReactNativeHost() {
- return mReactNativeHost;
+ if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
+ return mNewArchitectureNativeHost;
+ } else {
+ return mReactNativeHost;
+ }
}
@Override
public void 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);
initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
}
diff --git a/HelloWorld/android/app/src/main/java/com/helloworld/newarchitecture/MainApplicationReactNativeHost.java b/HelloWorld/android/app/src/main/java/com/helloworld/newarchitecture/MainApplicationReactNativeHost.java
new file mode 100644
index 00000000..55473c3f
--- /dev/null
+++ b/HelloWorld/android/app/src/main/java/com/helloworld/newarchitecture/MainApplicationReactNativeHost.java
@@ -0,0 +1,116 @@
+package com.helloworld.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.helloworld.BuildConfig;
+import com.helloworld.newarchitecture.components.MainComponentsRegistry;
+import com.helloworld.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.
+ *
+ * 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 getPackages() {
+ List 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 getJSIModules(
+ final ReactApplicationContext reactApplicationContext,
+ final JavaScriptContextHolder jsContext) {
+ final List 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 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;
+ }
+ };
+ }
+}
diff --git a/HelloWorld/android/app/src/main/java/com/helloworld/newarchitecture/components/MainComponentsRegistry.java b/HelloWorld/android/app/src/main/java/com/helloworld/newarchitecture/components/MainComponentsRegistry.java
new file mode 100644
index 00000000..c74d0cca
--- /dev/null
+++ b/HelloWorld/android/app/src/main/java/com/helloworld/newarchitecture/components/MainComponentsRegistry.java
@@ -0,0 +1,36 @@
+package com.helloworld.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).
+ *
+ * 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);
+ }
+}
diff --git a/HelloWorld/android/app/src/main/java/com/helloworld/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java b/HelloWorld/android/app/src/main/java/com/helloworld/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java
new file mode 100644
index 00000000..8593b3bb
--- /dev/null
+++ b/HelloWorld/android/app/src/main/java/com/helloworld/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java
@@ -0,0 +1,48 @@
+package com.helloworld.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).
+ *
+ *
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 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 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("helloworld_appmodules");
+ sIsSoLibraryLoaded = true;
+ }
+ }
+}
diff --git a/HelloWorld/android/app/src/main/jni/Android.mk b/HelloWorld/android/app/src/main/jni/Android.mk
new file mode 100644
index 00000000..cda13912
--- /dev/null
+++ b/HelloWorld/android/app/src/main/jni/Android.mk
@@ -0,0 +1,48 @@
+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 := helloworld_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)
diff --git a/HelloWorld/android/app/src/main/jni/MainApplicationModuleProvider.cpp b/HelloWorld/android/app/src/main/jni/MainApplicationModuleProvider.cpp
new file mode 100644
index 00000000..0ac23cc6
--- /dev/null
+++ b/HelloWorld/android/app/src/main/jni/MainApplicationModuleProvider.cpp
@@ -0,0 +1,24 @@
+#include "MainApplicationModuleProvider.h"
+
+#include
+
+namespace facebook {
+namespace react {
+
+std::shared_ptr MainApplicationModuleProvider(
+ const std::string moduleName,
+ const JavaTurboModule::InitParams ¶ms) {
+ // 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
diff --git a/HelloWorld/android/app/src/main/jni/MainApplicationModuleProvider.h b/HelloWorld/android/app/src/main/jni/MainApplicationModuleProvider.h
new file mode 100644
index 00000000..0fa43fa6
--- /dev/null
+++ b/HelloWorld/android/app/src/main/jni/MainApplicationModuleProvider.h
@@ -0,0 +1,16 @@
+#pragma once
+
+#include
+#include
+
+#include
+
+namespace facebook {
+namespace react {
+
+std::shared_ptr MainApplicationModuleProvider(
+ const std::string moduleName,
+ const JavaTurboModule::InitParams ¶ms);
+
+} // namespace react
+} // namespace facebook
diff --git a/HelloWorld/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.cpp b/HelloWorld/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.cpp
new file mode 100644
index 00000000..dbbdc3d1
--- /dev/null
+++ b/HelloWorld/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.cpp
@@ -0,0 +1,45 @@
+#include "MainApplicationTurboModuleManagerDelegate.h"
+#include "MainApplicationModuleProvider.h"
+
+namespace facebook {
+namespace react {
+
+jni::local_ref
+MainApplicationTurboModuleManagerDelegate::initHybrid(
+ jni::alias_ref) {
+ return makeCxxInstance();
+}
+
+void MainApplicationTurboModuleManagerDelegate::registerNatives() {
+ registerHybrid({
+ makeNativeMethod(
+ "initHybrid", MainApplicationTurboModuleManagerDelegate::initHybrid),
+ makeNativeMethod(
+ "canCreateTurboModule",
+ MainApplicationTurboModuleManagerDelegate::canCreateTurboModule),
+ });
+}
+
+std::shared_ptr
+MainApplicationTurboModuleManagerDelegate::getTurboModule(
+ const std::string name,
+ const std::shared_ptr jsInvoker) {
+ // Not implemented yet: provide pure-C++ NativeModules here.
+ return nullptr;
+}
+
+std::shared_ptr
+MainApplicationTurboModuleManagerDelegate::getTurboModule(
+ const std::string name,
+ const JavaTurboModule::InitParams ¶ms) {
+ return MainApplicationModuleProvider(name, params);
+}
+
+bool MainApplicationTurboModuleManagerDelegate::canCreateTurboModule(
+ std::string name) {
+ return getTurboModule(name, nullptr) != nullptr ||
+ getTurboModule(name, {.moduleName = name}) != nullptr;
+}
+
+} // namespace react
+} // namespace facebook
diff --git a/HelloWorld/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h b/HelloWorld/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h
new file mode 100644
index 00000000..25f27722
--- /dev/null
+++ b/HelloWorld/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h
@@ -0,0 +1,38 @@
+#include
+#include
+
+#include
+#include
+
+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/helloworld/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate;";
+
+ static jni::local_ref initHybrid(jni::alias_ref);
+
+ static void registerNatives();
+
+ std::shared_ptr getTurboModule(
+ const std::string name,
+ const std::shared_ptr jsInvoker) override;
+ std::shared_ptr getTurboModule(
+ const std::string name,
+ const JavaTurboModule::InitParams ¶ms) 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
diff --git a/HelloWorld/android/app/src/main/jni/MainComponentsRegistry.cpp b/HelloWorld/android/app/src/main/jni/MainComponentsRegistry.cpp
new file mode 100644
index 00000000..8f7edffd
--- /dev/null
+++ b/HelloWorld/android/app/src/main/jni/MainComponentsRegistry.cpp
@@ -0,0 +1,61 @@
+#include "MainComponentsRegistry.h"
+
+#include
+#include
+#include
+#include
+
+namespace facebook {
+namespace react {
+
+MainComponentsRegistry::MainComponentsRegistry(ComponentFactory *delegate) {}
+
+std::shared_ptr
+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::initHybrid(
+ jni::alias_ref,
+ 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(registry);
+
+ mutableRegistry->setFallbackComponentDescriptor(
+ std::make_shared(
+ ComponentDescriptorParameters{
+ eventDispatcher, contextContainer, nullptr}));
+
+ return registry;
+ };
+
+ delegate->buildRegistryFunction = buildRegistryFunction;
+ return instance;
+}
+
+void MainComponentsRegistry::registerNatives() {
+ registerHybrid({
+ makeNativeMethod("initHybrid", MainComponentsRegistry::initHybrid),
+ });
+}
+
+} // namespace react
+} // namespace facebook
diff --git a/HelloWorld/android/app/src/main/jni/MainComponentsRegistry.h b/HelloWorld/android/app/src/main/jni/MainComponentsRegistry.h
new file mode 100644
index 00000000..d61cbffa
--- /dev/null
+++ b/HelloWorld/android/app/src/main/jni/MainComponentsRegistry.h
@@ -0,0 +1,32 @@
+#pragma once
+
+#include
+#include
+#include
+#include
+
+namespace facebook {
+namespace react {
+
+class MainComponentsRegistry
+ : public facebook::jni::HybridClass {
+ public:
+ // Adapt it to the package you used for your Java class.
+ constexpr static auto kJavaDescriptor =
+ "Lcom/helloworld/newarchitecture/components/MainComponentsRegistry;";
+
+ static void registerNatives();
+
+ MainComponentsRegistry(ComponentFactory *delegate);
+
+ private:
+ static std::shared_ptr
+ sharedProviderRegistry();
+
+ static jni::local_ref initHybrid(
+ jni::alias_ref,
+ ComponentFactory *delegate);
+};
+
+} // namespace react
+} // namespace facebook
diff --git a/HelloWorld/android/app/src/main/jni/OnLoad.cpp b/HelloWorld/android/app/src/main/jni/OnLoad.cpp
new file mode 100644
index 00000000..c569b6e8
--- /dev/null
+++ b/HelloWorld/android/app/src/main/jni/OnLoad.cpp
@@ -0,0 +1,11 @@
+#include
+#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();
+ });
+}
diff --git a/HelloWorld/android/app/src/main/res/drawable/rn_edit_text_material.xml b/HelloWorld/android/app/src/main/res/drawable/rn_edit_text_material.xml
new file mode 100644
index 00000000..f35d9962
--- /dev/null
+++ b/HelloWorld/android/app/src/main/res/drawable/rn_edit_text_material.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/HelloWorld/android/app/src/main/res/values/strings.xml b/HelloWorld/android/app/src/main/res/values/strings.xml
index b89cc148..bd9de66b 100644
--- a/HelloWorld/android/app/src/main/res/values/strings.xml
+++ b/HelloWorld/android/app/src/main/res/values/strings.xml
@@ -1,3 +1,3 @@
- HelloWorld
+ helloworld
diff --git a/HelloWorld/android/app/src/main/res/values/styles.xml b/HelloWorld/android/app/src/main/res/values/styles.xml
index 24bc0613..7ba83a2a 100644
--- a/HelloWorld/android/app/src/main/res/values/styles.xml
+++ b/HelloWorld/android/app/src/main/res/values/styles.xml
@@ -3,6 +3,7 @@
diff --git a/HelloWorld/android/build.gradle b/HelloWorld/android/build.gradle
index 65098950..c9bc539d 100644
--- a/HelloWorld/android/build.gradle
+++ b/HelloWorld/android/build.gradle
@@ -1,19 +1,30 @@
+import org.apache.tools.ant.taskdefs.condition.Os
+
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext {
- buildToolsVersion = "30.0.2"
+ buildToolsVersion = "31.0.0"
minSdkVersion = 21
- compileSdkVersion = 30
- targetSdkVersion = 30
- ndkVersion = "21.4.7075529"
+ compileSdkVersion = 31
+ targetSdkVersion = 31
+
+ if (System.properties['os.arch'] == "aarch64") {
+ // For M1 Users we need to use the NDK 24 which added support for aarch64
+ ndkVersion = "24.0.8215888"
+ } else {
+ // Otherwise we default to the side-by-side NDK version from AGP.
+ ndkVersion = "21.4.7075529"
+ }
}
repositories {
google()
mavenCentral()
}
dependencies {
- classpath("com.android.tools.build:gradle:4.2.2")
+ classpath("com.android.tools.build:gradle:7.1.1")
+ classpath("com.facebook.react:react-native-gradle-plugin")
+ classpath("de.undercouch:gradle-download-task:5.0.1")
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
@@ -21,8 +32,6 @@ buildscript {
allprojects {
repositories {
- mavenCentral()
- mavenLocal()
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url("$rootDir/../node_modules/react-native/android")
@@ -31,7 +40,13 @@ allprojects {
// 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 'https://www.jitpack.io' }
}
diff --git a/HelloWorld/android/gradle.properties b/HelloWorld/android/gradle.properties
index cdb4c211..fa4feae5 100644
--- a/HelloWorld/android/gradle.properties
+++ b/HelloWorld/android/gradle.properties
@@ -9,8 +9,8 @@
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
-# Default value: -Xmx10248m -XX:MaxPermSize=256m
-# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
+# Default value: -Xmx512m -XX:MaxMetaspaceSize=256m
+org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
@@ -25,4 +25,16 @@ android.useAndroidX=true
android.enableJetifier=true
# Version of flipper SDK to use with React Native
-FLIPPER_VERSION=0.99.0
+FLIPPER_VERSION=0.125.0
+
+# Use this property to specify which architecture you want to build.
+# You can also override it from the CLI using
+# ./gradlew -PreactNativeArchitectures=x86_64
+reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64
+
+# Use this property to enable support to the new architecture.
+# This will allow you to use TurboModules and the Fabric render in
+# your application. You should enable this flag either if you want
+# to write custom TurboModules/Fabric components OR use libraries that
+# are providing them.
+newArchEnabled=false
diff --git a/HelloWorld/android/gradle/wrapper/gradle-wrapper.jar b/HelloWorld/android/gradle/wrapper/gradle-wrapper.jar
index e708b1c0..7454180f 100644
Binary files a/HelloWorld/android/gradle/wrapper/gradle-wrapper.jar and b/HelloWorld/android/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/HelloWorld/android/gradle/wrapper/gradle-wrapper.properties b/HelloWorld/android/gradle/wrapper/gradle-wrapper.properties
index 7665b0fa..669386b8 100644
--- a/HelloWorld/android/gradle/wrapper/gradle-wrapper.properties
+++ b/HelloWorld/android/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/HelloWorld/android/gradlew b/HelloWorld/android/gradlew
index 4f906e0c..1b6c7873 100755
--- a/HelloWorld/android/gradlew
+++ b/HelloWorld/android/gradlew
@@ -1,7 +1,7 @@
-#!/usr/bin/env sh
+#!/bin/sh
#
-# Copyright 2015 the original author or authors.
+# Copyright © 2015-2021 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -17,67 +17,101 @@
#
##############################################################################
-##
-## Gradle start up script for UN*X
-##
+#
+# Gradle start up script for POSIX generated by Gradle.
+#
+# Important for running:
+#
+# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+# noncompliant, but you have some other compliant shell such as ksh or
+# bash, then to run this script, type that shell name before the whole
+# command line, like:
+#
+# ksh Gradle
+#
+# Busybox and similar reduced shells will NOT work, because this script
+# requires all of these POSIX shell features:
+# * functions;
+# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+# * compound commands having a testable exit status, especially «case»;
+# * various built-in commands including «command», «set», and «ulimit».
+#
+# Important for patching:
+#
+# (2) This script targets any POSIX shell, so it avoids extensions provided
+# by Bash, Ksh, etc; in particular arrays are avoided.
+#
+# The "traditional" practice of packing multiple parameters into a
+# space-separated string is a well documented source of bugs and security
+# problems, so this is (mostly) avoided, by progressively accumulating
+# options in "$@", and eventually passing that to Java.
+#
+# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
+# see the in-line comments for details.
+#
+# There are tweaks for specific operating systems such as AIX, CygWin,
+# Darwin, MinGW, and NonStop.
+#
+# (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
+# within the Gradle project.
+#
+# You can find Gradle at https://github.com/gradle/gradle/.
+#
##############################################################################
# Attempt to set APP_HOME
+
# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
- ls=`ls -ld "$PRG"`
- link=`expr "$ls" : '.*-> \(.*\)$'`
- if expr "$link" : '/.*' > /dev/null; then
- PRG="$link"
- else
- PRG=`dirname "$PRG"`"/$link"
- fi
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+ APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
+ [ -h "$app_path" ]
+do
+ ls=$( ls -ld "$app_path" )
+ link=${ls#*' -> '}
+ case $link in #(
+ /*) app_path=$link ;; #(
+ *) app_path=$APP_HOME$link ;;
+ esac
done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >/dev/null
-APP_HOME="`pwd -P`"
-cd "$SAVED" >/dev/null
+
+APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
+APP_BASE_NAME=${0##*/}
# 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"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
+MAX_FD=maximum
warn () {
echo "$*"
-}
+} >&2
die () {
echo
echo "$*"
echo
exit 1
-}
+} >&2
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
-case "`uname`" in
- CYGWIN* )
- cygwin=true
- ;;
- Darwin* )
- darwin=true
- ;;
- MINGW* )
- msys=true
- ;;
- NONSTOP* )
- nonstop=true
- ;;
+case "$( uname )" in #(
+ CYGWIN* ) cygwin=true ;; #(
+ Darwin* ) darwin=true ;; #(
+ MSYS* | MINGW* ) msys=true ;; #(
+ NONSTOP* ) nonstop=true ;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
@@ -87,9 +121,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
- JAVACMD="$JAVA_HOME/jre/sh/java"
+ JAVACMD=$JAVA_HOME/jre/sh/java
else
- JAVACMD="$JAVA_HOME/bin/java"
+ JAVACMD=$JAVA_HOME/bin/java
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
@@ -98,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
- JAVACMD="java"
+ JAVACMD=java
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
@@ -106,80 +140,95 @@ location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
- MAX_FD_LIMIT=`ulimit -H -n`
- if [ $? -eq 0 ] ; then
- if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
- MAX_FD="$MAX_FD_LIMIT"
- fi
- ulimit -n $MAX_FD
- if [ $? -ne 0 ] ; then
- warn "Could not set maximum file descriptor limit: $MAX_FD"
- fi
- else
- warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
- fi
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+ case $MAX_FD in #(
+ max*)
+ MAX_FD=$( ulimit -H -n ) ||
+ warn "Could not query maximum file descriptor limit"
+ esac
+ case $MAX_FD in #(
+ '' | soft) :;; #(
+ *)
+ ulimit -n "$MAX_FD" ||
+ warn "Could not set maximum file descriptor limit to $MAX_FD"
+ esac
fi
-# For Darwin, add options to specify how the application appears in the dock
-if $darwin; then
- GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
-fi
+# Collect all arguments for the java command, stacking in reverse order:
+# * args from the command line
+# * the main class name
+# * -classpath
+# * -D...appname settings
+# * --module-path (only if needed)
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
# For Cygwin or MSYS, switch paths to Windows format before running java
-if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
- APP_HOME=`cygpath --path --mixed "$APP_HOME"`
- CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
-
- JAVACMD=`cygpath --unix "$JAVACMD"`
-
- # We build the pattern for arguments to be converted via cygpath
- ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
- SEP=""
- for dir in $ROOTDIRSRAW ; do
- ROOTDIRS="$ROOTDIRS$SEP$dir"
- SEP="|"
- done
- OURCYGPATTERN="(^($ROOTDIRS))"
- # Add a user-defined pattern to the cygpath arguments
- if [ "$GRADLE_CYGPATTERN" != "" ] ; then
- OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
- fi
+if "$cygwin" || "$msys" ; then
+ APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+ CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+ JAVACMD=$( cygpath --unix "$JAVACMD" )
+
# Now convert the arguments - kludge to limit ourselves to /bin/sh
- i=0
- for arg in "$@" ; do
- CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
- CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
-
- if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
- eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
- else
- eval `echo args$i`="\"$arg\""
+ for arg do
+ if
+ case $arg in #(
+ -*) false ;; # don't mess with options #(
+ /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
+ [ -e "$t" ] ;; #(
+ *) false ;;
+ esac
+ then
+ arg=$( cygpath --path --ignore --mixed "$arg" )
fi
- i=`expr $i + 1`
+ # Roll the args list around exactly as many times as the number of
+ # args, so each arg winds up back in the position where it started, but
+ # possibly modified.
+ #
+ # NB: a `for` loop captures its iteration list before it begins, so
+ # changing the positional parameters here affects neither the number of
+ # iterations, nor the values presented in `arg`.
+ shift # remove old arg
+ set -- "$@" "$arg" # push replacement arg
done
- case $i in
- 0) set -- ;;
- 1) set -- "$args0" ;;
- 2) set -- "$args0" "$args1" ;;
- 3) set -- "$args0" "$args1" "$args2" ;;
- 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
- 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
- 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
- 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
- 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
- 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
- esac
fi
-# Escape application args
-save () {
- for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
- echo " "
-}
-APP_ARGS=`save "$@"`
+# Collect all arguments for the java command;
+# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
+# shell script including quotes and variable substitutions, so put them in
+# double quotes to make sure that they get re-expanded; and
+# * put everything else in single quotes, so that it's not re-expanded.
+
+set -- \
+ "-Dorg.gradle.appname=$APP_BASE_NAME" \
+ -classpath "$CLASSPATH" \
+ org.gradle.wrapper.GradleWrapperMain \
+ "$@"
+
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+# set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
-# Collect all arguments for the java command, following the shell quoting and substitution rules
-eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+eval "set -- $(
+ printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+ xargs -n1 |
+ sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+ tr '\n' ' '
+ )" '"$@"'
exec "$JAVACMD" "$@"
diff --git a/HelloWorld/android/gradlew.bat b/HelloWorld/android/gradlew.bat
index 107acd32..ac1b06f9 100644
--- a/HelloWorld/android/gradlew.bat
+++ b/HelloWorld/android/gradlew.bat
@@ -1,89 +1,89 @@
-@rem
-@rem Copyright 2015 the original author or authors.
-@rem
-@rem Licensed under the Apache License, Version 2.0 (the "License");
-@rem you may not use this file except in compliance with the License.
-@rem You may obtain a copy of the License at
-@rem
-@rem https://www.apache.org/licenses/LICENSE-2.0
-@rem
-@rem Unless required by applicable law or agreed to in writing, software
-@rem distributed under the License is distributed on an "AS IS" BASIS,
-@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-@rem See the License for the specific language governing permissions and
-@rem limitations under the License.
-@rem
-
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Resolve any "." and ".." in APP_HOME to make it shorter.
-for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto execute
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto execute
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/HelloWorld/android/settings.gradle b/HelloWorld/android/settings.gradle
index e50c29d6..bd838b9c 100644
--- a/HelloWorld/android/settings.gradle
+++ b/HelloWorld/android/settings.gradle
@@ -1,3 +1,11 @@
rootProject.name = 'HelloWorld'
apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)
include ':app'
+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')
+}
diff --git a/HelloWorld/ios/HelloWorld.xcodeproj/project.pbxproj b/HelloWorld/ios/HelloWorld.xcodeproj/project.pbxproj
index 068d576e..df7f43e3 100644
--- a/HelloWorld/ios/HelloWorld.xcodeproj/project.pbxproj
+++ b/HelloWorld/ios/HelloWorld.xcodeproj/project.pbxproj
@@ -8,12 +8,12 @@
/* Begin PBXBuildFile section */
00E356F31AD99517003FC87E /* HelloWorldTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* HelloWorldTests.m */; };
- 0AB820A052BE503FDEE3F64C /* libPods-HelloWorld.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E69D2C44C64A5690249752D /* libPods-HelloWorld.a */; };
- 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
+ 0C80B921A6F3F58F76C31292 /* libPods-HelloWorld.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DCACB8F33CDC322A6C60F78 /* libPods-HelloWorld.a */; };
+ 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
+ 7699B88040F8A987B510C191 /* libPods-HelloWorld-HelloWorldTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 19F6CBCC0A4E27FBF8BF4A61 /* libPods-HelloWorld-HelloWorldTests.a */; };
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
- EAD86F3A14EC070E85026FD7 /* libPods-HelloWorld-HelloWorldTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 672EC33A66006E4EE6C3E58F /* libPods-HelloWorld-HelloWorldTests.a */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -32,17 +32,17 @@
00E356F21AD99517003FC87E /* HelloWorldTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HelloWorldTests.m; sourceTree = ""; };
13B07F961A680F5B00A75B9A /* HelloWorld.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloWorld.app; sourceTree = BUILT_PRODUCTS_DIR; };
13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = HelloWorld/AppDelegate.h; sourceTree = ""; };
- 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = HelloWorld/AppDelegate.m; sourceTree = ""; };
+ 13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = HelloWorld/AppDelegate.mm; sourceTree = ""; };
13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = HelloWorld/Images.xcassets; sourceTree = ""; };
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = HelloWorld/Info.plist; sourceTree = ""; };
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = HelloWorld/main.m; sourceTree = ""; };
- 5E69D2C44C64A5690249752D /* libPods-HelloWorld.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-HelloWorld.a"; sourceTree = BUILT_PRODUCTS_DIR; };
- 63F7C8B6929120F00250AB6B /* Pods-HelloWorld-HelloWorldTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HelloWorld-HelloWorldTests.release.xcconfig"; path = "Target Support Files/Pods-HelloWorld-HelloWorldTests/Pods-HelloWorld-HelloWorldTests.release.xcconfig"; sourceTree = ""; };
- 672EC33A66006E4EE6C3E58F /* libPods-HelloWorld-HelloWorldTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-HelloWorld-HelloWorldTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
- 67F69B5C1AF8C86EE5A348FF /* Pods-HelloWorld.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HelloWorld.debug.xcconfig"; path = "Target Support Files/Pods-HelloWorld/Pods-HelloWorld.debug.xcconfig"; sourceTree = ""; };
+ 19F6CBCC0A4E27FBF8BF4A61 /* libPods-HelloWorld-HelloWorldTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-HelloWorld-HelloWorldTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 3B4392A12AC88292D35C810B /* Pods-HelloWorld.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HelloWorld.debug.xcconfig"; path = "Target Support Files/Pods-HelloWorld/Pods-HelloWorld.debug.xcconfig"; sourceTree = ""; };
+ 5709B34CF0A7D63546082F79 /* Pods-HelloWorld.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HelloWorld.release.xcconfig"; path = "Target Support Files/Pods-HelloWorld/Pods-HelloWorld.release.xcconfig"; sourceTree = ""; };
+ 5B7EB9410499542E8C5724F5 /* Pods-HelloWorld-HelloWorldTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HelloWorld-HelloWorldTests.debug.xcconfig"; path = "Target Support Files/Pods-HelloWorld-HelloWorldTests/Pods-HelloWorld-HelloWorldTests.debug.xcconfig"; sourceTree = ""; };
+ 5DCACB8F33CDC322A6C60F78 /* libPods-HelloWorld.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-HelloWorld.a"; sourceTree = BUILT_PRODUCTS_DIR; };
81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = HelloWorld/LaunchScreen.storyboard; sourceTree = ""; };
- 927014FE8BB7F3F5E8A28AEA /* Pods-HelloWorld-HelloWorldTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HelloWorld-HelloWorldTests.debug.xcconfig"; path = "Target Support Files/Pods-HelloWorld-HelloWorldTests/Pods-HelloWorld-HelloWorldTests.debug.xcconfig"; sourceTree = ""; };
- B8DD2CECD354210A4096BFC6 /* Pods-HelloWorld.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HelloWorld.release.xcconfig"; path = "Target Support Files/Pods-HelloWorld/Pods-HelloWorld.release.xcconfig"; sourceTree = ""; };
+ 89C6BE57DB24E9ADA2F236DE /* Pods-HelloWorld-HelloWorldTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HelloWorld-HelloWorldTests.release.xcconfig"; path = "Target Support Files/Pods-HelloWorld-HelloWorldTests/Pods-HelloWorld-HelloWorldTests.release.xcconfig"; sourceTree = ""; };
ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
/* End PBXFileReference section */
@@ -51,7 +51,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- EAD86F3A14EC070E85026FD7 /* libPods-HelloWorld-HelloWorldTests.a in Frameworks */,
+ 7699B88040F8A987B510C191 /* libPods-HelloWorld-HelloWorldTests.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -59,25 +59,13 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 0AB820A052BE503FDEE3F64C /* libPods-HelloWorld.a in Frameworks */,
+ 0C80B921A6F3F58F76C31292 /* libPods-HelloWorld.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
- 007BB2C29E9D6D1A53F4CD99 /* Pods */ = {
- isa = PBXGroup;
- children = (
- 67F69B5C1AF8C86EE5A348FF /* Pods-HelloWorld.debug.xcconfig */,
- B8DD2CECD354210A4096BFC6 /* Pods-HelloWorld.release.xcconfig */,
- 927014FE8BB7F3F5E8A28AEA /* Pods-HelloWorld-HelloWorldTests.debug.xcconfig */,
- 63F7C8B6929120F00250AB6B /* Pods-HelloWorld-HelloWorldTests.release.xcconfig */,
- );
- name = Pods;
- path = Pods;
- sourceTree = "";
- };
00E356EF1AD99517003FC87E /* HelloWorldTests */ = {
isa = PBXGroup;
children = (
@@ -99,7 +87,7 @@
isa = PBXGroup;
children = (
13B07FAF1A68108700A75B9A /* AppDelegate.h */,
- 13B07FB01A68108700A75B9A /* AppDelegate.m */,
+ 13B07FB01A68108700A75B9A /* AppDelegate.mm */,
13B07FB51A68108700A75B9A /* Images.xcassets */,
13B07FB61A68108700A75B9A /* Info.plist */,
81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */,
@@ -112,8 +100,8 @@
isa = PBXGroup;
children = (
ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
- 5E69D2C44C64A5690249752D /* libPods-HelloWorld.a */,
- 672EC33A66006E4EE6C3E58F /* libPods-HelloWorld-HelloWorldTests.a */,
+ 5DCACB8F33CDC322A6C60F78 /* libPods-HelloWorld.a */,
+ 19F6CBCC0A4E27FBF8BF4A61 /* libPods-HelloWorld-HelloWorldTests.a */,
);
name = Frameworks;
sourceTree = "";
@@ -133,7 +121,7 @@
00E356EF1AD99517003FC87E /* HelloWorldTests */,
83CBBA001A601CBA00E9B192 /* Products */,
2D16E6871FA4F8E400B85C8A /* Frameworks */,
- 007BB2C29E9D6D1A53F4CD99 /* Pods */,
+ BBD78D7AC51CEA395F1C20DB /* Pods */,
);
indentWidth = 2;
sourceTree = "";
@@ -149,6 +137,17 @@
name = Products;
sourceTree = "";
};
+ BBD78D7AC51CEA395F1C20DB /* Pods */ = {
+ isa = PBXGroup;
+ children = (
+ 3B4392A12AC88292D35C810B /* Pods-HelloWorld.debug.xcconfig */,
+ 5709B34CF0A7D63546082F79 /* Pods-HelloWorld.release.xcconfig */,
+ 5B7EB9410499542E8C5724F5 /* Pods-HelloWorld-HelloWorldTests.debug.xcconfig */,
+ 89C6BE57DB24E9ADA2F236DE /* Pods-HelloWorld-HelloWorldTests.release.xcconfig */,
+ );
+ path = Pods;
+ sourceTree = "";
+ };
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
@@ -156,12 +155,12 @@
isa = PBXNativeTarget;
buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "HelloWorldTests" */;
buildPhases = (
- EBB9738320B253A1EEB4E89D /* [CP] Check Pods Manifest.lock */,
+ A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */,
00E356EA1AD99517003FC87E /* Sources */,
00E356EB1AD99517003FC87E /* Frameworks */,
00E356EC1AD99517003FC87E /* Resources */,
- 096951AE7FF0EE5561EFAB30 /* [CP] Embed Pods Frameworks */,
- F9A542E39D54678EFB440E1D /* [CP] Copy Pods Resources */,
+ C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */,
+ F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@@ -177,14 +176,14 @@
isa = PBXNativeTarget;
buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "HelloWorld" */;
buildPhases = (
- 261B465DCC102A4832398CB6 /* [CP] Check Pods Manifest.lock */,
+ C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */,
FD10A7F022414F080027D42C /* Start Packager */,
13B07F871A680F5B00A75B9A /* Sources */,
13B07F8C1A680F5B00A75B9A /* Frameworks */,
13B07F8E1A680F5B00A75B9A /* Resources */,
00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
- A5868401F5F3CB14071FB5DC /* [CP] Embed Pods Frameworks */,
- 699669C2D0C9EEC909428E23 /* [CP] Copy Pods Resources */,
+ 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */,
+ E235C05ADACE081382539298 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@@ -257,32 +256,34 @@
files = (
);
inputPaths = (
+ "$(SRCROOT)/.xcode.env.local",
+ "$(SRCROOT)/.xcode.env",
);
name = "Bundle React Native code and images";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "set -e\n\nexport NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh\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";
};
- 096951AE7FF0EE5561EFAB30 /* [CP] Embed Pods Frameworks */ = {
+ 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-HelloWorld-HelloWorldTests/Pods-HelloWorld-HelloWorldTests-frameworks-${CONFIGURATION}-input-files.xcfilelist",
+ "${PODS_ROOT}/Target Support Files/Pods-HelloWorld/Pods-HelloWorld-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Embed Pods Frameworks";
outputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-HelloWorld-HelloWorldTests/Pods-HelloWorld-HelloWorldTests-frameworks-${CONFIGURATION}-output-files.xcfilelist",
+ "${PODS_ROOT}/Target Support Files/Pods-HelloWorld/Pods-HelloWorld-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HelloWorld-HelloWorldTests/Pods-HelloWorld-HelloWorldTests-frameworks.sh\"\n";
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HelloWorld/Pods-HelloWorld-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
- 261B465DCC102A4832398CB6 /* [CP] Check Pods Manifest.lock */ = {
+ A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -297,70 +298,70 @@
outputFileListPaths = (
);
outputPaths = (
- "$(DERIVED_FILE_DIR)/Pods-HelloWorld-checkManifestLockResult.txt",
+ "$(DERIVED_FILE_DIR)/Pods-HelloWorld-HelloWorldTests-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
- 699669C2D0C9EEC909428E23 /* [CP] Copy Pods Resources */ = {
+ C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-HelloWorld/Pods-HelloWorld-resources-${CONFIGURATION}-input-files.xcfilelist",
);
- name = "[CP] Copy Pods Resources";
+ inputPaths = (
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+ "${PODS_ROOT}/Manifest.lock",
+ );
+ name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-HelloWorld/Pods-HelloWorld-resources-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ outputPaths = (
+ "$(DERIVED_FILE_DIR)/Pods-HelloWorld-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HelloWorld/Pods-HelloWorld-resources.sh\"\n";
+ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
- A5868401F5F3CB14071FB5DC /* [CP] Embed Pods Frameworks */ = {
+ C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-HelloWorld/Pods-HelloWorld-frameworks-${CONFIGURATION}-input-files.xcfilelist",
+ "${PODS_ROOT}/Target Support Files/Pods-HelloWorld-HelloWorldTests/Pods-HelloWorld-HelloWorldTests-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Embed Pods Frameworks";
outputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-HelloWorld/Pods-HelloWorld-frameworks-${CONFIGURATION}-output-files.xcfilelist",
+ "${PODS_ROOT}/Target Support Files/Pods-HelloWorld-HelloWorldTests/Pods-HelloWorld-HelloWorldTests-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HelloWorld/Pods-HelloWorld-frameworks.sh\"\n";
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HelloWorld-HelloWorldTests/Pods-HelloWorld-HelloWorldTests-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
- EBB9738320B253A1EEB4E89D /* [CP] Check Pods Manifest.lock */ = {
+ E235C05ADACE081382539298 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-HelloWorld/Pods-HelloWorld-resources-${CONFIGURATION}-input-files.xcfilelist",
);
- inputPaths = (
- "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
- "${PODS_ROOT}/Manifest.lock",
- );
- name = "[CP] Check Pods Manifest.lock";
+ name = "[CP] Copy Pods Resources";
outputFileListPaths = (
- );
- outputPaths = (
- "$(DERIVED_FILE_DIR)/Pods-HelloWorld-HelloWorldTests-checkManifestLockResult.txt",
+ "${PODS_ROOT}/Target Support Files/Pods-HelloWorld/Pods-HelloWorld-resources-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HelloWorld/Pods-HelloWorld-resources.sh\"\n";
showEnvVarsInLog = 0;
};
- F9A542E39D54678EFB440E1D /* [CP] Copy Pods Resources */ = {
+ F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -411,7 +412,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */,
+ 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,
13B07FC11A68108700A75B9A /* main.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -429,7 +430,7 @@
/* Begin XCBuildConfiguration section */
00E356F61AD99517003FC87E /* Debug */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 927014FE8BB7F3F5E8A28AEA /* Pods-HelloWorld-HelloWorldTests.debug.xcconfig */;
+ baseConfigurationReference = 5B7EB9410499542E8C5724F5 /* Pods-HelloWorld-HelloWorldTests.debug.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
GCC_PREPROCESSOR_DEFINITIONS = (
@@ -437,7 +438,7 @@
"$(inherited)",
);
INFOPLIST_FILE = HelloWorldTests/Info.plist;
- IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.4;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@@ -456,12 +457,12 @@
};
00E356F71AD99517003FC87E /* Release */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 63F7C8B6929120F00250AB6B /* Pods-HelloWorld-HelloWorldTests.release.xcconfig */;
+ baseConfigurationReference = 89C6BE57DB24E9ADA2F236DE /* Pods-HelloWorld-HelloWorldTests.release.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
COPY_PHASE_STRIP = NO;
INFOPLIST_FILE = HelloWorldTests/Info.plist;
- IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.4;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@@ -480,7 +481,7 @@
};
13B07F941A680F5B00A75B9A /* Debug */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 67F69B5C1AF8C86EE5A348FF /* Pods-HelloWorld.debug.xcconfig */;
+ baseConfigurationReference = 3B4392A12AC88292D35C810B /* Pods-HelloWorld.debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
@@ -506,7 +507,7 @@
};
13B07F951A680F5B00A75B9A /* Release */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = B8DD2CECD354210A4096BFC6 /* Pods-HelloWorld.release.xcconfig */;
+ baseConfigurationReference = 5709B34CF0A7D63546082F79 /* Pods-HelloWorld.release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
@@ -533,7 +534,7 @@
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LANGUAGE_STANDARD = "c++17";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
@@ -561,7 +562,7 @@
COPY_PHASE_STRIP = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
- "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "arm64 ";
+ "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
@@ -577,7 +578,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.4;
LD_RUNPATH_SEARCH_PATHS = (
/usr/lib/swift,
"$(inherited)",
@@ -585,11 +586,17 @@
LIBRARY_SEARCH_PATHS = (
"\"$(SDKROOT)/usr/lib/swift\"",
"\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
- "\"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)\"",
"\"$(inherited)\"",
);
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
+ OTHER_CPLUSPLUSFLAGS = (
+ "$(OTHER_CFLAGS)",
+ "-DFOLLY_NO_CONFIG",
+ "-DFOLLY_MOBILE=1",
+ "-DFOLLY_USE_LIBCPP=1",
+ );
+ REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
SDKROOT = iphoneos;
};
name = Debug;
@@ -599,7 +606,7 @@
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LANGUAGE_STANDARD = "c++17";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
@@ -627,7 +634,7 @@
COPY_PHASE_STRIP = YES;
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
- "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "arm64 ";
+ "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
@@ -636,7 +643,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.4;
LD_RUNPATH_SEARCH_PATHS = (
/usr/lib/swift,
"$(inherited)",
@@ -644,10 +651,16 @@
LIBRARY_SEARCH_PATHS = (
"\"$(SDKROOT)/usr/lib/swift\"",
"\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
- "\"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)\"",
"\"$(inherited)\"",
);
MTL_ENABLE_DEBUG_INFO = NO;
+ OTHER_CPLUSPLUSFLAGS = (
+ "$(OTHER_CFLAGS)",
+ "-DFOLLY_NO_CONFIG",
+ "-DFOLLY_MOBILE=1",
+ "-DFOLLY_USE_LIBCPP=1",
+ );
+ REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
SDKROOT = iphoneos;
VALIDATE_PRODUCT = YES;
};
diff --git a/HelloWorld/ios/HelloWorld/AppDelegate.m b/HelloWorld/ios/HelloWorld/AppDelegate.m
deleted file mode 100644
index 59b62377..00000000
--- a/HelloWorld/ios/HelloWorld/AppDelegate.m
+++ /dev/null
@@ -1,62 +0,0 @@
-#import "AppDelegate.h"
-
-#import
-#import
-#import
-
-#ifdef FB_SONARKIT_ENABLED
-#import
-#import
-#import
-#import
-#import
-#import
-
-static void InitializeFlipper(UIApplication *application) {
- FlipperClient *client = [FlipperClient sharedClient];
- SKDescriptorMapper *layoutDescriptorMapper = [[SKDescriptorMapper alloc] initWithDefaults];
- [client addPlugin:[[FlipperKitLayoutPlugin alloc] initWithRootNode:application withDescriptorMapper:layoutDescriptorMapper]];
- [client addPlugin:[[FKUserDefaultsPlugin alloc] initWithSuiteName:nil]];
- [client addPlugin:[FlipperKitReactPlugin new]];
- [client addPlugin:[[FlipperKitNetworkPlugin alloc] initWithNetworkAdapter:[SKIOSNetworkAdapter new]]];
- [client start];
-}
-#endif
-
-@implementation AppDelegate
-
-- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
-{
-#ifdef FB_SONARKIT_ENABLED
- InitializeFlipper(application);
-#endif
-
- RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
- RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge
- moduleName:@"HelloWorld"
- initialProperties:nil];
-
- 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;
-}
-
-- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
-{
-#if DEBUG
- return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
-#else
- return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
-#endif
-}
-
-@end
diff --git a/HelloWorld/ios/HelloWorld/AppDelegate.mm b/HelloWorld/ios/HelloWorld/AppDelegate.mm
new file mode 100644
index 00000000..28475b9c
--- /dev/null
+++ b/HelloWorld/ios/HelloWorld/AppDelegate.mm
@@ -0,0 +1,133 @@
+#import "AppDelegate.h"
+
+#import
+#import
+#import
+
+#import
+
+#if RCT_NEW_ARCH_ENABLED
+#import
+#import
+#import
+#import
+#import
+#import
+
+#import
+
+static NSString *const kRNConcurrentRoot = @"concurrentRoot";
+
+@interface AppDelegate () {
+ RCTTurboModuleManager *_turboModuleManager;
+ RCTSurfacePresenterBridgeAdapter *_bridgeAdapter;
+ std::shared_ptr _reactNativeConfig;
+ facebook::react::ContextContainer::Shared _contextContainer;
+}
+@end
+#endif
+
+@implementation AppDelegate
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
+{
+ RCTAppSetupPrepareApp(application);
+
+ RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
+
+#if RCT_NEW_ARCH_ENABLED
+ _contextContainer = std::make_shared();
+ _reactNativeConfig = std::make_shared();
+ _contextContainer->insert("ReactNativeConfig", _reactNativeConfig);
+ _bridgeAdapter = [[RCTSurfacePresenterBridgeAdapter alloc] initWithBridge:bridge contextContainer:_contextContainer];
+ bridge.surfacePresenter = _bridgeAdapter.surfacePresenter;
+#endif
+
+ NSDictionary *initProps = [self prepareInitialProps];
+ UIView *rootView = RCTAppSetupDefaultRootView(bridge, @"HelloWorld", 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
+{
+#if DEBUG
+ return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"];
+#else
+ return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
+#endif
+}
+
+#if RCT_NEW_ARCH_ENABLED
+
+#pragma mark - RCTCxxBridgeDelegate
+
+- (std::unique_ptr)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)getTurboModule:(const std::string &)name
+ jsInvoker:(std::shared_ptr)jsInvoker
+{
+ return nullptr;
+}
+
+- (std::shared_ptr)getTurboModule:(const std::string &)name
+ initParams:
+ (const facebook::react::ObjCTurboModule::InitParams &)params
+{
+ return nullptr;
+}
+
+- (id)getModuleInstanceFromClass:(Class)moduleClass
+{
+ return RCTAppSetupDefaultModuleFromClass(moduleClass);
+}
+
+#endif
+
+@end
diff --git a/HelloWorld/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Contents.json b/HelloWorld/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Contents.json
index 118c98f7..81213230 100644
--- a/HelloWorld/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Contents.json
+++ b/HelloWorld/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Contents.json
@@ -2,37 +2,52 @@
"images" : [
{
"idiom" : "iphone",
- "size" : "29x29",
- "scale" : "2x"
+ "scale" : "2x",
+ "size" : "20x20"
},
{
"idiom" : "iphone",
- "size" : "29x29",
- "scale" : "3x"
+ "scale" : "3x",
+ "size" : "20x20"
},
{
"idiom" : "iphone",
- "size" : "40x40",
- "scale" : "2x"
+ "scale" : "2x",
+ "size" : "29x29"
},
{
"idiom" : "iphone",
- "size" : "40x40",
- "scale" : "3x"
+ "scale" : "3x",
+ "size" : "29x29"
},
{
"idiom" : "iphone",
- "size" : "60x60",
- "scale" : "2x"
+ "scale" : "2x",
+ "size" : "40x40"
},
{
"idiom" : "iphone",
- "size" : "60x60",
- "scale" : "3x"
+ "scale" : "3x",
+ "size" : "40x40"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "60x60"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "3x",
+ "size" : "60x60"
+ },
+ {
+ "idiom" : "ios-marketing",
+ "scale" : "1x",
+ "size" : "1024x1024"
}
],
"info" : {
- "version" : 1,
- "author" : "xcode"
+ "author" : "xcode",
+ "version" : 1
}
-}
\ No newline at end of file
+}
diff --git a/HelloWorld/ios/HelloWorld/LaunchScreen copy.storyboard b/HelloWorld/ios/HelloWorld/LaunchScreen copy.storyboard
new file mode 100644
index 00000000..e13962e9
--- /dev/null
+++ b/HelloWorld/ios/HelloWorld/LaunchScreen copy.storyboard
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/HelloWorld/ios/HelloWorld/main.m b/HelloWorld/ios/HelloWorld/main.m
index b1df44b9..d645c724 100644
--- a/HelloWorld/ios/HelloWorld/main.m
+++ b/HelloWorld/ios/HelloWorld/main.m
@@ -2,7 +2,8 @@
#import "AppDelegate.h"
-int main(int argc, char * argv[]) {
+int main(int argc, char *argv[])
+{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
diff --git a/HelloWorld/ios/HelloWorldTests/HelloWorldTests.m b/HelloWorld/ios/HelloWorldTests/HelloWorldTests.m
index eabd5fd1..884d405d 100644
--- a/HelloWorld/ios/HelloWorldTests/HelloWorldTests.m
+++ b/HelloWorld/ios/HelloWorldTests/HelloWorldTests.m
@@ -13,7 +13,7 @@ @interface HelloWorldTests : XCTestCase
@implementation HelloWorldTests
-- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test
+- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL (^)(UIView *view))test
{
if (test(view)) {
return YES;
@@ -34,23 +34,25 @@ - (void)testRendersWelcomeScreen
__block NSString *redboxError = nil;
#ifdef DEBUG
- RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) {
- if (level >= RCTLogLevelError) {
- redboxError = message;
- }
- });
+ RCTSetLogFunction(
+ ^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) {
+ if (level >= RCTLogLevelError) {
+ redboxError = message;
+ }
+ });
#endif
while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) {
[[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
[[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
- foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) {
- if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) {
- return YES;
- }
- return NO;
- }];
+ foundElement = [self findSubviewInView:vc.view
+ matching:^BOOL(UIView *view) {
+ if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) {
+ return YES;
+ }
+ return NO;
+ }];
}
#ifdef DEBUG
@@ -61,5 +63,4 @@ - (void)testRendersWelcomeScreen
XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS);
}
-
@end
diff --git a/HelloWorld/ios/Podfile b/HelloWorld/ios/Podfile
index 9409747f..06a02f93 100644
--- a/HelloWorld/ios/Podfile
+++ b/HelloWorld/ios/Podfile
@@ -1,15 +1,22 @@
require_relative '../node_modules/react-native/scripts/react_native_pods'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
-platform :ios, '11.0'
+platform :ios, '12.4'
+install! 'cocoapods', :deterministic_uuids => false
target 'HelloWorld' do
config = use_native_modules!
+ # Flags change depending on the env values.
+ flags = get_default_flags()
+
use_react_native!(
:path => config[:reactNativePath],
# to enable hermes on iOS, change `false` to `true` and then install pods
- :hermes_enabled => false
+ :hermes_enabled => flags[:hermes_enabled],
+ :fabric_enabled => flags[:fabric_enabled],
+ # An absolute path to your application root.
+ :app_path => "#{Pod::Config.instance.installation_root}/.."
)
target 'HelloWorldTests' do
diff --git a/HelloWorld/ios/Podfile.lock b/HelloWorld/ios/Podfile.lock
index 10a5d9e7..3af8bb35 100644
--- a/HelloWorld/ios/Podfile.lock
+++ b/HelloWorld/ios/Podfile.lock
@@ -2,78 +2,79 @@ PODS:
- boost (1.76.0)
- CocoaAsyncSocket (7.6.5)
- DoubleConversion (1.1.6)
- - FBLazyVector (0.66.4)
- - FBReactNativeSpec (0.66.4):
+ - FBLazyVector (0.69.1)
+ - FBReactNativeSpec (0.69.1):
- RCT-Folly (= 2021.06.28.00-v2)
- - RCTRequired (= 0.66.4)
- - RCTTypeSafety (= 0.66.4)
- - React-Core (= 0.66.4)
- - React-jsi (= 0.66.4)
- - ReactCommon/turbomodule/core (= 0.66.4)
- - Flipper (0.99.0):
+ - RCTRequired (= 0.69.1)
+ - RCTTypeSafety (= 0.69.1)
+ - React-Core (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - ReactCommon/turbomodule/core (= 0.69.1)
+ - Flipper (0.125.0):
- Flipper-Folly (~> 2.6)
- Flipper-RSocket (~> 1.4)
- Flipper-Boost-iOSX (1.76.0.1.11)
- - Flipper-DoubleConversion (3.1.7)
+ - Flipper-DoubleConversion (3.2.0.1)
- Flipper-Fmt (7.1.7)
- - Flipper-Folly (2.6.7):
+ - Flipper-Folly (2.6.10):
- Flipper-Boost-iOSX
- Flipper-DoubleConversion
- Flipper-Fmt (= 7.1.7)
- Flipper-Glog
- libevent (~> 2.1.12)
- - OpenSSL-Universal (= 1.1.180)
- - Flipper-Glog (0.3.6)
+ - OpenSSL-Universal (= 1.1.1100)
+ - Flipper-Glog (0.5.0.5)
- Flipper-PeerTalk (0.0.4)
- Flipper-RSocket (1.4.3):
- Flipper-Folly (~> 2.6)
- - FlipperKit (0.99.0):
- - FlipperKit/Core (= 0.99.0)
- - FlipperKit/Core (0.99.0):
- - Flipper (~> 0.99.0)
+ - FlipperKit (0.125.0):
+ - FlipperKit/Core (= 0.125.0)
+ - FlipperKit/Core (0.125.0):
+ - Flipper (~> 0.125.0)
- FlipperKit/CppBridge
- FlipperKit/FBCxxFollyDynamicConvert
- FlipperKit/FBDefines
- FlipperKit/FKPortForwarding
- - FlipperKit/CppBridge (0.99.0):
- - Flipper (~> 0.99.0)
- - FlipperKit/FBCxxFollyDynamicConvert (0.99.0):
+ - SocketRocket (~> 0.6.0)
+ - FlipperKit/CppBridge (0.125.0):
+ - Flipper (~> 0.125.0)
+ - FlipperKit/FBCxxFollyDynamicConvert (0.125.0):
- Flipper-Folly (~> 2.6)
- - FlipperKit/FBDefines (0.99.0)
- - FlipperKit/FKPortForwarding (0.99.0):
+ - FlipperKit/FBDefines (0.125.0)
+ - FlipperKit/FKPortForwarding (0.125.0):
- CocoaAsyncSocket (~> 7.6)
- Flipper-PeerTalk (~> 0.0.4)
- - FlipperKit/FlipperKitHighlightOverlay (0.99.0)
- - FlipperKit/FlipperKitLayoutHelpers (0.99.0):
+ - FlipperKit/FlipperKitHighlightOverlay (0.125.0)
+ - FlipperKit/FlipperKitLayoutHelpers (0.125.0):
- FlipperKit/Core
- FlipperKit/FlipperKitHighlightOverlay
- FlipperKit/FlipperKitLayoutTextSearchable
- - FlipperKit/FlipperKitLayoutIOSDescriptors (0.99.0):
+ - FlipperKit/FlipperKitLayoutIOSDescriptors (0.125.0):
- FlipperKit/Core
- FlipperKit/FlipperKitHighlightOverlay
- FlipperKit/FlipperKitLayoutHelpers
- YogaKit (~> 1.18)
- - FlipperKit/FlipperKitLayoutPlugin (0.99.0):
+ - FlipperKit/FlipperKitLayoutPlugin (0.125.0):
- FlipperKit/Core
- FlipperKit/FlipperKitHighlightOverlay
- FlipperKit/FlipperKitLayoutHelpers
- FlipperKit/FlipperKitLayoutIOSDescriptors
- FlipperKit/FlipperKitLayoutTextSearchable
- YogaKit (~> 1.18)
- - FlipperKit/FlipperKitLayoutTextSearchable (0.99.0)
- - FlipperKit/FlipperKitNetworkPlugin (0.99.0):
+ - FlipperKit/FlipperKitLayoutTextSearchable (0.125.0)
+ - FlipperKit/FlipperKitNetworkPlugin (0.125.0):
- FlipperKit/Core
- - FlipperKit/FlipperKitReactPlugin (0.99.0):
+ - FlipperKit/FlipperKitReactPlugin (0.125.0):
- FlipperKit/Core
- - FlipperKit/FlipperKitUserDefaultsPlugin (0.99.0):
+ - FlipperKit/FlipperKitUserDefaultsPlugin (0.125.0):
- FlipperKit/Core
- - FlipperKit/SKIOSNetworkPlugin (0.99.0):
+ - FlipperKit/SKIOSNetworkPlugin (0.125.0):
- FlipperKit/Core
- FlipperKit/FlipperKitNetworkPlugin
- fmt (6.2.1)
- glog (0.3.5)
- libevent (2.1.12)
- - OpenSSL-Universal (1.1.180)
+ - OpenSSL-Universal (1.1.1100)
- RCT-Folly (2021.06.28.00-v2):
- boost
- DoubleConversion
@@ -85,260 +86,272 @@ PODS:
- DoubleConversion
- fmt (~> 6.2.1)
- glog
- - RCTRequired (0.66.4)
- - RCTTypeSafety (0.66.4):
- - FBLazyVector (= 0.66.4)
+ - RCTRequired (0.69.1)
+ - RCTTypeSafety (0.69.1):
+ - FBLazyVector (= 0.69.1)
+ - RCTRequired (= 0.69.1)
+ - React-Core (= 0.69.1)
+ - React (0.69.1):
+ - React-Core (= 0.69.1)
+ - React-Core/DevSupport (= 0.69.1)
+ - React-Core/RCTWebSocket (= 0.69.1)
+ - React-RCTActionSheet (= 0.69.1)
+ - React-RCTAnimation (= 0.69.1)
+ - React-RCTBlob (= 0.69.1)
+ - React-RCTImage (= 0.69.1)
+ - React-RCTLinking (= 0.69.1)
+ - React-RCTNetwork (= 0.69.1)
+ - React-RCTSettings (= 0.69.1)
+ - React-RCTText (= 0.69.1)
+ - React-RCTVibration (= 0.69.1)
+ - React-bridging (0.69.1):
- RCT-Folly (= 2021.06.28.00-v2)
- - RCTRequired (= 0.66.4)
- - React-Core (= 0.66.4)
- - React (0.66.4):
- - React-Core (= 0.66.4)
- - React-Core/DevSupport (= 0.66.4)
- - React-Core/RCTWebSocket (= 0.66.4)
- - React-RCTActionSheet (= 0.66.4)
- - React-RCTAnimation (= 0.66.4)
- - React-RCTBlob (= 0.66.4)
- - React-RCTImage (= 0.66.4)
- - React-RCTLinking (= 0.66.4)
- - React-RCTNetwork (= 0.66.4)
- - React-RCTSettings (= 0.66.4)
- - React-RCTText (= 0.66.4)
- - React-RCTVibration (= 0.66.4)
- - React-callinvoker (0.66.4)
- - React-Core (0.66.4):
+ - React-jsi (= 0.69.1)
+ - React-callinvoker (0.69.1)
+ - React-Codegen (0.69.1):
+ - FBReactNativeSpec (= 0.69.1)
+ - RCT-Folly (= 2021.06.28.00-v2)
+ - RCTRequired (= 0.69.1)
+ - RCTTypeSafety (= 0.69.1)
+ - React-Core (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-jsiexecutor (= 0.69.1)
+ - ReactCommon/turbomodule/core (= 0.69.1)
+ - React-Core (0.69.1):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- - React-Core/Default (= 0.66.4)
- - React-cxxreact (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-jsiexecutor (= 0.66.4)
- - React-perflogger (= 0.66.4)
+ - React-Core/Default (= 0.69.1)
+ - React-cxxreact (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-jsiexecutor (= 0.69.1)
+ - React-perflogger (= 0.69.1)
- Yoga
- - React-Core/CoreModulesHeaders (0.66.4):
+ - React-Core/CoreModulesHeaders (0.69.1):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- - React-cxxreact (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-jsiexecutor (= 0.66.4)
- - React-perflogger (= 0.66.4)
+ - React-cxxreact (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-jsiexecutor (= 0.69.1)
+ - React-perflogger (= 0.69.1)
- Yoga
- - React-Core/Default (0.66.4):
+ - React-Core/Default (0.69.1):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- - React-cxxreact (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-jsiexecutor (= 0.66.4)
- - React-perflogger (= 0.66.4)
+ - React-cxxreact (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-jsiexecutor (= 0.69.1)
+ - React-perflogger (= 0.69.1)
- Yoga
- - React-Core/DevSupport (0.66.4):
+ - React-Core/DevSupport (0.69.1):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- - React-Core/Default (= 0.66.4)
- - React-Core/RCTWebSocket (= 0.66.4)
- - React-cxxreact (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-jsiexecutor (= 0.66.4)
- - React-jsinspector (= 0.66.4)
- - React-perflogger (= 0.66.4)
+ - React-Core/Default (= 0.69.1)
+ - React-Core/RCTWebSocket (= 0.69.1)
+ - React-cxxreact (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-jsiexecutor (= 0.69.1)
+ - React-jsinspector (= 0.69.1)
+ - React-perflogger (= 0.69.1)
- Yoga
- - React-Core/RCTActionSheetHeaders (0.66.4):
+ - React-Core/RCTActionSheetHeaders (0.69.1):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- - React-cxxreact (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-jsiexecutor (= 0.66.4)
- - React-perflogger (= 0.66.4)
+ - React-cxxreact (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-jsiexecutor (= 0.69.1)
+ - React-perflogger (= 0.69.1)
- Yoga
- - React-Core/RCTAnimationHeaders (0.66.4):
+ - React-Core/RCTAnimationHeaders (0.69.1):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- - React-cxxreact (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-jsiexecutor (= 0.66.4)
- - React-perflogger (= 0.66.4)
+ - React-cxxreact (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-jsiexecutor (= 0.69.1)
+ - React-perflogger (= 0.69.1)
- Yoga
- - React-Core/RCTBlobHeaders (0.66.4):
+ - React-Core/RCTBlobHeaders (0.69.1):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- - React-cxxreact (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-jsiexecutor (= 0.66.4)
- - React-perflogger (= 0.66.4)
+ - React-cxxreact (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-jsiexecutor (= 0.69.1)
+ - React-perflogger (= 0.69.1)
- Yoga
- - React-Core/RCTImageHeaders (0.66.4):
+ - React-Core/RCTImageHeaders (0.69.1):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- - React-cxxreact (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-jsiexecutor (= 0.66.4)
- - React-perflogger (= 0.66.4)
+ - React-cxxreact (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-jsiexecutor (= 0.69.1)
+ - React-perflogger (= 0.69.1)
- Yoga
- - React-Core/RCTLinkingHeaders (0.66.4):
+ - React-Core/RCTLinkingHeaders (0.69.1):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- - React-cxxreact (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-jsiexecutor (= 0.66.4)
- - React-perflogger (= 0.66.4)
+ - React-cxxreact (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-jsiexecutor (= 0.69.1)
+ - React-perflogger (= 0.69.1)
- Yoga
- - React-Core/RCTNetworkHeaders (0.66.4):
+ - React-Core/RCTNetworkHeaders (0.69.1):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- - React-cxxreact (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-jsiexecutor (= 0.66.4)
- - React-perflogger (= 0.66.4)
+ - React-cxxreact (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-jsiexecutor (= 0.69.1)
+ - React-perflogger (= 0.69.1)
- Yoga
- - React-Core/RCTSettingsHeaders (0.66.4):
+ - React-Core/RCTSettingsHeaders (0.69.1):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- - React-cxxreact (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-jsiexecutor (= 0.66.4)
- - React-perflogger (= 0.66.4)
+ - React-cxxreact (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-jsiexecutor (= 0.69.1)
+ - React-perflogger (= 0.69.1)
- Yoga
- - React-Core/RCTTextHeaders (0.66.4):
+ - React-Core/RCTTextHeaders (0.69.1):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- - React-cxxreact (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-jsiexecutor (= 0.66.4)
- - React-perflogger (= 0.66.4)
+ - React-cxxreact (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-jsiexecutor (= 0.69.1)
+ - React-perflogger (= 0.69.1)
- Yoga
- - React-Core/RCTVibrationHeaders (0.66.4):
+ - React-Core/RCTVibrationHeaders (0.69.1):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- - React-cxxreact (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-jsiexecutor (= 0.66.4)
- - React-perflogger (= 0.66.4)
+ - React-cxxreact (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-jsiexecutor (= 0.69.1)
+ - React-perflogger (= 0.69.1)
- Yoga
- - React-Core/RCTWebSocket (0.66.4):
+ - React-Core/RCTWebSocket (0.69.1):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- - React-Core/Default (= 0.66.4)
- - React-cxxreact (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-jsiexecutor (= 0.66.4)
- - React-perflogger (= 0.66.4)
+ - React-Core/Default (= 0.69.1)
+ - React-cxxreact (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-jsiexecutor (= 0.69.1)
+ - React-perflogger (= 0.69.1)
- Yoga
- - React-CoreModules (0.66.4):
- - FBReactNativeSpec (= 0.66.4)
+ - React-CoreModules (0.69.1):
- RCT-Folly (= 2021.06.28.00-v2)
- - RCTTypeSafety (= 0.66.4)
- - React-Core/CoreModulesHeaders (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-RCTImage (= 0.66.4)
- - ReactCommon/turbomodule/core (= 0.66.4)
- - React-cxxreact (0.66.4):
+ - RCTTypeSafety (= 0.69.1)
+ - React-Codegen (= 0.69.1)
+ - React-Core/CoreModulesHeaders (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-RCTImage (= 0.69.1)
+ - ReactCommon/turbomodule/core (= 0.69.1)
+ - React-cxxreact (0.69.1):
- boost (= 1.76.0)
- DoubleConversion
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- - React-callinvoker (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-jsinspector (= 0.66.4)
- - React-logger (= 0.66.4)
- - React-perflogger (= 0.66.4)
- - React-runtimeexecutor (= 0.66.4)
- - React-jsi (0.66.4):
+ - React-callinvoker (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-jsinspector (= 0.69.1)
+ - React-logger (= 0.69.1)
+ - React-perflogger (= 0.69.1)
+ - React-runtimeexecutor (= 0.69.1)
+ - React-jsi (0.69.1):
- boost (= 1.76.0)
- DoubleConversion
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- - React-jsi/Default (= 0.66.4)
- - React-jsi/Default (0.66.4):
+ - React-jsi/Default (= 0.69.1)
+ - React-jsi/Default (0.69.1):
- boost (= 1.76.0)
- DoubleConversion
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- - React-jsiexecutor (0.66.4):
+ - React-jsiexecutor (0.69.1):
- DoubleConversion
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- - React-cxxreact (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-perflogger (= 0.66.4)
- - React-jsinspector (0.66.4)
- - React-logger (0.66.4):
+ - React-cxxreact (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-perflogger (= 0.69.1)
+ - React-jsinspector (0.69.1)
+ - React-logger (0.69.1):
- glog
- react-native-safe-area-context (3.3.2):
- React-Core
- - React-perflogger (0.66.4)
- - React-RCTActionSheet (0.66.4):
- - React-Core/RCTActionSheetHeaders (= 0.66.4)
- - React-RCTAnimation (0.66.4):
- - FBReactNativeSpec (= 0.66.4)
+ - React-perflogger (0.69.1)
+ - React-RCTActionSheet (0.69.1):
+ - React-Core/RCTActionSheetHeaders (= 0.69.1)
+ - React-RCTAnimation (0.69.1):
- RCT-Folly (= 2021.06.28.00-v2)
- - RCTTypeSafety (= 0.66.4)
- - React-Core/RCTAnimationHeaders (= 0.66.4)
- - React-jsi (= 0.66.4)
- - ReactCommon/turbomodule/core (= 0.66.4)
- - React-RCTBlob (0.66.4):
- - FBReactNativeSpec (= 0.66.4)
+ - RCTTypeSafety (= 0.69.1)
+ - React-Codegen (= 0.69.1)
+ - React-Core/RCTAnimationHeaders (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - ReactCommon/turbomodule/core (= 0.69.1)
+ - React-RCTBlob (0.69.1):
- RCT-Folly (= 2021.06.28.00-v2)
- - React-Core/RCTBlobHeaders (= 0.66.4)
- - React-Core/RCTWebSocket (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-RCTNetwork (= 0.66.4)
- - ReactCommon/turbomodule/core (= 0.66.4)
- - React-RCTImage (0.66.4):
- - FBReactNativeSpec (= 0.66.4)
+ - React-Codegen (= 0.69.1)
+ - React-Core/RCTBlobHeaders (= 0.69.1)
+ - React-Core/RCTWebSocket (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-RCTNetwork (= 0.69.1)
+ - ReactCommon/turbomodule/core (= 0.69.1)
+ - React-RCTImage (0.69.1):
- RCT-Folly (= 2021.06.28.00-v2)
- - RCTTypeSafety (= 0.66.4)
- - React-Core/RCTImageHeaders (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-RCTNetwork (= 0.66.4)
- - ReactCommon/turbomodule/core (= 0.66.4)
- - React-RCTLinking (0.66.4):
- - FBReactNativeSpec (= 0.66.4)
- - React-Core/RCTLinkingHeaders (= 0.66.4)
- - React-jsi (= 0.66.4)
- - ReactCommon/turbomodule/core (= 0.66.4)
- - React-RCTNetwork (0.66.4):
- - FBReactNativeSpec (= 0.66.4)
+ - RCTTypeSafety (= 0.69.1)
+ - React-Codegen (= 0.69.1)
+ - React-Core/RCTImageHeaders (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-RCTNetwork (= 0.69.1)
+ - ReactCommon/turbomodule/core (= 0.69.1)
+ - React-RCTLinking (0.69.1):
+ - React-Codegen (= 0.69.1)
+ - React-Core/RCTLinkingHeaders (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - ReactCommon/turbomodule/core (= 0.69.1)
+ - React-RCTNetwork (0.69.1):
- RCT-Folly (= 2021.06.28.00-v2)
- - RCTTypeSafety (= 0.66.4)
- - React-Core/RCTNetworkHeaders (= 0.66.4)
- - React-jsi (= 0.66.4)
- - ReactCommon/turbomodule/core (= 0.66.4)
- - React-RCTSettings (0.66.4):
- - FBReactNativeSpec (= 0.66.4)
+ - RCTTypeSafety (= 0.69.1)
+ - React-Codegen (= 0.69.1)
+ - React-Core/RCTNetworkHeaders (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - ReactCommon/turbomodule/core (= 0.69.1)
+ - React-RCTSettings (0.69.1):
- RCT-Folly (= 2021.06.28.00-v2)
- - RCTTypeSafety (= 0.66.4)
- - React-Core/RCTSettingsHeaders (= 0.66.4)
- - React-jsi (= 0.66.4)
- - ReactCommon/turbomodule/core (= 0.66.4)
- - React-RCTText (0.66.4):
- - React-Core/RCTTextHeaders (= 0.66.4)
- - React-RCTVibration (0.66.4):
- - FBReactNativeSpec (= 0.66.4)
+ - RCTTypeSafety (= 0.69.1)
+ - React-Codegen (= 0.69.1)
+ - React-Core/RCTSettingsHeaders (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - ReactCommon/turbomodule/core (= 0.69.1)
+ - React-RCTText (0.69.1):
+ - React-Core/RCTTextHeaders (= 0.69.1)
+ - React-RCTVibration (0.69.1):
- RCT-Folly (= 2021.06.28.00-v2)
- - React-Core/RCTVibrationHeaders (= 0.66.4)
- - React-jsi (= 0.66.4)
- - ReactCommon/turbomodule/core (= 0.66.4)
- - React-runtimeexecutor (0.66.4):
- - React-jsi (= 0.66.4)
- - ReactCommon/turbomodule/core (0.66.4):
+ - React-Codegen (= 0.69.1)
+ - React-Core/RCTVibrationHeaders (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - ReactCommon/turbomodule/core (= 0.69.1)
+ - React-runtimeexecutor (0.69.1):
+ - React-jsi (= 0.69.1)
+ - ReactCommon/turbomodule/core (0.69.1):
- DoubleConversion
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- - React-callinvoker (= 0.66.4)
- - React-Core (= 0.66.4)
- - React-cxxreact (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-logger (= 0.66.4)
- - React-perflogger (= 0.66.4)
+ - React-bridging (= 0.69.1)
+ - React-callinvoker (= 0.69.1)
+ - React-Core (= 0.69.1)
+ - React-cxxreact (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-logger (= 0.69.1)
+ - React-perflogger (= 0.69.1)
- RNCAsyncStorage (1.15.14):
- React-Core
- RNCMaskedView (0.1.11):
@@ -381,6 +394,7 @@ PODS:
- React-RCTImage
- RNSVG (12.1.1):
- React
+ - SocketRocket (0.6.0)
- Yoga (1.14.0)
- YogaKit (1.18.1):
- Yoga (~> 1.14)
@@ -390,33 +404,36 @@ DEPENDENCIES:
- DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
- FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
- FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`)
- - Flipper (= 0.99.0)
+ - Flipper (= 0.125.0)
- Flipper-Boost-iOSX (= 1.76.0.1.11)
- - Flipper-DoubleConversion (= 3.1.7)
+ - Flipper-DoubleConversion (= 3.2.0.1)
- Flipper-Fmt (= 7.1.7)
- - Flipper-Folly (= 2.6.7)
- - Flipper-Glog (= 0.3.6)
+ - Flipper-Folly (= 2.6.10)
+ - Flipper-Glog (= 0.5.0.5)
- Flipper-PeerTalk (= 0.0.4)
- Flipper-RSocket (= 1.4.3)
- - FlipperKit (= 0.99.0)
- - FlipperKit/Core (= 0.99.0)
- - FlipperKit/CppBridge (= 0.99.0)
- - FlipperKit/FBCxxFollyDynamicConvert (= 0.99.0)
- - FlipperKit/FBDefines (= 0.99.0)
- - FlipperKit/FKPortForwarding (= 0.99.0)
- - FlipperKit/FlipperKitHighlightOverlay (= 0.99.0)
- - FlipperKit/FlipperKitLayoutPlugin (= 0.99.0)
- - FlipperKit/FlipperKitLayoutTextSearchable (= 0.99.0)
- - FlipperKit/FlipperKitNetworkPlugin (= 0.99.0)
- - FlipperKit/FlipperKitReactPlugin (= 0.99.0)
- - FlipperKit/FlipperKitUserDefaultsPlugin (= 0.99.0)
- - FlipperKit/SKIOSNetworkPlugin (= 0.99.0)
+ - FlipperKit (= 0.125.0)
+ - FlipperKit/Core (= 0.125.0)
+ - FlipperKit/CppBridge (= 0.125.0)
+ - FlipperKit/FBCxxFollyDynamicConvert (= 0.125.0)
+ - FlipperKit/FBDefines (= 0.125.0)
+ - FlipperKit/FKPortForwarding (= 0.125.0)
+ - FlipperKit/FlipperKitHighlightOverlay (= 0.125.0)
+ - FlipperKit/FlipperKitLayoutPlugin (= 0.125.0)
+ - FlipperKit/FlipperKitLayoutTextSearchable (= 0.125.0)
+ - FlipperKit/FlipperKitNetworkPlugin (= 0.125.0)
+ - FlipperKit/FlipperKitReactPlugin (= 0.125.0)
+ - FlipperKit/FlipperKitUserDefaultsPlugin (= 0.125.0)
+ - FlipperKit/SKIOSNetworkPlugin (= 0.125.0)
- glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
+ - OpenSSL-Universal (= 1.1.1100)
- RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`)
- RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`)
- RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`)
- React (from `../node_modules/react-native/`)
+ - React-bridging (from `../node_modules/react-native/ReactCommon`)
- React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`)
+ - React-Codegen (from `build/generated/ios`)
- React-Core (from `../node_modules/react-native/`)
- React-Core/DevSupport (from `../node_modules/react-native/`)
- React-Core/RCTWebSocket (from `../node_modules/react-native/`)
@@ -463,6 +480,7 @@ SPEC REPOS:
- fmt
- libevent
- OpenSSL-Universal
+ - SocketRocket
- YogaKit
EXTERNAL SOURCES:
@@ -484,8 +502,12 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/Libraries/TypeSafety"
React:
:path: "../node_modules/react-native/"
+ React-bridging:
+ :path: "../node_modules/react-native/ReactCommon"
React-callinvoker:
:path: "../node_modules/react-native/ReactCommon/callinvoker"
+ React-Codegen:
+ :path: build/generated/ios
React-Core:
:path: "../node_modules/react-native/"
React-CoreModules:
@@ -546,57 +568,60 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
boost: a7c83b31436843459a1961bfd74b96033dc77234
CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99
- DoubleConversion: 831926d9b8bf8166fd87886c4abab286c2422662
- FBLazyVector: e5569e42a1c79ca00521846c223173a57aca1fe1
- FBReactNativeSpec: fe08c1cd7e2e205718d77ad14b34957cce949b58
- Flipper: 30e8eeeed6abdc98edaf32af0cda2f198be4b733
+ DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54
+ FBLazyVector: 068141206af867f72854753423d0117c4bf53419
+ FBReactNativeSpec: 546a637adc797fa436dd51d1c63c580f820de31c
+ Flipper: 26fc4b7382499f1281eb8cb921e5c3ad6de91fe0
Flipper-Boost-iOSX: fd1e2b8cbef7e662a122412d7ac5f5bea715403c
- Flipper-DoubleConversion: 57ffbe81ef95306cc9e69c4aa3aeeeeb58a6a28c
+ Flipper-DoubleConversion: 2dc99b02f658daf147069aad9dbd29d8feb06d30
Flipper-Fmt: 60cbdd92fc254826e61d669a5d87ef7015396a9b
- Flipper-Folly: 83af37379faa69497529e414bd43fbfc7cae259a
- Flipper-Glog: 1dfd6abf1e922806c52ceb8701a3599a79a200a6
+ Flipper-Folly: 584845625005ff068a6ebf41f857f468decd26b3
+ Flipper-Glog: 70c50ce58ddaf67dc35180db05f191692570f446
Flipper-PeerTalk: 116d8f857dc6ef55c7a5a75ea3ceaafe878aadc9
Flipper-RSocket: d9d9ade67cbecf6ac10730304bf5607266dd2541
- FlipperKit: d8d346844eca5d9120c17d441a2f38596e8ed2b9
+ FlipperKit: cbdee19bdd4e7f05472a66ce290f1b729ba3cb86
fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9
- glog: 5337263514dd6f09803962437687240c5dc39aa4
+ glog: 3d02b25ca00c2d456734d0bcff864cbc62f6ae1a
libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
- OpenSSL-Universal: 1aa4f6a6ee7256b83db99ec1ccdaa80d10f9af9b
- RCT-Folly: a21c126816d8025b547704b777a2ba552f3d9fa9
- RCTRequired: 4bf86c70714490bca4bf2696148638284622644b
- RCTTypeSafety: c475a7059eb77935fa53d2c17db299893f057d5d
- React: f64af14e3f2c50f6f2c91a5fd250e4ff1b3c3459
- React-callinvoker: b74e4ae80287780dcdf0cab262bcb581eeef56e7
- React-Core: 3eb7432bad96ff1d25aebc1defbae013fee2fd0e
- React-CoreModules: ad9e1fd5650e16666c57a08328df86fd7e480cb9
- React-cxxreact: 02633ff398cf7e91a2c1e12590d323c4a4b8668a
- React-jsi: 805c41a927d6499fb811772acb971467d9204633
- React-jsiexecutor: 94ce921e1d8ce7023366873ec371f3441383b396
- React-jsinspector: d0374f7509d407d2264168b6d0fad0b54e300b85
- React-logger: 933f80c97c633ee8965d609876848148e3fef438
+ OpenSSL-Universal: ebc357f1e6bc71fa463ccb2fe676756aff50e88c
+ RCT-Folly: b9d9fe1fc70114b751c076104e52f3b1b5e5a95a
+ RCTRequired: ae07282b2ec9c90d7eb98251603bc3f82403d239
+ RCTTypeSafety: a04dc1339af2e1da759ccd093bf11c310dce1ef6
+ React: dbd201f781b180eab148aa961683943c72f67dcf
+ React-bridging: 10a863fdc0fc6f9c9f8527640936b293cd288bdc
+ React-callinvoker: 6ad32eee2630dab9023de5df2a6a8cacbfc99a67
+ React-Codegen: fe3423fa6f37d05e233ab0e85e34fe0b443a5654
+ React-Core: 6177b1f2dd794fe202a5042d3678b2ddfcbfb7d4
+ React-CoreModules: c74e6b155f9876b1947fc8a13f0cb437cc7f6dcd
+ React-cxxreact: a07b7d90c4c71dd38c7383c7344b34d0a1336aee
+ React-jsi: d762c410d10830b7579225c78f2fd881c29649ca
+ React-jsiexecutor: 758e70947c232828a66b5ddc42d02b4d010fa26e
+ React-jsinspector: 55605caf04e02f9b0e05842b786f1c12dde08f4b
+ React-logger: ca970551cb7eea2fd814d0d5f6fc1a471eb53b76
react-native-safe-area-context: 584dc04881deb49474363f3be89e4ca0e854c057
- React-perflogger: 93075d8931c32cd1fce8a98c15d2d5ccc4d891bd
- React-RCTActionSheet: 7d3041e6761b4f3044a37079ddcb156575fb6d89
- React-RCTAnimation: 743e88b55ac62511ae5c2e22803d4f503f2a3a13
- React-RCTBlob: bee3a2f98fa7fc25c957c8643494244f74bea0a0
- React-RCTImage: 19fc9e29b06cc38611c553494f8d3040bf78c24e
- React-RCTLinking: dc799503979c8c711126d66328e7ce8f25c2848f
- React-RCTNetwork: 417e4e34cf3c19eaa5fd4e9eb20180d662a799ce
- React-RCTSettings: 4df89417265af26501a7e0e9192a34d3d9848dff
- React-RCTText: f8a21c3499ab322326290fa9b701ae29aa093aa5
- React-RCTVibration: e3ffca672dd3772536cb844274094b0e2c31b187
- React-runtimeexecutor: dec32ee6f2e2a26e13e58152271535fadff5455a
- ReactCommon: 57b69f6383eafcbd7da625bfa6003810332313c4
+ React-perflogger: c9161ff0f1c769993cd11d2751e4331ff4ceb7cd
+ React-RCTActionSheet: 2d885b0bea76a5254ef852939273edd8de116180
+ React-RCTAnimation: 353fa4fc3c19060068832dd32e555182ec07be45
+ React-RCTBlob: 647da863bc7d4f169bb80463fbcdd59c4fc76e6a
+ React-RCTImage: e77ee8d85f21ad5f4704e3ef67656903f45f9e76
+ React-RCTLinking: 3dad213f5ef5798b9491037aebe84e8ad684d4c4
+ React-RCTNetwork: ebbb9581d8fdc91596a4ee5e9f9ae37d5f1e13b9
+ React-RCTSettings: a5e7f3f1d1b38be8bf9baa89228c5af98244f9ee
+ React-RCTText: 209576913f7eccd84425ea3f3813772f1f66e1e4
+ React-RCTVibration: e8b7dd6635cc95689b5db643b5a3848f1e05b30b
+ React-runtimeexecutor: 27f468c5576eaf05ffb7a907528e44c75a3fcbae
+ ReactCommon: e30ec17dfb1d4c4f3419eac254350d6abca6d5a2
RNCAsyncStorage: ea6b5c280997b2b32a587793163b1f10e580c4f7
RNCMaskedView: 0e1bc4bfa8365eba5fbbb71e07fbdc0555249489
RNDeviceInfo: 0400a6d0c94186d1120c3cbd97b23abc022187a9
RNGestureHandler: e5c7cab5f214503dcefd6b2b0cefb050e1f51c4a
- RNReanimated: 65583befd5706cc9c86ae9a081786181ced37b93
+ RNReanimated: e2414d403cc8da634e44103c1ec7a13e87bd6333
RNScreens: 522705f2e5c9d27efb17f24aceb2bf8335bc7b8e
RNSVG: 551acb6562324b1d52a4e0758f7ca0ec234e278f
- Yoga: e7dc4e71caba6472ff48ad7d234389b91dadc280
+ SocketRocket: fccef3f9c5cedea1353a9ef6ada904fde10d6608
+ Yoga: 7ab6e3ee4ce47d7b789d1cb520163833e515f452
YogaKit: f782866e155069a2cca2517aafea43200b01fd5a
-PODFILE CHECKSUM: e210a75d3f18280e7056d6c54b4a5ab1baec678f
+PODFILE CHECKSUM: fb73e05329a23e1f925f444e51d22616c03f0050
-COCOAPODS: 1.10.1
+COCOAPODS: 1.11.2
diff --git a/HelloWorld/ios/_xcode.env b/HelloWorld/ios/_xcode.env
new file mode 100644
index 00000000..3d5782c7
--- /dev/null
+++ b/HelloWorld/ios/_xcode.env
@@ -0,0 +1,11 @@
+# This `.xcode.env` file is versioned and is used to source the environment
+# used when running script phases inside Xcode.
+# To customize your local environment, you can create an `.xcode.env.local`
+# file that is not versioned.
+
+# NODE_BINARY variable contains the PATH to the node executable.
+#
+# Customize the NODE_BINARY variable here.
+# For example, to use nvm with brew, add the following line
+# . "$(brew --prefix nvm)/nvm.sh" --no-use
+export NODE_BINARY=$(command -v node)
diff --git a/HelloWorld/metro.config.js b/HelloWorld/metro.config.js
index e91aba93..a4d4bead 100644
--- a/HelloWorld/metro.config.js
+++ b/HelloWorld/metro.config.js
@@ -5,7 +5,7 @@
* @format
*/
-module.exports = {
+ module.exports = {
transformer: {
getTransformOptions: async () => ({
transform: {
diff --git a/HelloWorld/package.json b/HelloWorld/package.json
index 4998851a..0c2f3c40 100644
--- a/HelloWorld/package.json
+++ b/HelloWorld/package.json
@@ -22,8 +22,8 @@
"@rematch/loading": "2.1.2",
"@uiw/formatter": "1.2.4",
"@uiw/react-native": "2.11.1",
- "react": "17.0.2",
- "react-native": "0.66.4",
+ "react": "18.0.0",
+ "react-native": "0.69.1",
"react-native-device-info": "8.4.8",
"react-native-gesture-handler": "2.1.0",
"react-native-reanimated": "2.2.4",
@@ -41,10 +41,10 @@
"eslint": "7.32.0",
"eslint-plugin-prettier": "4.0.0",
"jest": "27.2.0",
- "metro-react-native-babel-preset": "0.66.2",
+ "metro-react-native-babel-preset": "0.70.3",
"mocker-api": "2.9.4",
"prettier": "2.5.1",
- "react-test-renderer": "17.0.2"
+ "react-test-renderer": "18.0.0"
},
"jest": {
"preset": "react-native"
diff --git a/template/template/Gemfile b/template/template/Gemfile
new file mode 100644
index 00000000..5efda89f
--- /dev/null
+++ b/template/template/Gemfile
@@ -0,0 +1,6 @@
+source 'https://rubygems.org'
+
+# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version
+ruby '2.7.5'
+
+gem 'cocoapods', '~> 1.11', '>= 1.11.2'
diff --git a/template/template/_bundle/config b/template/template/_bundle/config
new file mode 100644
index 00000000..848943bb
--- /dev/null
+++ b/template/template/_bundle/config
@@ -0,0 +1,2 @@
+BUNDLE_PATH: "vendor/bundle"
+BUNDLE_FORCE_RUBY_PLATFORM: 1
diff --git a/template/template/_flowconfig b/template/template/_flowconfig
index 43dd26bc..74f3a75e 100644
--- a/template/template/_flowconfig
+++ b/template/template/_flowconfig
@@ -11,6 +11,8 @@ node_modules/react-native/Libraries/polyfills/.*
; Flow doesn't support platforms
.*/Libraries/Utilities/LoadingView.js
+.*/node_modules/resolve/test/resolver/malformed_package_json/package\.json$
+
[untyped]
.*/node_modules/@react-native-community/cli/.*/.*
@@ -23,9 +25,6 @@ node_modules/react-native/flow/
[options]
emoji=true
-esproposal.optional_chaining=enable
-esproposal.nullish_coalescing=enable
-
exact_by_default=true
format.bracket_spacing=false
@@ -53,7 +52,6 @@ nonstrict-import=warn
deprecated-type=warn
unsafe-getters-setters=warn
unnecessary-invariant=warn
-signature-verification-failure=warn
[strict]
deprecated-type
@@ -65,4 +63,4 @@ untyped-import
untyped-type-import
[version]
-^0.158.0
+^0.176.3
diff --git a/template/template/_gitattributes b/template/template/_gitattributes
deleted file mode 100644
index 45a3dcb2..00000000
--- a/template/template/_gitattributes
+++ /dev/null
@@ -1,3 +0,0 @@
-# Windows files should use crlf line endings
-# https://help.github.com/articles/dealing-with-line-endings/
-*.bat text eol=crlf
diff --git a/template/template/_gitignore b/template/template/_gitignore
index ecc1e4ad..344481b2 100644
--- a/template/template/_gitignore
+++ b/template/template/_gitignore
@@ -20,6 +20,7 @@ DerivedData
*.hmap
*.ipa
*.xcuserstate
+ios/.xcode.env.local
# Android/IntelliJ
#
@@ -49,12 +50,14 @@ buck-out/
# For more information about the recommended setup visit:
# https://docs.fastlane.tools/best-practices/source-control/
-*/fastlane/report.xml
-*/fastlane/Preview.html
-*/fastlane/screenshots
+**/fastlane/report.xml
+**/fastlane/Preview.html
+**/fastlane/screenshots
+**/fastlane/test_output
# Bundle artifact
*.jsbundle
-# CocoaPods
-ios/Pods/
+# Ruby / CocoaPods
+/ios/Pods/
+/vendor/bundle/
diff --git a/template/template/_prettierrc.js b/template/template/_prettierrc.js
index 2c95e0c5..5f62afd3 100644
--- a/template/template/_prettierrc.js
+++ b/template/template/_prettierrc.js
@@ -1,6 +1,7 @@
module.exports = {
+ arrowParens: 'avoid',
+ bracketSameLine: true,
bracketSpacing: false,
- jsxBracketSameLine: true,
tabWidth: 2,
singleQuote: true,
trailingComma: 'all',
diff --git a/template/template/_ruby-version b/template/template/_ruby-version
new file mode 100644
index 00000000..a603bb50
--- /dev/null
+++ b/template/template/_ruby-version
@@ -0,0 +1 @@
+2.7.5
diff --git a/template/template/android/app/src/debug/AndroidManifest.xml b/template/template/android/app/src/debug/AndroidManifest.xml
index b2f3ad9f..4b185bc1 100644
--- a/template/template/android/app/src/debug/AndroidManifest.xml
+++ b/template/template/android/app/src/debug/AndroidManifest.xml
@@ -8,6 +8,6 @@
android:usesCleartextTraffic="true"
tools:targetApi="28"
tools:ignore="GoogleAppIndexingWarning">
-
+
diff --git a/template/template/android/app/src/debug/java/com/helloworld/ReactNativeFlipper.java b/template/template/android/app/src/debug/java/com/helloworld/ReactNativeFlipper.java
index 8b7f0913..8f18993f 100644
--- a/template/template/android/app/src/debug/java/com/helloworld/ReactNativeFlipper.java
+++ b/template/template/android/app/src/debug/java/com/helloworld/ReactNativeFlipper.java
@@ -1,11 +1,10 @@
/**
- * Copyright (c) Facebook, Inc. and its affiliates.
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the LICENSE file in the root
* directory of this source tree.
*/
package com.helloworld;
-
import android.content.Context;
import com.facebook.flipper.android.AndroidFlipperClient;
import com.facebook.flipper.android.utils.FlipperUtils;
@@ -19,22 +18,20 @@
import com.facebook.flipper.plugins.network.NetworkFlipperPlugin;
import com.facebook.flipper.plugins.react.ReactFlipperPlugin;
import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin;
+import com.facebook.react.ReactInstanceEventListener;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.modules.network.NetworkingModule;
import okhttp3.OkHttpClient;
-
public class ReactNativeFlipper {
public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) {
if (FlipperUtils.shouldEnableFlipper(context)) {
final FlipperClient client = AndroidFlipperClient.getInstance(context);
-
client.addPlugin(new InspectorFlipperPlugin(context, DescriptorMapping.withDefaults()));
client.addPlugin(new ReactFlipperPlugin());
client.addPlugin(new DatabasesFlipperPlugin(context));
client.addPlugin(new SharedPreferencesFlipperPlugin(context));
client.addPlugin(CrashReporterPlugin.getInstance());
-
NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin();
NetworkingModule.setCustomClientBuilder(
new NetworkingModule.CustomClientBuilder() {
@@ -45,13 +42,12 @@ public void apply(OkHttpClient.Builder builder) {
});
client.addPlugin(networkFlipperPlugin);
client.start();
-
// Fresco Plugin needs to ensure that ImagePipelineFactory is initialized
// Hence we run if after all native modules have been initialized
ReactContext reactContext = reactInstanceManager.getCurrentReactContext();
if (reactContext == null) {
reactInstanceManager.addReactInstanceEventListener(
- new ReactInstanceManager.ReactInstanceEventListener() {
+ new ReactInstanceEventListener() {
@Override
public void onReactContextInitialized(ReactContext reactContext) {
reactInstanceManager.removeReactInstanceEventListener(this);
@@ -69,4 +65,4 @@ public void run() {
}
}
}
-}
+}
\ No newline at end of file
diff --git a/template/template/android/app/src/main/AndroidManifest.xml b/template/template/android/app/src/main/AndroidManifest.xml
index 1cae0aad..7ba57ca1 100644
--- a/template/template/android/app/src/main/AndroidManifest.xml
+++ b/template/template/android/app/src/main/AndroidManifest.xml
@@ -9,15 +9,14 @@
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round"
android:allowBackup="false"
- android:theme="@style/AppTheme"
- android:usesCleartextTraffic="true"
- >
+ android:theme="@style/AppTheme">
+ android:windowSoftInputMode="adjustResize"
+ android:exported="true">
diff --git a/template/template/android/app/src/main/java/com/helloworld/MainActivity.java b/template/template/android/app/src/main/java/com/helloworld/MainActivity.java
index c7106d57..405d80a8 100644
--- a/template/template/android/app/src/main/java/com/helloworld/MainActivity.java
+++ b/template/template/android/app/src/main/java/com/helloworld/MainActivity.java
@@ -1,6 +1,8 @@
package com.helloworld;
import com.facebook.react.ReactActivity;
+import com.facebook.react.ReactActivityDelegate;
+import com.facebook.react.ReactRootView;
public class MainActivity extends ReactActivity {
@@ -12,4 +14,35 @@ public class MainActivity extends ReactActivity {
protected String getMainComponentName() {
return "HelloWorld";
}
+
+ /**
+ * Returns the instance of the {@link ReactActivityDelegate}. There the RootView is created and
+ * you can specify the renderer you wish to use - the new renderer (Fabric) or the old renderer
+ * (Paper).
+ */
+ @Override
+ protected ReactActivityDelegate createReactActivityDelegate() {
+ return new MainActivityDelegate(this, getMainComponentName());
+ }
+
+ public static class MainActivityDelegate extends ReactActivityDelegate {
+ public MainActivityDelegate(ReactActivity activity, String mainComponentName) {
+ 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;
+ }
+ }
}
diff --git a/template/template/android/app/src/main/java/com/helloworld/MainApplication.java b/template/template/android/app/src/main/java/com/helloworld/MainApplication.java
index e55c37b9..eedd1929 100644
--- a/template/template/android/app/src/main/java/com/helloworld/MainApplication.java
+++ b/template/template/android/app/src/main/java/com/helloworld/MainApplication.java
@@ -7,7 +7,9 @@
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
+import com.facebook.react.config.ReactFeatureFlags;
import com.facebook.soloader.SoLoader;
+import com.helloworld.newarchitecture.MainApplicationReactNativeHost;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
@@ -35,14 +37,23 @@ protected String getJSMainModuleName() {
}
};
+ private final ReactNativeHost mNewArchitectureNativeHost =
+ new MainApplicationReactNativeHost(this);
+
@Override
public ReactNativeHost getReactNativeHost() {
- return mReactNativeHost;
+ if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
+ return mNewArchitectureNativeHost;
+ } else {
+ return mReactNativeHost;
+ }
}
@Override
public void 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);
initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
}
diff --git a/template/template/android/app/src/main/java/com/helloworld/newarchitecture/MainApplicationReactNativeHost.java b/template/template/android/app/src/main/java/com/helloworld/newarchitecture/MainApplicationReactNativeHost.java
new file mode 100644
index 00000000..55473c3f
--- /dev/null
+++ b/template/template/android/app/src/main/java/com/helloworld/newarchitecture/MainApplicationReactNativeHost.java
@@ -0,0 +1,116 @@
+package com.helloworld.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.helloworld.BuildConfig;
+import com.helloworld.newarchitecture.components.MainComponentsRegistry;
+import com.helloworld.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.
+ *
+ * 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 getPackages() {
+ List 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 getJSIModules(
+ final ReactApplicationContext reactApplicationContext,
+ final JavaScriptContextHolder jsContext) {
+ final List 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 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;
+ }
+ };
+ }
+}
diff --git a/template/template/android/app/src/main/java/com/helloworld/newarchitecture/components/MainComponentsRegistry.java b/template/template/android/app/src/main/java/com/helloworld/newarchitecture/components/MainComponentsRegistry.java
new file mode 100644
index 00000000..c74d0cca
--- /dev/null
+++ b/template/template/android/app/src/main/java/com/helloworld/newarchitecture/components/MainComponentsRegistry.java
@@ -0,0 +1,36 @@
+package com.helloworld.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).
+ *
+ * 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);
+ }
+}
diff --git a/template/template/android/app/src/main/java/com/helloworld/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java b/template/template/android/app/src/main/java/com/helloworld/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java
new file mode 100644
index 00000000..8593b3bb
--- /dev/null
+++ b/template/template/android/app/src/main/java/com/helloworld/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java
@@ -0,0 +1,48 @@
+package com.helloworld.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).
+ *
+ *
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 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 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("helloworld_appmodules");
+ sIsSoLibraryLoaded = true;
+ }
+ }
+}
diff --git a/template/template/android/app/src/main/jni/Android.mk b/template/template/android/app/src/main/jni/Android.mk
new file mode 100644
index 00000000..cda13912
--- /dev/null
+++ b/template/template/android/app/src/main/jni/Android.mk
@@ -0,0 +1,48 @@
+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 := helloworld_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)
diff --git a/template/template/android/app/src/main/jni/MainApplicationModuleProvider.cpp b/template/template/android/app/src/main/jni/MainApplicationModuleProvider.cpp
new file mode 100644
index 00000000..0ac23cc6
--- /dev/null
+++ b/template/template/android/app/src/main/jni/MainApplicationModuleProvider.cpp
@@ -0,0 +1,24 @@
+#include "MainApplicationModuleProvider.h"
+
+#include
+
+namespace facebook {
+namespace react {
+
+std::shared_ptr MainApplicationModuleProvider(
+ const std::string moduleName,
+ const JavaTurboModule::InitParams ¶ms) {
+ // 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
diff --git a/template/template/android/app/src/main/jni/MainApplicationModuleProvider.h b/template/template/android/app/src/main/jni/MainApplicationModuleProvider.h
new file mode 100644
index 00000000..0fa43fa6
--- /dev/null
+++ b/template/template/android/app/src/main/jni/MainApplicationModuleProvider.h
@@ -0,0 +1,16 @@
+#pragma once
+
+#include
+#include
+
+#include
+
+namespace facebook {
+namespace react {
+
+std::shared_ptr MainApplicationModuleProvider(
+ const std::string moduleName,
+ const JavaTurboModule::InitParams ¶ms);
+
+} // namespace react
+} // namespace facebook
diff --git a/template/template/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.cpp b/template/template/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.cpp
new file mode 100644
index 00000000..dbbdc3d1
--- /dev/null
+++ b/template/template/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.cpp
@@ -0,0 +1,45 @@
+#include "MainApplicationTurboModuleManagerDelegate.h"
+#include "MainApplicationModuleProvider.h"
+
+namespace facebook {
+namespace react {
+
+jni::local_ref
+MainApplicationTurboModuleManagerDelegate::initHybrid(
+ jni::alias_ref) {
+ return makeCxxInstance();
+}
+
+void MainApplicationTurboModuleManagerDelegate::registerNatives() {
+ registerHybrid({
+ makeNativeMethod(
+ "initHybrid", MainApplicationTurboModuleManagerDelegate::initHybrid),
+ makeNativeMethod(
+ "canCreateTurboModule",
+ MainApplicationTurboModuleManagerDelegate::canCreateTurboModule),
+ });
+}
+
+std::shared_ptr
+MainApplicationTurboModuleManagerDelegate::getTurboModule(
+ const std::string name,
+ const std::shared_ptr jsInvoker) {
+ // Not implemented yet: provide pure-C++ NativeModules here.
+ return nullptr;
+}
+
+std::shared_ptr
+MainApplicationTurboModuleManagerDelegate::getTurboModule(
+ const std::string name,
+ const JavaTurboModule::InitParams ¶ms) {
+ return MainApplicationModuleProvider(name, params);
+}
+
+bool MainApplicationTurboModuleManagerDelegate::canCreateTurboModule(
+ std::string name) {
+ return getTurboModule(name, nullptr) != nullptr ||
+ getTurboModule(name, {.moduleName = name}) != nullptr;
+}
+
+} // namespace react
+} // namespace facebook
diff --git a/template/template/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h b/template/template/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h
new file mode 100644
index 00000000..25f27722
--- /dev/null
+++ b/template/template/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h
@@ -0,0 +1,38 @@
+#include
+#include
+
+#include
+#include
+
+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/helloworld/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate;";
+
+ static jni::local_ref initHybrid(jni::alias_ref);
+
+ static void registerNatives();
+
+ std::shared_ptr getTurboModule(
+ const std::string name,
+ const std::shared_ptr jsInvoker) override;
+ std::shared_ptr getTurboModule(
+ const std::string name,
+ const JavaTurboModule::InitParams ¶ms) 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
diff --git a/template/template/android/app/src/main/jni/MainComponentsRegistry.cpp b/template/template/android/app/src/main/jni/MainComponentsRegistry.cpp
new file mode 100644
index 00000000..8f7edffd
--- /dev/null
+++ b/template/template/android/app/src/main/jni/MainComponentsRegistry.cpp
@@ -0,0 +1,61 @@
+#include "MainComponentsRegistry.h"
+
+#include
+#include
+#include
+#include
+
+namespace facebook {
+namespace react {
+
+MainComponentsRegistry::MainComponentsRegistry(ComponentFactory *delegate) {}
+
+std::shared_ptr
+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::initHybrid(
+ jni::alias_ref,
+ 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(registry);
+
+ mutableRegistry->setFallbackComponentDescriptor(
+ std::make_shared(
+ ComponentDescriptorParameters{
+ eventDispatcher, contextContainer, nullptr}));
+
+ return registry;
+ };
+
+ delegate->buildRegistryFunction = buildRegistryFunction;
+ return instance;
+}
+
+void MainComponentsRegistry::registerNatives() {
+ registerHybrid({
+ makeNativeMethod("initHybrid", MainComponentsRegistry::initHybrid),
+ });
+}
+
+} // namespace react
+} // namespace facebook
diff --git a/template/template/android/app/src/main/jni/MainComponentsRegistry.h b/template/template/android/app/src/main/jni/MainComponentsRegistry.h
new file mode 100644
index 00000000..d61cbffa
--- /dev/null
+++ b/template/template/android/app/src/main/jni/MainComponentsRegistry.h
@@ -0,0 +1,32 @@
+#pragma once
+
+#include
+#include
+#include
+#include
+
+namespace facebook {
+namespace react {
+
+class MainComponentsRegistry
+ : public facebook::jni::HybridClass {
+ public:
+ // Adapt it to the package you used for your Java class.
+ constexpr static auto kJavaDescriptor =
+ "Lcom/helloworld/newarchitecture/components/MainComponentsRegistry;";
+
+ static void registerNatives();
+
+ MainComponentsRegistry(ComponentFactory *delegate);
+
+ private:
+ static std::shared_ptr
+ sharedProviderRegistry();
+
+ static jni::local_ref initHybrid(
+ jni::alias_ref,
+ ComponentFactory *delegate);
+};
+
+} // namespace react
+} // namespace facebook
diff --git a/template/template/android/app/src/main/jni/OnLoad.cpp b/template/template/android/app/src/main/jni/OnLoad.cpp
new file mode 100644
index 00000000..c569b6e8
--- /dev/null
+++ b/template/template/android/app/src/main/jni/OnLoad.cpp
@@ -0,0 +1,11 @@
+#include
+#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();
+ });
+}
diff --git a/template/template/android/app/src/main/res/drawable/rn_edit_text_material.xml b/template/template/android/app/src/main/res/drawable/rn_edit_text_material.xml
new file mode 100644
index 00000000..f35d9962
--- /dev/null
+++ b/template/template/android/app/src/main/res/drawable/rn_edit_text_material.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/template/template/android/app/src/main/res/values/strings.xml b/template/template/android/app/src/main/res/values/strings.xml
index b89cc148..bd9de66b 100644
--- a/template/template/android/app/src/main/res/values/strings.xml
+++ b/template/template/android/app/src/main/res/values/strings.xml
@@ -1,3 +1,3 @@
- HelloWorld
+ helloworld
diff --git a/template/template/android/app/src/main/res/values/styles.xml b/template/template/android/app/src/main/res/values/styles.xml
index 24bc0613..7ba83a2a 100644
--- a/template/template/android/app/src/main/res/values/styles.xml
+++ b/template/template/android/app/src/main/res/values/styles.xml
@@ -3,6 +3,7 @@
diff --git a/template/template/android/build.gradle b/template/template/android/build.gradle
index 65098950..c9bc539d 100644
--- a/template/template/android/build.gradle
+++ b/template/template/android/build.gradle
@@ -1,19 +1,30 @@
+import org.apache.tools.ant.taskdefs.condition.Os
+
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext {
- buildToolsVersion = "30.0.2"
+ buildToolsVersion = "31.0.0"
minSdkVersion = 21
- compileSdkVersion = 30
- targetSdkVersion = 30
- ndkVersion = "21.4.7075529"
+ compileSdkVersion = 31
+ targetSdkVersion = 31
+
+ if (System.properties['os.arch'] == "aarch64") {
+ // For M1 Users we need to use the NDK 24 which added support for aarch64
+ ndkVersion = "24.0.8215888"
+ } else {
+ // Otherwise we default to the side-by-side NDK version from AGP.
+ ndkVersion = "21.4.7075529"
+ }
}
repositories {
google()
mavenCentral()
}
dependencies {
- classpath("com.android.tools.build:gradle:4.2.2")
+ classpath("com.android.tools.build:gradle:7.1.1")
+ classpath("com.facebook.react:react-native-gradle-plugin")
+ classpath("de.undercouch:gradle-download-task:5.0.1")
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
@@ -21,8 +32,6 @@ buildscript {
allprojects {
repositories {
- mavenCentral()
- mavenLocal()
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url("$rootDir/../node_modules/react-native/android")
@@ -31,7 +40,13 @@ allprojects {
// 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 'https://www.jitpack.io' }
}
diff --git a/template/template/android/gradle.properties b/template/template/android/gradle.properties
index cdb4c211..fa4feae5 100644
--- a/template/template/android/gradle.properties
+++ b/template/template/android/gradle.properties
@@ -9,8 +9,8 @@
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
-# Default value: -Xmx10248m -XX:MaxPermSize=256m
-# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
+# Default value: -Xmx512m -XX:MaxMetaspaceSize=256m
+org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
@@ -25,4 +25,16 @@ android.useAndroidX=true
android.enableJetifier=true
# Version of flipper SDK to use with React Native
-FLIPPER_VERSION=0.99.0
+FLIPPER_VERSION=0.125.0
+
+# Use this property to specify which architecture you want to build.
+# You can also override it from the CLI using
+# ./gradlew -PreactNativeArchitectures=x86_64
+reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64
+
+# Use this property to enable support to the new architecture.
+# This will allow you to use TurboModules and the Fabric render in
+# your application. You should enable this flag either if you want
+# to write custom TurboModules/Fabric components OR use libraries that
+# are providing them.
+newArchEnabled=false
diff --git a/template/template/android/gradle/wrapper/gradle-wrapper.jar b/template/template/android/gradle/wrapper/gradle-wrapper.jar
index e708b1c0..7454180f 100644
Binary files a/template/template/android/gradle/wrapper/gradle-wrapper.jar and b/template/template/android/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/template/template/android/gradle/wrapper/gradle-wrapper.properties b/template/template/android/gradle/wrapper/gradle-wrapper.properties
index 7665b0fa..669386b8 100644
--- a/template/template/android/gradle/wrapper/gradle-wrapper.properties
+++ b/template/template/android/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/template/template/android/gradlew b/template/template/android/gradlew
index 4f906e0c..1b6c7873 100755
--- a/template/template/android/gradlew
+++ b/template/template/android/gradlew
@@ -1,7 +1,7 @@
-#!/usr/bin/env sh
+#!/bin/sh
#
-# Copyright 2015 the original author or authors.
+# Copyright © 2015-2021 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -17,67 +17,101 @@
#
##############################################################################
-##
-## Gradle start up script for UN*X
-##
+#
+# Gradle start up script for POSIX generated by Gradle.
+#
+# Important for running:
+#
+# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+# noncompliant, but you have some other compliant shell such as ksh or
+# bash, then to run this script, type that shell name before the whole
+# command line, like:
+#
+# ksh Gradle
+#
+# Busybox and similar reduced shells will NOT work, because this script
+# requires all of these POSIX shell features:
+# * functions;
+# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+# * compound commands having a testable exit status, especially «case»;
+# * various built-in commands including «command», «set», and «ulimit».
+#
+# Important for patching:
+#
+# (2) This script targets any POSIX shell, so it avoids extensions provided
+# by Bash, Ksh, etc; in particular arrays are avoided.
+#
+# The "traditional" practice of packing multiple parameters into a
+# space-separated string is a well documented source of bugs and security
+# problems, so this is (mostly) avoided, by progressively accumulating
+# options in "$@", and eventually passing that to Java.
+#
+# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
+# see the in-line comments for details.
+#
+# There are tweaks for specific operating systems such as AIX, CygWin,
+# Darwin, MinGW, and NonStop.
+#
+# (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
+# within the Gradle project.
+#
+# You can find Gradle at https://github.com/gradle/gradle/.
+#
##############################################################################
# Attempt to set APP_HOME
+
# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
- ls=`ls -ld "$PRG"`
- link=`expr "$ls" : '.*-> \(.*\)$'`
- if expr "$link" : '/.*' > /dev/null; then
- PRG="$link"
- else
- PRG=`dirname "$PRG"`"/$link"
- fi
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+ APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
+ [ -h "$app_path" ]
+do
+ ls=$( ls -ld "$app_path" )
+ link=${ls#*' -> '}
+ case $link in #(
+ /*) app_path=$link ;; #(
+ *) app_path=$APP_HOME$link ;;
+ esac
done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >/dev/null
-APP_HOME="`pwd -P`"
-cd "$SAVED" >/dev/null
+
+APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
+APP_BASE_NAME=${0##*/}
# 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"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
+MAX_FD=maximum
warn () {
echo "$*"
-}
+} >&2
die () {
echo
echo "$*"
echo
exit 1
-}
+} >&2
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
-case "`uname`" in
- CYGWIN* )
- cygwin=true
- ;;
- Darwin* )
- darwin=true
- ;;
- MINGW* )
- msys=true
- ;;
- NONSTOP* )
- nonstop=true
- ;;
+case "$( uname )" in #(
+ CYGWIN* ) cygwin=true ;; #(
+ Darwin* ) darwin=true ;; #(
+ MSYS* | MINGW* ) msys=true ;; #(
+ NONSTOP* ) nonstop=true ;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
@@ -87,9 +121,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
- JAVACMD="$JAVA_HOME/jre/sh/java"
+ JAVACMD=$JAVA_HOME/jre/sh/java
else
- JAVACMD="$JAVA_HOME/bin/java"
+ JAVACMD=$JAVA_HOME/bin/java
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
@@ -98,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
- JAVACMD="java"
+ JAVACMD=java
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
@@ -106,80 +140,95 @@ location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
- MAX_FD_LIMIT=`ulimit -H -n`
- if [ $? -eq 0 ] ; then
- if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
- MAX_FD="$MAX_FD_LIMIT"
- fi
- ulimit -n $MAX_FD
- if [ $? -ne 0 ] ; then
- warn "Could not set maximum file descriptor limit: $MAX_FD"
- fi
- else
- warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
- fi
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+ case $MAX_FD in #(
+ max*)
+ MAX_FD=$( ulimit -H -n ) ||
+ warn "Could not query maximum file descriptor limit"
+ esac
+ case $MAX_FD in #(
+ '' | soft) :;; #(
+ *)
+ ulimit -n "$MAX_FD" ||
+ warn "Could not set maximum file descriptor limit to $MAX_FD"
+ esac
fi
-# For Darwin, add options to specify how the application appears in the dock
-if $darwin; then
- GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
-fi
+# Collect all arguments for the java command, stacking in reverse order:
+# * args from the command line
+# * the main class name
+# * -classpath
+# * -D...appname settings
+# * --module-path (only if needed)
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
# For Cygwin or MSYS, switch paths to Windows format before running java
-if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
- APP_HOME=`cygpath --path --mixed "$APP_HOME"`
- CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
-
- JAVACMD=`cygpath --unix "$JAVACMD"`
-
- # We build the pattern for arguments to be converted via cygpath
- ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
- SEP=""
- for dir in $ROOTDIRSRAW ; do
- ROOTDIRS="$ROOTDIRS$SEP$dir"
- SEP="|"
- done
- OURCYGPATTERN="(^($ROOTDIRS))"
- # Add a user-defined pattern to the cygpath arguments
- if [ "$GRADLE_CYGPATTERN" != "" ] ; then
- OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
- fi
+if "$cygwin" || "$msys" ; then
+ APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+ CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+ JAVACMD=$( cygpath --unix "$JAVACMD" )
+
# Now convert the arguments - kludge to limit ourselves to /bin/sh
- i=0
- for arg in "$@" ; do
- CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
- CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
-
- if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
- eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
- else
- eval `echo args$i`="\"$arg\""
+ for arg do
+ if
+ case $arg in #(
+ -*) false ;; # don't mess with options #(
+ /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
+ [ -e "$t" ] ;; #(
+ *) false ;;
+ esac
+ then
+ arg=$( cygpath --path --ignore --mixed "$arg" )
fi
- i=`expr $i + 1`
+ # Roll the args list around exactly as many times as the number of
+ # args, so each arg winds up back in the position where it started, but
+ # possibly modified.
+ #
+ # NB: a `for` loop captures its iteration list before it begins, so
+ # changing the positional parameters here affects neither the number of
+ # iterations, nor the values presented in `arg`.
+ shift # remove old arg
+ set -- "$@" "$arg" # push replacement arg
done
- case $i in
- 0) set -- ;;
- 1) set -- "$args0" ;;
- 2) set -- "$args0" "$args1" ;;
- 3) set -- "$args0" "$args1" "$args2" ;;
- 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
- 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
- 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
- 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
- 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
- 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
- esac
fi
-# Escape application args
-save () {
- for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
- echo " "
-}
-APP_ARGS=`save "$@"`
+# Collect all arguments for the java command;
+# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
+# shell script including quotes and variable substitutions, so put them in
+# double quotes to make sure that they get re-expanded; and
+# * put everything else in single quotes, so that it's not re-expanded.
+
+set -- \
+ "-Dorg.gradle.appname=$APP_BASE_NAME" \
+ -classpath "$CLASSPATH" \
+ org.gradle.wrapper.GradleWrapperMain \
+ "$@"
+
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+# set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
-# Collect all arguments for the java command, following the shell quoting and substitution rules
-eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+eval "set -- $(
+ printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+ xargs -n1 |
+ sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+ tr '\n' ' '
+ )" '"$@"'
exec "$JAVACMD" "$@"
diff --git a/template/template/android/settings.gradle b/template/template/android/settings.gradle
index e50c29d6..bd838b9c 100644
--- a/template/template/android/settings.gradle
+++ b/template/template/android/settings.gradle
@@ -1,3 +1,11 @@
rootProject.name = 'HelloWorld'
apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)
include ':app'
+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')
+}
diff --git a/template/template/ios/HelloWorld.xcodeproj/project.pbxproj b/template/template/ios/HelloWorld.xcodeproj/project.pbxproj
index 068d576e..df7f43e3 100644
--- a/template/template/ios/HelloWorld.xcodeproj/project.pbxproj
+++ b/template/template/ios/HelloWorld.xcodeproj/project.pbxproj
@@ -8,12 +8,12 @@
/* Begin PBXBuildFile section */
00E356F31AD99517003FC87E /* HelloWorldTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* HelloWorldTests.m */; };
- 0AB820A052BE503FDEE3F64C /* libPods-HelloWorld.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E69D2C44C64A5690249752D /* libPods-HelloWorld.a */; };
- 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
+ 0C80B921A6F3F58F76C31292 /* libPods-HelloWorld.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DCACB8F33CDC322A6C60F78 /* libPods-HelloWorld.a */; };
+ 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
+ 7699B88040F8A987B510C191 /* libPods-HelloWorld-HelloWorldTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 19F6CBCC0A4E27FBF8BF4A61 /* libPods-HelloWorld-HelloWorldTests.a */; };
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
- EAD86F3A14EC070E85026FD7 /* libPods-HelloWorld-HelloWorldTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 672EC33A66006E4EE6C3E58F /* libPods-HelloWorld-HelloWorldTests.a */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -32,17 +32,17 @@
00E356F21AD99517003FC87E /* HelloWorldTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HelloWorldTests.m; sourceTree = ""; };
13B07F961A680F5B00A75B9A /* HelloWorld.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloWorld.app; sourceTree = BUILT_PRODUCTS_DIR; };
13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = HelloWorld/AppDelegate.h; sourceTree = ""; };
- 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = HelloWorld/AppDelegate.m; sourceTree = ""; };
+ 13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = HelloWorld/AppDelegate.mm; sourceTree = ""; };
13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = HelloWorld/Images.xcassets; sourceTree = ""; };
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = HelloWorld/Info.plist; sourceTree = ""; };
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = HelloWorld/main.m; sourceTree = ""; };
- 5E69D2C44C64A5690249752D /* libPods-HelloWorld.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-HelloWorld.a"; sourceTree = BUILT_PRODUCTS_DIR; };
- 63F7C8B6929120F00250AB6B /* Pods-HelloWorld-HelloWorldTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HelloWorld-HelloWorldTests.release.xcconfig"; path = "Target Support Files/Pods-HelloWorld-HelloWorldTests/Pods-HelloWorld-HelloWorldTests.release.xcconfig"; sourceTree = ""; };
- 672EC33A66006E4EE6C3E58F /* libPods-HelloWorld-HelloWorldTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-HelloWorld-HelloWorldTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
- 67F69B5C1AF8C86EE5A348FF /* Pods-HelloWorld.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HelloWorld.debug.xcconfig"; path = "Target Support Files/Pods-HelloWorld/Pods-HelloWorld.debug.xcconfig"; sourceTree = ""; };
+ 19F6CBCC0A4E27FBF8BF4A61 /* libPods-HelloWorld-HelloWorldTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-HelloWorld-HelloWorldTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 3B4392A12AC88292D35C810B /* Pods-HelloWorld.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HelloWorld.debug.xcconfig"; path = "Target Support Files/Pods-HelloWorld/Pods-HelloWorld.debug.xcconfig"; sourceTree = ""; };
+ 5709B34CF0A7D63546082F79 /* Pods-HelloWorld.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HelloWorld.release.xcconfig"; path = "Target Support Files/Pods-HelloWorld/Pods-HelloWorld.release.xcconfig"; sourceTree = ""; };
+ 5B7EB9410499542E8C5724F5 /* Pods-HelloWorld-HelloWorldTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HelloWorld-HelloWorldTests.debug.xcconfig"; path = "Target Support Files/Pods-HelloWorld-HelloWorldTests/Pods-HelloWorld-HelloWorldTests.debug.xcconfig"; sourceTree = ""; };
+ 5DCACB8F33CDC322A6C60F78 /* libPods-HelloWorld.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-HelloWorld.a"; sourceTree = BUILT_PRODUCTS_DIR; };
81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = HelloWorld/LaunchScreen.storyboard; sourceTree = ""; };
- 927014FE8BB7F3F5E8A28AEA /* Pods-HelloWorld-HelloWorldTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HelloWorld-HelloWorldTests.debug.xcconfig"; path = "Target Support Files/Pods-HelloWorld-HelloWorldTests/Pods-HelloWorld-HelloWorldTests.debug.xcconfig"; sourceTree = ""; };
- B8DD2CECD354210A4096BFC6 /* Pods-HelloWorld.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HelloWorld.release.xcconfig"; path = "Target Support Files/Pods-HelloWorld/Pods-HelloWorld.release.xcconfig"; sourceTree = ""; };
+ 89C6BE57DB24E9ADA2F236DE /* Pods-HelloWorld-HelloWorldTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HelloWorld-HelloWorldTests.release.xcconfig"; path = "Target Support Files/Pods-HelloWorld-HelloWorldTests/Pods-HelloWorld-HelloWorldTests.release.xcconfig"; sourceTree = ""; };
ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
/* End PBXFileReference section */
@@ -51,7 +51,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- EAD86F3A14EC070E85026FD7 /* libPods-HelloWorld-HelloWorldTests.a in Frameworks */,
+ 7699B88040F8A987B510C191 /* libPods-HelloWorld-HelloWorldTests.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -59,25 +59,13 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 0AB820A052BE503FDEE3F64C /* libPods-HelloWorld.a in Frameworks */,
+ 0C80B921A6F3F58F76C31292 /* libPods-HelloWorld.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
- 007BB2C29E9D6D1A53F4CD99 /* Pods */ = {
- isa = PBXGroup;
- children = (
- 67F69B5C1AF8C86EE5A348FF /* Pods-HelloWorld.debug.xcconfig */,
- B8DD2CECD354210A4096BFC6 /* Pods-HelloWorld.release.xcconfig */,
- 927014FE8BB7F3F5E8A28AEA /* Pods-HelloWorld-HelloWorldTests.debug.xcconfig */,
- 63F7C8B6929120F00250AB6B /* Pods-HelloWorld-HelloWorldTests.release.xcconfig */,
- );
- name = Pods;
- path = Pods;
- sourceTree = "";
- };
00E356EF1AD99517003FC87E /* HelloWorldTests */ = {
isa = PBXGroup;
children = (
@@ -99,7 +87,7 @@
isa = PBXGroup;
children = (
13B07FAF1A68108700A75B9A /* AppDelegate.h */,
- 13B07FB01A68108700A75B9A /* AppDelegate.m */,
+ 13B07FB01A68108700A75B9A /* AppDelegate.mm */,
13B07FB51A68108700A75B9A /* Images.xcassets */,
13B07FB61A68108700A75B9A /* Info.plist */,
81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */,
@@ -112,8 +100,8 @@
isa = PBXGroup;
children = (
ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
- 5E69D2C44C64A5690249752D /* libPods-HelloWorld.a */,
- 672EC33A66006E4EE6C3E58F /* libPods-HelloWorld-HelloWorldTests.a */,
+ 5DCACB8F33CDC322A6C60F78 /* libPods-HelloWorld.a */,
+ 19F6CBCC0A4E27FBF8BF4A61 /* libPods-HelloWorld-HelloWorldTests.a */,
);
name = Frameworks;
sourceTree = "";
@@ -133,7 +121,7 @@
00E356EF1AD99517003FC87E /* HelloWorldTests */,
83CBBA001A601CBA00E9B192 /* Products */,
2D16E6871FA4F8E400B85C8A /* Frameworks */,
- 007BB2C29E9D6D1A53F4CD99 /* Pods */,
+ BBD78D7AC51CEA395F1C20DB /* Pods */,
);
indentWidth = 2;
sourceTree = "";
@@ -149,6 +137,17 @@
name = Products;
sourceTree = "";
};
+ BBD78D7AC51CEA395F1C20DB /* Pods */ = {
+ isa = PBXGroup;
+ children = (
+ 3B4392A12AC88292D35C810B /* Pods-HelloWorld.debug.xcconfig */,
+ 5709B34CF0A7D63546082F79 /* Pods-HelloWorld.release.xcconfig */,
+ 5B7EB9410499542E8C5724F5 /* Pods-HelloWorld-HelloWorldTests.debug.xcconfig */,
+ 89C6BE57DB24E9ADA2F236DE /* Pods-HelloWorld-HelloWorldTests.release.xcconfig */,
+ );
+ path = Pods;
+ sourceTree = "";
+ };
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
@@ -156,12 +155,12 @@
isa = PBXNativeTarget;
buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "HelloWorldTests" */;
buildPhases = (
- EBB9738320B253A1EEB4E89D /* [CP] Check Pods Manifest.lock */,
+ A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */,
00E356EA1AD99517003FC87E /* Sources */,
00E356EB1AD99517003FC87E /* Frameworks */,
00E356EC1AD99517003FC87E /* Resources */,
- 096951AE7FF0EE5561EFAB30 /* [CP] Embed Pods Frameworks */,
- F9A542E39D54678EFB440E1D /* [CP] Copy Pods Resources */,
+ C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */,
+ F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@@ -177,14 +176,14 @@
isa = PBXNativeTarget;
buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "HelloWorld" */;
buildPhases = (
- 261B465DCC102A4832398CB6 /* [CP] Check Pods Manifest.lock */,
+ C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */,
FD10A7F022414F080027D42C /* Start Packager */,
13B07F871A680F5B00A75B9A /* Sources */,
13B07F8C1A680F5B00A75B9A /* Frameworks */,
13B07F8E1A680F5B00A75B9A /* Resources */,
00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
- A5868401F5F3CB14071FB5DC /* [CP] Embed Pods Frameworks */,
- 699669C2D0C9EEC909428E23 /* [CP] Copy Pods Resources */,
+ 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */,
+ E235C05ADACE081382539298 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@@ -257,32 +256,34 @@
files = (
);
inputPaths = (
+ "$(SRCROOT)/.xcode.env.local",
+ "$(SRCROOT)/.xcode.env",
);
name = "Bundle React Native code and images";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "set -e\n\nexport NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh\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";
};
- 096951AE7FF0EE5561EFAB30 /* [CP] Embed Pods Frameworks */ = {
+ 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-HelloWorld-HelloWorldTests/Pods-HelloWorld-HelloWorldTests-frameworks-${CONFIGURATION}-input-files.xcfilelist",
+ "${PODS_ROOT}/Target Support Files/Pods-HelloWorld/Pods-HelloWorld-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Embed Pods Frameworks";
outputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-HelloWorld-HelloWorldTests/Pods-HelloWorld-HelloWorldTests-frameworks-${CONFIGURATION}-output-files.xcfilelist",
+ "${PODS_ROOT}/Target Support Files/Pods-HelloWorld/Pods-HelloWorld-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HelloWorld-HelloWorldTests/Pods-HelloWorld-HelloWorldTests-frameworks.sh\"\n";
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HelloWorld/Pods-HelloWorld-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
- 261B465DCC102A4832398CB6 /* [CP] Check Pods Manifest.lock */ = {
+ A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -297,70 +298,70 @@
outputFileListPaths = (
);
outputPaths = (
- "$(DERIVED_FILE_DIR)/Pods-HelloWorld-checkManifestLockResult.txt",
+ "$(DERIVED_FILE_DIR)/Pods-HelloWorld-HelloWorldTests-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
- 699669C2D0C9EEC909428E23 /* [CP] Copy Pods Resources */ = {
+ C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-HelloWorld/Pods-HelloWorld-resources-${CONFIGURATION}-input-files.xcfilelist",
);
- name = "[CP] Copy Pods Resources";
+ inputPaths = (
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+ "${PODS_ROOT}/Manifest.lock",
+ );
+ name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-HelloWorld/Pods-HelloWorld-resources-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ outputPaths = (
+ "$(DERIVED_FILE_DIR)/Pods-HelloWorld-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HelloWorld/Pods-HelloWorld-resources.sh\"\n";
+ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
- A5868401F5F3CB14071FB5DC /* [CP] Embed Pods Frameworks */ = {
+ C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-HelloWorld/Pods-HelloWorld-frameworks-${CONFIGURATION}-input-files.xcfilelist",
+ "${PODS_ROOT}/Target Support Files/Pods-HelloWorld-HelloWorldTests/Pods-HelloWorld-HelloWorldTests-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Embed Pods Frameworks";
outputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-HelloWorld/Pods-HelloWorld-frameworks-${CONFIGURATION}-output-files.xcfilelist",
+ "${PODS_ROOT}/Target Support Files/Pods-HelloWorld-HelloWorldTests/Pods-HelloWorld-HelloWorldTests-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HelloWorld/Pods-HelloWorld-frameworks.sh\"\n";
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HelloWorld-HelloWorldTests/Pods-HelloWorld-HelloWorldTests-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
- EBB9738320B253A1EEB4E89D /* [CP] Check Pods Manifest.lock */ = {
+ E235C05ADACE081382539298 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-HelloWorld/Pods-HelloWorld-resources-${CONFIGURATION}-input-files.xcfilelist",
);
- inputPaths = (
- "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
- "${PODS_ROOT}/Manifest.lock",
- );
- name = "[CP] Check Pods Manifest.lock";
+ name = "[CP] Copy Pods Resources";
outputFileListPaths = (
- );
- outputPaths = (
- "$(DERIVED_FILE_DIR)/Pods-HelloWorld-HelloWorldTests-checkManifestLockResult.txt",
+ "${PODS_ROOT}/Target Support Files/Pods-HelloWorld/Pods-HelloWorld-resources-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HelloWorld/Pods-HelloWorld-resources.sh\"\n";
showEnvVarsInLog = 0;
};
- F9A542E39D54678EFB440E1D /* [CP] Copy Pods Resources */ = {
+ F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -411,7 +412,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */,
+ 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,
13B07FC11A68108700A75B9A /* main.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -429,7 +430,7 @@
/* Begin XCBuildConfiguration section */
00E356F61AD99517003FC87E /* Debug */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 927014FE8BB7F3F5E8A28AEA /* Pods-HelloWorld-HelloWorldTests.debug.xcconfig */;
+ baseConfigurationReference = 5B7EB9410499542E8C5724F5 /* Pods-HelloWorld-HelloWorldTests.debug.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
GCC_PREPROCESSOR_DEFINITIONS = (
@@ -437,7 +438,7 @@
"$(inherited)",
);
INFOPLIST_FILE = HelloWorldTests/Info.plist;
- IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.4;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@@ -456,12 +457,12 @@
};
00E356F71AD99517003FC87E /* Release */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 63F7C8B6929120F00250AB6B /* Pods-HelloWorld-HelloWorldTests.release.xcconfig */;
+ baseConfigurationReference = 89C6BE57DB24E9ADA2F236DE /* Pods-HelloWorld-HelloWorldTests.release.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
COPY_PHASE_STRIP = NO;
INFOPLIST_FILE = HelloWorldTests/Info.plist;
- IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.4;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@@ -480,7 +481,7 @@
};
13B07F941A680F5B00A75B9A /* Debug */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 67F69B5C1AF8C86EE5A348FF /* Pods-HelloWorld.debug.xcconfig */;
+ baseConfigurationReference = 3B4392A12AC88292D35C810B /* Pods-HelloWorld.debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
@@ -506,7 +507,7 @@
};
13B07F951A680F5B00A75B9A /* Release */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = B8DD2CECD354210A4096BFC6 /* Pods-HelloWorld.release.xcconfig */;
+ baseConfigurationReference = 5709B34CF0A7D63546082F79 /* Pods-HelloWorld.release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
@@ -533,7 +534,7 @@
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LANGUAGE_STANDARD = "c++17";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
@@ -561,7 +562,7 @@
COPY_PHASE_STRIP = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
- "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "arm64 ";
+ "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
@@ -577,7 +578,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.4;
LD_RUNPATH_SEARCH_PATHS = (
/usr/lib/swift,
"$(inherited)",
@@ -585,11 +586,17 @@
LIBRARY_SEARCH_PATHS = (
"\"$(SDKROOT)/usr/lib/swift\"",
"\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
- "\"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)\"",
"\"$(inherited)\"",
);
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
+ OTHER_CPLUSPLUSFLAGS = (
+ "$(OTHER_CFLAGS)",
+ "-DFOLLY_NO_CONFIG",
+ "-DFOLLY_MOBILE=1",
+ "-DFOLLY_USE_LIBCPP=1",
+ );
+ REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
SDKROOT = iphoneos;
};
name = Debug;
@@ -599,7 +606,7 @@
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LANGUAGE_STANDARD = "c++17";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
@@ -627,7 +634,7 @@
COPY_PHASE_STRIP = YES;
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
- "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "arm64 ";
+ "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
@@ -636,7 +643,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.4;
LD_RUNPATH_SEARCH_PATHS = (
/usr/lib/swift,
"$(inherited)",
@@ -644,10 +651,16 @@
LIBRARY_SEARCH_PATHS = (
"\"$(SDKROOT)/usr/lib/swift\"",
"\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
- "\"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)\"",
"\"$(inherited)\"",
);
MTL_ENABLE_DEBUG_INFO = NO;
+ OTHER_CPLUSPLUSFLAGS = (
+ "$(OTHER_CFLAGS)",
+ "-DFOLLY_NO_CONFIG",
+ "-DFOLLY_MOBILE=1",
+ "-DFOLLY_USE_LIBCPP=1",
+ );
+ REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
SDKROOT = iphoneos;
VALIDATE_PRODUCT = YES;
};
diff --git a/template/template/ios/HelloWorld/AppDelegate.m b/template/template/ios/HelloWorld/AppDelegate.m
deleted file mode 100644
index 59b62377..00000000
--- a/template/template/ios/HelloWorld/AppDelegate.m
+++ /dev/null
@@ -1,62 +0,0 @@
-#import "AppDelegate.h"
-
-#import
-#import
-#import
-
-#ifdef FB_SONARKIT_ENABLED
-#import
-#import
-#import
-#import
-#import
-#import
-
-static void InitializeFlipper(UIApplication *application) {
- FlipperClient *client = [FlipperClient sharedClient];
- SKDescriptorMapper *layoutDescriptorMapper = [[SKDescriptorMapper alloc] initWithDefaults];
- [client addPlugin:[[FlipperKitLayoutPlugin alloc] initWithRootNode:application withDescriptorMapper:layoutDescriptorMapper]];
- [client addPlugin:[[FKUserDefaultsPlugin alloc] initWithSuiteName:nil]];
- [client addPlugin:[FlipperKitReactPlugin new]];
- [client addPlugin:[[FlipperKitNetworkPlugin alloc] initWithNetworkAdapter:[SKIOSNetworkAdapter new]]];
- [client start];
-}
-#endif
-
-@implementation AppDelegate
-
-- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
-{
-#ifdef FB_SONARKIT_ENABLED
- InitializeFlipper(application);
-#endif
-
- RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
- RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge
- moduleName:@"HelloWorld"
- initialProperties:nil];
-
- 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;
-}
-
-- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
-{
-#if DEBUG
- return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
-#else
- return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
-#endif
-}
-
-@end
diff --git a/template/template/ios/HelloWorld/AppDelegate.mm b/template/template/ios/HelloWorld/AppDelegate.mm
new file mode 100644
index 00000000..28475b9c
--- /dev/null
+++ b/template/template/ios/HelloWorld/AppDelegate.mm
@@ -0,0 +1,133 @@
+#import "AppDelegate.h"
+
+#import
+#import
+#import
+
+#import
+
+#if RCT_NEW_ARCH_ENABLED
+#import
+#import
+#import
+#import
+#import
+#import
+
+#import
+
+static NSString *const kRNConcurrentRoot = @"concurrentRoot";
+
+@interface AppDelegate () {
+ RCTTurboModuleManager *_turboModuleManager;
+ RCTSurfacePresenterBridgeAdapter *_bridgeAdapter;
+ std::shared_ptr _reactNativeConfig;
+ facebook::react::ContextContainer::Shared _contextContainer;
+}
+@end
+#endif
+
+@implementation AppDelegate
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
+{
+ RCTAppSetupPrepareApp(application);
+
+ RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
+
+#if RCT_NEW_ARCH_ENABLED
+ _contextContainer = std::make_shared();
+ _reactNativeConfig = std::make_shared();
+ _contextContainer->insert("ReactNativeConfig", _reactNativeConfig);
+ _bridgeAdapter = [[RCTSurfacePresenterBridgeAdapter alloc] initWithBridge:bridge contextContainer:_contextContainer];
+ bridge.surfacePresenter = _bridgeAdapter.surfacePresenter;
+#endif
+
+ NSDictionary *initProps = [self prepareInitialProps];
+ UIView *rootView = RCTAppSetupDefaultRootView(bridge, @"HelloWorld", 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
+{
+#if DEBUG
+ return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"];
+#else
+ return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
+#endif
+}
+
+#if RCT_NEW_ARCH_ENABLED
+
+#pragma mark - RCTCxxBridgeDelegate
+
+- (std::unique_ptr)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)getTurboModule:(const std::string &)name
+ jsInvoker:(std::shared_ptr)jsInvoker
+{
+ return nullptr;
+}
+
+- (std::shared_ptr)getTurboModule:(const std::string &)name
+ initParams:
+ (const facebook::react::ObjCTurboModule::InitParams &)params
+{
+ return nullptr;
+}
+
+- (id)getModuleInstanceFromClass:(Class)moduleClass
+{
+ return RCTAppSetupDefaultModuleFromClass(moduleClass);
+}
+
+#endif
+
+@end
diff --git a/template/template/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Contents.json b/template/template/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Contents.json
index 118c98f7..81213230 100644
--- a/template/template/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Contents.json
+++ b/template/template/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Contents.json
@@ -2,37 +2,52 @@
"images" : [
{
"idiom" : "iphone",
- "size" : "29x29",
- "scale" : "2x"
+ "scale" : "2x",
+ "size" : "20x20"
},
{
"idiom" : "iphone",
- "size" : "29x29",
- "scale" : "3x"
+ "scale" : "3x",
+ "size" : "20x20"
},
{
"idiom" : "iphone",
- "size" : "40x40",
- "scale" : "2x"
+ "scale" : "2x",
+ "size" : "29x29"
},
{
"idiom" : "iphone",
- "size" : "40x40",
- "scale" : "3x"
+ "scale" : "3x",
+ "size" : "29x29"
},
{
"idiom" : "iphone",
- "size" : "60x60",
- "scale" : "2x"
+ "scale" : "2x",
+ "size" : "40x40"
},
{
"idiom" : "iphone",
- "size" : "60x60",
- "scale" : "3x"
+ "scale" : "3x",
+ "size" : "40x40"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "60x60"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "3x",
+ "size" : "60x60"
+ },
+ {
+ "idiom" : "ios-marketing",
+ "scale" : "1x",
+ "size" : "1024x1024"
}
],
"info" : {
- "version" : 1,
- "author" : "xcode"
+ "author" : "xcode",
+ "version" : 1
}
-}
\ No newline at end of file
+}
diff --git a/template/template/ios/HelloWorld/LaunchScreen copy.storyboard b/template/template/ios/HelloWorld/LaunchScreen copy.storyboard
new file mode 100644
index 00000000..e13962e9
--- /dev/null
+++ b/template/template/ios/HelloWorld/LaunchScreen copy.storyboard
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/template/template/ios/HelloWorld/main.m b/template/template/ios/HelloWorld/main.m
index b1df44b9..d645c724 100644
--- a/template/template/ios/HelloWorld/main.m
+++ b/template/template/ios/HelloWorld/main.m
@@ -2,7 +2,8 @@
#import "AppDelegate.h"
-int main(int argc, char * argv[]) {
+int main(int argc, char *argv[])
+{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
diff --git a/template/template/ios/HelloWorldTests/HelloWorldTests.m b/template/template/ios/HelloWorldTests/HelloWorldTests.m
index eabd5fd1..884d405d 100644
--- a/template/template/ios/HelloWorldTests/HelloWorldTests.m
+++ b/template/template/ios/HelloWorldTests/HelloWorldTests.m
@@ -13,7 +13,7 @@ @interface HelloWorldTests : XCTestCase
@implementation HelloWorldTests
-- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test
+- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL (^)(UIView *view))test
{
if (test(view)) {
return YES;
@@ -34,23 +34,25 @@ - (void)testRendersWelcomeScreen
__block NSString *redboxError = nil;
#ifdef DEBUG
- RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) {
- if (level >= RCTLogLevelError) {
- redboxError = message;
- }
- });
+ RCTSetLogFunction(
+ ^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) {
+ if (level >= RCTLogLevelError) {
+ redboxError = message;
+ }
+ });
#endif
while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) {
[[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
[[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
- foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) {
- if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) {
- return YES;
- }
- return NO;
- }];
+ foundElement = [self findSubviewInView:vc.view
+ matching:^BOOL(UIView *view) {
+ if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) {
+ return YES;
+ }
+ return NO;
+ }];
}
#ifdef DEBUG
@@ -61,5 +63,4 @@ - (void)testRendersWelcomeScreen
XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS);
}
-
@end
diff --git a/template/template/ios/Podfile b/template/template/ios/Podfile
index 9409747f..06a02f93 100644
--- a/template/template/ios/Podfile
+++ b/template/template/ios/Podfile
@@ -1,15 +1,22 @@
require_relative '../node_modules/react-native/scripts/react_native_pods'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
-platform :ios, '11.0'
+platform :ios, '12.4'
+install! 'cocoapods', :deterministic_uuids => false
target 'HelloWorld' do
config = use_native_modules!
+ # Flags change depending on the env values.
+ flags = get_default_flags()
+
use_react_native!(
:path => config[:reactNativePath],
# to enable hermes on iOS, change `false` to `true` and then install pods
- :hermes_enabled => false
+ :hermes_enabled => flags[:hermes_enabled],
+ :fabric_enabled => flags[:fabric_enabled],
+ # An absolute path to your application root.
+ :app_path => "#{Pod::Config.instance.installation_root}/.."
)
target 'HelloWorldTests' do
diff --git a/template/template/ios/Podfile.lock b/template/template/ios/Podfile.lock
index 10a5d9e7..3af8bb35 100644
--- a/template/template/ios/Podfile.lock
+++ b/template/template/ios/Podfile.lock
@@ -2,78 +2,79 @@ PODS:
- boost (1.76.0)
- CocoaAsyncSocket (7.6.5)
- DoubleConversion (1.1.6)
- - FBLazyVector (0.66.4)
- - FBReactNativeSpec (0.66.4):
+ - FBLazyVector (0.69.1)
+ - FBReactNativeSpec (0.69.1):
- RCT-Folly (= 2021.06.28.00-v2)
- - RCTRequired (= 0.66.4)
- - RCTTypeSafety (= 0.66.4)
- - React-Core (= 0.66.4)
- - React-jsi (= 0.66.4)
- - ReactCommon/turbomodule/core (= 0.66.4)
- - Flipper (0.99.0):
+ - RCTRequired (= 0.69.1)
+ - RCTTypeSafety (= 0.69.1)
+ - React-Core (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - ReactCommon/turbomodule/core (= 0.69.1)
+ - Flipper (0.125.0):
- Flipper-Folly (~> 2.6)
- Flipper-RSocket (~> 1.4)
- Flipper-Boost-iOSX (1.76.0.1.11)
- - Flipper-DoubleConversion (3.1.7)
+ - Flipper-DoubleConversion (3.2.0.1)
- Flipper-Fmt (7.1.7)
- - Flipper-Folly (2.6.7):
+ - Flipper-Folly (2.6.10):
- Flipper-Boost-iOSX
- Flipper-DoubleConversion
- Flipper-Fmt (= 7.1.7)
- Flipper-Glog
- libevent (~> 2.1.12)
- - OpenSSL-Universal (= 1.1.180)
- - Flipper-Glog (0.3.6)
+ - OpenSSL-Universal (= 1.1.1100)
+ - Flipper-Glog (0.5.0.5)
- Flipper-PeerTalk (0.0.4)
- Flipper-RSocket (1.4.3):
- Flipper-Folly (~> 2.6)
- - FlipperKit (0.99.0):
- - FlipperKit/Core (= 0.99.0)
- - FlipperKit/Core (0.99.0):
- - Flipper (~> 0.99.0)
+ - FlipperKit (0.125.0):
+ - FlipperKit/Core (= 0.125.0)
+ - FlipperKit/Core (0.125.0):
+ - Flipper (~> 0.125.0)
- FlipperKit/CppBridge
- FlipperKit/FBCxxFollyDynamicConvert
- FlipperKit/FBDefines
- FlipperKit/FKPortForwarding
- - FlipperKit/CppBridge (0.99.0):
- - Flipper (~> 0.99.0)
- - FlipperKit/FBCxxFollyDynamicConvert (0.99.0):
+ - SocketRocket (~> 0.6.0)
+ - FlipperKit/CppBridge (0.125.0):
+ - Flipper (~> 0.125.0)
+ - FlipperKit/FBCxxFollyDynamicConvert (0.125.0):
- Flipper-Folly (~> 2.6)
- - FlipperKit/FBDefines (0.99.0)
- - FlipperKit/FKPortForwarding (0.99.0):
+ - FlipperKit/FBDefines (0.125.0)
+ - FlipperKit/FKPortForwarding (0.125.0):
- CocoaAsyncSocket (~> 7.6)
- Flipper-PeerTalk (~> 0.0.4)
- - FlipperKit/FlipperKitHighlightOverlay (0.99.0)
- - FlipperKit/FlipperKitLayoutHelpers (0.99.0):
+ - FlipperKit/FlipperKitHighlightOverlay (0.125.0)
+ - FlipperKit/FlipperKitLayoutHelpers (0.125.0):
- FlipperKit/Core
- FlipperKit/FlipperKitHighlightOverlay
- FlipperKit/FlipperKitLayoutTextSearchable
- - FlipperKit/FlipperKitLayoutIOSDescriptors (0.99.0):
+ - FlipperKit/FlipperKitLayoutIOSDescriptors (0.125.0):
- FlipperKit/Core
- FlipperKit/FlipperKitHighlightOverlay
- FlipperKit/FlipperKitLayoutHelpers
- YogaKit (~> 1.18)
- - FlipperKit/FlipperKitLayoutPlugin (0.99.0):
+ - FlipperKit/FlipperKitLayoutPlugin (0.125.0):
- FlipperKit/Core
- FlipperKit/FlipperKitHighlightOverlay
- FlipperKit/FlipperKitLayoutHelpers
- FlipperKit/FlipperKitLayoutIOSDescriptors
- FlipperKit/FlipperKitLayoutTextSearchable
- YogaKit (~> 1.18)
- - FlipperKit/FlipperKitLayoutTextSearchable (0.99.0)
- - FlipperKit/FlipperKitNetworkPlugin (0.99.0):
+ - FlipperKit/FlipperKitLayoutTextSearchable (0.125.0)
+ - FlipperKit/FlipperKitNetworkPlugin (0.125.0):
- FlipperKit/Core
- - FlipperKit/FlipperKitReactPlugin (0.99.0):
+ - FlipperKit/FlipperKitReactPlugin (0.125.0):
- FlipperKit/Core
- - FlipperKit/FlipperKitUserDefaultsPlugin (0.99.0):
+ - FlipperKit/FlipperKitUserDefaultsPlugin (0.125.0):
- FlipperKit/Core
- - FlipperKit/SKIOSNetworkPlugin (0.99.0):
+ - FlipperKit/SKIOSNetworkPlugin (0.125.0):
- FlipperKit/Core
- FlipperKit/FlipperKitNetworkPlugin
- fmt (6.2.1)
- glog (0.3.5)
- libevent (2.1.12)
- - OpenSSL-Universal (1.1.180)
+ - OpenSSL-Universal (1.1.1100)
- RCT-Folly (2021.06.28.00-v2):
- boost
- DoubleConversion
@@ -85,260 +86,272 @@ PODS:
- DoubleConversion
- fmt (~> 6.2.1)
- glog
- - RCTRequired (0.66.4)
- - RCTTypeSafety (0.66.4):
- - FBLazyVector (= 0.66.4)
+ - RCTRequired (0.69.1)
+ - RCTTypeSafety (0.69.1):
+ - FBLazyVector (= 0.69.1)
+ - RCTRequired (= 0.69.1)
+ - React-Core (= 0.69.1)
+ - React (0.69.1):
+ - React-Core (= 0.69.1)
+ - React-Core/DevSupport (= 0.69.1)
+ - React-Core/RCTWebSocket (= 0.69.1)
+ - React-RCTActionSheet (= 0.69.1)
+ - React-RCTAnimation (= 0.69.1)
+ - React-RCTBlob (= 0.69.1)
+ - React-RCTImage (= 0.69.1)
+ - React-RCTLinking (= 0.69.1)
+ - React-RCTNetwork (= 0.69.1)
+ - React-RCTSettings (= 0.69.1)
+ - React-RCTText (= 0.69.1)
+ - React-RCTVibration (= 0.69.1)
+ - React-bridging (0.69.1):
- RCT-Folly (= 2021.06.28.00-v2)
- - RCTRequired (= 0.66.4)
- - React-Core (= 0.66.4)
- - React (0.66.4):
- - React-Core (= 0.66.4)
- - React-Core/DevSupport (= 0.66.4)
- - React-Core/RCTWebSocket (= 0.66.4)
- - React-RCTActionSheet (= 0.66.4)
- - React-RCTAnimation (= 0.66.4)
- - React-RCTBlob (= 0.66.4)
- - React-RCTImage (= 0.66.4)
- - React-RCTLinking (= 0.66.4)
- - React-RCTNetwork (= 0.66.4)
- - React-RCTSettings (= 0.66.4)
- - React-RCTText (= 0.66.4)
- - React-RCTVibration (= 0.66.4)
- - React-callinvoker (0.66.4)
- - React-Core (0.66.4):
+ - React-jsi (= 0.69.1)
+ - React-callinvoker (0.69.1)
+ - React-Codegen (0.69.1):
+ - FBReactNativeSpec (= 0.69.1)
+ - RCT-Folly (= 2021.06.28.00-v2)
+ - RCTRequired (= 0.69.1)
+ - RCTTypeSafety (= 0.69.1)
+ - React-Core (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-jsiexecutor (= 0.69.1)
+ - ReactCommon/turbomodule/core (= 0.69.1)
+ - React-Core (0.69.1):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- - React-Core/Default (= 0.66.4)
- - React-cxxreact (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-jsiexecutor (= 0.66.4)
- - React-perflogger (= 0.66.4)
+ - React-Core/Default (= 0.69.1)
+ - React-cxxreact (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-jsiexecutor (= 0.69.1)
+ - React-perflogger (= 0.69.1)
- Yoga
- - React-Core/CoreModulesHeaders (0.66.4):
+ - React-Core/CoreModulesHeaders (0.69.1):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- - React-cxxreact (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-jsiexecutor (= 0.66.4)
- - React-perflogger (= 0.66.4)
+ - React-cxxreact (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-jsiexecutor (= 0.69.1)
+ - React-perflogger (= 0.69.1)
- Yoga
- - React-Core/Default (0.66.4):
+ - React-Core/Default (0.69.1):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- - React-cxxreact (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-jsiexecutor (= 0.66.4)
- - React-perflogger (= 0.66.4)
+ - React-cxxreact (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-jsiexecutor (= 0.69.1)
+ - React-perflogger (= 0.69.1)
- Yoga
- - React-Core/DevSupport (0.66.4):
+ - React-Core/DevSupport (0.69.1):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- - React-Core/Default (= 0.66.4)
- - React-Core/RCTWebSocket (= 0.66.4)
- - React-cxxreact (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-jsiexecutor (= 0.66.4)
- - React-jsinspector (= 0.66.4)
- - React-perflogger (= 0.66.4)
+ - React-Core/Default (= 0.69.1)
+ - React-Core/RCTWebSocket (= 0.69.1)
+ - React-cxxreact (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-jsiexecutor (= 0.69.1)
+ - React-jsinspector (= 0.69.1)
+ - React-perflogger (= 0.69.1)
- Yoga
- - React-Core/RCTActionSheetHeaders (0.66.4):
+ - React-Core/RCTActionSheetHeaders (0.69.1):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- - React-cxxreact (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-jsiexecutor (= 0.66.4)
- - React-perflogger (= 0.66.4)
+ - React-cxxreact (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-jsiexecutor (= 0.69.1)
+ - React-perflogger (= 0.69.1)
- Yoga
- - React-Core/RCTAnimationHeaders (0.66.4):
+ - React-Core/RCTAnimationHeaders (0.69.1):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- - React-cxxreact (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-jsiexecutor (= 0.66.4)
- - React-perflogger (= 0.66.4)
+ - React-cxxreact (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-jsiexecutor (= 0.69.1)
+ - React-perflogger (= 0.69.1)
- Yoga
- - React-Core/RCTBlobHeaders (0.66.4):
+ - React-Core/RCTBlobHeaders (0.69.1):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- - React-cxxreact (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-jsiexecutor (= 0.66.4)
- - React-perflogger (= 0.66.4)
+ - React-cxxreact (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-jsiexecutor (= 0.69.1)
+ - React-perflogger (= 0.69.1)
- Yoga
- - React-Core/RCTImageHeaders (0.66.4):
+ - React-Core/RCTImageHeaders (0.69.1):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- - React-cxxreact (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-jsiexecutor (= 0.66.4)
- - React-perflogger (= 0.66.4)
+ - React-cxxreact (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-jsiexecutor (= 0.69.1)
+ - React-perflogger (= 0.69.1)
- Yoga
- - React-Core/RCTLinkingHeaders (0.66.4):
+ - React-Core/RCTLinkingHeaders (0.69.1):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- - React-cxxreact (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-jsiexecutor (= 0.66.4)
- - React-perflogger (= 0.66.4)
+ - React-cxxreact (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-jsiexecutor (= 0.69.1)
+ - React-perflogger (= 0.69.1)
- Yoga
- - React-Core/RCTNetworkHeaders (0.66.4):
+ - React-Core/RCTNetworkHeaders (0.69.1):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- - React-cxxreact (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-jsiexecutor (= 0.66.4)
- - React-perflogger (= 0.66.4)
+ - React-cxxreact (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-jsiexecutor (= 0.69.1)
+ - React-perflogger (= 0.69.1)
- Yoga
- - React-Core/RCTSettingsHeaders (0.66.4):
+ - React-Core/RCTSettingsHeaders (0.69.1):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- - React-cxxreact (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-jsiexecutor (= 0.66.4)
- - React-perflogger (= 0.66.4)
+ - React-cxxreact (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-jsiexecutor (= 0.69.1)
+ - React-perflogger (= 0.69.1)
- Yoga
- - React-Core/RCTTextHeaders (0.66.4):
+ - React-Core/RCTTextHeaders (0.69.1):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- - React-cxxreact (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-jsiexecutor (= 0.66.4)
- - React-perflogger (= 0.66.4)
+ - React-cxxreact (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-jsiexecutor (= 0.69.1)
+ - React-perflogger (= 0.69.1)
- Yoga
- - React-Core/RCTVibrationHeaders (0.66.4):
+ - React-Core/RCTVibrationHeaders (0.69.1):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- - React-cxxreact (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-jsiexecutor (= 0.66.4)
- - React-perflogger (= 0.66.4)
+ - React-cxxreact (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-jsiexecutor (= 0.69.1)
+ - React-perflogger (= 0.69.1)
- Yoga
- - React-Core/RCTWebSocket (0.66.4):
+ - React-Core/RCTWebSocket (0.69.1):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- - React-Core/Default (= 0.66.4)
- - React-cxxreact (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-jsiexecutor (= 0.66.4)
- - React-perflogger (= 0.66.4)
+ - React-Core/Default (= 0.69.1)
+ - React-cxxreact (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-jsiexecutor (= 0.69.1)
+ - React-perflogger (= 0.69.1)
- Yoga
- - React-CoreModules (0.66.4):
- - FBReactNativeSpec (= 0.66.4)
+ - React-CoreModules (0.69.1):
- RCT-Folly (= 2021.06.28.00-v2)
- - RCTTypeSafety (= 0.66.4)
- - React-Core/CoreModulesHeaders (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-RCTImage (= 0.66.4)
- - ReactCommon/turbomodule/core (= 0.66.4)
- - React-cxxreact (0.66.4):
+ - RCTTypeSafety (= 0.69.1)
+ - React-Codegen (= 0.69.1)
+ - React-Core/CoreModulesHeaders (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-RCTImage (= 0.69.1)
+ - ReactCommon/turbomodule/core (= 0.69.1)
+ - React-cxxreact (0.69.1):
- boost (= 1.76.0)
- DoubleConversion
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- - React-callinvoker (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-jsinspector (= 0.66.4)
- - React-logger (= 0.66.4)
- - React-perflogger (= 0.66.4)
- - React-runtimeexecutor (= 0.66.4)
- - React-jsi (0.66.4):
+ - React-callinvoker (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-jsinspector (= 0.69.1)
+ - React-logger (= 0.69.1)
+ - React-perflogger (= 0.69.1)
+ - React-runtimeexecutor (= 0.69.1)
+ - React-jsi (0.69.1):
- boost (= 1.76.0)
- DoubleConversion
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- - React-jsi/Default (= 0.66.4)
- - React-jsi/Default (0.66.4):
+ - React-jsi/Default (= 0.69.1)
+ - React-jsi/Default (0.69.1):
- boost (= 1.76.0)
- DoubleConversion
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- - React-jsiexecutor (0.66.4):
+ - React-jsiexecutor (0.69.1):
- DoubleConversion
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- - React-cxxreact (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-perflogger (= 0.66.4)
- - React-jsinspector (0.66.4)
- - React-logger (0.66.4):
+ - React-cxxreact (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-perflogger (= 0.69.1)
+ - React-jsinspector (0.69.1)
+ - React-logger (0.69.1):
- glog
- react-native-safe-area-context (3.3.2):
- React-Core
- - React-perflogger (0.66.4)
- - React-RCTActionSheet (0.66.4):
- - React-Core/RCTActionSheetHeaders (= 0.66.4)
- - React-RCTAnimation (0.66.4):
- - FBReactNativeSpec (= 0.66.4)
+ - React-perflogger (0.69.1)
+ - React-RCTActionSheet (0.69.1):
+ - React-Core/RCTActionSheetHeaders (= 0.69.1)
+ - React-RCTAnimation (0.69.1):
- RCT-Folly (= 2021.06.28.00-v2)
- - RCTTypeSafety (= 0.66.4)
- - React-Core/RCTAnimationHeaders (= 0.66.4)
- - React-jsi (= 0.66.4)
- - ReactCommon/turbomodule/core (= 0.66.4)
- - React-RCTBlob (0.66.4):
- - FBReactNativeSpec (= 0.66.4)
+ - RCTTypeSafety (= 0.69.1)
+ - React-Codegen (= 0.69.1)
+ - React-Core/RCTAnimationHeaders (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - ReactCommon/turbomodule/core (= 0.69.1)
+ - React-RCTBlob (0.69.1):
- RCT-Folly (= 2021.06.28.00-v2)
- - React-Core/RCTBlobHeaders (= 0.66.4)
- - React-Core/RCTWebSocket (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-RCTNetwork (= 0.66.4)
- - ReactCommon/turbomodule/core (= 0.66.4)
- - React-RCTImage (0.66.4):
- - FBReactNativeSpec (= 0.66.4)
+ - React-Codegen (= 0.69.1)
+ - React-Core/RCTBlobHeaders (= 0.69.1)
+ - React-Core/RCTWebSocket (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-RCTNetwork (= 0.69.1)
+ - ReactCommon/turbomodule/core (= 0.69.1)
+ - React-RCTImage (0.69.1):
- RCT-Folly (= 2021.06.28.00-v2)
- - RCTTypeSafety (= 0.66.4)
- - React-Core/RCTImageHeaders (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-RCTNetwork (= 0.66.4)
- - ReactCommon/turbomodule/core (= 0.66.4)
- - React-RCTLinking (0.66.4):
- - FBReactNativeSpec (= 0.66.4)
- - React-Core/RCTLinkingHeaders (= 0.66.4)
- - React-jsi (= 0.66.4)
- - ReactCommon/turbomodule/core (= 0.66.4)
- - React-RCTNetwork (0.66.4):
- - FBReactNativeSpec (= 0.66.4)
+ - RCTTypeSafety (= 0.69.1)
+ - React-Codegen (= 0.69.1)
+ - React-Core/RCTImageHeaders (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-RCTNetwork (= 0.69.1)
+ - ReactCommon/turbomodule/core (= 0.69.1)
+ - React-RCTLinking (0.69.1):
+ - React-Codegen (= 0.69.1)
+ - React-Core/RCTLinkingHeaders (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - ReactCommon/turbomodule/core (= 0.69.1)
+ - React-RCTNetwork (0.69.1):
- RCT-Folly (= 2021.06.28.00-v2)
- - RCTTypeSafety (= 0.66.4)
- - React-Core/RCTNetworkHeaders (= 0.66.4)
- - React-jsi (= 0.66.4)
- - ReactCommon/turbomodule/core (= 0.66.4)
- - React-RCTSettings (0.66.4):
- - FBReactNativeSpec (= 0.66.4)
+ - RCTTypeSafety (= 0.69.1)
+ - React-Codegen (= 0.69.1)
+ - React-Core/RCTNetworkHeaders (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - ReactCommon/turbomodule/core (= 0.69.1)
+ - React-RCTSettings (0.69.1):
- RCT-Folly (= 2021.06.28.00-v2)
- - RCTTypeSafety (= 0.66.4)
- - React-Core/RCTSettingsHeaders (= 0.66.4)
- - React-jsi (= 0.66.4)
- - ReactCommon/turbomodule/core (= 0.66.4)
- - React-RCTText (0.66.4):
- - React-Core/RCTTextHeaders (= 0.66.4)
- - React-RCTVibration (0.66.4):
- - FBReactNativeSpec (= 0.66.4)
+ - RCTTypeSafety (= 0.69.1)
+ - React-Codegen (= 0.69.1)
+ - React-Core/RCTSettingsHeaders (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - ReactCommon/turbomodule/core (= 0.69.1)
+ - React-RCTText (0.69.1):
+ - React-Core/RCTTextHeaders (= 0.69.1)
+ - React-RCTVibration (0.69.1):
- RCT-Folly (= 2021.06.28.00-v2)
- - React-Core/RCTVibrationHeaders (= 0.66.4)
- - React-jsi (= 0.66.4)
- - ReactCommon/turbomodule/core (= 0.66.4)
- - React-runtimeexecutor (0.66.4):
- - React-jsi (= 0.66.4)
- - ReactCommon/turbomodule/core (0.66.4):
+ - React-Codegen (= 0.69.1)
+ - React-Core/RCTVibrationHeaders (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - ReactCommon/turbomodule/core (= 0.69.1)
+ - React-runtimeexecutor (0.69.1):
+ - React-jsi (= 0.69.1)
+ - ReactCommon/turbomodule/core (0.69.1):
- DoubleConversion
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- - React-callinvoker (= 0.66.4)
- - React-Core (= 0.66.4)
- - React-cxxreact (= 0.66.4)
- - React-jsi (= 0.66.4)
- - React-logger (= 0.66.4)
- - React-perflogger (= 0.66.4)
+ - React-bridging (= 0.69.1)
+ - React-callinvoker (= 0.69.1)
+ - React-Core (= 0.69.1)
+ - React-cxxreact (= 0.69.1)
+ - React-jsi (= 0.69.1)
+ - React-logger (= 0.69.1)
+ - React-perflogger (= 0.69.1)
- RNCAsyncStorage (1.15.14):
- React-Core
- RNCMaskedView (0.1.11):
@@ -381,6 +394,7 @@ PODS:
- React-RCTImage
- RNSVG (12.1.1):
- React
+ - SocketRocket (0.6.0)
- Yoga (1.14.0)
- YogaKit (1.18.1):
- Yoga (~> 1.14)
@@ -390,33 +404,36 @@ DEPENDENCIES:
- DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
- FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
- FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`)
- - Flipper (= 0.99.0)
+ - Flipper (= 0.125.0)
- Flipper-Boost-iOSX (= 1.76.0.1.11)
- - Flipper-DoubleConversion (= 3.1.7)
+ - Flipper-DoubleConversion (= 3.2.0.1)
- Flipper-Fmt (= 7.1.7)
- - Flipper-Folly (= 2.6.7)
- - Flipper-Glog (= 0.3.6)
+ - Flipper-Folly (= 2.6.10)
+ - Flipper-Glog (= 0.5.0.5)
- Flipper-PeerTalk (= 0.0.4)
- Flipper-RSocket (= 1.4.3)
- - FlipperKit (= 0.99.0)
- - FlipperKit/Core (= 0.99.0)
- - FlipperKit/CppBridge (= 0.99.0)
- - FlipperKit/FBCxxFollyDynamicConvert (= 0.99.0)
- - FlipperKit/FBDefines (= 0.99.0)
- - FlipperKit/FKPortForwarding (= 0.99.0)
- - FlipperKit/FlipperKitHighlightOverlay (= 0.99.0)
- - FlipperKit/FlipperKitLayoutPlugin (= 0.99.0)
- - FlipperKit/FlipperKitLayoutTextSearchable (= 0.99.0)
- - FlipperKit/FlipperKitNetworkPlugin (= 0.99.0)
- - FlipperKit/FlipperKitReactPlugin (= 0.99.0)
- - FlipperKit/FlipperKitUserDefaultsPlugin (= 0.99.0)
- - FlipperKit/SKIOSNetworkPlugin (= 0.99.0)
+ - FlipperKit (= 0.125.0)
+ - FlipperKit/Core (= 0.125.0)
+ - FlipperKit/CppBridge (= 0.125.0)
+ - FlipperKit/FBCxxFollyDynamicConvert (= 0.125.0)
+ - FlipperKit/FBDefines (= 0.125.0)
+ - FlipperKit/FKPortForwarding (= 0.125.0)
+ - FlipperKit/FlipperKitHighlightOverlay (= 0.125.0)
+ - FlipperKit/FlipperKitLayoutPlugin (= 0.125.0)
+ - FlipperKit/FlipperKitLayoutTextSearchable (= 0.125.0)
+ - FlipperKit/FlipperKitNetworkPlugin (= 0.125.0)
+ - FlipperKit/FlipperKitReactPlugin (= 0.125.0)
+ - FlipperKit/FlipperKitUserDefaultsPlugin (= 0.125.0)
+ - FlipperKit/SKIOSNetworkPlugin (= 0.125.0)
- glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
+ - OpenSSL-Universal (= 1.1.1100)
- RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`)
- RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`)
- RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`)
- React (from `../node_modules/react-native/`)
+ - React-bridging (from `../node_modules/react-native/ReactCommon`)
- React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`)
+ - React-Codegen (from `build/generated/ios`)
- React-Core (from `../node_modules/react-native/`)
- React-Core/DevSupport (from `../node_modules/react-native/`)
- React-Core/RCTWebSocket (from `../node_modules/react-native/`)
@@ -463,6 +480,7 @@ SPEC REPOS:
- fmt
- libevent
- OpenSSL-Universal
+ - SocketRocket
- YogaKit
EXTERNAL SOURCES:
@@ -484,8 +502,12 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/Libraries/TypeSafety"
React:
:path: "../node_modules/react-native/"
+ React-bridging:
+ :path: "../node_modules/react-native/ReactCommon"
React-callinvoker:
:path: "../node_modules/react-native/ReactCommon/callinvoker"
+ React-Codegen:
+ :path: build/generated/ios
React-Core:
:path: "../node_modules/react-native/"
React-CoreModules:
@@ -546,57 +568,60 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
boost: a7c83b31436843459a1961bfd74b96033dc77234
CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99
- DoubleConversion: 831926d9b8bf8166fd87886c4abab286c2422662
- FBLazyVector: e5569e42a1c79ca00521846c223173a57aca1fe1
- FBReactNativeSpec: fe08c1cd7e2e205718d77ad14b34957cce949b58
- Flipper: 30e8eeeed6abdc98edaf32af0cda2f198be4b733
+ DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54
+ FBLazyVector: 068141206af867f72854753423d0117c4bf53419
+ FBReactNativeSpec: 546a637adc797fa436dd51d1c63c580f820de31c
+ Flipper: 26fc4b7382499f1281eb8cb921e5c3ad6de91fe0
Flipper-Boost-iOSX: fd1e2b8cbef7e662a122412d7ac5f5bea715403c
- Flipper-DoubleConversion: 57ffbe81ef95306cc9e69c4aa3aeeeeb58a6a28c
+ Flipper-DoubleConversion: 2dc99b02f658daf147069aad9dbd29d8feb06d30
Flipper-Fmt: 60cbdd92fc254826e61d669a5d87ef7015396a9b
- Flipper-Folly: 83af37379faa69497529e414bd43fbfc7cae259a
- Flipper-Glog: 1dfd6abf1e922806c52ceb8701a3599a79a200a6
+ Flipper-Folly: 584845625005ff068a6ebf41f857f468decd26b3
+ Flipper-Glog: 70c50ce58ddaf67dc35180db05f191692570f446
Flipper-PeerTalk: 116d8f857dc6ef55c7a5a75ea3ceaafe878aadc9
Flipper-RSocket: d9d9ade67cbecf6ac10730304bf5607266dd2541
- FlipperKit: d8d346844eca5d9120c17d441a2f38596e8ed2b9
+ FlipperKit: cbdee19bdd4e7f05472a66ce290f1b729ba3cb86
fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9
- glog: 5337263514dd6f09803962437687240c5dc39aa4
+ glog: 3d02b25ca00c2d456734d0bcff864cbc62f6ae1a
libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
- OpenSSL-Universal: 1aa4f6a6ee7256b83db99ec1ccdaa80d10f9af9b
- RCT-Folly: a21c126816d8025b547704b777a2ba552f3d9fa9
- RCTRequired: 4bf86c70714490bca4bf2696148638284622644b
- RCTTypeSafety: c475a7059eb77935fa53d2c17db299893f057d5d
- React: f64af14e3f2c50f6f2c91a5fd250e4ff1b3c3459
- React-callinvoker: b74e4ae80287780dcdf0cab262bcb581eeef56e7
- React-Core: 3eb7432bad96ff1d25aebc1defbae013fee2fd0e
- React-CoreModules: ad9e1fd5650e16666c57a08328df86fd7e480cb9
- React-cxxreact: 02633ff398cf7e91a2c1e12590d323c4a4b8668a
- React-jsi: 805c41a927d6499fb811772acb971467d9204633
- React-jsiexecutor: 94ce921e1d8ce7023366873ec371f3441383b396
- React-jsinspector: d0374f7509d407d2264168b6d0fad0b54e300b85
- React-logger: 933f80c97c633ee8965d609876848148e3fef438
+ OpenSSL-Universal: ebc357f1e6bc71fa463ccb2fe676756aff50e88c
+ RCT-Folly: b9d9fe1fc70114b751c076104e52f3b1b5e5a95a
+ RCTRequired: ae07282b2ec9c90d7eb98251603bc3f82403d239
+ RCTTypeSafety: a04dc1339af2e1da759ccd093bf11c310dce1ef6
+ React: dbd201f781b180eab148aa961683943c72f67dcf
+ React-bridging: 10a863fdc0fc6f9c9f8527640936b293cd288bdc
+ React-callinvoker: 6ad32eee2630dab9023de5df2a6a8cacbfc99a67
+ React-Codegen: fe3423fa6f37d05e233ab0e85e34fe0b443a5654
+ React-Core: 6177b1f2dd794fe202a5042d3678b2ddfcbfb7d4
+ React-CoreModules: c74e6b155f9876b1947fc8a13f0cb437cc7f6dcd
+ React-cxxreact: a07b7d90c4c71dd38c7383c7344b34d0a1336aee
+ React-jsi: d762c410d10830b7579225c78f2fd881c29649ca
+ React-jsiexecutor: 758e70947c232828a66b5ddc42d02b4d010fa26e
+ React-jsinspector: 55605caf04e02f9b0e05842b786f1c12dde08f4b
+ React-logger: ca970551cb7eea2fd814d0d5f6fc1a471eb53b76
react-native-safe-area-context: 584dc04881deb49474363f3be89e4ca0e854c057
- React-perflogger: 93075d8931c32cd1fce8a98c15d2d5ccc4d891bd
- React-RCTActionSheet: 7d3041e6761b4f3044a37079ddcb156575fb6d89
- React-RCTAnimation: 743e88b55ac62511ae5c2e22803d4f503f2a3a13
- React-RCTBlob: bee3a2f98fa7fc25c957c8643494244f74bea0a0
- React-RCTImage: 19fc9e29b06cc38611c553494f8d3040bf78c24e
- React-RCTLinking: dc799503979c8c711126d66328e7ce8f25c2848f
- React-RCTNetwork: 417e4e34cf3c19eaa5fd4e9eb20180d662a799ce
- React-RCTSettings: 4df89417265af26501a7e0e9192a34d3d9848dff
- React-RCTText: f8a21c3499ab322326290fa9b701ae29aa093aa5
- React-RCTVibration: e3ffca672dd3772536cb844274094b0e2c31b187
- React-runtimeexecutor: dec32ee6f2e2a26e13e58152271535fadff5455a
- ReactCommon: 57b69f6383eafcbd7da625bfa6003810332313c4
+ React-perflogger: c9161ff0f1c769993cd11d2751e4331ff4ceb7cd
+ React-RCTActionSheet: 2d885b0bea76a5254ef852939273edd8de116180
+ React-RCTAnimation: 353fa4fc3c19060068832dd32e555182ec07be45
+ React-RCTBlob: 647da863bc7d4f169bb80463fbcdd59c4fc76e6a
+ React-RCTImage: e77ee8d85f21ad5f4704e3ef67656903f45f9e76
+ React-RCTLinking: 3dad213f5ef5798b9491037aebe84e8ad684d4c4
+ React-RCTNetwork: ebbb9581d8fdc91596a4ee5e9f9ae37d5f1e13b9
+ React-RCTSettings: a5e7f3f1d1b38be8bf9baa89228c5af98244f9ee
+ React-RCTText: 209576913f7eccd84425ea3f3813772f1f66e1e4
+ React-RCTVibration: e8b7dd6635cc95689b5db643b5a3848f1e05b30b
+ React-runtimeexecutor: 27f468c5576eaf05ffb7a907528e44c75a3fcbae
+ ReactCommon: e30ec17dfb1d4c4f3419eac254350d6abca6d5a2
RNCAsyncStorage: ea6b5c280997b2b32a587793163b1f10e580c4f7
RNCMaskedView: 0e1bc4bfa8365eba5fbbb71e07fbdc0555249489
RNDeviceInfo: 0400a6d0c94186d1120c3cbd97b23abc022187a9
RNGestureHandler: e5c7cab5f214503dcefd6b2b0cefb050e1f51c4a
- RNReanimated: 65583befd5706cc9c86ae9a081786181ced37b93
+ RNReanimated: e2414d403cc8da634e44103c1ec7a13e87bd6333
RNScreens: 522705f2e5c9d27efb17f24aceb2bf8335bc7b8e
RNSVG: 551acb6562324b1d52a4e0758f7ca0ec234e278f
- Yoga: e7dc4e71caba6472ff48ad7d234389b91dadc280
+ SocketRocket: fccef3f9c5cedea1353a9ef6ada904fde10d6608
+ Yoga: 7ab6e3ee4ce47d7b789d1cb520163833e515f452
YogaKit: f782866e155069a2cca2517aafea43200b01fd5a
-PODFILE CHECKSUM: e210a75d3f18280e7056d6c54b4a5ab1baec678f
+PODFILE CHECKSUM: fb73e05329a23e1f925f444e51d22616c03f0050
-COCOAPODS: 1.10.1
+COCOAPODS: 1.11.2
diff --git a/template/template/ios/_xcode.env b/template/template/ios/_xcode.env
new file mode 100644
index 00000000..3d5782c7
--- /dev/null
+++ b/template/template/ios/_xcode.env
@@ -0,0 +1,11 @@
+# This `.xcode.env` file is versioned and is used to source the environment
+# used when running script phases inside Xcode.
+# To customize your local environment, you can create an `.xcode.env.local`
+# file that is not versioned.
+
+# NODE_BINARY variable contains the PATH to the node executable.
+#
+# Customize the NODE_BINARY variable here.
+# For example, to use nvm with brew, add the following line
+# . "$(brew --prefix nvm)/nvm.sh" --no-use
+export NODE_BINARY=$(command -v node)
diff --git a/template/template/metro.config.js b/template/template/metro.config.js
index e91aba93..a4d4bead 100644
--- a/template/template/metro.config.js
+++ b/template/template/metro.config.js
@@ -5,7 +5,7 @@
* @format
*/
-module.exports = {
+ module.exports = {
transformer: {
getTransformOptions: async () => ({
transform: {
diff --git a/template/template/package.json b/template/template/package.json
index 4998851a..0c2f3c40 100644
--- a/template/template/package.json
+++ b/template/template/package.json
@@ -22,8 +22,8 @@
"@rematch/loading": "2.1.2",
"@uiw/formatter": "1.2.4",
"@uiw/react-native": "2.11.1",
- "react": "17.0.2",
- "react-native": "0.66.4",
+ "react": "18.0.0",
+ "react-native": "0.69.1",
"react-native-device-info": "8.4.8",
"react-native-gesture-handler": "2.1.0",
"react-native-reanimated": "2.2.4",
@@ -41,10 +41,10 @@
"eslint": "7.32.0",
"eslint-plugin-prettier": "4.0.0",
"jest": "27.2.0",
- "metro-react-native-babel-preset": "0.66.2",
+ "metro-react-native-babel-preset": "0.70.3",
"mocker-api": "2.9.4",
"prettier": "2.5.1",
- "react-test-renderer": "17.0.2"
+ "react-test-renderer": "18.0.0"
},
"jest": {
"preset": "react-native"