diff --git a/apps/mobile/.gitignore b/apps/mobile/.gitignore
index 6dc2958..1417bb9 100644
--- a/apps/mobile/.gitignore
+++ b/apps/mobile/.gitignore
@@ -65,5 +65,5 @@ yarn-error.log
# testing
/coverage
-android/app/release
-play-store/mancala-upload-key.jks
\ No newline at end of file
+android/release_android.sh
+android/app/mancala-upload-key.jks
diff --git a/apps/mobile/Gemfile b/apps/mobile/Gemfile
index 8d72c37..6a4c5f1 100644
--- a/apps/mobile/Gemfile
+++ b/apps/mobile/Gemfile
@@ -3,7 +3,14 @@ source 'https://rubygems.org'
# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version
ruby ">= 2.6.10"
-# Cocoapods 1.15 introduced a bug which break the build. We will remove the upper
-# bound in the template on Cocoapods with next React Native release.
-gem 'cocoapods', '>= 1.13', '< 1.15'
-gem 'activesupport', '>= 6.1.7.5', '< 7.1.0'
+# Exclude problematic versions of cocoapods and activesupport that causes build failures.
+gem 'cocoapods', '>= 1.13', '!= 1.15.0', '!= 1.15.1'
+gem 'activesupport', '>= 6.1.7.5', '!= 7.1.0'
+gem 'xcodeproj', '< 1.26.0'
+gem 'concurrent-ruby', '< 1.3.4'
+
+# Ruby 3.4.0 has removed some libraries from the standard library.
+gem 'bigdecimal'
+gem 'logger'
+gem 'benchmark'
+gem 'mutex_m'
diff --git a/apps/mobile/__tests__/App.test.tsx b/apps/mobile/__tests__/App.test.tsx
index fe831ed..e532f70 100644
--- a/apps/mobile/__tests__/App.test.tsx
+++ b/apps/mobile/__tests__/App.test.tsx
@@ -2,16 +2,12 @@
* @format
*/
-import 'react-native';
import React from 'react';
-import App from '../src/App';
+import ReactTestRenderer from 'react-test-renderer';
+import App from '../App';
-// Note: import explicitly to use the types shipped with jest.
-import {it} from '@jest/globals';
-
-// Note: test renderer must be required after react-native.
-import renderer from 'react-test-renderer';
-
-it('renders correctly', () => {
- renderer.create();
+test('renders correctly', async () => {
+ await ReactTestRenderer.act(() => {
+ ReactTestRenderer.create();
+ });
});
diff --git a/apps/mobile/android/app/build.gradle b/apps/mobile/android/app/build.gradle
index c3f9a30..0788c59 100644
--- a/apps/mobile/android/app/build.gradle
+++ b/apps/mobile/android/app/build.gradle
@@ -8,14 +8,14 @@ apply plugin: "com.facebook.react"
*/
react {
/* Folders */
- // The root of your project, i.e. where "package.json" lives. Default is '..'
- // root = file("../")
- // The folder where the react-native NPM package is. Default is ../node_modules/react-native
- // reactNativeDir = file("../node_modules/react-native")
- // The folder where the react-native Codegen package is. Default is ../node_modules/@react-native/codegen
- // codegenDir = file("../node_modules/@react-native/codegen")
- // The cli.js file which is the React Native CLI entrypoint. Default is ../node_modules/react-native/cli.js
- // cliFile = file("../node_modules/react-native/cli.js")
+ // The root of your project, i.e. where "package.json" lives. Default is '../..'
+ // root = file("../../")
+ // The folder where the react-native NPM package is. Default is ../../node_modules/react-native
+ // reactNativeDir = file("../../node_modules/react-native")
+ // The folder where the react-native Codegen package is. Default is ../../node_modules/@react-native/codegen
+ // codegenDir = file("../../node_modules/@react-native/codegen")
+ // The cli.js file which is the React Native CLI entrypoint. Default is ../../node_modules/react-native/cli.js
+ // cliFile = file("../../node_modules/react-native/cli.js")
/* Variants */
// The list of variants to that are debuggable. For those we're going to
@@ -49,6 +49,9 @@ react {
//
// The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map"
// hermesFlags = ["-O", "-output-source-map"]
+
+ /* Autolinking */
+ autolinkLibrariesWithApp()
}
/**
@@ -60,14 +63,21 @@ def enableProguardInReleaseBuilds = false
* The preferred build flavor of JavaScriptCore (JSC)
*
* For example, to use the international variant, you can use:
- * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`
+ * `def jscFlavor = io.github.react-native-community:jsc-android-intl:2026004.+`
*
* The international variant includes ICU i18n library and necessary data
* allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that
* give correct results when using with locales other than en-US. Note that
* this variant is about 6MiB larger per architecture than default.
*/
-def jscFlavor = 'org.webkit:android-jsc:+'
+def jscFlavor = 'io.github.react-native-community:jsc-android:2026004.+'
+
+def hasReleaseSigningEnv() {
+ return System.getenv("MANCALA_UPLOAD_STORE_FILE") &&
+ System.getenv("MANCALA_UPLOAD_STORE_PASSWORD") &&
+ System.getenv("MANCALA_UPLOAD_KEY_ALIAS") &&
+ System.getenv("MANCALA_UPLOAD_KEY_PASSWORD")
+}
android {
ndkVersion rootProject.ext.ndkVersion
@@ -79,8 +89,8 @@ android {
applicationId "com.mancala_mobile"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
- versionCode 4
- versionName "0.4.3"
+ versionCode 8
+ versionName "0.5.0"
}
signingConfigs {
debug {
@@ -89,15 +99,23 @@ android {
keyAlias 'androiddebugkey'
keyPassword 'android'
}
+ release {
+ if (hasReleaseSigningEnv()) {
+ storeFile file(System.getenv("MANCALA_UPLOAD_STORE_FILE"))
+ storePassword System.getenv("MANCALA_UPLOAD_STORE_PASSWORD")
+ keyAlias System.getenv("MANCALA_UPLOAD_KEY_ALIAS")
+ keyPassword System.getenv("MANCALA_UPLOAD_KEY_PASSWORD")
+ } else {
+ println "⚠️ Warning: Release signing env variables not set. Release build will not be signed."
+ }
+ }
}
buildTypes {
debug {
signingConfig signingConfigs.debug
}
release {
- // Caution! In production, you need to generate your own keystore file.
- // see https://reactnative.dev/docs/signed-apk-android.
- signingConfig signingConfigs.debug
+ signingConfig signingConfigs.release
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
}
@@ -107,7 +125,6 @@ android {
dependencies {
// The version of react-native is set by the React Native Gradle Plugin
implementation("com.facebook.react:react-android")
- implementation("com.facebook.react:flipper-integration")
if (hermesEnabled.toBoolean()) {
implementation("com.facebook.react:hermes-android")
@@ -115,5 +132,3 @@ dependencies {
implementation jscFlavor
}
}
-
-apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)
diff --git a/apps/mobile/android/app/src/debug/AndroidManifest.xml b/apps/mobile/android/app/src/debug/AndroidManifest.xml
deleted file mode 100644
index eb98c01..0000000
--- a/apps/mobile/android/app/src/debug/AndroidManifest.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
diff --git a/apps/mobile/android/app/src/main/AndroidManifest.xml b/apps/mobile/android/app/src/main/AndroidManifest.xml
index 38d4ac3..021c64c 100644
--- a/apps/mobile/android/app/src/main/AndroidManifest.xml
+++ b/apps/mobile/android/app/src/main/AndroidManifest.xml
@@ -7,7 +7,9 @@
android:label="@string/app_name"
android:icon="@drawable/mancala"
android:allowBackup="false"
- android:theme="@style/AppTheme">
+ android:theme="@style/AppTheme"
+ android:usesCleartextTraffic="${usesCleartextTraffic}"
+ android:supportsRtl="true">
=
- PackageList(this).packages.apply {
- // Packages that cannot be autolinked yet can be added manually here, for example:
- // add(MyReactNativePackage())
- }
-
- override fun getJSMainModuleName(): String = "index"
-
- override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG
-
- override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
- override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED
- }
-
- override val reactHost: ReactHost
- get() = getDefaultReactHost(this.applicationContext, reactNativeHost)
+ override val reactHost: ReactHost by lazy {
+ getDefaultReactHost(
+ context = applicationContext,
+ packageList =
+ PackageList(this).packages.apply {
+ // Packages that cannot be autolinked yet can be added manually here, for example:
+ // add(MyReactNativePackage())
+ },
+ )
+ }
override fun onCreate() {
super.onCreate()
- SoLoader.init(this, false)
- if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
- // If you opted-in for the New Architecture, we load the native entry point for this app.
- load()
- }
- ReactNativeFlipper.initializeFlipper(this, reactNativeHost.reactInstanceManager)
+ loadReactNative(this)
}
}
diff --git a/apps/mobile/android/app/src/main/res/drawable/rn_edit_text_material.xml b/apps/mobile/android/app/src/main/res/drawable/rn_edit_text_material.xml
index 73b37e4..5c25e72 100644
--- a/apps/mobile/android/app/src/main/res/drawable/rn_edit_text_material.xml
+++ b/apps/mobile/android/app/src/main/res/drawable/rn_edit_text_material.xml
@@ -17,7 +17,8 @@
android:insetLeft="@dimen/abc_edit_text_inset_horizontal_material"
android:insetRight="@dimen/abc_edit_text_inset_horizontal_material"
android:insetTop="@dimen/abc_edit_text_inset_top_material"
- android:insetBottom="@dimen/abc_edit_text_inset_bottom_material">
+ android:insetBottom="@dimen/abc_edit_text_inset_bottom_material"
+ >