Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 6.3k
Guide to creating a New Architecture app from template#3056
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Uh oh!
There was an error while loading. Please reload this page.
Changes from all commits
06a3766f6aff0de7446f2be2eb188754e60a93abdd5e9a0d9a1463d877dd04d7e0ccf0e98f1b186a434c3854b962105e4fea370fbeaa0ee27ea7ef002a9b4ef845267c0a3d43d5bc865eea036bf5e1324aada4dcdf4c17e9e06f9dcbb01bc1ea529bFile filter
Filter by extension
Conversations
Uh oh!
There was an error while loading. Please reload this page.
Jump to
Uh oh!
There was an error while loading. Please reload this page.
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,5 @@ | ||
| > If you previously installed a global `react-native-cli` package, please remove it as it may cause unexpected issues: | ||
| > | ||
| > ```shell | ||
| > npm uninstall -g react-native-cli @react-native-community/cli | ||
| > ``` | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,7 +1,130 @@ | ||
| --- | ||
| id: use-app-template | ||
| title: Using the New App Template | ||
| title: Creating a New Architecture App | ||
| --- | ||
| This section describes the new app template generated by the React Native CLI and how to use it properly. | ||
| It should explain how to create a new app, which command should be issued to install the dependencies and to run it on the different platforms. | ||
| import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import constants from '@site/core/TabsConstants'; | ||
| import RemoveGlobalCLI from '.././\_remove-global-cli.md'; | ||
| This page will help you create a new React Native app that uses the New Architecture. | ||
| ## Development environment | ||
| Before continuing, make sure you've followed all the steps in [Setting up the development environment](getting-started.md), under the **React Native CLI Quickstart** tab. | ||
| If following the setup guide, stop when you reach the section **Running your React Native Application**, and resume following this guide. | ||
| :::caution | ||
| If you're using Expo, you can't enable the New Architecture at the moment, and will have to wait for a future release of the Expo SDK. | ||
| ::: | ||
| ## Creating a new application | ||
| <RemoveGlobalCLI /> | ||
| If you already have your development environment set up, create a new React Native project from the template: | ||
| ```shell | ||
| npx react-native init AwesomeProject | ||
lindboe marked this conversation as resolved.
Uh oh!There was an error while loading. Please reload this page. | ||
| ``` | ||
| :::caution | ||
| The New Architecture is available in React Native version 0.68 or later. | ||
| ::: | ||
| ## Configuration | ||
| Follow the steps below to enable the New Architecture and build the app. | ||
| ### Enable Hermes | ||
| Hermes is an open-source JavaScript engine optimized for React Native. [Hermes will be the default engine in the future](https://github.com/reactwg/react-native-new-architecture/discussions/4), and we highly recommend you use it. | ||
| Please [follow the instructions on the React Native website](hermes.md) in order to enable Hermes in your application. | ||
| ### Enable the New Architecture | ||
| #### Target OS | ||
| <Tabs groupId="platform" defaultValue={constants.defaultPlatform} values={constants.platforms} className="pill-tabs"> | ||
| <TabItem value="ios"> | ||
| Navigate to the `ios` directory and run the following: | ||
| ```shell | ||
| # from `ios` directory | ||
| bundle install && RCT_NEW_ARCH_ENABLED=1 bundle exec pod install | ||
| ``` | ||
| Then build and run the app as usual: | ||
| ```shell | ||
| yarn ios | ||
| ``` | ||
| :::note | ||
| You will need to run `pod install` each time a dependency with native code changes. Make this command easier to run by adding it to `scripts` to your project's `package.json` file: | ||
| ``` | ||
| "scripts": { | ||
| "pod-install": "RCT_NEW_ARCH_ENABLED=1 bundle exec pod install" | ||
| } | ||
| ``` | ||
| and run it with `yarn pod-install`. Note that `bundle install` does not need to run a second time, as long as the Gemfile has not changed. | ||
| ::: | ||
| #### Troubleshooting | ||
| ##### `react-native run-ios` fails | ||
| If you see a build failure from `react-native run-ios`, there may be cached files from a previous build with the old architecture. Clean the build cache and try again: | ||
| 1. Open the project `ios/project.xcworkspace` in Xcode | ||
| 2. In XCode, choose Product > Clean Build Folder | ||
| 3. In the project directory, remove the `ios/Podfile.lock` file and `ios/Pods` directory: `rm -rf ios/Podfile.lock ios/Pods` | ||
| 4. Re-run `yarn pod-install` and `yarn ios` | ||
cipolleschi marked this conversation as resolved.
Uh oh!There was an error while loading. Please reload this page. | ||
| </TabItem> | ||
| <TabItem value="android"> | ||
| Set the `newArchEnabled` property to `true` by **either**: | ||
| - Changing the corresponding line in `android/gradle.properties` | ||
| - Setting the environment variable `ORG_GRADLE_PROJECT_newArchEnabled=true` | ||
| Then build and run the app as usual: | ||
lindboe marked this conversation as resolved.
Uh oh!There was an error while loading. Please reload this page. | ||
| ```shell | ||
| yarn android | ||
| ``` | ||
| :::note | ||
| You may notice longer build times with the New Architecture, due to additional step of C++ compilation with the Android NDK. To improve your build time, see [Speeding Up Your Build Phase](docs/build-speed.md). | ||
| ::: | ||
| </TabItem> | ||
| </Tabs> | ||
| ### Confirming the New Architecture is in use | ||
| After you build and run the app, when Metro serves the JavaScript bundle, you should see `"fabric": true` in the Metro logs: | ||
| <img src="/docs/assets/metro-new-arch.png" alt="Metro shows fabric: true" width="600" /> | ||
| ### Want to know more? | ||
cipolleschi marked this conversation as resolved.
Uh oh!There was an error while loading. Please reload this page. | ||
| If you'd like to view the code changes relevant for the New Architecture, take a look at the [upgrade helper from version 0.67.4 to 0.68.0](https://react-native-community.github.io/upgrade-helper/?from=0.67.4&to=0.68.0). Files that were added for the New Architecture are marked with a yellow banner. | ||
| For further explanations of what each file is doing, check out these guides to walk through the changes step-by-step: | ||
| #### Android | ||
| - [Enabling TurboModules on Android](new-architecture-app-modules-android.md) | ||
lindboe marked this conversation as resolved.
Uh oh!There was an error while loading. Please reload this page. | ||
| - [Enabling Fabric on Android](new-architecture-app-renderer-android.md) | ||
| #### iOS | ||
| - [Enabling TurboModules on iOS](new-architecture-app-modules-ios.md) | ||
| - [Enabling Fabric on iOS](new-architecture-app-renderer-ios.md) | ||
Uh oh!
There was an error while loading. Please reload this page.