Skip to content
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

Blog post for 0.70 RN release #3298

Merged
merged 9 commits into from
Sep 5, 2022
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
111 changes: 111 additions & 0 deletions website/blog/2022-09-05-version-070.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
---
title: Announcing React Native 0.70
authors: [dmitryrykun, titozzz, cortinico, kelset]
tags: [announcement, release]
---

# Announcing 0.70

We are excited to release a new version of React Native, 0.70.0. This version comes with several improvements like a new unified configuration for Codegen, Hermes as default engine, and full CMake support for Android builds along with a refresh of the documentation for the New Architecture. Read on to learn more!

### Sections

- [New Architecture’s New Documentation](/blog/2022/09/05/version-070#new-architectures-new-documentation)
- [Hermes as default engine](/blog/2022/09/05/version-070#hermes-as-default-engine)
- [A new unified configuration for Codegen](/blog/2022/09/05/version-070#a-new-unified-configuration-for-codegen)
- [Android Auto-linking for New Architecture libraries](/blog/2022/09/05/version-070#android-auto-linking-for-new-architecture-libraries)
- [Full CMake support for Android builds](/blog/2022/09/05/version-070#full-cmake-support-for-android-builds)
- [Highlights of 0.70](/blog/2022/09/05/version-070#highlights-of-070)

<!--truncate-->

## New Architecture’s New Documentation

Over the last few months we have been working to add more content to the [New Architecture](https://reactnative.dev/docs/next/the-new-architecture/landing-page) section of the documentation: in the new section you will find migration guides, examples and tutorials to get you up to speed.
cortinico marked this conversation as resolved.
Show resolved Hide resolved

Along with it, you will find new documents diving into [Why a New Architecture](https://reactnative.dev/docs/next/the-new-architecture/why) and [the various parts of it](https://reactnative.dev/docs/next/the-new-architecture/pillars), that we hope will help you better understand the reasoning around the new APIs.
cortinico marked this conversation as resolved.
Show resolved Hide resolved

Any feedback is more than welcome, please let us know in the [react-native-website](https://github.com/facebook/react-native-website) repository.

## Hermes as default engine

React Native 0.70 will be the first version of having Hermes, our in-house JS engine, enabled by default.
cortinico marked this conversation as resolved.
Show resolved Hide resolved

This is the result of collaborative effort between the Hermes team and the React Native team, alongside with the priceless contributions from the community. We worked to improve and fine tune Hermes to make it more performant and deliver highly requested features by the community.

You can read more about it in the [official announcement blogpost](https://reactnative.dev/blog/2022/07/08/hermes-as-the-default).
cortinico marked this conversation as resolved.
Show resolved Hide resolved

## A new unified configuration for Codegen

With 0.70, we introduced a unified way to define the Codegen specs together for iOS and Android. Previously, you had to put the Android configuration in a separate `build.gradle` file.
cortinico marked this conversation as resolved.
Show resolved Hide resolved

Now, you can define it directly in the package.json with:

```json
"codegenConfig": {
"name": "CustomAnimationView",
"type": "components",
"jsSrcsDir": "./src"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is it worth to mention the "android": { "javaPackageName": "" } option?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yup added here dcd5d8e

}
```

We hope that this improvement will provide a more consistent experience for library maintainers in migrating their codebases to the New Architecture.
cortinico marked this conversation as resolved.
Show resolved Hide resolved

If you are a library maintainer, please make sure to let us know how the process is going for you in [this discussion](https://github.com/reactwg/react-native-new-architecture/discussions/6) in the [React Native New Architecture working group](https://github.com/reactwg/react-native-new-architecture).

## Android Auto-linking for New Architecture libraries

With 0.70, users on New Architecture will be able to automatically link libraries without any configuration on their Android.mk or CMake files.
cortinico marked this conversation as resolved.
Show resolved Hide resolved

Autolinking it's a crucial part of the React Native development experience. It allows you to include external libraries with a `yarn add` command without having to deal with CocoaPods or Gradle setups.
cortinico marked this conversation as resolved.
Show resolved Hide resolved

The New Architecture required us to adapt the auto-linking features to support libraries which are using the Codegen and exposing native code to app developers.

While Autolinking worked well for New Architecture libraries on iOS, the same was not true for Android. With 0.70 we closed this gap and you can now keep on including libraries with `yarn add` to your project, they will be linked correctly both on any architecture.
cortinico marked this conversation as resolved.
Show resolved Hide resolved

## Full CMake support for Android builds

Starting from 0.70, users can now use CMake to configure their Native builds. While we don’t expect app users to directly write C++ code, you still need an entry point for the native compilation.

From now on you can use a `CMakeLists.txt` file instead of an `Android.mk` file for anything Android/Native related in your project.

This change will benefit app and library users on the New Architecture as:
cortinico marked this conversation as resolved.
Show resolved Hide resolved

- The CMake file created in your app is way smaller ([3 lines of code](https://github.com/facebook/react-native/blob/9923ac1b524ae959abdf50a28a3094198015f77e/packages/rn-tester/android/app/src/main/jni/CMakeLists.txt#L6-L11) versus [50+ for Android.mk files](https://github.com/facebook/react-native/blob/main/template/android/app/src/main/jni/Android.mk?rgh-link-date=2022-07-20T18%3A29%3A07Z)) so this makes for an easier update experience between React Native versions in the future and less code to maintain on your end.
cortinico marked this conversation as resolved.
Show resolved Hide resolved
- Codegen is now generating both `Android.mk` and `CMakeLists.txt`, so libraries should not worry about doing anything if they're using the default setup we provide for New Architecture libraries.
- The Auto-linking mentioned above will work with both CMake and Android.mk files out of the box.
- Despite apps being free to use either `Android.mk` or CMake files, the recommended solution in the future would be CMake files (due to better documentation, tooling and ecosystem around CMake).

## Highlights of 0.70

As mentioned above, some of the more important improvements in this release are centered around the New Architecture experience. However, there have been other notable changes, including:

- Fix for Catalyst is live, set mac_catalyst_enabled to true in Podfile (see [upgrade-helper](https://react-native-community.github.io/upgrade-helper/?from=0.69.1&to=0.70.0-rc.0) diff for details).
cortinico marked this conversation as resolved.
Show resolved Hide resolved
- Bumping metro to 0.72.0 should enable the "new" react jsx transform: [reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html](https://reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html).
cortinico marked this conversation as resolved.
Show resolved Hide resolved
- Removing reactnativeutilsjni as it is built from the same sources as reactnativejni ([https://github.com/facebook/react-native/pull/34339](https://github.com/facebook/react-native/pull/34339)).
cortinico marked this conversation as resolved.
Show resolved Hide resolved

### Breaking changes

There have also been a few breaking changes:

- Removed jest/preprocessor from the react-native package ([0301cb285b](https://github.com/facebook/react-native/commit/0301cb285b2e85b48a397fe58d565196654d9754) by [@motiz88](https://github.com/motiz88))
- Remove nonstandard Promise.prototype.done ([018d5cf985](https://github.com/facebook/react-native/commit/018d5cf985497273dd700b56168cf1cf64f498d5) by [@motiz88](https://github.com/motiz88))
cortinico marked this conversation as resolved.
Show resolved Hide resolved

Please also note that the version of Metro has been bumped to 0.72, which comes [with 5 breaking changes](https://github.com/facebook/metro/releases/tag/v0.72.0).

### Upgrades

And we upgraded some of our dependencies:

- Bump RN CLI to v9.0.0
- Bump Android Gradle Plugin to 7.2.1
- Bump Gradle to 7.4.2
- Bump RCT-Folly to 2021-07-22
- Bump Metro to 0.72
- Bump SoLoader to 0.10.4

You can check out the full list of changes [in the changelog](https://github.com/facebook/react-native/blob/main/CHANGELOG.md).

### Acknowledgements

87 contributors with their 492 commits have helped to make this release possible - thanks everyone! We are also thankful to everyone else who gave their feedback to ensure this release would be as stable as possible.
12 changes: 12 additions & 0 deletions website/blog/authors.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,3 +68,15 @@ micleo:
name: Michael Leon
title: Software Engineer at Meta
image_url: https://github.com/fbmal7.png

dmytrorykun:
name: Dmytro Rykun
title: Software Engineer at Meta
url: https://github.com/dmytrorykun
image_url: https://github.com/dmytrorykun.png

titozzz:
name: Thibault Malbranche
title: Lead Mobile Engineer at Brigad
url: https://github.com/titozzz
image_url: https://github.com/titozzz.png