From 53ab08daddd3044d8cd3ee70f14ed3cac58f9ea2 Mon Sep 17 00:00:00 2001
From: Tommy Nguyen <4123478+tido64@users.noreply.github.com>
Date: Mon, 15 May 2023 11:26:47 +0200
Subject: [PATCH] fix: declare support for `react-native` 0.72 (#1388)
---
.github/workflows/build.yml | 1 +
.yarn/plugins/link-project.js | 8 ++++-
Gemfile.lock | 4 +--
android/app/build.gradle | 2 ++
android/app/src/main/jni/CMakeLists.txt | 7 +++-
android/dependencies.gradle | 2 ++
android/test-app-util.gradle | 27 ++++++++++++++
example/android/gradle.properties | 2 +-
.../gradle/wrapper/gradle-wrapper.properties | 2 +-
example/package.json | 4 +--
package.json | 4 +--
scripts/android-nightly.patch | 36 -------------------
scripts/disable-safe-area-context.patch | 36 +++++++++++++++++++
scripts/test-matrix.sh | 3 +-
scripts/update-ksp-versions.mjs | 14 +++++++-
yarn.lock | 8 ++---
16 files changed, 108 insertions(+), 52 deletions(-)
create mode 100644 scripts/disable-safe-area-context.patch
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index fc41a2f98..9f27553e6 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -235,6 +235,7 @@ jobs:
- name: Set up react-native@nightly
if: ${{ github.event_name == 'schedule' }}
run: |
+ git apply scripts/disable-safe-area-context.patch
git apply scripts/android-nightly.patch
npm run set-react-version -- nightly
shell: bash
diff --git a/.yarn/plugins/link-project.js b/.yarn/plugins/link-project.js
index 70b177228..672a3d902 100644
--- a/.yarn/plugins/link-project.js
+++ b/.yarn/plugins/link-project.js
@@ -16,6 +16,7 @@ module.exports = {
}
const fs = require("node:fs");
+ const os = require("node:os");
const path = require("node:path");
function normalize(p) {
@@ -37,7 +38,12 @@ module.exports = {
const linkPath = path.join(nodeModulesPath, name);
fs.rmSync(linkPath, { force: true, maxRetries: 3, recursive: true });
- fs.symlinkSync(path.relative(nodeModulesPath, projectPath), linkPath);
+ if (os.platform() === "win32") {
+ fs.symlinkSync(projectPath, linkPath, "junction");
+ } else {
+ const target = path.relative(nodeModulesPath, projectPath);
+ fs.symlinkSync(target, linkPath);
+ }
}
},
},
diff --git a/Gemfile.lock b/Gemfile.lock
index dbdb3bc31..ae8fb8709 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,7 +1,7 @@
GEM
remote: https://rubygems.org/
specs:
- CFPropertyList (3.0.5)
+ CFPropertyList (3.0.6)
rexml
ast (2.4.2)
atomos (0.1.3)
@@ -50,4 +50,4 @@ DEPENDENCIES
xcodeproj
BUNDLED WITH
- 2.3.11
+ 2.4.10
diff --git a/android/app/build.gradle b/android/app/build.gradle
index 465dc03df..924dbc2f8 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -10,6 +10,8 @@ plugins {
id("org.jetbrains.kotlin.android")
}
+checkEnvironment()
+
def reactNativePath = file(findNodeModulesPath("react-native", rootDir))
if (autodetectReactNativeVersion || enableNewArchitecture) {
diff --git a/android/app/src/main/jni/CMakeLists.txt b/android/app/src/main/jni/CMakeLists.txt
index 4d2caf9aa..0212e7205 100644
--- a/android/app/src/main/jni/CMakeLists.txt
+++ b/android/app/src/main/jni/CMakeLists.txt
@@ -13,7 +13,12 @@ set(REACTTESTAPP_SOURCE_FILES
)
# Suppress 'Manually-specified variables were not used by the project' warning
-set(UNUSED_VARIABLES ${REACT_COMMON_DIR} ${REACT_JNILIBS_DIR})
+set(UNUSED_VARIABLES
+ ${NODE_MODULES_DIR} # No longer used in 0.72
+ ${REACT_ANDROID_BUILD_DIR} # No longer used in 0.72
+ ${REACT_COMMON_DIR}
+ ${REACT_JNILIBS_DIR}
+)
if(DEFINED REACT_ANDROID_DIR)
# New architecture
diff --git a/android/dependencies.gradle b/android/dependencies.gradle
index 7bb797f51..a6249d372 100644
--- a/android/dependencies.gradle
+++ b/android/dependencies.gradle
@@ -5,6 +5,8 @@ static String getKspVersion(String kotlinVersion) {
return [
// Run `scripts/update-ksp-versions.mjs` to update this list
// update-ksp-versions start
+ "1.8.21-1.0.11",
+ "1.8.20-1.0.11",
"1.8.10-1.0.9",
"1.8.0-1.0.9",
"1.7.22-1.0.8",
diff --git a/android/test-app-util.gradle b/android/test-app-util.gradle
index ab7c81cbc..337e3de15 100644
--- a/android/test-app-util.gradle
+++ b/android/test-app-util.gradle
@@ -6,6 +6,33 @@ import java.security.MessageDigest
ext.manifest = null
+ext.checkEnvironment = {
+ def (major, minor, patch) = gradle.gradleVersion.findAll(/\d+/)
+ def gradleVersion = (major as int) * 10000 + (minor as int) * 100 + (patch as int)
+ if (reactNativeVersion > 0 && reactNativeVersion < 7200) {
+ if (gradleVersion < 70501 || gradleVersion >= 80000) {
+ logger.warn([
+ "Latest Gradle 7.x is required for current React Native version. ",
+ "Run the following command in the 'android' folder to install a supported version: ",
+ "./gradlew wrapper --gradle-version=7.6.1",
+ ].join(""))
+ }
+ } else {
+ // Gradle 7.5+ seems to be working with 0.72 so we will only recommend a
+ // newer version if it's older.
+ if (gradleVersion < 70501) {
+ logger.warn([
+ "Latest Gradle 8.0.x is recommended for React Native 0.72 and higher. ",
+ "Run the following command in the 'android' folder to install a supported version: ",
+ "./gradlew wrapper --gradle-version=8.0.2",
+ "\n\n",
+ "If you still need to work with older versions of React Native, ",
+ "Gradle 7.5.1+ should still work."
+ ].join(""))
+ }
+ }
+}
+
ext.findFile = { fileName ->
def currentDirPath = rootDir == null ? null : rootDir.toString()
diff --git a/example/android/gradle.properties b/example/android/gradle.properties
index 4dcd11227..a951019e8 100644
--- a/example/android/gradle.properties
+++ b/example/android/gradle.properties
@@ -29,7 +29,7 @@ android.enableJetifier=true
# Version of Flipper to use with React Native. Default value is whatever React
# Native defaults to. To disable Flipper, set it to `false`.
-#FLIPPER_VERSION=0.125.0
+#FLIPPER_VERSION=0.182.0
# Enable Fabric at runtime.
#USE_FABRIC=1
diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/example/android/gradle/wrapper/gradle-wrapper.properties
index ae04661ee..774fae876 100644
--- a/example/android/gradle/wrapper/gradle-wrapper.properties
+++ b/example/android/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/example/package.json b/example/package.json
index 785a94377..e2e6f42c5 100644
--- a/example/package.json
+++ b/example/package.json
@@ -18,9 +18,9 @@
},
"peerDependencies": {
"react": "~17.0.1 || ~18.0.0 || ~18.1.0 || ~18.2.0",
- "react-native": "^0.0.0-0 || 0.64 - 0.71 || 1000.0.0",
+ "react-native": "^0.0.0-0 || 0.64 - 0.72 || 1000.0.0",
"react-native-macos": "^0.0.0-0 || 0.64 || 0.66 || 0.68 || 0.71",
- "react-native-windows": "^0.0.0-0 || 0.64 - 0.71"
+ "react-native-windows": "^0.0.0-0 || 0.64 - 0.72"
},
"devDependencies": {
"@babel/core": "^7.1.6",
diff --git a/package.json b/package.json
index e21e14a51..848d8c605 100644
--- a/package.json
+++ b/package.json
@@ -95,9 +95,9 @@
"@react-native-community/cli-platform-ios": ">=5.0",
"mustache": "^4.0.0",
"react": "~17.0.1 || ~18.0.0 || ~18.1.0 || ~18.2.0",
- "react-native": "^0.0.0-0 || 0.64 - 0.71 || 1000.0.0",
+ "react-native": "^0.0.0-0 || 0.64 - 0.72 || 1000.0.0",
"react-native-macos": "^0.0.0-0 || 0.64 || 0.66 || 0.68 || 0.71",
- "react-native-windows": "^0.0.0-0 || 0.64 - 0.71"
+ "react-native-windows": "^0.0.0-0 || 0.64 - 0.72"
},
"peerDependenciesMeta": {
"@expo/config-plugins": {
diff --git a/scripts/android-nightly.patch b/scripts/android-nightly.patch
index 1159cadc3..b29709c12 100644
--- a/scripts/android-nightly.patch
+++ b/scripts/android-nightly.patch
@@ -1,39 +1,3 @@
-diff --git a/example/App.js b/example/App.js
-index c9cd14d..f63758d 100644
---- a/example/App.js
-+++ b/example/App.js
-@@ -2,6 +2,7 @@
- import React, { useCallback, useMemo, useState } from "react";
- import {
- NativeModules,
-+ SafeAreaView,
- ScrollView,
- StatusBar,
- StyleSheet,
-@@ -10,7 +11,6 @@ import {
- useColorScheme,
- View,
- } from "react-native";
--import { SafeAreaProvider, SafeAreaView } from "react-native-safe-area-context";
- // @ts-expect-error
- import { version as coreVersion } from "react-native/Libraries/Core/ReactNativeVersion";
- import { Colors, Header } from "react-native/Libraries/NewAppScreen";
-@@ -169,7 +169,6 @@ const App = ({ concurrentRoot }) => {
- );
-
- return (
--
-
-
- {
-
-
-
--
- );
- };
-
diff --git a/example/package.json b/example/package.json
index 9c2e1aa..94fb85e 100644
--- a/example/package.json
diff --git a/scripts/disable-safe-area-context.patch b/scripts/disable-safe-area-context.patch
new file mode 100644
index 000000000..2403be5ce
--- /dev/null
+++ b/scripts/disable-safe-area-context.patch
@@ -0,0 +1,36 @@
+diff --git a/example/App.js b/example/App.js
+index c9cd14d..f63758d 100644
+--- a/example/App.js
++++ b/example/App.js
+@@ -2,6 +2,7 @@
+ import React, { useCallback, useMemo, useState } from "react";
+ import {
+ NativeModules,
++ SafeAreaView,
+ ScrollView,
+ StatusBar,
+ StyleSheet,
+@@ -10,7 +11,6 @@ import {
+ useColorScheme,
+ View,
+ } from "react-native";
+-import { SafeAreaProvider, SafeAreaView } from "react-native-safe-area-context";
+ // @ts-expect-error
+ import { version as coreVersion } from "react-native/Libraries/Core/ReactNativeVersion";
+ import { Colors, Header } from "react-native/Libraries/NewAppScreen";
+@@ -169,7 +169,6 @@ const App = ({ concurrentRoot }) => {
+ );
+
+ return (
+-
+
+
+ {
+
+
+
+-
+ );
+ };
+
diff --git a/scripts/test-matrix.sh b/scripts/test-matrix.sh
index 4cbbc625b..4b69df1b6 100755
--- a/scripts/test-matrix.sh
+++ b/scripts/test-matrix.sh
@@ -93,6 +93,7 @@ echo
popd 1> /dev/null
prepare
# `react-native-safe-area-context` doesn't support latest New Arch changes
+git apply ../scripts/disable-safe-area-context.patch
sed -i '' 's/"react-native-safe-area-context": ".[.0-9]*",//' package.json
echo
@@ -137,4 +138,4 @@ echo "│ Initialize new app │"
echo "└─────────────────────┘"
echo
-yarn react-native init-test-app --destination template-example --name TemplateExample --platform android,ios
+GIT_IGNORE_FILE=".gitignore" yarn react-native init-test-app --destination template-example --name TemplateExample --platform android,ios
diff --git a/scripts/update-ksp-versions.mjs b/scripts/update-ksp-versions.mjs
index 89f748fc7..a4294bf5a 100755
--- a/scripts/update-ksp-versions.mjs
+++ b/scripts/update-ksp-versions.mjs
@@ -10,6 +10,10 @@ const artifactId = "com.google.devtools.ksp.gradle.plugin";
const rows = 50;
const searchUrl = `https://search.maven.org/solrsearch/select?q=g:%22${groupId}%22+AND+a:%22${artifactId}%22&core=gav&rows=${rows}&wt=json`;
+/**
+ * @param {{ docs?: { id: string; g: string; a: string; v: string; }[]; }} response
+ * @returns {string[]}
+ */
function extractVersions(response) {
if (!Array.isArray(response.docs)) {
return [];
@@ -25,6 +29,10 @@ function extractVersions(response) {
return Object.values(versionMap);
}
+/**
+ * @param {string} output
+ * @param {string[]} versions
+ */
function update(output, versions) {
const startMarker = "// update-ksp-versions start";
const endMarker = "// update-ksp-versions end";
@@ -35,7 +43,11 @@ function update(output, versions) {
new RegExp(`${startMarker}.*${endMarker}`, "s"),
[startMarker, ...versions.map((v) => `"${v}",`), endMarker].join(separator)
);
- fs.writeFileSync(output, updated);
+
+ if (updated !== src) {
+ fs.writeFileSync(output, updated);
+ console.log(`Updated '${dependenciesGradle}'`);
+ }
}
function main() {
diff --git a/yarn.lock b/yarn.lock
index bae260efa..ece571c3e 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -5470,9 +5470,9 @@ __metadata:
react-native-windows: ^0.71.4
peerDependencies:
react: ~17.0.1 || ~18.0.0 || ~18.1.0 || ~18.2.0
- react-native: ^0.0.0-0 || 0.64 - 0.71 || 1000.0.0
+ react-native: ^0.0.0-0 || 0.64 - 0.72 || 1000.0.0
react-native-macos: ^0.0.0-0 || 0.64 || 0.66 || 0.68 || 0.71
- react-native-windows: ^0.0.0-0 || 0.64 - 0.71
+ react-native-windows: ^0.0.0-0 || 0.64 - 0.72
languageName: unknown
linkType: soft
@@ -9915,9 +9915,9 @@ fsevents@^2.3.2:
"@react-native-community/cli-platform-ios": ">=5.0"
mustache: ^4.0.0
react: ~17.0.1 || ~18.0.0 || ~18.1.0 || ~18.2.0
- react-native: ^0.0.0-0 || 0.64 - 0.71 || 1000.0.0
+ react-native: ^0.0.0-0 || 0.64 - 0.72 || 1000.0.0
react-native-macos: ^0.0.0-0 || 0.64 || 0.66 || 0.68 || 0.71
- react-native-windows: ^0.0.0-0 || 0.64 - 0.71
+ react-native-windows: ^0.0.0-0 || 0.64 - 0.72
peerDependenciesMeta:
"@expo/config-plugins":
optional: true