From acddb9a001f08bdaafb0c78a7283e712895699b2 Mon Sep 17 00:00:00 2001 From: Phil Pluckthun Date: Thu, 21 May 2026 11:02:11 +0100 Subject: [PATCH 01/28] chore: Update runs-on in publish-canaries workflow (#46076) --- .github/workflows/publish-canaries.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish-canaries.yml b/.github/workflows/publish-canaries.yml index b786a2bf202b4f..66b57b89554846 100644 --- a/.github/workflows/publish-canaries.yml +++ b/.github/workflows/publish-canaries.yml @@ -20,7 +20,7 @@ concurrency: jobs: publish-canaries: if: github.repository == 'expo/expo' - runs-on: macos-26-arm64 + runs-on: macos-26 timeout-minutes: 120 env: NODE_AUTH_TOKEN: ${{ secrets.EXPO_BOT_NPM_TOKEN }} From 2e3e8a28ea97a8b9e3faa6b9ccae51d2e91a30e2 Mon Sep 17 00:00:00 2001 From: Alan Hughes Date: Thu, 21 May 2026 11:12:52 +0100 Subject: [PATCH 02/28] Publish packages expo-router@56.2.4 expo-module-template@56.0.9 expo-template-tabs@56.0.16 expo-template-default@56.0.16 expo-template-blank-typescript@56.0.16 expo-template-blank@56.0.16 expo-template-bare-minimum@56.0.16 @expo/cli@56.1.9 expo@56.0.2 expo-observe@56.0.13 expo-image-manipulator@56.0.12 --- apps/bare-expo/ios/Podfile.lock | 18 +++++++++--------- apps/expo-go/ios/Podfile.lock | 16 ++++++++-------- packages/@expo/cli/CHANGELOG.md | 4 ++++ packages/@expo/cli/package.json | 2 +- packages/expo-image-manipulator/CHANGELOG.md | 4 ++++ .../android/build.gradle | 4 ++-- packages/expo-image-manipulator/package.json | 2 +- packages/expo-module-template/$package.json | 2 +- packages/expo-module-template/package.json | 2 +- packages/expo-observe/package.json | 2 +- packages/expo-router/CHANGELOG.md | 4 ++++ packages/expo-router/android/build.gradle | 4 ++-- packages/expo-router/package.json | 2 +- packages/expo/CHANGELOG.md | 4 ++++ packages/expo/android/build.gradle | 4 ++-- packages/expo/bundledNativeModules.json | 8 ++++---- packages/expo/package.json | 4 ++-- pnpm-lock.yaml | 2 +- .../expo-template-bare-minimum/package.json | 4 ++-- .../package.json | 4 ++-- templates/expo-template-blank/package.json | 4 ++-- templates/expo-template-default/package.json | 6 +++--- templates/expo-template-tabs/package.json | 6 +++--- 23 files changed, 64 insertions(+), 48 deletions(-) diff --git a/apps/bare-expo/ios/Podfile.lock b/apps/bare-expo/ios/Podfile.lock index 34707195192beb..fc28b00443c6d9 100644 --- a/apps/bare-expo/ios/Podfile.lock +++ b/apps/bare-expo/ios/Podfile.lock @@ -38,7 +38,7 @@ PODS: - EXManifests/Tests (56.0.4): - ExpoModulesCore - ExpoModulesTestCore - - Expo (56.0.1): + - Expo (56.0.2): - ExpoModulesCore - ExpoModulesJSI - hermes-engine @@ -299,7 +299,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - Expo/Tests (56.0.1): + - Expo/Tests (56.0.2): - ExpoModulesCore - ExpoModulesJSI - ExpoModulesTestCore @@ -455,7 +455,7 @@ PODS: - SDWebImageAVIFCoder (~> 0.11.0) - SDWebImageSVGCoder (~> 1.7.0) - SDWebImageWebPCoder (~> 0.14.6) - - ExpoImageManipulator (56.0.11): + - ExpoImageManipulator (56.0.12): - ExpoModulesCore - SDWebImageWebPCoder - ExpoImagePicker (56.0.11): @@ -588,7 +588,7 @@ PODS: - ExpoNotifications/Tests (56.0.11): - ExpoModulesCore - ExpoModulesTestCore - - ExpoObserve (56.0.12): + - ExpoObserve (56.0.13): - EASClient - ExpoAppMetrics - ExpoModulesCore @@ -613,7 +613,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - ExpoObserve/Tests (56.0.12): + - ExpoObserve/Tests (56.0.13): - EASClient - ExpoAppMetrics - ExpoModulesCore @@ -3967,7 +3967,7 @@ SPEC CHECKSUMS: EXConstants: 13f6719b5c0d537be9c7b169d54445b063f95213 EXJSONUtils: dba2755f4e24009eaf87a876b2d615ea06c16e42 EXManifests: 7e19be8df665a338493060a419847dae76ffcd43 - Expo: 0794b44ac16db51ced9ce6a9402f3cdc93aaedce + Expo: ee6ac2312c750f206f2b7b5bb81660170df4c208 expo-dev-client: e7bdc2fee0cedb048f283eafd8439a09b6028a8a expo-dev-launcher: 2aec76e53c72eb67e0d0e4a4495337293cd13af9 expo-dev-menu: 533fd236470d22a1d16bb810fc6823171723a9e1 @@ -3975,7 +3975,7 @@ SPEC CHECKSUMS: ExpoAgeRange: c652074c8c24bf52bd3201ecd017040c867ba58b ExpoAppIntegrity: 43cc62f24c533b960de07b5038568acedc3a567a ExpoAppleAuthentication: 47f6f6c6722a7facef29d15397635b785086bc5e - ExpoAppMetrics: a9aca0e3a26a8d1a57f7f47b9f109f96c1964d95 + ExpoAppMetrics: bb15aff1cbe0f648f6bb6644a6efaa61f1eb4efa ExpoAsset: 051b7b3bf1edecb3d8f3643b0b9dc3e308d43cb4 ExpoAudio: ad5b6e07a7ff22b89e7683d8a12cf51a54f6b90b ExpoBackgroundFetch: 52cefdd114179fba877d76fdcef2aa694cfce0fe @@ -4001,7 +4001,7 @@ SPEC CHECKSUMS: ExpoGlassEffect: 7d4233dc0727ee2b28dd757eda70e1b6abf662fd ExpoHaptics: 89364cf3c3ca2cfd54cafed42f3be3169bab6d42 ExpoImage: 08e5a5b1071b1e76793582f152e0e5eebf7269b9 - ExpoImageManipulator: 1b6a482c65e99545ee407642aa0aa4b38176270e + ExpoImageManipulator: f652875e5ea6b7794d691679dedcfc4809926716 ExpoImagePicker: 13cfc44f02b3b6230715c138b8682f8832d52433 ExpoInsights: 215d27779a8e49c7356c70eca3a1ce8a7edd78c4 ExpoKeepAwake: 359c47a1d9ccc3a3c519bca6e39562cce230c5bb @@ -4023,7 +4023,7 @@ SPEC CHECKSUMS: ExpoModulesWorkletsAdapter: 4d065a4e45a12246e2a111fbd4727bb98c74e691 ExpoNetwork: c9651806f67c5fe93d221f9b4533c98ae6833bb9 ExpoNotifications: a360386d2944c24e5ce4543d8a5b13d01f994527 - ExpoObserve: 546d058d32eae5a794f3131fd7908a7af757a2a4 + ExpoObserve: bbc8aec6288d4b3e3b45ac1d417d1411c34d3809 ExpoPrint: 6b5bcac4492908b7e28144c2e7265c1c5ee4ade0 ExpoScreenCapture: c388565b6244aec9d96c18941efbee8655b2fec2 ExpoScreenOrientation: 733d1dc1fa97f2716442d4fa2b0abe1457d9d2dd diff --git a/apps/expo-go/ios/Podfile.lock b/apps/expo-go/ios/Podfile.lock index fdb8bc1c1f4230..679ba3de12067c 100644 --- a/apps/expo-go/ios/Podfile.lock +++ b/apps/expo-go/ios/Podfile.lock @@ -20,7 +20,7 @@ PODS: - EXManifests/Tests (56.0.4): - ExpoModulesCore - ExpoModulesTestCore - - Expo (56.0.1): + - Expo (56.0.2): - boost - DoubleConversion - ExpoModulesCore @@ -52,7 +52,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - Expo/Tests (56.0.1): + - Expo/Tests (56.0.2): - boost - DoubleConversion - ExpoModulesCore @@ -158,7 +158,7 @@ PODS: - SDWebImageAVIFCoder (~> 0.11.0) - SDWebImageSVGCoder (~> 1.7.0) - SDWebImageWebPCoder (~> 0.14.6) - - ExpoImageManipulator (56.0.11): + - ExpoImageManipulator (56.0.12): - ExpoModulesCore - SDWebImageWebPCoder - ExpoImagePicker (56.0.11): @@ -275,10 +275,10 @@ PODS: - ExpoModulesTestCore - ExpoPrint (56.0.3): - ExpoModulesCore - - ExpoRouter (56.2.3): + - ExpoRouter (56.2.4): - ExpoModulesCore - RNScreens - - ExpoRouter/Tests (56.2.3): + - ExpoRouter/Tests (56.2.4): - ExpoModulesCore - ExpoModulesTestCore - RNScreens @@ -4643,7 +4643,7 @@ SPEC CHECKSUMS: EXConstants: 13f6719b5c0d537be9c7b169d54445b063f95213 EXJSONUtils: dba2755f4e24009eaf87a876b2d615ea06c16e42 EXManifests: 7e19be8df665a338493060a419847dae76ffcd43 - Expo: 1947f699c1f4db845a6d7bf63a791d8bc89241be + Expo: 8f831e59834e45c8d8fb7d5926c3470c6fe3c331 ExpoAsset: 051b7b3bf1edecb3d8f3643b0b9dc3e308d43cb4 ExpoAudio: ad5b6e07a7ff22b89e7683d8a12cf51a54f6b90b ExpoBackgroundFetch: 52cefdd114179fba877d76fdcef2aa694cfce0fe @@ -4668,7 +4668,7 @@ SPEC CHECKSUMS: ExpoGlassEffect: 7d4233dc0727ee2b28dd757eda70e1b6abf662fd ExpoHaptics: 89364cf3c3ca2cfd54cafed42f3be3169bab6d42 ExpoImage: 08e5a5b1071b1e76793582f152e0e5eebf7269b9 - ExpoImageManipulator: 1b6a482c65e99545ee407642aa0aa4b38176270e + ExpoImageManipulator: f652875e5ea6b7794d691679dedcfc4809926716 ExpoImagePicker: 13cfc44f02b3b6230715c138b8682f8832d52433 ExpoKeepAwake: 359c47a1d9ccc3a3c519bca6e39562cce230c5bb ExpoLinearGradient: 16c2b9c6105444883d34958d573725de1293b8d0 @@ -4687,7 +4687,7 @@ SPEC CHECKSUMS: ExpoNetwork: c9651806f67c5fe93d221f9b4533c98ae6833bb9 ExpoNotifications: a360386d2944c24e5ce4543d8a5b13d01f994527 ExpoPrint: 6b5bcac4492908b7e28144c2e7265c1c5ee4ade0 - ExpoRouter: 4ba271124971ccf2829ca20666e483006aeaaa44 + ExpoRouter: 6260cedcbdcc49f30bfc1ccdb1cf89d2ddf0a9b3 ExpoScreenCapture: c388565b6244aec9d96c18941efbee8655b2fec2 ExpoScreenOrientation: 6462afcecade499a169b71f2aadd58bf169e93c5 ExpoSecureStore: 4d1c0303f8ead59766d7466c3c14d0ce4336fc0f diff --git a/packages/@expo/cli/CHANGELOG.md b/packages/@expo/cli/CHANGELOG.md index 9ec97affb10190..2156ae92113f94 100644 --- a/packages/@expo/cli/CHANGELOG.md +++ b/packages/@expo/cli/CHANGELOG.md @@ -10,6 +10,10 @@ ### 💡 Others +## 56.1.9 — 2026-05-21 + +_This version does not introduce any user-facing changes._ + ## 56.1.8 — 2026-05-21 _This version does not introduce any user-facing changes._ diff --git a/packages/@expo/cli/package.json b/packages/@expo/cli/package.json index f22e07245a21f4..85df0c18db5cdd 100644 --- a/packages/@expo/cli/package.json +++ b/packages/@expo/cli/package.json @@ -1,6 +1,6 @@ { "name": "@expo/cli", - "version": "56.1.8", + "version": "56.1.9", "description": "The Expo CLI", "main": "main.js", "bin": { diff --git a/packages/expo-image-manipulator/CHANGELOG.md b/packages/expo-image-manipulator/CHANGELOG.md index d59fa0a16f0203..7f7879e9dd2a59 100644 --- a/packages/expo-image-manipulator/CHANGELOG.md +++ b/packages/expo-image-manipulator/CHANGELOG.md @@ -10,6 +10,10 @@ ### 💡 Others +## 56.0.12 — 2026-05-21 + +_This version does not introduce any user-facing changes._ + ## 56.0.11 — 2026-05-20 _This version does not introduce any user-facing changes._ diff --git a/packages/expo-image-manipulator/android/build.gradle b/packages/expo-image-manipulator/android/build.gradle index 9de680831975dd..64334aa7377e5c 100644 --- a/packages/expo-image-manipulator/android/build.gradle +++ b/packages/expo-image-manipulator/android/build.gradle @@ -4,13 +4,13 @@ plugins { } group = 'host.exp.exponent' -version = '56.0.11' +version = '56.0.12' android { namespace "expo.modules.imagemanipulator" defaultConfig { versionCode 23 - versionName "56.0.11" + versionName "56.0.12" } } diff --git a/packages/expo-image-manipulator/package.json b/packages/expo-image-manipulator/package.json index f7ee298715b170..19850ddc2d9276 100644 --- a/packages/expo-image-manipulator/package.json +++ b/packages/expo-image-manipulator/package.json @@ -1,6 +1,6 @@ { "name": "expo-image-manipulator", - "version": "56.0.11", + "version": "56.0.12", "description": "Provides functions that let you manipulation images on the local file system, eg: resize, crop.", "main": "src/index.ts", "types": "build/index.d.ts", diff --git a/packages/expo-module-template/$package.json b/packages/expo-module-template/$package.json index 359a124a0dfe3e..405394509f990f 100644 --- a/packages/expo-module-template/$package.json +++ b/packages/expo-module-template/$package.json @@ -34,7 +34,7 @@ "babel-preset-expo": "~55.0.8", "eslint": "~9.39.4", "eslint-config-universe": "^15.0.3", - "expo": "^56.0.1", + "expo": "^56.0.2", "jest": "^29.7.0", "jest-expo": "~55.0.9", "prettier": "^3.0.0", diff --git a/packages/expo-module-template/package.json b/packages/expo-module-template/package.json index 4e4d07a21a6b56..67d637f518f09c 100644 --- a/packages/expo-module-template/package.json +++ b/packages/expo-module-template/package.json @@ -1,6 +1,6 @@ { "name": "expo-module-template", - "version": "56.0.8", + "version": "56.0.9", "description": "ExpoModuleTemplate standalone module", "scripts": {}, "keywords": [ diff --git a/packages/expo-observe/package.json b/packages/expo-observe/package.json index 61457ac05caae9..458027850705bb 100644 --- a/packages/expo-observe/package.json +++ b/packages/expo-observe/package.json @@ -1,7 +1,7 @@ { "name": "expo-observe", "title": "Expo Observe", - "version": "56.0.12", + "version": "56.0.13", "description": "Expo module that dispatches collected app metrics to EAS Observe", "main": "src/index.ts", "types": "build/index.d.ts", diff --git a/packages/expo-router/CHANGELOG.md b/packages/expo-router/CHANGELOG.md index f95058a8a28925..8168d72f6e3545 100644 --- a/packages/expo-router/CHANGELOG.md +++ b/packages/expo-router/CHANGELOG.md @@ -10,6 +10,10 @@ ### 💡 Others +## 56.2.4 — 2026-05-21 + +### 💡 Others + - [docs] Remove references to react-navigation's docs ([#46072](https://github.com/expo/expo/pull/46072) by [@Ubax](https://github.com/Ubax)) ## 56.2.3 — 2026-05-20 diff --git a/packages/expo-router/android/build.gradle b/packages/expo-router/android/build.gradle index 55b94b7adfab40..600f4ce360f3bd 100644 --- a/packages/expo-router/android/build.gradle +++ b/packages/expo-router/android/build.gradle @@ -4,13 +4,13 @@ plugins { } group = 'expo.modules.router' -version = '56.2.3' +version = '56.2.4' android { namespace "expo.modules.router" defaultConfig { versionCode 1 - versionName "56.2.3" + versionName "56.2.4" } lintOptions { abortOnError false diff --git a/packages/expo-router/package.json b/packages/expo-router/package.json index c19bbc5e164933..7b3969513d844f 100644 --- a/packages/expo-router/package.json +++ b/packages/expo-router/package.json @@ -1,6 +1,6 @@ { "name": "expo-router", - "version": "56.2.3", + "version": "56.2.4", "description": "Expo Router is a file-based router for React Native and web applications.", "author": "650 Industries, Inc.", "license": "MIT", diff --git a/packages/expo/CHANGELOG.md b/packages/expo/CHANGELOG.md index e0df6a321d9a39..5a870688882b18 100644 --- a/packages/expo/CHANGELOG.md +++ b/packages/expo/CHANGELOG.md @@ -10,6 +10,10 @@ ### 💡 Others +## 56.0.2 — 2026-05-21 + +_This version does not introduce any user-facing changes._ + ## 56.0.1 — 2026-05-21 _This version does not introduce any user-facing changes._ diff --git a/packages/expo/android/build.gradle b/packages/expo/android/build.gradle index 32e2cf964a966e..832b4a326512f3 100644 --- a/packages/expo/android/build.gradle +++ b/packages/expo/android/build.gradle @@ -10,7 +10,7 @@ buildscript { } group = 'host.exp.exponent' -version = '56.0.1' +version = '56.0.2' expoModule { // We can't prebuild the module because it depends on the generated files. @@ -21,7 +21,7 @@ android { namespace "expo.core" defaultConfig { versionCode 1 - versionName "56.0.1" + versionName "56.0.2" consumerProguardFiles("proguard-rules.pro") } testOptions { diff --git a/packages/expo/bundledNativeModules.json b/packages/expo/bundledNativeModules.json index 8beda47727442b..12642f90c31417 100644 --- a/packages/expo/bundledNativeModules.json +++ b/packages/expo/bundledNativeModules.json @@ -48,7 +48,7 @@ "expo-haptics": "~56.0.3", "expo-image": "~56.0.6", "expo-image-loader": "~56.0.3", - "expo-image-manipulator": "~56.0.11", + "expo-image-manipulator": "~56.0.12", "expo-image-picker": "~56.0.11", "expo-intent-launcher": "~56.0.4", "expo-insights": "~56.0.11", @@ -64,15 +64,15 @@ "expo-mcp": "~0.2.1", "expo-media-library": "~56.0.5", "expo-mesh-gradient": "~56.0.3", - "expo-module-template": "~56.0.8", + "expo-module-template": "~56.0.9", "expo-modules-core": "~56.0.11", "expo-navigation-bar": "~56.0.3", "expo-network": "~56.0.4", "expo-notifications": "~56.0.11", - "expo-observe": "~56.0.12", + "expo-observe": "~56.0.13", "expo-print": "~56.0.3", "expo-live-photo": "~56.0.3", - "expo-router": "~56.2.3", + "expo-router": "~56.2.4", "expo-screen-capture": "~56.0.4", "expo-screen-orientation": "~56.0.4", "expo-secure-store": "~56.0.3", diff --git a/packages/expo/package.json b/packages/expo/package.json index d70599cb39feb1..2997869af28f14 100644 --- a/packages/expo/package.json +++ b/packages/expo/package.json @@ -1,6 +1,6 @@ { "name": "expo", - "version": "56.0.1", + "version": "56.0.2", "description": "The Expo SDK", "main": "src/Expo.ts", "module": "src/Expo.ts", @@ -75,7 +75,7 @@ "homepage": "https://github.com/expo/expo/tree/main/packages/expo", "dependencies": { "@babel/runtime": "^7.20.0", - "@expo/cli": "workspace:^56.1.8", + "@expo/cli": "workspace:^56.1.9", "@expo/config": "workspace:~56.0.8", "@expo/config-plugins": "workspace:~56.0.7", "@expo/devtools": "workspace:~56.0.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5e7194cfb9fe1e..e485d834cc19f1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -3464,7 +3464,7 @@ importers: specifier: ^7.20.0 version: 7.29.2 '@expo/cli': - specifier: workspace:^56.1.8 + specifier: workspace:^56.1.9 version: link:../@expo/cli '@expo/config': specifier: workspace:~56.0.8 diff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json index 42666fee9c6e75..6188f97c14929d 100644 --- a/templates/expo-template-bare-minimum/package.json +++ b/templates/expo-template-bare-minimum/package.json @@ -2,7 +2,7 @@ "name": "expo-template-bare-minimum", "description": "This bare project template includes a minimal setup for using unimodules with React Native.", "license": "0BSD", - "version": "56.0.15", + "version": "56.0.16", "main": "index.js", "scripts": { "start": "expo start --dev-client", @@ -11,7 +11,7 @@ "web": "expo start --web" }, "dependencies": { - "expo": "~56.0.1", + "expo": "~56.0.2", "expo-status-bar": "~56.0.4", "react": "19.2.3", "react-native": "0.85.3" diff --git a/templates/expo-template-blank-typescript/package.json b/templates/expo-template-blank-typescript/package.json index 0896cc36fa05f8..73204e8e9b80aa 100644 --- a/templates/expo-template-blank-typescript/package.json +++ b/templates/expo-template-blank-typescript/package.json @@ -2,7 +2,7 @@ "name": "expo-template-blank-typescript", "description": "The Blank project template includes the minimum dependencies to run and an empty root component.", "license": "0BSD", - "version": "56.0.15", + "version": "56.0.16", "main": "index.ts", "scripts": { "start": "expo start", @@ -11,7 +11,7 @@ "web": "expo start --web" }, "dependencies": { - "expo": "~56.0.1", + "expo": "~56.0.2", "expo-status-bar": "~56.0.4", "react": "19.2.3", "react-native": "0.85.3" diff --git a/templates/expo-template-blank/package.json b/templates/expo-template-blank/package.json index 6e63939fdbcee2..9ec967283be069 100644 --- a/templates/expo-template-blank/package.json +++ b/templates/expo-template-blank/package.json @@ -2,7 +2,7 @@ "name": "expo-template-blank", "description": "The Blank project template includes the minimum dependencies to run and an empty root component.", "license": "0BSD", - "version": "56.0.15", + "version": "56.0.16", "main": "index.js", "scripts": { "start": "expo start", @@ -11,7 +11,7 @@ "web": "expo start --web" }, "dependencies": { - "expo": "~56.0.1", + "expo": "~56.0.2", "expo-status-bar": "~56.0.4", "react": "19.2.3", "react-native": "0.85.3" diff --git a/templates/expo-template-default/package.json b/templates/expo-template-default/package.json index 97640513826dde..67b70e4294b5a8 100644 --- a/templates/expo-template-default/package.json +++ b/templates/expo-template-default/package.json @@ -2,7 +2,7 @@ "name": "expo-template-default", "license": "0BSD", "main": "expo-router/entry", - "version": "56.0.15", + "version": "56.0.16", "scripts": { "start": "expo start", "reset-project": "node ./scripts/reset-project.js", @@ -13,14 +13,14 @@ }, "dependencies": { "@expo/ui": "~56.0.10", - "expo": "~56.0.1", + "expo": "~56.0.2", "expo-constants": "~56.0.13", "expo-device": "~56.0.4", "expo-font": "~56.0.5", "expo-glass-effect": "~56.0.4", "expo-image": "~56.0.6", "expo-linking": "~56.0.10", - "expo-router": "~56.2.3", + "expo-router": "~56.2.4", "expo-splash-screen": "~56.0.9", "expo-status-bar": "~56.0.4", "expo-symbols": "~56.0.5", diff --git a/templates/expo-template-tabs/package.json b/templates/expo-template-tabs/package.json index 9b4f531714ba51..8ebb7c8351a759 100644 --- a/templates/expo-template-tabs/package.json +++ b/templates/expo-template-tabs/package.json @@ -3,7 +3,7 @@ "main": "expo-router/entry", "description": "The Tab Navigation project template includes several example screens.", "license": "0BSD", - "version": "56.0.15", + "version": "56.0.16", "scripts": { "start": "expo start", "android": "expo start --android", @@ -11,11 +11,11 @@ "web": "expo start --web" }, "dependencies": { - "expo": "~56.0.1", + "expo": "~56.0.2", "expo-constants": "~56.0.13", "expo-font": "~56.0.5", "expo-linking": "~56.0.10", - "expo-router": "~56.2.3", + "expo-router": "~56.2.4", "expo-splash-screen": "~56.0.9", "expo-status-bar": "~56.0.4", "expo-symbols": "~56.0.5", From 62b820eecb1fbe40de1e66ac60771f5a05e04f60 Mon Sep 17 00:00:00 2001 From: Alan Hughes <30924086+alanjhughes@users.noreply.github.com> Date: Thu, 21 May 2026 11:23:35 +0100 Subject: [PATCH 03/28] [tools] Respect force (#46083) --- tools/src/publish-packages/tasks/selectPackagesToPublish.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/src/publish-packages/tasks/selectPackagesToPublish.ts b/tools/src/publish-packages/tasks/selectPackagesToPublish.ts index 8eb59e19424adc..d3cc39f0508a81 100644 --- a/tools/src/publish-packages/tasks/selectPackagesToPublish.ts +++ b/tools/src/publish-packages/tasks/selectPackagesToPublish.ts @@ -361,7 +361,7 @@ async function selectParcelsToPublish( if ( !(parcel.state.releaseVersion === null || parcel.state.releaseVersion === undefined) || skipped.has(packageName) || - !isParcelUnpublished(parcel) + (!options.force && !isParcelUnpublished(parcel)) ) { // Skip prompting if a release version is already set (chosen version or explicitly null) // or if the user previously chose to skip this package. From 06b1b2b2bd71ab3e2f5ca08f75eb227c35737705 Mon Sep 17 00:00:00 2001 From: Alan Hughes Date: Thu, 21 May 2026 11:25:24 +0100 Subject: [PATCH 04/28] Publish expo-camera, expo-image expo-image@56.0.7 expo-camera@56.0.6 --- apps/bare-expo/ios/Podfile.lock | 14 +++++++------- apps/expo-go/ios/Podfile.lock | 14 +++++++------- packages/expo-camera/CHANGELOG.md | 4 ++++ packages/expo-camera/android/build.gradle | 4 ++-- packages/expo-camera/package.json | 2 +- packages/expo-image/CHANGELOG.md | 4 ++++ packages/expo-image/android/build.gradle | 4 ++-- packages/expo-image/package.json | 2 +- packages/expo/bundledNativeModules.json | 4 ++-- templates/expo-template-default/package.json | 2 +- 10 files changed, 31 insertions(+), 23 deletions(-) diff --git a/apps/bare-expo/ios/Podfile.lock b/apps/bare-expo/ios/Podfile.lock index fc28b00443c6d9..97502d87cbf1df 100644 --- a/apps/bare-expo/ios/Podfile.lock +++ b/apps/bare-expo/ios/Podfile.lock @@ -405,9 +405,9 @@ PODS: - ExpoModulesCore - ExpoCalendar (56.0.7): - ExpoModulesCore - - ExpoCamera (56.0.5): + - ExpoCamera (56.0.6): - ExpoModulesCore - - ExpoCameraBarcodeScanning (56.0.5): + - ExpoCameraBarcodeScanning (56.0.6): - ExpoCamera - ZXingObjC/OneD - ZXingObjC/PDF417 @@ -440,14 +440,14 @@ PODS: - ExpoModulesCore - ExpoHaptics (56.0.3): - ExpoModulesCore - - ExpoImage (56.0.6): + - ExpoImage (56.0.7): - ExpoModulesCore - libavif/libdav1d - SDWebImage (~> 5.21.0) - SDWebImageAVIFCoder (~> 0.11.0) - SDWebImageSVGCoder (~> 1.7.0) - SDWebImageWebPCoder (~> 0.14.6) - - ExpoImage/Tests (56.0.6): + - ExpoImage/Tests (56.0.7): - ExpoModulesCore - ExpoModulesTestCore - libavif/libdav1d @@ -3986,8 +3986,8 @@ SPEC CHECKSUMS: ExpoBrightness: 49e17a1b53fd0070bc7d7a2255b00051e5c781b4 ExpoBrownfield: f267f4b94a0e4d2aee982c60c9c9881305853278 ExpoCalendar: a69d854621f6beb28aa57bb3a0cfbfb5174e4217 - ExpoCamera: 4d44aace75d08eeb91838a7d08345cd57b2c65f5 - ExpoCameraBarcodeScanning: 25b7b6ce09d5deb09aad0b60cba2fdc1dbccc3e9 + ExpoCamera: 4f06a19feff4cbddebd86efd07555934ca4b25c0 + ExpoCameraBarcodeScanning: 28fc7a22048f75744e755b440a599977a0024e48 ExpoCellular: b7aa904a620e79abd91a78fbc4db704b93793134 ExpoClipboard: eee843698341fd26d571fd2807800f98abb6123c ExpoContacts: 3f4b61dc6db5b593d8ec9ac7468a49eec557f920 @@ -4000,7 +4000,7 @@ SPEC CHECKSUMS: ExpoGL: 1e0fbbc03bc28677d1e15f78bf7bb7083c573346 ExpoGlassEffect: 7d4233dc0727ee2b28dd757eda70e1b6abf662fd ExpoHaptics: 89364cf3c3ca2cfd54cafed42f3be3169bab6d42 - ExpoImage: 08e5a5b1071b1e76793582f152e0e5eebf7269b9 + ExpoImage: e57c71915f7df993da8be268a631546376338aca ExpoImageManipulator: f652875e5ea6b7794d691679dedcfc4809926716 ExpoImagePicker: 13cfc44f02b3b6230715c138b8682f8832d52433 ExpoInsights: 215d27779a8e49c7356c70eca3a1ce8a7edd78c4 diff --git a/apps/expo-go/ios/Podfile.lock b/apps/expo-go/ios/Podfile.lock index 679ba3de12067c..5613a66297a6ba 100644 --- a/apps/expo-go/ios/Podfile.lock +++ b/apps/expo-go/ios/Podfile.lock @@ -108,9 +108,9 @@ PODS: - ExpoModulesCore - ExpoCalendar (56.0.7): - ExpoModulesCore - - ExpoCamera (56.0.5): + - ExpoCamera (56.0.6): - ExpoModulesCore - - ExpoCameraBarcodeScanning (56.0.5): + - ExpoCameraBarcodeScanning (56.0.6): - ExpoCamera - ZXingObjC/OneD - ZXingObjC/PDF417 @@ -143,14 +143,14 @@ PODS: - ExpoModulesCore - ExpoHaptics (56.0.3): - ExpoModulesCore - - ExpoImage (56.0.6): + - ExpoImage (56.0.7): - ExpoModulesCore - libavif/libdav1d - SDWebImage (~> 5.21.0) - SDWebImageAVIFCoder (~> 0.11.0) - SDWebImageSVGCoder (~> 1.7.0) - SDWebImageWebPCoder (~> 0.14.6) - - ExpoImage/Tests (56.0.6): + - ExpoImage/Tests (56.0.7): - ExpoModulesCore - ExpoModulesTestCore - libavif/libdav1d @@ -4653,8 +4653,8 @@ SPEC CHECKSUMS: ExpoBlur: caddd80171e5f8f3581ff3d865e99c6465047240 ExpoBrightness: 49e17a1b53fd0070bc7d7a2255b00051e5c781b4 ExpoCalendar: a69d854621f6beb28aa57bb3a0cfbfb5174e4217 - ExpoCamera: 4d44aace75d08eeb91838a7d08345cd57b2c65f5 - ExpoCameraBarcodeScanning: 25b7b6ce09d5deb09aad0b60cba2fdc1dbccc3e9 + ExpoCamera: 4f06a19feff4cbddebd86efd07555934ca4b25c0 + ExpoCameraBarcodeScanning: 28fc7a22048f75744e755b440a599977a0024e48 ExpoCellular: b7aa904a620e79abd91a78fbc4db704b93793134 ExpoClipboard: eee843698341fd26d571fd2807800f98abb6123c ExpoContacts: 3f4b61dc6db5b593d8ec9ac7468a49eec557f920 @@ -4667,7 +4667,7 @@ SPEC CHECKSUMS: ExpoGL: 1e0fbbc03bc28677d1e15f78bf7bb7083c573346 ExpoGlassEffect: 7d4233dc0727ee2b28dd757eda70e1b6abf662fd ExpoHaptics: 89364cf3c3ca2cfd54cafed42f3be3169bab6d42 - ExpoImage: 08e5a5b1071b1e76793582f152e0e5eebf7269b9 + ExpoImage: e57c71915f7df993da8be268a631546376338aca ExpoImageManipulator: f652875e5ea6b7794d691679dedcfc4809926716 ExpoImagePicker: 13cfc44f02b3b6230715c138b8682f8832d52433 ExpoKeepAwake: 359c47a1d9ccc3a3c519bca6e39562cce230c5bb diff --git a/packages/expo-camera/CHANGELOG.md b/packages/expo-camera/CHANGELOG.md index c0b08d207f8218..fb9bda7b7c037e 100644 --- a/packages/expo-camera/CHANGELOG.md +++ b/packages/expo-camera/CHANGELOG.md @@ -10,6 +10,10 @@ ### 💡 Others +## 56.0.6 — 2026-05-21 + +_This version does not introduce any user-facing changes._ + ## 56.0.5 — 2026-05-13 ### 🐛 Bug fixes diff --git a/packages/expo-camera/android/build.gradle b/packages/expo-camera/android/build.gradle index 6344b75b75dbbb..d78081b38c3102 100644 --- a/packages/expo-camera/android/build.gradle +++ b/packages/expo-camera/android/build.gradle @@ -4,7 +4,7 @@ plugins { } group = 'host.exp.exponent' -version = '56.0.5' +version = '56.0.6' def barcodeScannerEnabled = findProperty('expo.camera.barcode-scanner-enabled') def isBarcodeScannerEnabled = (barcodeScannerEnabled ?: "true").toString() != "false" @@ -13,7 +13,7 @@ android { namespace "expo.modules.camera" defaultConfig { versionCode 32 - versionName "56.0.5" + versionName "56.0.6" } } diff --git a/packages/expo-camera/package.json b/packages/expo-camera/package.json index 48f87be19d16de..69294d9627a6cf 100644 --- a/packages/expo-camera/package.json +++ b/packages/expo-camera/package.json @@ -1,6 +1,6 @@ { "name": "expo-camera", - "version": "56.0.5", + "version": "56.0.6", "description": "A React component that renders a preview for the device's either front or back camera. Camera's parameters like zoom, auto focus, white balance and flash mode are adjustable. With expo-camera, one can also take photos and record videos that are saved to the app's cache. Morever, the component is also capable of detecting faces and bar codes appearing on the preview.", "main": "build/index.js", "types": "build/index.d.ts", diff --git a/packages/expo-image/CHANGELOG.md b/packages/expo-image/CHANGELOG.md index e42699a259d82f..1c558e241e100d 100644 --- a/packages/expo-image/CHANGELOG.md +++ b/packages/expo-image/CHANGELOG.md @@ -10,6 +10,10 @@ ### 💡 Others +## 56.0.7 — 2026-05-21 + +_This version does not introduce any user-facing changes._ + ## 56.0.6 — 2026-05-20 ### 🐛 Bug fixes diff --git a/packages/expo-image/android/build.gradle b/packages/expo-image/android/build.gradle index b0af16052b55e0..ada008da5440c5 100644 --- a/packages/expo-image/android/build.gradle +++ b/packages/expo-image/android/build.gradle @@ -13,13 +13,13 @@ plugins { apply plugin: 'com.google.devtools.ksp' group = 'expo.modules.image' -version = '56.0.6' +version = '56.0.7' android { namespace "expo.modules.image" defaultConfig { versionCode 1 - versionName "56.0.6" + versionName "56.0.7" consumerProguardFiles("proguard-rules.pro") buildConfigField("boolean", "ALLOW_GLIDE_LOGS", project.properties.get("EXPO_ALLOW_GLIDE_LOGS", "false")) diff --git a/packages/expo-image/package.json b/packages/expo-image/package.json index db1e0df5476093..84aa9c3f60b6b0 100644 --- a/packages/expo-image/package.json +++ b/packages/expo-image/package.json @@ -1,7 +1,7 @@ { "name": "expo-image", "title": "Expo Image", - "version": "56.0.6", + "version": "56.0.7", "description": "A cross-platform, performant image component for React Native and Expo with Web support", "main": "src/index.ts", "types": "build/index.d.ts", diff --git a/packages/expo/bundledNativeModules.json b/packages/expo/bundledNativeModules.json index 12642f90c31417..cd4088fa7b777b 100644 --- a/packages/expo/bundledNativeModules.json +++ b/packages/expo/bundledNativeModules.json @@ -30,7 +30,7 @@ "expo-brownfield": "~56.0.12", "expo-build-properties": "~56.0.12", "expo-calendar": "~56.0.7", - "expo-camera": "~56.0.5", + "expo-camera": "~56.0.6", "expo-cellular": "~56.0.4", "expo-checkbox": "~56.0.1", "expo-clipboard": "~56.0.3", @@ -46,7 +46,7 @@ "expo-glass-effect": "~56.0.4", "expo-google-app-auth": "~8.3.0", "expo-haptics": "~56.0.3", - "expo-image": "~56.0.6", + "expo-image": "~56.0.7", "expo-image-loader": "~56.0.3", "expo-image-manipulator": "~56.0.12", "expo-image-picker": "~56.0.11", diff --git a/templates/expo-template-default/package.json b/templates/expo-template-default/package.json index 67b70e4294b5a8..4a43196ffc372d 100644 --- a/templates/expo-template-default/package.json +++ b/templates/expo-template-default/package.json @@ -18,7 +18,7 @@ "expo-device": "~56.0.4", "expo-font": "~56.0.5", "expo-glass-effect": "~56.0.4", - "expo-image": "~56.0.6", + "expo-image": "~56.0.7", "expo-linking": "~56.0.10", "expo-router": "~56.2.4", "expo-splash-screen": "~56.0.9", From 86f531f34bf9ff68ee0d5dfdc7773dce834d95e1 Mon Sep 17 00:00:00 2001 From: Alan Hughes <30924086+alanjhughes@users.noreply.github.com> Date: Thu, 21 May 2026 11:34:04 +0100 Subject: [PATCH 05/28] [expo-go] Fix method signature (#46080) --- .../Core/Internal/DevSupport/EXDisabledDevLoadingView.m | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/apps/expo-go/ios/Exponent/Versioned/Core/Internal/DevSupport/EXDisabledDevLoadingView.m b/apps/expo-go/ios/Exponent/Versioned/Core/Internal/DevSupport/EXDisabledDevLoadingView.m index 7bf0cf3c869505..4a4ae3c2eccff5 100644 --- a/apps/expo-go/ios/Exponent/Versioned/Core/Internal/DevSupport/EXDisabledDevLoadingView.m +++ b/apps/expo-go/ios/Exponent/Versioned/Core/Internal/DevSupport/EXDisabledDevLoadingView.m @@ -22,7 +22,7 @@ + (NSString *)moduleName { return @"RCTDevLoadingView"; } } } -RCT_EXPORT_METHOD(showMessage:(NSString *)message color:(UIColor *)color backgroundColor:(UIColor *)backgroundColor) +RCT_EXPORT_METHOD(showMessage:(NSString *)message color:(UIColor *)color backgroundColor:(UIColor *)backgroundColor dismissButton:(BOOL)dismissButton) { RCTDevSettings *settings = [self.bridge devSettings]; BOOL isFastRefreshEnabled = [settings isHotLoadingEnabled]; @@ -62,8 +62,5 @@ - (void)updateProgress:(RCTLoadingProgress *)progress { } -- (void)showMessage:(NSString *)message color:(UIColor *)color backgroundColor:(UIColor *)backgroundColor dismissButton:(BOOL)dismissButton { -} - @end From cdca905c87ab64f6696bebab996b1b3c206688d1 Mon Sep 17 00:00:00 2001 From: Alan Hughes Date: Thu, 21 May 2026 11:36:35 +0100 Subject: [PATCH 06/28] Bump ios expo go version [skip ci] --- apps/expo-go/ios/Exponent/Supporting/Info.plist | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/expo-go/ios/Exponent/Supporting/Info.plist b/apps/expo-go/ios/Exponent/Supporting/Info.plist index 4fceff4dea658c..5227e3c3c91781 100644 --- a/apps/expo-go/ios/Exponent/Supporting/Info.plist +++ b/apps/expo-go/ios/Exponent/Supporting/Info.plist @@ -23,7 +23,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 56.0.1 + 56.0.2 CFBundleSignature ???? CFBundleURLTypes @@ -61,7 +61,7 @@ CFBundleVersion - 56.0.1 + 56.0.2 FacebookAdvertiserIDCollectionEnabled FacebookAppID From 6766bc6db9b09608d66da13bff211c87214f5811 Mon Sep 17 00:00:00 2001 From: Aman Mittal Date: Thu, 21 May 2026 16:14:32 +0530 Subject: [PATCH 07/28] [docs] Update bare upgrade helper for SDK 56 and scope to native files (#46049) --- .../diffs/template-bare-minimum/diffInfo.json | 2 +- .../template-bare-minimum/raw/50..51.diff | 499 ------ .../template-bare-minimum/raw/50..52.diff | 826 ---------- .../template-bare-minimum/raw/50..53.diff | 1198 --------------- .../template-bare-minimum/raw/50..54.diff | 1350 ----------------- .../template-bare-minimum/raw/51..52.diff | 12 - .../template-bare-minimum/raw/51..53.diff | 12 - .../template-bare-minimum/raw/51..54.diff | 49 +- .../template-bare-minimum/raw/51..55.diff | 53 +- .../raw/{50..unversioned.diff => 51..56.diff} | 551 +++---- .../raw/51..unversioned.diff | 71 +- .../template-bare-minimum/raw/52..54.diff | 37 +- .../template-bare-minimum/raw/52..55.diff | 41 +- .../raw/{50..55.diff => 52..56.diff} | 829 +++------- .../raw/52..unversioned.diff | 59 +- .../template-bare-minimum/raw/53..54.diff | 37 +- .../template-bare-minimum/raw/53..55.diff | 41 +- .../template-bare-minimum/raw/53..56.diff | 540 +++++++ .../raw/53..unversioned.diff | 59 +- .../template-bare-minimum/raw/54..55.diff | 14 +- .../template-bare-minimum/raw/54..56.diff | 329 ++++ .../raw/54..unversioned.diff | 29 +- .../template-bare-minimum/raw/55..56.diff | 191 +++ .../raw/55..unversioned.diff | 33 +- .../raw/{50..50.diff => 56..56.diff} | 0 .../raw/56..unversioned.diff | 0 tools/src/commands/GenerateBareDiffs.ts | 4 +- 27 files changed, 1596 insertions(+), 5270 deletions(-) delete mode 100644 docs/public/static/diffs/template-bare-minimum/raw/50..51.diff delete mode 100644 docs/public/static/diffs/template-bare-minimum/raw/50..52.diff delete mode 100644 docs/public/static/diffs/template-bare-minimum/raw/50..53.diff delete mode 100644 docs/public/static/diffs/template-bare-minimum/raw/50..54.diff rename docs/public/static/diffs/template-bare-minimum/raw/{50..unversioned.diff => 51..56.diff} (80%) rename docs/public/static/diffs/template-bare-minimum/raw/{50..55.diff => 52..56.diff} (53%) create mode 100644 docs/public/static/diffs/template-bare-minimum/raw/53..56.diff create mode 100644 docs/public/static/diffs/template-bare-minimum/raw/54..56.diff create mode 100644 docs/public/static/diffs/template-bare-minimum/raw/55..56.diff rename docs/public/static/diffs/template-bare-minimum/raw/{50..50.diff => 56..56.diff} (100%) create mode 100644 docs/public/static/diffs/template-bare-minimum/raw/56..unversioned.diff diff --git a/docs/public/static/diffs/template-bare-minimum/diffInfo.json b/docs/public/static/diffs/template-bare-minimum/diffInfo.json index 2291416f067d4a..2d98fd4a56a0a4 100644 --- a/docs/public/static/diffs/template-bare-minimum/diffInfo.json +++ b/docs/public/static/diffs/template-bare-minimum/diffInfo.json @@ -1 +1 @@ -{"versions":["50","51","52","53","54","55","unversioned"],"diffs":{"50..50":"","50..51":"diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle\nindex 27c6e63957e..a4b08330359 100644\n--- a/templates/expo-template-bare-minimum/android/app/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/app/build.gradle\n@@ -4,6 +4,27 @@ apply plugin: \"com.facebook.react\"\n \n def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath()\n \n+static def versionToNumber(major, minor, patch) {\n+ return patch * 100 + minor * 10000 + major * 1000000\n+}\n+\n+def getRNVersion() {\n+ def version = providers.exec {\n+ workingDir(projectDir)\n+ commandLine(\"node\", \"-e\", \"console.log(require('react-native/package.json').version);\")\n+ }.standardOutput.asText.get().trim()\n+\n+ def coreVersion = version.split(\"-\")[0]\n+ def (major, minor, patch) = coreVersion.tokenize('.').collect { it.toInteger() }\n+\n+ return versionToNumber(\n+ major,\n+ minor,\n+ patch\n+ )\n+}\n+def rnVersion = getRNVersion()\n+\n /**\n * This is the configuration block to customize your React Native Android app.\n * By default you don't need to apply any configuration, just uncomment the lines you need.\n@@ -57,6 +78,11 @@ react {\n //\n // The list of flags to pass to the Hermes compiler. By default is \"-O\", \"-output-source-map\"\n // hermesFlags = [\"-O\", \"-output-source-map\"]\n+\n+ if (rnVersion >= versionToNumber(0, 75, 0)) {\n+ /* Autolinking */\n+ autolinkLibrariesWithApp()\n+ }\n }\n \n /**\n@@ -90,8 +116,6 @@ android {\n targetSdkVersion rootProject.ext.targetSdkVersion\n versionCode 1\n versionName \"1.0\"\n-\n- buildConfigField(\"boolean\", \"REACT_NATIVE_UNSTABLE_USE_RUNTIME_SCHEDULER_ALWAYS\", (findProperty(\"reactNative.unstable_useRuntimeSchedulerAlways\") ?: true).toString())\n }\n signingConfigs {\n debug {\n@@ -112,6 +136,7 @@ android {\n shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false)\n minifyEnabled enableProguardInReleaseBuilds\n proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n+ crunchPngs (findProperty('android.enablePngCrunchInReleaseBuilds')?.toBoolean() ?: true)\n }\n }\n packagingOptions {\n@@ -163,8 +188,6 @@ dependencies {\n }\n }\n \n- implementation(\"com.facebook.react:flipper-integration\")\n-\n if (hermesEnabled.toBoolean()) {\n implementation(\"com.facebook.react:hermes-android\")\n } else {\n@@ -172,5 +195,7 @@ dependencies {\n }\n }\n \n-apply from: new File([\"node\", \"--print\", \"require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), \"../native_modules.gradle\");\n-applyNativeModulesAppBuildGradle(project)\n+if (rnVersion < versionToNumber(0, 75, 0)) {\n+ apply from: new File([\"node\", \"--print\", \"require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), \"../native_modules.gradle\");\n+ applyNativeModulesAppBuildGradle(project)\n+}\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\nindex f8d77fc832f..52175508263 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n@@ -19,8 +19,6 @@\n \n \n \n- \n- \n \n \n \n@@ -29,4 +27,4 @@\n \n \n \n-\n\\ No newline at end of file\n+\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\nindex 8258c40ed4c..5f6e05ce071 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n@@ -2,18 +2,14 @@ package com.helloworld\n \n import android.app.Application\n import android.content.res.Configuration\n-import androidx.annotation.NonNull\n \n import com.facebook.react.PackageList\n import com.facebook.react.ReactApplication\n import com.facebook.react.ReactNativeHost\n import com.facebook.react.ReactPackage\n import com.facebook.react.ReactHost\n-import com.facebook.react.config.ReactFeatureFlags\n import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load\n-import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost\n import com.facebook.react.defaults.DefaultReactNativeHost\n-import com.facebook.react.flipper.ReactNativeFlipper\n import com.facebook.soloader.SoLoader\n \n import expo.modules.ApplicationLifecycleDispatcher\n@@ -40,21 +36,15 @@ class MainApplication : Application(), ReactApplication {\n )\n \n override val reactHost: ReactHost\n- get() = getDefaultReactHost(this.applicationContext, reactNativeHost)\n+ get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost)\n \n override fun onCreate() {\n super.onCreate()\n SoLoader.init(this, false)\n- if (!BuildConfig.REACT_NATIVE_UNSTABLE_USE_RUNTIME_SCHEDULER_ALWAYS) {\n- ReactFeatureFlags.unstable_useRuntimeSchedulerAlways = false\n- }\n if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {\n // If you opted-in for the New Architecture, we load the native entry point for this app.\n load()\n }\n- if (BuildConfig.DEBUG) {\n- ReactNativeFlipper.initializeFlipper(this, reactNativeHost.reactInstanceManager)\n- }\n ApplicationLifecycleDispatcher.onApplicationCreate(this)\n }\n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/rn_edit_text_material.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/rn_edit_text_material.xml\nindex 73b37e4d996..5c25e728ea2 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/rn_edit_text_material.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/rn_edit_text_material.xml\n@@ -17,7 +17,8 @@\n android:insetLeft=\"@dimen/abc_edit_text_inset_horizontal_material\"\n android:insetRight=\"@dimen/abc_edit_text_inset_horizontal_material\"\n android:insetTop=\"@dimen/abc_edit_text_inset_top_material\"\n- android:insetBottom=\"@dimen/abc_edit_text_inset_bottom_material\">\n+ android:insetBottom=\"@dimen/abc_edit_text_inset_bottom_material\"\n+ >\n \n \n \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n+\n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n \ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Supporting/Expo.plist b/templates/expo-template-bare-minimum/ios/HelloWorld/Supporting/Expo.plist\nindex 03410dc8b39..6631ffa6f24 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/Supporting/Expo.plist\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/Supporting/Expo.plist\n@@ -2,9 +2,5 @@\n \n \n \n- EXUpdatesSDKVersion\n- YOUR-APP-SDK-VERSION-HERE\n- EXUpdatesURL\n- YOUR-APP-URL-HERE\n \n \ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex b3978b9515d..f740040e7be 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -7,39 +7,31 @@ podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties\n ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0'\n ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n \n-platform :ios, podfile_properties['ios.deploymentTarget'] || '13.4'\n+platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'\n install! 'cocoapods',\n :deterministic_uuids => false\n \n prepare_react_native_project!\n \n-# If you are using a `react-native-flipper` your iOS build will fail when `NO_FLIPPER=1` is set.\n-# because `react-native-flipper` depends on (FlipperKit,...), which will be excluded. To fix this,\n-# you can also exclude `react-native-flipper` in `react-native.config.js`\n-#\n-# ```js\n-# module.exports = {\n-# dependencies: {\n-# ...(process.env.NO_FLIPPER ? { 'react-native-flipper': { platforms: { ios: null } } } : {}),\n-# }\n-# }\n-# ```\n-flipper_config = FlipperConfiguration.disabled\n-if ENV['NO_FLIPPER'] == '1' then\n- # Explicitly disabled through environment variables\n- flipper_config = FlipperConfiguration.disabled\n-elsif podfile_properties.key?('ios.flipper') then\n- # Configure Flipper in Podfile.properties.json\n- if podfile_properties['ios.flipper'] == 'true' then\n- flipper_config = FlipperConfiguration.enabled([\"Debug\", \"Release\"])\n- elsif podfile_properties['ios.flipper'] != 'false' then\n- flipper_config = FlipperConfiguration.enabled([\"Debug\", \"Release\"], { 'Flipper' => podfile_properties['ios.flipper'] })\n- end\n-end\n-\n target 'HelloWorld' do\n use_expo_modules!\n- config = use_native_modules!\n+\n+ if ENV['EXPO_USE_COMMUNITY_AUTOLINKING'] == '1'\n+ config_command = ['node', '-e', \"process.argv=['', '', 'config'];require('@react-native-community/cli').run()\"];\n+ else\n+ config_command = [\n+ 'node',\n+ '--no-warnings',\n+ '--eval',\n+ 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n+ 'react-native-config',\n+ '--json',\n+ '--platform',\n+ 'ios'\n+ ]\n+ end\n+\n+ config = use_native_modules!(config_command)\n \n use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks']\n use_frameworks! :linkage => ENV['USE_FRAMEWORKS'].to_sym if ENV['USE_FRAMEWORKS']\n@@ -49,15 +41,15 @@ target 'HelloWorld' do\n :hermes_enabled => podfile_properties['expo.jsEngine'] == nil || podfile_properties['expo.jsEngine'] == 'hermes',\n # An absolute path to your application root.\n :app_path => \"#{Pod::Config.instance.installation_root}/..\",\n- # Note that if you have use_frameworks! enabled, Flipper will not work if enabled\n- :flipper_configuration => flipper_config\n+ :privacy_file_aggregation_enabled => podfile_properties['apple.privacyManifestAggregationEnabled'] != 'false',\n )\n \n post_install do |installer|\n react_native_post_install(\n installer,\n config[:reactNativePath],\n- :mac_catalyst_enabled => false\n+ :mac_catalyst_enabled => false,\n+ :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true',\n )\n \n # This is necessary for Xcode 14, because it signs resource bundles by default\n@@ -71,12 +63,4 @@ target 'HelloWorld' do\n end\n end\n end\n-\n- post_integrate do |installer|\n- begin\n- expo_patch_react_imports!(installer)\n- rescue => e\n- Pod::UI.warn e\n- end\n- end\n end\ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex f8f8993585f..b51159163bf 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -1,7 +1,8 @@\n {\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n- \"version\": \"50.0.43\",\n+ \"license\": \"0BSD\",\n+ \"version\": \"52.0.79\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -10,10 +11,10 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~50.0.17\",\n- \"expo-status-bar\": \"~1.11.1\",\n- \"react\": \"18.2.0\",\n- \"react-native\": \"0.73.6\"\n+ \"expo\": \"~52.0.49\",\n+ \"expo-status-bar\": \"~2.0.1\",\n+ \"react\": \"18.3.1\",\n+ \"react-native\": \"0.76.9\"\n },\n \"devDependencies\": {\n \"@babel/core\": \"^7.20.0\"\n","51..52":"diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle\nindex a4b08330359..84879d83acd 100644\n--- a/templates/expo-template-bare-minimum/android/app/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/app/build.gradle\n@@ -4,27 +4,6 @@ apply plugin: \"com.facebook.react\"\n \n def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath()\n \n-static def versionToNumber(major, minor, patch) {\n- return patch * 100 + minor * 10000 + major * 1000000\n-}\n-\n-def getRNVersion() {\n- def version = providers.exec {\n- workingDir(projectDir)\n- commandLine(\"node\", \"-e\", \"console.log(require('react-native/package.json').version);\")\n- }.standardOutput.asText.get().trim()\n-\n- def coreVersion = version.split(\"-\")[0]\n- def (major, minor, patch) = coreVersion.tokenize('.').collect { it.toInteger() }\n-\n- return versionToNumber(\n- major,\n- minor,\n- patch\n- )\n-}\n-def rnVersion = getRNVersion()\n-\n /**\n * This is the configuration block to customize your React Native Android app.\n * By default you don't need to apply any configuration, just uncomment the lines you need.\n@@ -41,12 +20,12 @@ react {\n bundleCommand = \"export:embed\"\n \n /* Folders */\n- // The root of your project, i.e. where \"package.json\" lives. Default is '..'\n- // root = file(\"../\")\n- // The folder where the react-native NPM package is. Default is ../node_modules/react-native\n- // reactNativeDir = file(\"../node_modules/react-native\")\n- // The folder where the react-native Codegen package is. Default is ../node_modules/@react-native/codegen\n- // codegenDir = file(\"../node_modules/@react-native/codegen\")\n+ // The root of your project, i.e. where \"package.json\" lives. Default is '../..'\n+ // root = file(\"../../\")\n+ // The folder where the react-native NPM package is. Default is ../../node_modules/react-native\n+ // reactNativeDir = file(\"../../node_modules/react-native\")\n+ // The folder where the react-native Codegen package is. Default is ../../node_modules/@react-native/codegen\n+ // codegenDir = file(\"../../node_modules/@react-native/codegen\")\n \n /* Variants */\n // The list of variants to that are debuggable. For those we're going to\n@@ -79,10 +58,8 @@ react {\n // The list of flags to pass to the Hermes compiler. By default is \"-O\", \"-output-source-map\"\n // hermesFlags = [\"-O\", \"-output-source-map\"]\n \n- if (rnVersion >= versionToNumber(0, 75, 0)) {\n- /* Autolinking */\n- autolinkLibrariesWithApp()\n- }\n+ /* Autolinking */\n+ autolinkLibrariesWithApp()\n }\n \n /**\n@@ -144,6 +121,9 @@ android {\n useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false)\n }\n }\n+ androidResources {\n+ ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:!CVS:!thumbs.db:!picasa.ini:!*~'\n+ }\n }\n \n // Apply static values from `gradle.properties` to the `android.packagingOptions`\n@@ -194,8 +174,3 @@ dependencies {\n implementation jscFlavor\n }\n }\n-\n-if (rnVersion < versionToNumber(0, 75, 0)) {\n- apply from: new File([\"node\", \"--print\", \"require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), \"../native_modules.gradle\");\n- applyNativeModulesAppBuildGradle(project)\n-}\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\nindex 52175508263..150248b6b3c 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n@@ -18,13 +18,12 @@\n \n \n \n- \n+ \n \n \n \n \n \n \n- \n \n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\nindex 5f6e05ce071..e61349d1301 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n@@ -10,6 +10,7 @@ import com.facebook.react.ReactPackage\n import com.facebook.react.ReactHost\n import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load\n import com.facebook.react.defaults.DefaultReactNativeHost\n+import com.facebook.react.soloader.OpenSourceMergedSoMapping\n import com.facebook.soloader.SoLoader\n \n import expo.modules.ApplicationLifecycleDispatcher\n@@ -21,9 +22,10 @@ class MainApplication : Application(), ReactApplication {\n this,\n object : DefaultReactNativeHost(this) {\n override fun getPackages(): List {\n+ val packages = PackageList(this).packages\n // Packages that cannot be autolinked yet can be added manually here, for example:\n // packages.add(new MyReactNativePackage());\n- return PackageList(this).packages\n+ return packages\n }\n \n override fun getJSMainModuleName(): String = \".expo/.virtual-metro-entry\"\n@@ -40,7 +42,7 @@ class MainApplication : Application(), ReactApplication {\n \n override fun onCreate() {\n super.onCreate()\n- SoLoader.init(this, false)\n+ SoLoader.init(this, OpenSourceMergedSoMapping)\n if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {\n // If you opted-in for the New Architecture, we load the native entry point for this app.\n load()\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..31df827b18b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..ef243aab6c0\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..e9d5474519c\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..d61da15d241\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..4aeed11d00b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml\nnew file mode 100644\nindex 00000000000..883b2a080f3\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml\n@@ -0,0 +1,6 @@\n+\n+ \n+ \n+ \n+ \n+\n\\ No newline at end of file\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..a2f5908281d\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..1b523998081\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..ff10afd6e18\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..115a4c768a2\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..dcd3cd80833\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..459ca609d3a\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..8ca12fe024b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..8e19b410a1b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..b824ebdd48d\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..4c19a13c239\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\nindex 90bcc87b8e8..51fbc1e5a72 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n@@ -10,6 +10,6 @@\n @android:color/black\n \n \n \ndiff --git a/templates/expo-template-bare-minimum/android/build.gradle b/templates/expo-template-bare-minimum/android/build.gradle\nindex 932bf7b34ba..abbcb8ec8a1 100644\n--- a/templates/expo-template-bare-minimum/android/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/build.gradle\n@@ -2,11 +2,11 @@\n \n buildscript {\n ext {\n- buildToolsVersion = findProperty('android.buildToolsVersion') ?: '34.0.0'\n- minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '23')\n- compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '34')\n+ buildToolsVersion = findProperty('android.buildToolsVersion') ?: '35.0.0'\n+ minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '24')\n+ compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '35')\n targetSdkVersion = Integer.parseInt(findProperty('android.targetSdkVersion') ?: '34')\n- kotlinVersion = findProperty('android.kotlinVersion') ?: '1.9.23'\n+ kotlinVersion = findProperty('android.kotlinVersion') ?: '1.9.25'\n \n ndkVersion = \"26.1.10909125\"\n }\ndiff --git a/templates/expo-template-bare-minimum/android/gradle.properties b/templates/expo-template-bare-minimum/android/gradle.properties\nindex 40220def8da..de47429c64c 100644\n--- a/templates/expo-template-bare-minimum/android/gradle.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle.properties\n@@ -22,9 +22,6 @@ org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m\n # https://developer.android.com/topic/libraries/support-library/androidx-rn\n android.useAndroidX=true\n \n-# Automatically convert third-party libraries to use AndroidX\n-android.enableJetifier=true\n-\n # Enable AAPT2 PNG crunching\n android.enablePngCrunchInReleaseBuilds=true\n \ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar\nindex e6441136f3d..a4b76b9530d 100644\nBinary files a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar and b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar differ\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\nindex 6f7a6eb33e8..79eb9d003fe 100644\n--- a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n@@ -1,6 +1,6 @@\n distributionBase=GRADLE_USER_HOME\n distributionPath=wrapper/dists\n-distributionUrl=https\\://services.gradle.org/distributions/gradle-8.8-all.zip\n+distributionUrl=https\\://services.gradle.org/distributions/gradle-8.10.2-all.zip\n networkTimeout=10000\n validateDistributionUrl=true\n zipStoreBase=GRADLE_USER_HOME\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew b/templates/expo-template-bare-minimum/android/gradlew\nindex 1aa94a42690..f5feea6d6b1 100755\n--- a/templates/expo-template-bare-minimum/android/gradlew\n+++ b/templates/expo-template-bare-minimum/android/gradlew\n@@ -15,6 +15,8 @@\n # See the License for the specific language governing permissions and\n # limitations under the License.\n #\n+# SPDX-License-Identifier: Apache-2.0\n+#\n \n ##############################################################################\n #\n@@ -55,7 +57,7 @@\n # Darwin, MinGW, and NonStop.\n #\n # (3) This script is generated from the Groovy template\n-# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt\n+# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt\n # within the Gradle project.\n #\n # You can find Gradle at https://github.com/gradle/gradle/.\n@@ -84,7 +86,8 @@ done\n # shellcheck disable=SC2034\n APP_BASE_NAME=${0##*/}\n # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)\n-APP_HOME=$( cd \"${APP_HOME:-./}\" > /dev/null && pwd -P ) || exit\n+APP_HOME=$( cd -P \"${APP_HOME:-./}\" > /dev/null && printf '%s\n+' \"$PWD\" ) || exit\n \n # Use the maximum available, or set MAX_FD != -1 to use that value.\n MAX_FD=maximum\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew.bat b/templates/expo-template-bare-minimum/android/gradlew.bat\nindex 7101f8e4676..9b42019c791 100644\n--- a/templates/expo-template-bare-minimum/android/gradlew.bat\n+++ b/templates/expo-template-bare-minimum/android/gradlew.bat\n@@ -13,6 +13,8 @@\n @rem See the License for the specific language governing permissions and\r\n @rem limitations under the License.\r\n @rem\r\n+@rem SPDX-License-Identifier: Apache-2.0\r\n+@rem\r\n \r\n @if \"%DEBUG%\"==\"\" @echo off\r\n @rem ##########################################################################\r\ndiff --git a/templates/expo-template-bare-minimum/android/settings.gradle b/templates/expo-template-bare-minimum/android/settings.gradle\nindex 80b1bc3267b..39b188e065c 100644\n--- a/templates/expo-template-bare-minimum/android/settings.gradle\n+++ b/templates/expo-template-bare-minimum/android/settings.gradle\n@@ -1,46 +1,23 @@\n pluginManagement {\n- def version = providers.exec {\n- commandLine(\"node\", \"-e\", \"console.log(require('react-native/package.json').version);\")\n- }.standardOutput.asText.get().trim()\n- def (_, reactNativeMinor, reactNativePatch) = version.split(\"-\")[0].tokenize('.').collect { it.toInteger() }\n-\n- includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().toString())\n- if(reactNativeMinor == 74 && reactNativePatch <= 3){\n- includeBuild(\"react-settings-plugin\")\n- }\n+ includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().toString())\n }\n-\n plugins { id(\"com.facebook.react.settings\") }\n \n-def getRNMinorVersion() {\n- def version = providers.exec {\n- commandLine(\"node\", \"-e\", \"console.log(require('react-native/package.json').version);\")\n- }.standardOutput.asText.get().trim()\n-\n- def coreVersion = version.split(\"-\")[0]\n- def (major, minor, patch) = coreVersion.tokenize('.').collect { it.toInteger() }\n-\n- return minor\n-}\n-\n-if (getRNMinorVersion() >= 75) {\n- extensions.configure(com.facebook.react.ReactSettingsExtension) { ex ->\n- if (System.getenv('EXPO_UNSTABLE_CORE_AUTOLINKING') == '1') {\n- println('\\u001B[32mUsing expo-modules-autolinking as core autolinking source\\u001B[0m')\n- def command = [\n- 'node',\n- '--no-warnings',\n- '--eval',\n- 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n- 'react-native-config',\n- '--json',\n- '--platform',\n- 'android'\n- ].toList()\n- ex.autolinkLibrariesFromCommand(command)\n- } else {\n- ex.autolinkLibrariesFromCommand()\n- }\n+extensions.configure(com.facebook.react.ReactSettingsExtension) { ex ->\n+ if (System.getenv('EXPO_USE_COMMUNITY_AUTOLINKING') == '1') {\n+ ex.autolinkLibrariesFromCommand()\n+ } else {\n+ def command = [\n+ 'node',\n+ '--no-warnings',\n+ '--eval',\n+ 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n+ 'react-native-config',\n+ '--json',\n+ '--platform',\n+ 'android'\n+ ].toList()\n+ ex.autolinkLibrariesFromCommand(command)\n }\n }\n \n@@ -57,10 +34,5 @@ dependencyResolutionManagement {\n apply from: new File([\"node\", \"--print\", \"require.resolve('expo/package.json')\"].execute(null, rootDir).text.trim(), \"../scripts/autolinking.gradle\");\n useExpoModules()\n \n-if (getRNMinorVersion() < 75) {\n- apply from: new File([\"node\", \"--print\", \"require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), \"../native_modules.gradle\");\n- applyNativeModulesSettingsGradle(settings)\n-}\n-\n include ':app'\n includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile())\ndiff --git a/templates/expo-template-bare-minimum/gitignore b/templates/expo-template-bare-minimum/gitignore\nindex 05647d55c75..d16e1efbb3f 100644\n--- a/templates/expo-template-bare-minimum/gitignore\n+++ b/templates/expo-template-bare-minimum/gitignore\n@@ -7,6 +7,7 @@ node_modules/\n .expo/\n dist/\n web-build/\n+expo-env.d.ts\n \n # Native\n *.orig.*\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\nindex f945940c256..1ccb9b422d5 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n@@ -287,7 +287,7 @@\n \t\t\t\t\t\"FB_SONARKIT_ENABLED=1\",\n \t\t\t\t);\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n@@ -311,7 +311,7 @@\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n \t\t\t\tCURRENT_PROJECT_VERSION = 1;\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n@@ -373,7 +373,7 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n@@ -422,7 +422,7 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist b/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist\nindex 53d78e89033..596dc7ce6b5 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist\n@@ -24,6 +24,8 @@\n \t1\n \tLSRequiresIPhoneOS\n \t\n+\tLSMinimumSystemVersion\n+\t12.0\n \tNSAppTransportSecurity\n \t\n \t\tNSAllowsArbitraryLoads\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\nindex 24eec3df5cb..447b4188985 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n@@ -1,91 +1,42 @@\n \n-\n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n+\n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n \ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex 57c1dd38343..f740040e7be 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -7,11 +7,18 @@ podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties\n ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0'\n ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n \n-use_autolinking_method_symbol = ('use' + '_native' + '_modules!').to_sym\n-origin_autolinking_method = self.method(use_autolinking_method_symbol)\n-self.define_singleton_method(use_autolinking_method_symbol) do |*args|\n- if ENV['EXPO_UNSTABLE_CORE_AUTOLINKING'] == '1'\n- Pod::UI.puts('Using expo-modules-autolinking as core autolinking source'.green)\n+platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'\n+install! 'cocoapods',\n+ :deterministic_uuids => false\n+\n+prepare_react_native_project!\n+\n+target 'HelloWorld' do\n+ use_expo_modules!\n+\n+ if ENV['EXPO_USE_COMMUNITY_AUTOLINKING'] == '1'\n+ config_command = ['node', '-e', \"process.argv=['', '', 'config'];require('@react-native-community/cli').run()\"];\n+ else\n config_command = [\n 'node',\n '--no-warnings',\n@@ -22,21 +29,9 @@ self.define_singleton_method(use_autolinking_method_symbol) do |*args|\n '--platform',\n 'ios'\n ]\n- origin_autolinking_method.call(config_command)\n- else\n- origin_autolinking_method.call()\n end\n-end\n \n-platform :ios, podfile_properties['ios.deploymentTarget'] || '13.4'\n-install! 'cocoapods',\n- :deterministic_uuids => false\n-\n-prepare_react_native_project!\n-\n-target 'HelloWorld' do\n- use_expo_modules!\n- config = use_native_modules!\n+ config = use_native_modules!(config_command)\n \n use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks']\n use_frameworks! :linkage => ENV['USE_FRAMEWORKS'].to_sym if ENV['USE_FRAMEWORKS']\n@@ -68,12 +63,4 @@ target 'HelloWorld' do\n end\n end\n end\n-\n- post_integrate do |installer|\n- begin\n- expo_patch_react_imports!(installer)\n- rescue => e\n- Pod::UI.warn e\n- end\n- end\n end\ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex 563853071f0..b51159163bf 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -1,7 +1,8 @@\n {\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n- \"version\": \"51.0.56\",\n+ \"license\": \"0BSD\",\n+ \"version\": \"52.0.79\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -10,10 +11,10 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~51.0.28\",\n- \"expo-status-bar\": \"~1.12.1\",\n- \"react\": \"18.2.0\",\n- \"react-native\": \"0.74.5\"\n+ \"expo\": \"~52.0.49\",\n+ \"expo-status-bar\": \"~2.0.1\",\n+ \"react\": \"18.3.1\",\n+ \"react-native\": \"0.76.9\"\n },\n \"devDependencies\": {\n \"@babel/core\": \"^7.20.0\"\n","52..52":"","50..53":"diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle\nindex 27c6e63957e..34b96c71c33 100644\n--- a/templates/expo-template-bare-minimum/android/app/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/app/build.gradle\n@@ -14,18 +14,19 @@ react {\n hermesCommand = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/sdks/hermesc/%OS-BIN%/hermesc\"\n codegenDir = new File([\"node\", \"--print\", \"require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n \n+ enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean()\n // Use Expo CLI to bundle the app, this ensures the Metro config\n // works correctly with Expo projects.\n cliFile = new File([\"node\", \"--print\", \"require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })\"].execute(null, rootDir).text.trim())\n bundleCommand = \"export:embed\"\n \n /* Folders */\n- // The root of your project, i.e. where \"package.json\" lives. Default is '..'\n- // root = file(\"../\")\n- // The folder where the react-native NPM package is. Default is ../node_modules/react-native\n- // reactNativeDir = file(\"../node_modules/react-native\")\n- // The folder where the react-native Codegen package is. Default is ../node_modules/@react-native/codegen\n- // codegenDir = file(\"../node_modules/@react-native/codegen\")\n+ // The root of your project, i.e. where \"package.json\" lives. Default is '../..'\n+ // root = file(\"../../\")\n+ // The folder where the react-native NPM package is. Default is ../../node_modules/react-native\n+ // reactNativeDir = file(\"../../node_modules/react-native\")\n+ // The folder where the react-native Codegen package is. Default is ../../node_modules/@react-native/codegen\n+ // codegenDir = file(\"../../node_modules/@react-native/codegen\")\n \n /* Variants */\n // The list of variants to that are debuggable. For those we're going to\n@@ -57,6 +58,9 @@ react {\n //\n // The list of flags to pass to the Hermes compiler. By default is \"-O\", \"-output-source-map\"\n // hermesFlags = [\"-O\", \"-output-source-map\"]\n+\n+ /* Autolinking */\n+ autolinkLibrariesWithApp()\n }\n \n /**\n@@ -75,7 +79,7 @@ def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInRelea\n * give correct results when using with locales other than en-US. Note that\n * this variant is about 6MiB larger per architecture than default.\n */\n-def jscFlavor = 'org.webkit:android-jsc:+'\n+def jscFlavor = 'io.github.react-native-community:jsc-android:2026004.+'\n \n android {\n ndkVersion rootProject.ext.ndkVersion\n@@ -90,8 +94,6 @@ android {\n targetSdkVersion rootProject.ext.targetSdkVersion\n versionCode 1\n versionName \"1.0\"\n-\n- buildConfigField(\"boolean\", \"REACT_NATIVE_UNSTABLE_USE_RUNTIME_SCHEDULER_ALWAYS\", (findProperty(\"reactNative.unstable_useRuntimeSchedulerAlways\") ?: true).toString())\n }\n signingConfigs {\n debug {\n@@ -112,6 +114,7 @@ android {\n shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false)\n minifyEnabled enableProguardInReleaseBuilds\n proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n+ crunchPngs (findProperty('android.enablePngCrunchInReleaseBuilds')?.toBoolean() ?: true)\n }\n }\n packagingOptions {\n@@ -119,6 +122,9 @@ android {\n useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false)\n }\n }\n+ androidResources {\n+ ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:!CVS:!thumbs.db:!picasa.ini:!*~'\n+ }\n }\n \n // Apply static values from `gradle.properties` to the `android.packagingOptions`\n@@ -151,26 +157,21 @@ dependencies {\n \n if (isGifEnabled) {\n // For animated gif support\n- implementation(\"com.facebook.fresco:animated-gif:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-gif:${expoLibs.versions.fresco.get()}\")\n }\n \n if (isWebpEnabled) {\n // For webp support\n- implementation(\"com.facebook.fresco:webpsupport:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:webpsupport:${expoLibs.versions.fresco.get()}\")\n if (isWebpAnimatedEnabled) {\n // Animated webp support\n- implementation(\"com.facebook.fresco:animated-webp:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-webp:${expoLibs.versions.fresco.get()}\")\n }\n }\n \n- implementation(\"com.facebook.react:flipper-integration\")\n-\n if (hermesEnabled.toBoolean()) {\n implementation(\"com.facebook.react:hermes-android\")\n } else {\n implementation jscFlavor\n }\n }\n-\n-apply from: new File([\"node\", \"--print\", \"require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), \"../native_modules.gradle\");\n-applyNativeModulesAppBuildGradle(project)\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\nindex f8d77fc832f..150248b6b3c 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n@@ -18,15 +18,12 @@\n \n \n \n- \n- \n- \n+ \n \n \n \n \n \n \n- \n \n-\n\\ No newline at end of file\n+\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\nindex 8258c40ed4c..267e20c30e5 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n@@ -2,18 +2,15 @@ package com.helloworld\n \n import android.app.Application\n import android.content.res.Configuration\n-import androidx.annotation.NonNull\n \n import com.facebook.react.PackageList\n import com.facebook.react.ReactApplication\n import com.facebook.react.ReactNativeHost\n import com.facebook.react.ReactPackage\n import com.facebook.react.ReactHost\n-import com.facebook.react.config.ReactFeatureFlags\n import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load\n-import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost\n import com.facebook.react.defaults.DefaultReactNativeHost\n-import com.facebook.react.flipper.ReactNativeFlipper\n+import com.facebook.react.soloader.OpenSourceMergedSoMapping\n import com.facebook.soloader.SoLoader\n \n import expo.modules.ApplicationLifecycleDispatcher\n@@ -25,9 +22,10 @@ class MainApplication : Application(), ReactApplication {\n this,\n object : DefaultReactNativeHost(this) {\n override fun getPackages(): List {\n+ val packages = PackageList(this).packages\n // Packages that cannot be autolinked yet can be added manually here, for example:\n- // packages.add(new MyReactNativePackage());\n- return PackageList(this).packages\n+ // packages.add(MyReactNativePackage())\n+ return packages\n }\n \n override fun getJSMainModuleName(): String = \".expo/.virtual-metro-entry\"\n@@ -40,21 +38,15 @@ class MainApplication : Application(), ReactApplication {\n )\n \n override val reactHost: ReactHost\n- get() = getDefaultReactHost(this.applicationContext, reactNativeHost)\n+ get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost)\n \n override fun onCreate() {\n super.onCreate()\n- SoLoader.init(this, false)\n- if (!BuildConfig.REACT_NATIVE_UNSTABLE_USE_RUNTIME_SCHEDULER_ALWAYS) {\n- ReactFeatureFlags.unstable_useRuntimeSchedulerAlways = false\n- }\n+ SoLoader.init(this, OpenSourceMergedSoMapping)\n if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {\n // If you opted-in for the New Architecture, we load the native entry point for this app.\n load()\n }\n- if (BuildConfig.DEBUG) {\n- ReactNativeFlipper.initializeFlipper(this, reactNativeHost.reactInstanceManager)\n- }\n ApplicationLifecycleDispatcher.onApplicationCreate(this)\n }\n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..31df827b18b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..ef243aab6c0\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..e9d5474519c\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..d61da15d241\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..4aeed11d00b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml\nnew file mode 100644\nindex 00000000000..883b2a080f3\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml\n@@ -0,0 +1,6 @@\n+\n+ \n+ \n+ \n+ \n+\n\\ No newline at end of file\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/rn_edit_text_material.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/rn_edit_text_material.xml\nindex 73b37e4d996..5c25e728ea2 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/rn_edit_text_material.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/rn_edit_text_material.xml\n@@ -17,7 +17,8 @@\n android:insetLeft=\"@dimen/abc_edit_text_inset_horizontal_material\"\n android:insetRight=\"@dimen/abc_edit_text_inset_horizontal_material\"\n android:insetTop=\"@dimen/abc_edit_text_inset_top_material\"\n- android:insetBottom=\"@dimen/abc_edit_text_inset_bottom_material\">\n+ android:insetBottom=\"@dimen/abc_edit_text_inset_bottom_material\"\n+ >\n \n \n \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n+\n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n \ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Supporting/Expo.plist b/templates/expo-template-bare-minimum/ios/HelloWorld/Supporting/Expo.plist\nindex 03410dc8b39..6631ffa6f24 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/Supporting/Expo.plist\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/Supporting/Expo.plist\n@@ -2,9 +2,5 @@\n \n \n \n- EXUpdatesSDKVersion\n- YOUR-APP-SDK-VERSION-HERE\n- EXUpdatesURL\n- YOUR-APP-URL-HERE\n \n \ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex b3978b9515d..29503ff0cc1 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -4,42 +4,32 @@ require File.join(File.dirname(`node --print \"require.resolve('react-native/pack\n require 'json'\n podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}\n \n-ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0'\n+ENV['RCT_NEW_ARCH_ENABLED'] = '0' if podfile_properties['newArchEnabled'] == 'false'\n ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n \n-platform :ios, podfile_properties['ios.deploymentTarget'] || '13.4'\n+platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'\n install! 'cocoapods',\n :deterministic_uuids => false\n \n prepare_react_native_project!\n \n-# If you are using a `react-native-flipper` your iOS build will fail when `NO_FLIPPER=1` is set.\n-# because `react-native-flipper` depends on (FlipperKit,...), which will be excluded. To fix this,\n-# you can also exclude `react-native-flipper` in `react-native.config.js`\n-#\n-# ```js\n-# module.exports = {\n-# dependencies: {\n-# ...(process.env.NO_FLIPPER ? { 'react-native-flipper': { platforms: { ios: null } } } : {}),\n-# }\n-# }\n-# ```\n-flipper_config = FlipperConfiguration.disabled\n-if ENV['NO_FLIPPER'] == '1' then\n- # Explicitly disabled through environment variables\n- flipper_config = FlipperConfiguration.disabled\n-elsif podfile_properties.key?('ios.flipper') then\n- # Configure Flipper in Podfile.properties.json\n- if podfile_properties['ios.flipper'] == 'true' then\n- flipper_config = FlipperConfiguration.enabled([\"Debug\", \"Release\"])\n- elsif podfile_properties['ios.flipper'] != 'false' then\n- flipper_config = FlipperConfiguration.enabled([\"Debug\", \"Release\"], { 'Flipper' => podfile_properties['ios.flipper'] })\n- end\n-end\n-\n target 'HelloWorld' do\n use_expo_modules!\n- config = use_native_modules!\n+\n+ if ENV['EXPO_USE_COMMUNITY_AUTOLINKING'] == '1'\n+ config_command = ['node', '-e', \"process.argv=['', '', 'config'];require('@react-native-community/cli').run()\"];\n+ else\n+ config_command = [\n+ 'npx',\n+ 'expo-modules-autolinking',\n+ 'react-native-config',\n+ '--json',\n+ '--platform',\n+ 'ios'\n+ ]\n+ end\n+\n+ config = use_native_modules!(config_command)\n \n use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks']\n use_frameworks! :linkage => ENV['USE_FRAMEWORKS'].to_sym if ENV['USE_FRAMEWORKS']\n@@ -49,15 +39,15 @@ target 'HelloWorld' do\n :hermes_enabled => podfile_properties['expo.jsEngine'] == nil || podfile_properties['expo.jsEngine'] == 'hermes',\n # An absolute path to your application root.\n :app_path => \"#{Pod::Config.instance.installation_root}/..\",\n- # Note that if you have use_frameworks! enabled, Flipper will not work if enabled\n- :flipper_configuration => flipper_config\n+ :privacy_file_aggregation_enabled => podfile_properties['apple.privacyManifestAggregationEnabled'] != 'false',\n )\n \n post_install do |installer|\n react_native_post_install(\n installer,\n config[:reactNativePath],\n- :mac_catalyst_enabled => false\n+ :mac_catalyst_enabled => false,\n+ :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true',\n )\n \n # This is necessary for Xcode 14, because it signs resource bundles by default\n@@ -71,12 +61,4 @@ target 'HelloWorld' do\n end\n end\n end\n-\n- post_integrate do |installer|\n- begin\n- expo_patch_react_imports!(installer)\n- rescue => e\n- Pod::UI.warn e\n- end\n- end\n end\ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex f8f8993585f..661f6b6addf 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -1,7 +1,8 @@\n {\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n- \"version\": \"50.0.43\",\n+ \"license\": \"0BSD\",\n+ \"version\": \"53.0.42\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -10,10 +11,10 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~50.0.17\",\n- \"expo-status-bar\": \"~1.11.1\",\n- \"react\": \"18.2.0\",\n- \"react-native\": \"0.73.6\"\n+ \"expo\": \"~53.0.27\",\n+ \"expo-status-bar\": \"~2.2.3\",\n+ \"react\": \"19.0.0\",\n+ \"react-native\": \"0.79.6\"\n },\n \"devDependencies\": {\n \"@babel/core\": \"^7.20.0\"\n","51..53":"diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle\nindex a4b08330359..34b96c71c33 100644\n--- a/templates/expo-template-bare-minimum/android/app/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/app/build.gradle\n@@ -4,27 +4,6 @@ apply plugin: \"com.facebook.react\"\n \n def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath()\n \n-static def versionToNumber(major, minor, patch) {\n- return patch * 100 + minor * 10000 + major * 1000000\n-}\n-\n-def getRNVersion() {\n- def version = providers.exec {\n- workingDir(projectDir)\n- commandLine(\"node\", \"-e\", \"console.log(require('react-native/package.json').version);\")\n- }.standardOutput.asText.get().trim()\n-\n- def coreVersion = version.split(\"-\")[0]\n- def (major, minor, patch) = coreVersion.tokenize('.').collect { it.toInteger() }\n-\n- return versionToNumber(\n- major,\n- minor,\n- patch\n- )\n-}\n-def rnVersion = getRNVersion()\n-\n /**\n * This is the configuration block to customize your React Native Android app.\n * By default you don't need to apply any configuration, just uncomment the lines you need.\n@@ -35,18 +14,19 @@ react {\n hermesCommand = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/sdks/hermesc/%OS-BIN%/hermesc\"\n codegenDir = new File([\"node\", \"--print\", \"require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n \n+ enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean()\n // Use Expo CLI to bundle the app, this ensures the Metro config\n // works correctly with Expo projects.\n cliFile = new File([\"node\", \"--print\", \"require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })\"].execute(null, rootDir).text.trim())\n bundleCommand = \"export:embed\"\n \n /* Folders */\n- // The root of your project, i.e. where \"package.json\" lives. Default is '..'\n- // root = file(\"../\")\n- // The folder where the react-native NPM package is. Default is ../node_modules/react-native\n- // reactNativeDir = file(\"../node_modules/react-native\")\n- // The folder where the react-native Codegen package is. Default is ../node_modules/@react-native/codegen\n- // codegenDir = file(\"../node_modules/@react-native/codegen\")\n+ // The root of your project, i.e. where \"package.json\" lives. Default is '../..'\n+ // root = file(\"../../\")\n+ // The folder where the react-native NPM package is. Default is ../../node_modules/react-native\n+ // reactNativeDir = file(\"../../node_modules/react-native\")\n+ // The folder where the react-native Codegen package is. Default is ../../node_modules/@react-native/codegen\n+ // codegenDir = file(\"../../node_modules/@react-native/codegen\")\n \n /* Variants */\n // The list of variants to that are debuggable. For those we're going to\n@@ -79,10 +59,8 @@ react {\n // The list of flags to pass to the Hermes compiler. By default is \"-O\", \"-output-source-map\"\n // hermesFlags = [\"-O\", \"-output-source-map\"]\n \n- if (rnVersion >= versionToNumber(0, 75, 0)) {\n- /* Autolinking */\n- autolinkLibrariesWithApp()\n- }\n+ /* Autolinking */\n+ autolinkLibrariesWithApp()\n }\n \n /**\n@@ -101,7 +79,7 @@ def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInRelea\n * give correct results when using with locales other than en-US. Note that\n * this variant is about 6MiB larger per architecture than default.\n */\n-def jscFlavor = 'org.webkit:android-jsc:+'\n+def jscFlavor = 'io.github.react-native-community:jsc-android:2026004.+'\n \n android {\n ndkVersion rootProject.ext.ndkVersion\n@@ -144,6 +122,9 @@ android {\n useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false)\n }\n }\n+ androidResources {\n+ ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:!CVS:!thumbs.db:!picasa.ini:!*~'\n+ }\n }\n \n // Apply static values from `gradle.properties` to the `android.packagingOptions`\n@@ -176,15 +157,15 @@ dependencies {\n \n if (isGifEnabled) {\n // For animated gif support\n- implementation(\"com.facebook.fresco:animated-gif:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-gif:${expoLibs.versions.fresco.get()}\")\n }\n \n if (isWebpEnabled) {\n // For webp support\n- implementation(\"com.facebook.fresco:webpsupport:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:webpsupport:${expoLibs.versions.fresco.get()}\")\n if (isWebpAnimatedEnabled) {\n // Animated webp support\n- implementation(\"com.facebook.fresco:animated-webp:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-webp:${expoLibs.versions.fresco.get()}\")\n }\n }\n \n@@ -194,8 +175,3 @@ dependencies {\n implementation jscFlavor\n }\n }\n-\n-if (rnVersion < versionToNumber(0, 75, 0)) {\n- apply from: new File([\"node\", \"--print\", \"require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), \"../native_modules.gradle\");\n- applyNativeModulesAppBuildGradle(project)\n-}\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\nindex 52175508263..150248b6b3c 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n@@ -18,13 +18,12 @@\n \n \n \n- \n+ \n \n \n \n \n \n \n- \n \n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\nindex 5f6e05ce071..267e20c30e5 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n@@ -10,6 +10,7 @@ import com.facebook.react.ReactPackage\n import com.facebook.react.ReactHost\n import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load\n import com.facebook.react.defaults.DefaultReactNativeHost\n+import com.facebook.react.soloader.OpenSourceMergedSoMapping\n import com.facebook.soloader.SoLoader\n \n import expo.modules.ApplicationLifecycleDispatcher\n@@ -21,9 +22,10 @@ class MainApplication : Application(), ReactApplication {\n this,\n object : DefaultReactNativeHost(this) {\n override fun getPackages(): List {\n+ val packages = PackageList(this).packages\n // Packages that cannot be autolinked yet can be added manually here, for example:\n- // packages.add(new MyReactNativePackage());\n- return PackageList(this).packages\n+ // packages.add(MyReactNativePackage())\n+ return packages\n }\n \n override fun getJSMainModuleName(): String = \".expo/.virtual-metro-entry\"\n@@ -40,7 +42,7 @@ class MainApplication : Application(), ReactApplication {\n \n override fun onCreate() {\n super.onCreate()\n- SoLoader.init(this, false)\n+ SoLoader.init(this, OpenSourceMergedSoMapping)\n if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {\n // If you opted-in for the New Architecture, we load the native entry point for this app.\n load()\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..31df827b18b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..ef243aab6c0\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..e9d5474519c\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..d61da15d241\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..4aeed11d00b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml\nnew file mode 100644\nindex 00000000000..883b2a080f3\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml\n@@ -0,0 +1,6 @@\n+\n+ \n+ \n+ \n+ \n+\n\\ No newline at end of file\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..a2f5908281d\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..1b523998081\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..ff10afd6e18\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..115a4c768a2\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..dcd3cd80833\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..459ca609d3a\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..8ca12fe024b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..8e19b410a1b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..b824ebdd48d\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..4c19a13c239\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\nindex 90bcc87b8e8..26f3404be26 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n@@ -1,15 +1,8 @@\n \n- \n- \n \n \ndiff --git a/templates/expo-template-bare-minimum/android/build.gradle b/templates/expo-template-bare-minimum/android/build.gradle\nindex 932bf7b34ba..fa7b11e23c1 100644\n--- a/templates/expo-template-bare-minimum/android/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/build.gradle\n@@ -1,41 +1,37 @@\n // Top-level build file where you can add configuration options common to all sub-projects/modules.\n \n buildscript {\n- ext {\n- buildToolsVersion = findProperty('android.buildToolsVersion') ?: '34.0.0'\n- minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '23')\n- compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '34')\n- targetSdkVersion = Integer.parseInt(findProperty('android.targetSdkVersion') ?: '34')\n- kotlinVersion = findProperty('android.kotlinVersion') ?: '1.9.23'\n-\n- ndkVersion = \"26.1.10909125\"\n- }\n- repositories {\n- google()\n- mavenCentral()\n- }\n- dependencies {\n- classpath('com.android.tools.build:gradle')\n- classpath('com.facebook.react:react-native-gradle-plugin')\n- classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')\n- }\n+ repositories {\n+ google()\n+ mavenCentral()\n+ }\n+ dependencies {\n+ classpath('com.android.tools.build:gradle')\n+ classpath('com.facebook.react:react-native-gradle-plugin')\n+ classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')\n+ }\n }\n \n-apply plugin: \"com.facebook.react.rootproject\"\n+def reactNativeAndroidDir = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('react-native/package.json')\")\n+ }.standardOutput.asText.get().trim(),\n+ \"../android\"\n+)\n \n allprojects {\n- repositories {\n- maven {\n- // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n- url(new File(['node', '--print', \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim(), '../android'))\n- }\n- maven {\n- // Android JSC is installed from npm\n- url(new File(['node', '--print', \"require.resolve('jsc-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), '../dist'))\n- }\n-\n- google()\n- mavenCentral()\n- maven { url 'https://www.jitpack.io' }\n+ repositories {\n+ maven {\n+ // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n+ url(reactNativeAndroidDir)\n }\n+\n+ google()\n+ mavenCentral()\n+ maven { url 'https://www.jitpack.io' }\n+ }\n }\n+\n+apply plugin: \"expo-root-project\"\n+apply plugin: \"com.facebook.react.rootproject\"\ndiff --git a/templates/expo-template-bare-minimum/android/gradle.properties b/templates/expo-template-bare-minimum/android/gradle.properties\nindex 40220def8da..7531e9eb23c 100644\n--- a/templates/expo-template-bare-minimum/android/gradle.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle.properties\n@@ -22,9 +22,6 @@ org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m\n # https://developer.android.com/topic/libraries/support-library/androidx-rn\n android.useAndroidX=true\n \n-# Automatically convert third-party libraries to use AndroidX\n-android.enableJetifier=true\n-\n # Enable AAPT2 PNG crunching\n android.enablePngCrunchInReleaseBuilds=true\n \n@@ -38,7 +35,7 @@ reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64\n # your application. You should enable this flag either if you want\n # to write custom TurboModules/Fabric components OR use libraries that\n # are providing them.\n-newArchEnabled=false\n+newArchEnabled=true\n \n # Use this property to enable or disable the Hermes JS engine.\n # If set to false, you will be using JSC instead.\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar\nindex e6441136f3d..a4b76b9530d 100644\nBinary files a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar and b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar differ\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\nindex 6f7a6eb33e8..37f853b1c84 100644\n--- a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n@@ -1,6 +1,6 @@\n distributionBase=GRADLE_USER_HOME\n distributionPath=wrapper/dists\n-distributionUrl=https\\://services.gradle.org/distributions/gradle-8.8-all.zip\n+distributionUrl=https\\://services.gradle.org/distributions/gradle-8.13-bin.zip\n networkTimeout=10000\n validateDistributionUrl=true\n zipStoreBase=GRADLE_USER_HOME\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew b/templates/expo-template-bare-minimum/android/gradlew\nindex 1aa94a42690..f3b75f3b0d4 100755\n--- a/templates/expo-template-bare-minimum/android/gradlew\n+++ b/templates/expo-template-bare-minimum/android/gradlew\n@@ -15,6 +15,8 @@\n # See the License for the specific language governing permissions and\n # limitations under the License.\n #\n+# SPDX-License-Identifier: Apache-2.0\n+#\n \n ##############################################################################\n #\n@@ -55,7 +57,7 @@\n # Darwin, MinGW, and NonStop.\n #\n # (3) This script is generated from the Groovy template\n-# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt\n+# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt\n # within the Gradle project.\n #\n # You can find Gradle at https://github.com/gradle/gradle/.\n@@ -84,7 +86,7 @@ done\n # shellcheck disable=SC2034\n APP_BASE_NAME=${0##*/}\n # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)\n-APP_HOME=$( cd \"${APP_HOME:-./}\" > /dev/null && pwd -P ) || exit\n+APP_HOME=$( cd -P \"${APP_HOME:-./}\" > /dev/null && printf '%s\\n' \"$PWD\" ) || exit\n \n # Use the maximum available, or set MAX_FD != -1 to use that value.\n MAX_FD=maximum\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew.bat b/templates/expo-template-bare-minimum/android/gradlew.bat\nindex 7101f8e4676..9b42019c791 100644\n--- a/templates/expo-template-bare-minimum/android/gradlew.bat\n+++ b/templates/expo-template-bare-minimum/android/gradlew.bat\n@@ -13,6 +13,8 @@\n @rem See the License for the specific language governing permissions and\r\n @rem limitations under the License.\r\n @rem\r\n+@rem SPDX-License-Identifier: Apache-2.0\r\n+@rem\r\n \r\n @if \"%DEBUG%\"==\"\" @echo off\r\n @rem ##########################################################################\r\ndiff --git a/templates/expo-template-bare-minimum/android/settings.gradle b/templates/expo-template-bare-minimum/android/settings.gradle\nindex 80b1bc3267b..7fe91512213 100644\n--- a/templates/expo-template-bare-minimum/android/settings.gradle\n+++ b/templates/expo-template-bare-minimum/android/settings.gradle\n@@ -1,66 +1,39 @@\n pluginManagement {\n- def version = providers.exec {\n- commandLine(\"node\", \"-e\", \"console.log(require('react-native/package.json').version);\")\n- }.standardOutput.asText.get().trim()\n- def (_, reactNativeMinor, reactNativePatch) = version.split(\"-\")[0].tokenize('.').collect { it.toInteger() }\n-\n- includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().toString())\n- if(reactNativeMinor == 74 && reactNativePatch <= 3){\n- includeBuild(\"react-settings-plugin\")\n- }\n+ def reactNativeGradlePlugin = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\")\n+ }.standardOutput.asText.get().trim()\n+ ).getParentFile().absolutePath\n+ includeBuild(reactNativeGradlePlugin)\n+ \n+ def expoPluginsPath = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('expo-modules-autolinking/package.json', { paths: [require.resolve('expo/package.json')] })\")\n+ }.standardOutput.asText.get().trim(),\n+ \"../android/expo-gradle-plugin\"\n+ ).absolutePath\n+ includeBuild(expoPluginsPath)\n }\n \n-plugins { id(\"com.facebook.react.settings\") }\n-\n-def getRNMinorVersion() {\n- def version = providers.exec {\n- commandLine(\"node\", \"-e\", \"console.log(require('react-native/package.json').version);\")\n- }.standardOutput.asText.get().trim()\n-\n- def coreVersion = version.split(\"-\")[0]\n- def (major, minor, patch) = coreVersion.tokenize('.').collect { it.toInteger() }\n-\n- return minor\n+plugins {\n+ id(\"com.facebook.react.settings\")\n+ id(\"expo-autolinking-settings\")\n }\n \n-if (getRNMinorVersion() >= 75) {\n- extensions.configure(com.facebook.react.ReactSettingsExtension) { ex ->\n- if (System.getenv('EXPO_UNSTABLE_CORE_AUTOLINKING') == '1') {\n- println('\\u001B[32mUsing expo-modules-autolinking as core autolinking source\\u001B[0m')\n- def command = [\n- 'node',\n- '--no-warnings',\n- '--eval',\n- 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n- 'react-native-config',\n- '--json',\n- '--platform',\n- 'android'\n- ].toList()\n- ex.autolinkLibrariesFromCommand(command)\n- } else {\n- ex.autolinkLibrariesFromCommand()\n- }\n+extensions.configure(com.facebook.react.ReactSettingsExtension) { ex ->\n+ if (System.getenv('EXPO_USE_COMMUNITY_AUTOLINKING') == '1') {\n+ ex.autolinkLibrariesFromCommand()\n+ } else {\n+ ex.autolinkLibrariesFromCommand(expoAutolinking.rnConfigCommand)\n }\n }\n+expoAutolinking.useExpoModules()\n \n rootProject.name = 'HelloWorld'\n \n-dependencyResolutionManagement {\n- versionCatalogs {\n- reactAndroidLibs {\n- from(files(new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim(), \"../gradle/libs.versions.toml\")))\n- }\n- }\n-}\n-\n-apply from: new File([\"node\", \"--print\", \"require.resolve('expo/package.json')\"].execute(null, rootDir).text.trim(), \"../scripts/autolinking.gradle\");\n-useExpoModules()\n-\n-if (getRNMinorVersion() < 75) {\n- apply from: new File([\"node\", \"--print\", \"require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), \"../native_modules.gradle\");\n- applyNativeModulesSettingsGradle(settings)\n-}\n+expoAutolinking.useExpoVersionCatalog()\n \n include ':app'\n-includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile())\n+includeBuild(expoAutolinking.reactNativeGradlePlugin)\ndiff --git a/templates/expo-template-bare-minimum/gitignore b/templates/expo-template-bare-minimum/gitignore\nindex 05647d55c75..d16e1efbb3f 100644\n--- a/templates/expo-template-bare-minimum/gitignore\n+++ b/templates/expo-template-bare-minimum/gitignore\n@@ -7,6 +7,7 @@ node_modules/\n .expo/\n dist/\n web-build/\n+expo-env.d.ts\n \n # Native\n *.orig.*\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\nindex f945940c256..1b7513bd31b 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n@@ -3,33 +3,25 @@\n \tarchiveVersion = 1;\n \tclasses = {\n \t};\n-\tobjectVersion = 46;\n+\tobjectVersion = 54;\n \tobjects = {\n \n /* Begin PBXBuildFile section */\n-\t\t13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };\n \t\t13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };\n-\t\t13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };\n \t\t3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; };\n-\t\t96905EF65AED1B983A6B3ABC /* libPods-HelloWorld.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */; };\n-\t\tB18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; };\n \t\tBB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; };\n+\t\tF11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F11748412D0307B40044C1D9 /* AppDelegate.swift */; };\n /* End PBXBuildFile section */\n \n /* Begin PBXFileReference section */\n \t\t13B07F961A680F5B00A75B9A /* HelloWorld.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloWorld.app; sourceTree = BUILT_PRODUCTS_DIR; };\n-\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = HelloWorld/AppDelegate.h; sourceTree = \"\"; };\n-\t\t13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = HelloWorld/AppDelegate.mm; sourceTree = \"\"; };\n \t\t13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = HelloWorld/Images.xcassets; sourceTree = \"\"; };\n \t\t13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = HelloWorld/Info.plist; sourceTree = \"\"; };\n-\t\t13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = HelloWorld/main.m; sourceTree = \"\"; };\n-\t\t58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-HelloWorld.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n-\t\t6C2E3173556A471DD304B334 /* 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 = \"\"; };\n-\t\t7A4D352CD337FB3A3BF06240 /* 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 = \"\"; };\n \t\tAA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = HelloWorld/SplashScreen.storyboard; sourceTree = \"\"; };\n \t\tBB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = \"\"; };\n \t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };\n-\t\tFAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = \"Pods/Target Support Files/Pods-HelloWorld/ExpoModulesProvider.swift\"; sourceTree = \"\"; };\n+\t\tF11748412D0307B40044C1D9 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = HelloWorld/AppDelegate.swift; sourceTree = \"\"; };\n+\t\tF11748442D0722820044C1D9 /* HelloWorld-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = \"HelloWorld-Bridging-Header.h\"; path = \"HelloWorld/HelloWorld-Bridging-Header.h\"; sourceTree = \"\"; };\n /* End PBXFileReference section */\n \n /* Begin PBXFrameworksBuildPhase section */\n@@ -37,7 +29,6 @@\n \t\t\tisa = PBXFrameworksBuildPhase;\n \t\t\tbuildActionMask = 2147483647;\n \t\t\tfiles = (\n-\t\t\t\t96905EF65AED1B983A6B3ABC /* libPods-HelloWorld.a in Frameworks */,\n \t\t\t);\n \t\t\trunOnlyForDeploymentPostprocessing = 0;\n \t\t};\n@@ -47,12 +38,11 @@\n \t\t13B07FAE1A68108700A75B9A /* HelloWorld */ = {\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n+\t\t\t\tF11748412D0307B40044C1D9 /* AppDelegate.swift */,\n+\t\t\t\tF11748442D0722820044C1D9 /* HelloWorld-Bridging-Header.h */,\n \t\t\t\tBB2F792B24A3F905000567C9 /* Supporting */,\n-\t\t\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */,\n-\t\t\t\t13B07FB01A68108700A75B9A /* AppDelegate.mm */,\n \t\t\t\t13B07FB51A68108700A75B9A /* Images.xcassets */,\n \t\t\t\t13B07FB61A68108700A75B9A /* Info.plist */,\n-\t\t\t\t13B07FB71A68108700A75B9A /* main.m */,\n \t\t\t\tAA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */,\n \t\t\t);\n \t\t\tname = HelloWorld;\n@@ -62,7 +52,6 @@\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n \t\t\t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */,\n-\t\t\t\t58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */,\n \t\t\t);\n \t\t\tname = Frameworks;\n \t\t\tsourceTree = \"\";\n@@ -81,8 +70,6 @@\n \t\t\t\t832341AE1AAA6A7D00B99B32 /* Libraries */,\n \t\t\t\t83CBBA001A601CBA00E9B192 /* Products */,\n \t\t\t\t2D16E6871FA4F8E400B85C8A /* Frameworks */,\n-\t\t\t\tD65327D7A22EEC0BE12398D9 /* Pods */,\n-\t\t\t\tD7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */,\n \t\t\t);\n \t\t\tindentWidth = 2;\n \t\t\tsourceTree = \"\";\n@@ -97,14 +84,6 @@\n \t\t\tname = Products;\n \t\t\tsourceTree = \"\";\n \t\t};\n-\t\t92DBD88DE9BF7D494EA9DA96 /* HelloWorld */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\tFAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */,\n-\t\t\t);\n-\t\t\tname = HelloWorld;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n \t\tBB2F792B24A3F905000567C9 /* Supporting */ = {\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n@@ -114,23 +93,6 @@\n \t\t\tpath = HelloWorld/Supporting;\n \t\t\tsourceTree = \"\";\n \t\t};\n-\t\tD65327D7A22EEC0BE12398D9 /* Pods */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\t6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */,\n-\t\t\t\t7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */,\n-\t\t\t);\n-\t\t\tpath = Pods;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n-\t\tD7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\t92DBD88DE9BF7D494EA9DA96 /* HelloWorld */,\n-\t\t\t);\n-\t\t\tname = ExpoModulesProviders;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n /* End PBXGroup section */\n \n /* Begin PBXNativeTarget section */\n@@ -265,9 +227,7 @@\n \t\t\tisa = PBXSourcesBuildPhase;\n \t\t\tbuildActionMask = 2147483647;\n \t\t\tfiles = (\n-\t\t\t\t13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,\n-\t\t\t\t13B07FC11A68108700A75B9A /* main.m in Sources */,\n-\t\t\t\tB18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */,\n+\t\t\t\tF11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */,\n \t\t\t);\n \t\t\trunOnlyForDeploymentPostprocessing = 0;\n \t\t};\n@@ -276,7 +236,6 @@\n /* Begin XCBuildConfiguration section */\n \t\t13B07F941A680F5B00A75B9A /* Debug */ = {\n \t\t\tisa = XCBuildConfiguration;\n-\t\t\tbaseConfigurationReference = 6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */;\n \t\t\tbuildSettings = {\n \t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n@@ -287,8 +246,11 @@\n \t\t\t\t\t\"FB_SONARKIT_ENABLED=1\",\n \t\t\t\t);\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t\t\"@executable_path/Frameworks\",\n+\t\t\t\t);\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -297,6 +259,7 @@\n \t\t\t\t);\n \t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = org.name.HelloWorld;\n \t\t\t\tPRODUCT_NAME = HelloWorld;\n+\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"HelloWorld/HelloWorld-Bridging-Header.h\";\n \t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n \t\t\t\tSWIFT_VERSION = 5.0;\n \t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n@@ -305,14 +268,16 @@\n \t\t};\n \t\t13B07F951A680F5B00A75B9A /* Release */ = {\n \t\t\tisa = XCBuildConfiguration;\n-\t\t\tbaseConfigurationReference = 7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */;\n \t\t\tbuildSettings = {\n \t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n \t\t\t\tCURRENT_PROJECT_VERSION = 1;\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t\t\"@executable_path/Frameworks\",\n+\t\t\t\t);\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -321,6 +286,7 @@\n \t\t\t\t);\n \t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = org.name.HelloWorld;\n \t\t\t\tPRODUCT_NAME = HelloWorld;\n+\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"HelloWorld/HelloWorld-Bridging-Header.h\";\n \t\t\t\tSWIFT_VERSION = 5.0;\n \t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n \t\t\t};\n@@ -373,8 +339,11 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t/usr/lib/swift,\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t);\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n \t\t\t\tONLY_ACTIVE_ARCH = YES;\n@@ -422,8 +391,11 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t/usr/lib/swift,\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t);\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n \t\t\t\tSDKROOT = iphoneos;\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\nnew file mode 100644\nindex 00000000000..a7887e1e5b1\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\n@@ -0,0 +1,70 @@\n+import Expo\n+import React\n+import ReactAppDependencyProvider\n+\n+@UIApplicationMain\n+public class AppDelegate: ExpoAppDelegate {\n+ var window: UIWindow?\n+\n+ var reactNativeDelegate: ExpoReactNativeFactoryDelegate?\n+ var reactNativeFactory: RCTReactNativeFactory?\n+\n+ public override func application(\n+ _ application: UIApplication,\n+ didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil\n+ ) -> Bool {\n+ let delegate = ReactNativeDelegate()\n+ let factory = ExpoReactNativeFactory(delegate: delegate)\n+ delegate.dependencyProvider = RCTAppDependencyProvider()\n+\n+ reactNativeDelegate = delegate\n+ reactNativeFactory = factory\n+ bindReactNativeFactory(factory)\n+\n+#if os(iOS) || os(tvOS)\n+ window = UIWindow(frame: UIScreen.main.bounds)\n+ factory.startReactNative(\n+ withModuleName: \"main\",\n+ in: window,\n+ launchOptions: launchOptions)\n+#endif\n+\n+ return super.application(application, didFinishLaunchingWithOptions: launchOptions)\n+ }\n+\n+ // Linking API\n+ public override func application(\n+ _ app: UIApplication,\n+ open url: URL,\n+ options: [UIApplication.OpenURLOptionsKey: Any] = [:]\n+ ) -> Bool {\n+ return super.application(app, open: url, options: options) || RCTLinkingManager.application(app, open: url, options: options)\n+ }\n+\n+ // Universal Links\n+ public override func application(\n+ _ application: UIApplication,\n+ continue userActivity: NSUserActivity,\n+ restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void\n+ ) -> Bool {\n+ let result = RCTLinkingManager.application(application, continue: userActivity, restorationHandler: restorationHandler)\n+ return super.application(application, continue: userActivity, restorationHandler: restorationHandler) || result\n+ }\n+}\n+\n+class ReactNativeDelegate: ExpoReactNativeFactoryDelegate {\n+ // Extension point for config-plugins\n+\n+ override func sourceURL(for bridge: RCTBridge) -> URL? {\n+ // needed to return the correct URL for expo-dev-client.\n+ bridge.bundleURL ?? bundleURL()\n+ }\n+\n+ override func bundleURL() -> URL? {\n+#if DEBUG\n+ return RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: \".expo/.virtual-metro-entry\")\n+#else\n+ return Bundle.main.url(forResource: \"main\", withExtension: \"jsbundle\")\n+#endif\n+ }\n+}\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h b/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h\nnew file mode 100644\nindex 00000000000..8361941afc2\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h\n@@ -0,0 +1,3 @@\n+//\n+// Use this file to import your target's public headers that you would like to expose to Swift.\n+//\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist b/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist\nindex 53d78e89033..596dc7ce6b5 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist\n@@ -24,6 +24,8 @@\n \t1\n \tLSRequiresIPhoneOS\n \t\n+\tLSMinimumSystemVersion\n+\t12.0\n \tNSAppTransportSecurity\n \t\n \t\tNSAllowsArbitraryLoads\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\nindex 24eec3df5cb..447b4188985 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n@@ -1,91 +1,42 @@\n \n-\n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n+\n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n \ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex 57c1dd38343..29503ff0cc1 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -4,39 +4,32 @@ require File.join(File.dirname(`node --print \"require.resolve('react-native/pack\n require 'json'\n podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}\n \n-ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0'\n+ENV['RCT_NEW_ARCH_ENABLED'] = '0' if podfile_properties['newArchEnabled'] == 'false'\n ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n \n-use_autolinking_method_symbol = ('use' + '_native' + '_modules!').to_sym\n-origin_autolinking_method = self.method(use_autolinking_method_symbol)\n-self.define_singleton_method(use_autolinking_method_symbol) do |*args|\n- if ENV['EXPO_UNSTABLE_CORE_AUTOLINKING'] == '1'\n- Pod::UI.puts('Using expo-modules-autolinking as core autolinking source'.green)\n+platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'\n+install! 'cocoapods',\n+ :deterministic_uuids => false\n+\n+prepare_react_native_project!\n+\n+target 'HelloWorld' do\n+ use_expo_modules!\n+\n+ if ENV['EXPO_USE_COMMUNITY_AUTOLINKING'] == '1'\n+ config_command = ['node', '-e', \"process.argv=['', '', 'config'];require('@react-native-community/cli').run()\"];\n+ else\n config_command = [\n- 'node',\n- '--no-warnings',\n- '--eval',\n- 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n+ 'npx',\n+ 'expo-modules-autolinking',\n 'react-native-config',\n '--json',\n '--platform',\n 'ios'\n ]\n- origin_autolinking_method.call(config_command)\n- else\n- origin_autolinking_method.call()\n end\n-end\n \n-platform :ios, podfile_properties['ios.deploymentTarget'] || '13.4'\n-install! 'cocoapods',\n- :deterministic_uuids => false\n-\n-prepare_react_native_project!\n-\n-target 'HelloWorld' do\n- use_expo_modules!\n- config = use_native_modules!\n+ config = use_native_modules!(config_command)\n \n use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks']\n use_frameworks! :linkage => ENV['USE_FRAMEWORKS'].to_sym if ENV['USE_FRAMEWORKS']\n@@ -68,12 +61,4 @@ target 'HelloWorld' do\n end\n end\n end\n-\n- post_integrate do |installer|\n- begin\n- expo_patch_react_imports!(installer)\n- rescue => e\n- Pod::UI.warn e\n- end\n- end\n end\ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex 563853071f0..661f6b6addf 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -1,7 +1,8 @@\n {\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n- \"version\": \"51.0.56\",\n+ \"license\": \"0BSD\",\n+ \"version\": \"53.0.42\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -10,10 +11,10 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~51.0.28\",\n- \"expo-status-bar\": \"~1.12.1\",\n- \"react\": \"18.2.0\",\n- \"react-native\": \"0.74.5\"\n+ \"expo\": \"~53.0.27\",\n+ \"expo-status-bar\": \"~2.2.3\",\n+ \"react\": \"19.0.0\",\n+ \"react-native\": \"0.79.6\"\n },\n \"devDependencies\": {\n \"@babel/core\": \"^7.20.0\"\n","52..53":"diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle\nindex 84879d83acd..34b96c71c33 100644\n--- a/templates/expo-template-bare-minimum/android/app/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/app/build.gradle\n@@ -14,6 +14,7 @@ react {\n hermesCommand = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/sdks/hermesc/%OS-BIN%/hermesc\"\n codegenDir = new File([\"node\", \"--print\", \"require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n \n+ enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean()\n // Use Expo CLI to bundle the app, this ensures the Metro config\n // works correctly with Expo projects.\n cliFile = new File([\"node\", \"--print\", \"require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })\"].execute(null, rootDir).text.trim())\n@@ -78,7 +79,7 @@ def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInRelea\n * give correct results when using with locales other than en-US. Note that\n * this variant is about 6MiB larger per architecture than default.\n */\n-def jscFlavor = 'org.webkit:android-jsc:+'\n+def jscFlavor = 'io.github.react-native-community:jsc-android:2026004.+'\n \n android {\n ndkVersion rootProject.ext.ndkVersion\n@@ -156,15 +157,15 @@ dependencies {\n \n if (isGifEnabled) {\n // For animated gif support\n- implementation(\"com.facebook.fresco:animated-gif:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-gif:${expoLibs.versions.fresco.get()}\")\n }\n \n if (isWebpEnabled) {\n // For webp support\n- implementation(\"com.facebook.fresco:webpsupport:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:webpsupport:${expoLibs.versions.fresco.get()}\")\n if (isWebpAnimatedEnabled) {\n // Animated webp support\n- implementation(\"com.facebook.fresco:animated-webp:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-webp:${expoLibs.versions.fresco.get()}\")\n }\n }\n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\nindex e61349d1301..267e20c30e5 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n@@ -24,7 +24,7 @@ class MainApplication : Application(), ReactApplication {\n override fun getPackages(): List {\n val packages = PackageList(this).packages\n // Packages that cannot be autolinked yet can be added manually here, for example:\n- // packages.add(new MyReactNativePackage());\n+ // packages.add(MyReactNativePackage())\n return packages\n }\n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\nindex 51fbc1e5a72..26f3404be26 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n@@ -1,14 +1,7 @@\n \n- \n- \n \ndiff --git a/templates/expo-template-bare-minimum/android/build.gradle b/templates/expo-template-bare-minimum/android/build.gradle\nindex abbcb8ec8a1..fa7b11e23c1 100644\n--- a/templates/expo-template-bare-minimum/android/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/build.gradle\n@@ -1,41 +1,37 @@\n // Top-level build file where you can add configuration options common to all sub-projects/modules.\n \n buildscript {\n- ext {\n- buildToolsVersion = findProperty('android.buildToolsVersion') ?: '35.0.0'\n- minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '24')\n- compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '35')\n- targetSdkVersion = Integer.parseInt(findProperty('android.targetSdkVersion') ?: '34')\n- kotlinVersion = findProperty('android.kotlinVersion') ?: '1.9.25'\n-\n- ndkVersion = \"26.1.10909125\"\n- }\n- repositories {\n- google()\n- mavenCentral()\n- }\n- dependencies {\n- classpath('com.android.tools.build:gradle')\n- classpath('com.facebook.react:react-native-gradle-plugin')\n- classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')\n- }\n+ repositories {\n+ google()\n+ mavenCentral()\n+ }\n+ dependencies {\n+ classpath('com.android.tools.build:gradle')\n+ classpath('com.facebook.react:react-native-gradle-plugin')\n+ classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')\n+ }\n }\n \n-apply plugin: \"com.facebook.react.rootproject\"\n+def reactNativeAndroidDir = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('react-native/package.json')\")\n+ }.standardOutput.asText.get().trim(),\n+ \"../android\"\n+)\n \n allprojects {\n- repositories {\n- maven {\n- // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n- url(new File(['node', '--print', \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim(), '../android'))\n- }\n- maven {\n- // Android JSC is installed from npm\n- url(new File(['node', '--print', \"require.resolve('jsc-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), '../dist'))\n- }\n-\n- google()\n- mavenCentral()\n- maven { url 'https://www.jitpack.io' }\n+ repositories {\n+ maven {\n+ // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n+ url(reactNativeAndroidDir)\n }\n+\n+ google()\n+ mavenCentral()\n+ maven { url 'https://www.jitpack.io' }\n+ }\n }\n+\n+apply plugin: \"expo-root-project\"\n+apply plugin: \"com.facebook.react.rootproject\"\ndiff --git a/templates/expo-template-bare-minimum/android/gradle.properties b/templates/expo-template-bare-minimum/android/gradle.properties\nindex de47429c64c..7531e9eb23c 100644\n--- a/templates/expo-template-bare-minimum/android/gradle.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle.properties\n@@ -35,7 +35,7 @@ reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64\n # your application. You should enable this flag either if you want\n # to write custom TurboModules/Fabric components OR use libraries that\n # are providing them.\n-newArchEnabled=false\n+newArchEnabled=true\n \n # Use this property to enable or disable the Hermes JS engine.\n # If set to false, you will be using JSC instead.\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\nindex 79eb9d003fe..37f853b1c84 100644\n--- a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n@@ -1,6 +1,6 @@\n distributionBase=GRADLE_USER_HOME\n distributionPath=wrapper/dists\n-distributionUrl=https\\://services.gradle.org/distributions/gradle-8.10.2-all.zip\n+distributionUrl=https\\://services.gradle.org/distributions/gradle-8.13-bin.zip\n networkTimeout=10000\n validateDistributionUrl=true\n zipStoreBase=GRADLE_USER_HOME\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew b/templates/expo-template-bare-minimum/android/gradlew\nindex f5feea6d6b1..f3b75f3b0d4 100755\n--- a/templates/expo-template-bare-minimum/android/gradlew\n+++ b/templates/expo-template-bare-minimum/android/gradlew\n@@ -86,8 +86,7 @@ done\n # shellcheck disable=SC2034\n APP_BASE_NAME=${0##*/}\n # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)\n-APP_HOME=$( cd -P \"${APP_HOME:-./}\" > /dev/null && printf '%s\n-' \"$PWD\" ) || exit\n+APP_HOME=$( cd -P \"${APP_HOME:-./}\" > /dev/null && printf '%s\\n' \"$PWD\" ) || exit\n \n # Use the maximum available, or set MAX_FD != -1 to use that value.\n MAX_FD=maximum\ndiff --git a/templates/expo-template-bare-minimum/android/settings.gradle b/templates/expo-template-bare-minimum/android/settings.gradle\nindex 39b188e065c..7fe91512213 100644\n--- a/templates/expo-template-bare-minimum/android/settings.gradle\n+++ b/templates/expo-template-bare-minimum/android/settings.gradle\n@@ -1,38 +1,39 @@\n pluginManagement {\n- includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().toString())\n+ def reactNativeGradlePlugin = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\")\n+ }.standardOutput.asText.get().trim()\n+ ).getParentFile().absolutePath\n+ includeBuild(reactNativeGradlePlugin)\n+ \n+ def expoPluginsPath = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('expo-modules-autolinking/package.json', { paths: [require.resolve('expo/package.json')] })\")\n+ }.standardOutput.asText.get().trim(),\n+ \"../android/expo-gradle-plugin\"\n+ ).absolutePath\n+ includeBuild(expoPluginsPath)\n+}\n+\n+plugins {\n+ id(\"com.facebook.react.settings\")\n+ id(\"expo-autolinking-settings\")\n }\n-plugins { id(\"com.facebook.react.settings\") }\n \n extensions.configure(com.facebook.react.ReactSettingsExtension) { ex ->\n if (System.getenv('EXPO_USE_COMMUNITY_AUTOLINKING') == '1') {\n ex.autolinkLibrariesFromCommand()\n } else {\n- def command = [\n- 'node',\n- '--no-warnings',\n- '--eval',\n- 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n- 'react-native-config',\n- '--json',\n- '--platform',\n- 'android'\n- ].toList()\n- ex.autolinkLibrariesFromCommand(command)\n+ ex.autolinkLibrariesFromCommand(expoAutolinking.rnConfigCommand)\n }\n }\n+expoAutolinking.useExpoModules()\n \n rootProject.name = 'HelloWorld'\n \n-dependencyResolutionManagement {\n- versionCatalogs {\n- reactAndroidLibs {\n- from(files(new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim(), \"../gradle/libs.versions.toml\")))\n- }\n- }\n-}\n-\n-apply from: new File([\"node\", \"--print\", \"require.resolve('expo/package.json')\"].execute(null, rootDir).text.trim(), \"../scripts/autolinking.gradle\");\n-useExpoModules()\n+expoAutolinking.useExpoVersionCatalog()\n \n include ':app'\n-includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile())\n+includeBuild(expoAutolinking.reactNativeGradlePlugin)\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\nindex 1ccb9b422d5..1b7513bd31b 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n@@ -3,33 +3,25 @@\n \tarchiveVersion = 1;\n \tclasses = {\n \t};\n-\tobjectVersion = 46;\n+\tobjectVersion = 54;\n \tobjects = {\n \n /* Begin PBXBuildFile section */\n-\t\t13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };\n \t\t13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };\n-\t\t13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };\n \t\t3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; };\n-\t\t96905EF65AED1B983A6B3ABC /* libPods-HelloWorld.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */; };\n-\t\tB18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; };\n \t\tBB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; };\n+\t\tF11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F11748412D0307B40044C1D9 /* AppDelegate.swift */; };\n /* End PBXBuildFile section */\n \n /* Begin PBXFileReference section */\n \t\t13B07F961A680F5B00A75B9A /* HelloWorld.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloWorld.app; sourceTree = BUILT_PRODUCTS_DIR; };\n-\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = HelloWorld/AppDelegate.h; sourceTree = \"\"; };\n-\t\t13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = HelloWorld/AppDelegate.mm; sourceTree = \"\"; };\n \t\t13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = HelloWorld/Images.xcassets; sourceTree = \"\"; };\n \t\t13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = HelloWorld/Info.plist; sourceTree = \"\"; };\n-\t\t13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = HelloWorld/main.m; sourceTree = \"\"; };\n-\t\t58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-HelloWorld.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n-\t\t6C2E3173556A471DD304B334 /* 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 = \"\"; };\n-\t\t7A4D352CD337FB3A3BF06240 /* 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 = \"\"; };\n \t\tAA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = HelloWorld/SplashScreen.storyboard; sourceTree = \"\"; };\n \t\tBB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = \"\"; };\n \t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };\n-\t\tFAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = \"Pods/Target Support Files/Pods-HelloWorld/ExpoModulesProvider.swift\"; sourceTree = \"\"; };\n+\t\tF11748412D0307B40044C1D9 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = HelloWorld/AppDelegate.swift; sourceTree = \"\"; };\n+\t\tF11748442D0722820044C1D9 /* HelloWorld-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = \"HelloWorld-Bridging-Header.h\"; path = \"HelloWorld/HelloWorld-Bridging-Header.h\"; sourceTree = \"\"; };\n /* End PBXFileReference section */\n \n /* Begin PBXFrameworksBuildPhase section */\n@@ -37,7 +29,6 @@\n \t\t\tisa = PBXFrameworksBuildPhase;\n \t\t\tbuildActionMask = 2147483647;\n \t\t\tfiles = (\n-\t\t\t\t96905EF65AED1B983A6B3ABC /* libPods-HelloWorld.a in Frameworks */,\n \t\t\t);\n \t\t\trunOnlyForDeploymentPostprocessing = 0;\n \t\t};\n@@ -47,12 +38,11 @@\n \t\t13B07FAE1A68108700A75B9A /* HelloWorld */ = {\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n+\t\t\t\tF11748412D0307B40044C1D9 /* AppDelegate.swift */,\n+\t\t\t\tF11748442D0722820044C1D9 /* HelloWorld-Bridging-Header.h */,\n \t\t\t\tBB2F792B24A3F905000567C9 /* Supporting */,\n-\t\t\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */,\n-\t\t\t\t13B07FB01A68108700A75B9A /* AppDelegate.mm */,\n \t\t\t\t13B07FB51A68108700A75B9A /* Images.xcassets */,\n \t\t\t\t13B07FB61A68108700A75B9A /* Info.plist */,\n-\t\t\t\t13B07FB71A68108700A75B9A /* main.m */,\n \t\t\t\tAA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */,\n \t\t\t);\n \t\t\tname = HelloWorld;\n@@ -62,7 +52,6 @@\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n \t\t\t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */,\n-\t\t\t\t58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */,\n \t\t\t);\n \t\t\tname = Frameworks;\n \t\t\tsourceTree = \"\";\n@@ -81,8 +70,6 @@\n \t\t\t\t832341AE1AAA6A7D00B99B32 /* Libraries */,\n \t\t\t\t83CBBA001A601CBA00E9B192 /* Products */,\n \t\t\t\t2D16E6871FA4F8E400B85C8A /* Frameworks */,\n-\t\t\t\tD65327D7A22EEC0BE12398D9 /* Pods */,\n-\t\t\t\tD7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */,\n \t\t\t);\n \t\t\tindentWidth = 2;\n \t\t\tsourceTree = \"\";\n@@ -97,14 +84,6 @@\n \t\t\tname = Products;\n \t\t\tsourceTree = \"\";\n \t\t};\n-\t\t92DBD88DE9BF7D494EA9DA96 /* HelloWorld */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\tFAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */,\n-\t\t\t);\n-\t\t\tname = HelloWorld;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n \t\tBB2F792B24A3F905000567C9 /* Supporting */ = {\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n@@ -114,23 +93,6 @@\n \t\t\tpath = HelloWorld/Supporting;\n \t\t\tsourceTree = \"\";\n \t\t};\n-\t\tD65327D7A22EEC0BE12398D9 /* Pods */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\t6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */,\n-\t\t\t\t7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */,\n-\t\t\t);\n-\t\t\tpath = Pods;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n-\t\tD7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\t92DBD88DE9BF7D494EA9DA96 /* HelloWorld */,\n-\t\t\t);\n-\t\t\tname = ExpoModulesProviders;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n /* End PBXGroup section */\n \n /* Begin PBXNativeTarget section */\n@@ -265,9 +227,7 @@\n \t\t\tisa = PBXSourcesBuildPhase;\n \t\t\tbuildActionMask = 2147483647;\n \t\t\tfiles = (\n-\t\t\t\t13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,\n-\t\t\t\t13B07FC11A68108700A75B9A /* main.m in Sources */,\n-\t\t\t\tB18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */,\n+\t\t\t\tF11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */,\n \t\t\t);\n \t\t\trunOnlyForDeploymentPostprocessing = 0;\n \t\t};\n@@ -276,7 +236,6 @@\n /* Begin XCBuildConfiguration section */\n \t\t13B07F941A680F5B00A75B9A /* Debug */ = {\n \t\t\tisa = XCBuildConfiguration;\n-\t\t\tbaseConfigurationReference = 6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */;\n \t\t\tbuildSettings = {\n \t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n@@ -288,7 +247,10 @@\n \t\t\t\t);\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n \t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t\t\"@executable_path/Frameworks\",\n+\t\t\t\t);\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -297,6 +259,7 @@\n \t\t\t\t);\n \t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = org.name.HelloWorld;\n \t\t\t\tPRODUCT_NAME = HelloWorld;\n+\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"HelloWorld/HelloWorld-Bridging-Header.h\";\n \t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n \t\t\t\tSWIFT_VERSION = 5.0;\n \t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n@@ -305,14 +268,16 @@\n \t\t};\n \t\t13B07F951A680F5B00A75B9A /* Release */ = {\n \t\t\tisa = XCBuildConfiguration;\n-\t\t\tbaseConfigurationReference = 7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */;\n \t\t\tbuildSettings = {\n \t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n \t\t\t\tCURRENT_PROJECT_VERSION = 1;\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n \t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t\t\"@executable_path/Frameworks\",\n+\t\t\t\t);\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -321,6 +286,7 @@\n \t\t\t\t);\n \t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = org.name.HelloWorld;\n \t\t\t\tPRODUCT_NAME = HelloWorld;\n+\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"HelloWorld/HelloWorld-Bridging-Header.h\";\n \t\t\t\tSWIFT_VERSION = 5.0;\n \t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n \t\t\t};\n@@ -374,7 +340,10 @@\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n \t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t/usr/lib/swift,\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t);\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n \t\t\t\tONLY_ACTIVE_ARCH = YES;\n@@ -423,7 +392,10 @@\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n \t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t/usr/lib/swift,\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t);\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n \t\t\t\tSDKROOT = iphoneos;\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\nnew file mode 100644\nindex 00000000000..a7887e1e5b1\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\n@@ -0,0 +1,70 @@\n+import Expo\n+import React\n+import ReactAppDependencyProvider\n+\n+@UIApplicationMain\n+public class AppDelegate: ExpoAppDelegate {\n+ var window: UIWindow?\n+\n+ var reactNativeDelegate: ExpoReactNativeFactoryDelegate?\n+ var reactNativeFactory: RCTReactNativeFactory?\n+\n+ public override func application(\n+ _ application: UIApplication,\n+ didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil\n+ ) -> Bool {\n+ let delegate = ReactNativeDelegate()\n+ let factory = ExpoReactNativeFactory(delegate: delegate)\n+ delegate.dependencyProvider = RCTAppDependencyProvider()\n+\n+ reactNativeDelegate = delegate\n+ reactNativeFactory = factory\n+ bindReactNativeFactory(factory)\n+\n+#if os(iOS) || os(tvOS)\n+ window = UIWindow(frame: UIScreen.main.bounds)\n+ factory.startReactNative(\n+ withModuleName: \"main\",\n+ in: window,\n+ launchOptions: launchOptions)\n+#endif\n+\n+ return super.application(application, didFinishLaunchingWithOptions: launchOptions)\n+ }\n+\n+ // Linking API\n+ public override func application(\n+ _ app: UIApplication,\n+ open url: URL,\n+ options: [UIApplication.OpenURLOptionsKey: Any] = [:]\n+ ) -> Bool {\n+ return super.application(app, open: url, options: options) || RCTLinkingManager.application(app, open: url, options: options)\n+ }\n+\n+ // Universal Links\n+ public override func application(\n+ _ application: UIApplication,\n+ continue userActivity: NSUserActivity,\n+ restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void\n+ ) -> Bool {\n+ let result = RCTLinkingManager.application(application, continue: userActivity, restorationHandler: restorationHandler)\n+ return super.application(application, continue: userActivity, restorationHandler: restorationHandler) || result\n+ }\n+}\n+\n+class ReactNativeDelegate: ExpoReactNativeFactoryDelegate {\n+ // Extension point for config-plugins\n+\n+ override func sourceURL(for bridge: RCTBridge) -> URL? {\n+ // needed to return the correct URL for expo-dev-client.\n+ bridge.bundleURL ?? bundleURL()\n+ }\n+\n+ override func bundleURL() -> URL? {\n+#if DEBUG\n+ return RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: \".expo/.virtual-metro-entry\")\n+#else\n+ return Bundle.main.url(forResource: \"main\", withExtension: \"jsbundle\")\n+#endif\n+ }\n+}\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h b/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h\nnew file mode 100644\nindex 00000000000..8361941afc2\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h\n@@ -0,0 +1,3 @@\n+//\n+// Use this file to import your target's public headers that you would like to expose to Swift.\n+//\ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex f740040e7be..29503ff0cc1 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -4,7 +4,7 @@ require File.join(File.dirname(`node --print \"require.resolve('react-native/pack\n require 'json'\n podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}\n \n-ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0'\n+ENV['RCT_NEW_ARCH_ENABLED'] = '0' if podfile_properties['newArchEnabled'] == 'false'\n ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n \n platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'\n@@ -20,10 +20,8 @@ target 'HelloWorld' do\n config_command = ['node', '-e', \"process.argv=['', '', 'config'];require('@react-native-community/cli').run()\"];\n else\n config_command = [\n- 'node',\n- '--no-warnings',\n- '--eval',\n- 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n+ 'npx',\n+ 'expo-modules-autolinking',\n 'react-native-config',\n '--json',\n '--platform',\ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex b51159163bf..661f6b6addf 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -2,7 +2,7 @@\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n \"license\": \"0BSD\",\n- \"version\": \"52.0.79\",\n+ \"version\": \"53.0.42\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -11,10 +11,10 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~52.0.49\",\n- \"expo-status-bar\": \"~2.0.1\",\n- \"react\": \"18.3.1\",\n- \"react-native\": \"0.76.9\"\n+ \"expo\": \"~53.0.27\",\n+ \"expo-status-bar\": \"~2.2.3\",\n+ \"react\": \"19.0.0\",\n+ \"react-native\": \"0.79.6\"\n },\n \"devDependencies\": {\n \"@babel/core\": \"^7.20.0\"\n","53..53":"","50..54":"diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle\nindex 27c6e63957e..3f1c571b679 100644\n--- a/templates/expo-template-bare-minimum/android/app/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/app/build.gradle\n@@ -14,18 +14,19 @@ react {\n hermesCommand = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/sdks/hermesc/%OS-BIN%/hermesc\"\n codegenDir = new File([\"node\", \"--print\", \"require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n \n+ enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean()\n // Use Expo CLI to bundle the app, this ensures the Metro config\n // works correctly with Expo projects.\n cliFile = new File([\"node\", \"--print\", \"require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })\"].execute(null, rootDir).text.trim())\n bundleCommand = \"export:embed\"\n \n /* Folders */\n- // The root of your project, i.e. where \"package.json\" lives. Default is '..'\n- // root = file(\"../\")\n- // The folder where the react-native NPM package is. Default is ../node_modules/react-native\n- // reactNativeDir = file(\"../node_modules/react-native\")\n- // The folder where the react-native Codegen package is. Default is ../node_modules/@react-native/codegen\n- // codegenDir = file(\"../node_modules/@react-native/codegen\")\n+ // The root of your project, i.e. where \"package.json\" lives. Default is '../..'\n+ // root = file(\"../../\")\n+ // The folder where the react-native NPM package is. Default is ../../node_modules/react-native\n+ // reactNativeDir = file(\"../../node_modules/react-native\")\n+ // The folder where the react-native Codegen package is. Default is ../../node_modules/@react-native/codegen\n+ // codegenDir = file(\"../../node_modules/@react-native/codegen\")\n \n /* Variants */\n // The list of variants to that are debuggable. For those we're going to\n@@ -57,12 +58,15 @@ react {\n //\n // The list of flags to pass to the Hermes compiler. By default is \"-O\", \"-output-source-map\"\n // hermesFlags = [\"-O\", \"-output-source-map\"]\n+\n+ /* Autolinking */\n+ autolinkLibrariesWithApp()\n }\n \n /**\n- * Set this to true to Run Proguard on Release builds to minify the Java bytecode.\n+ * Set this to true in release builds to optimize the app using [R8](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization).\n */\n-def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInReleaseBuilds') ?: false).toBoolean()\n+def enableMinifyInReleaseBuilds = (findProperty('android.enableMinifyInReleaseBuilds') ?: false).toBoolean()\n \n /**\n * The preferred build flavor of JavaScriptCore (JSC)\n@@ -75,7 +79,7 @@ def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInRelea\n * give correct results when using with locales other than en-US. Note that\n * this variant is about 6MiB larger per architecture than default.\n */\n-def jscFlavor = 'org.webkit:android-jsc:+'\n+def jscFlavor = 'io.github.react-native-community:jsc-android:2026004.+'\n \n android {\n ndkVersion rootProject.ext.ndkVersion\n@@ -91,7 +95,7 @@ android {\n versionCode 1\n versionName \"1.0\"\n \n- buildConfigField(\"boolean\", \"REACT_NATIVE_UNSTABLE_USE_RUNTIME_SCHEDULER_ALWAYS\", (findProperty(\"reactNative.unstable_useRuntimeSchedulerAlways\") ?: true).toString())\n+ buildConfigField \"String\", \"REACT_NATIVE_RELEASE_LEVEL\", \"\\\"${findProperty('reactNativeReleaseLevel') ?: 'stable'}\\\"\"\n }\n signingConfigs {\n debug {\n@@ -109,16 +113,23 @@ android {\n // Caution! In production, you need to generate your own keystore file.\n // see https://reactnative.dev/docs/signed-apk-android.\n signingConfig signingConfigs.debug\n- shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false)\n- minifyEnabled enableProguardInReleaseBuilds\n+ def enableShrinkResources = findProperty('android.enableShrinkResourcesInReleaseBuilds') ?: 'false'\n+ shrinkResources enableShrinkResources.toBoolean()\n+ minifyEnabled enableMinifyInReleaseBuilds\n proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n+ def enablePngCrunchInRelease = findProperty('android.enablePngCrunchInReleaseBuilds') ?: 'true'\n+ crunchPngs enablePngCrunchInRelease.toBoolean()\n }\n }\n packagingOptions {\n jniLibs {\n- useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false)\n+ def enableLegacyPackaging = findProperty('expo.useLegacyPackaging') ?: 'false'\n+ useLegacyPackaging enableLegacyPackaging.toBoolean()\n }\n }\n+ androidResources {\n+ ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:!CVS:!thumbs.db:!picasa.ini:!*~'\n+ }\n }\n \n // Apply static values from `gradle.properties` to the `android.packagingOptions`\n@@ -151,26 +162,21 @@ dependencies {\n \n if (isGifEnabled) {\n // For animated gif support\n- implementation(\"com.facebook.fresco:animated-gif:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-gif:${expoLibs.versions.fresco.get()}\")\n }\n \n if (isWebpEnabled) {\n // For webp support\n- implementation(\"com.facebook.fresco:webpsupport:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:webpsupport:${expoLibs.versions.fresco.get()}\")\n if (isWebpAnimatedEnabled) {\n // Animated webp support\n- implementation(\"com.facebook.fresco:animated-webp:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-webp:${expoLibs.versions.fresco.get()}\")\n }\n }\n \n- implementation(\"com.facebook.react:flipper-integration\")\n-\n if (hermesEnabled.toBoolean()) {\n implementation(\"com.facebook.react:hermes-android\")\n } else {\n implementation jscFlavor\n }\n }\n-\n-apply from: new File([\"node\", \"--print\", \"require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), \"../native_modules.gradle\");\n-applyNativeModulesAppBuildGradle(project)\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\nnew file mode 100644\nindex 00000000000..3ec2507bab7\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\n@@ -0,0 +1,7 @@\n+\n+\n+ \n+\n+ \n+\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\nindex f8d77fc832f..150248b6b3c 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n@@ -18,15 +18,12 @@\n \n \n \n- \n- \n- \n+ \n \n \n \n \n \n \n- \n \n-\n\\ No newline at end of file\n+\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\nindex 8258c40ed4c..5abad96fa00 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n@@ -2,19 +2,16 @@ package com.helloworld\n \n import android.app.Application\n import android.content.res.Configuration\n-import androidx.annotation.NonNull\n \n import com.facebook.react.PackageList\n import com.facebook.react.ReactApplication\n+import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative\n import com.facebook.react.ReactNativeHost\n import com.facebook.react.ReactPackage\n import com.facebook.react.ReactHost\n-import com.facebook.react.config.ReactFeatureFlags\n-import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load\n-import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost\n+import com.facebook.react.common.ReleaseLevel\n+import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint\n import com.facebook.react.defaults.DefaultReactNativeHost\n-import com.facebook.react.flipper.ReactNativeFlipper\n-import com.facebook.soloader.SoLoader\n \n import expo.modules.ApplicationLifecycleDispatcher\n import expo.modules.ReactNativeHostWrapper\n@@ -22,39 +19,33 @@ import expo.modules.ReactNativeHostWrapper\n class MainApplication : Application(), ReactApplication {\n \n override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper(\n- this,\n- object : DefaultReactNativeHost(this) {\n- override fun getPackages(): List {\n- // Packages that cannot be autolinked yet can be added manually here, for example:\n- // packages.add(new MyReactNativePackage());\n- return PackageList(this).packages\n- }\n+ this,\n+ object : DefaultReactNativeHost(this) {\n+ override fun getPackages(): List =\n+ PackageList(this).packages.apply {\n+ // Packages that cannot be autolinked yet can be added manually here, for example:\n+ // add(MyReactNativePackage())\n+ }\n \n override fun getJSMainModuleName(): String = \".expo/.virtual-metro-entry\"\n \n override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG\n \n override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED\n- override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED\n }\n )\n \n override val reactHost: ReactHost\n- get() = getDefaultReactHost(this.applicationContext, reactNativeHost)\n+ get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost)\n \n override fun onCreate() {\n super.onCreate()\n- SoLoader.init(this, false)\n- if (!BuildConfig.REACT_NATIVE_UNSTABLE_USE_RUNTIME_SCHEDULER_ALWAYS) {\n- ReactFeatureFlags.unstable_useRuntimeSchedulerAlways = false\n- }\n- if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {\n- // If you opted-in for the New Architecture, we load the native entry point for this app.\n- load()\n- }\n- if (BuildConfig.DEBUG) {\n- ReactNativeFlipper.initializeFlipper(this, reactNativeHost.reactInstanceManager)\n+ DefaultNewArchitectureEntryPoint.releaseLevel = try {\n+ ReleaseLevel.valueOf(BuildConfig.REACT_NATIVE_RELEASE_LEVEL.uppercase())\n+ } catch (e: IllegalArgumentException) {\n+ ReleaseLevel.STABLE\n }\n+ loadReactNative(this)\n ApplicationLifecycleDispatcher.onApplicationCreate(this)\n }\n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..31df827b18b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..ef243aab6c0\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..e9d5474519c\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..d61da15d241\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..4aeed11d00b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml\nnew file mode 100644\nindex 00000000000..883b2a080f3\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml\n@@ -0,0 +1,6 @@\n+\n+ \n+ \n+ \n+ \n+\n\\ No newline at end of file\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/rn_edit_text_material.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/rn_edit_text_material.xml\nindex 73b37e4d996..5c25e728ea2 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/rn_edit_text_material.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/rn_edit_text_material.xml\n@@ -17,7 +17,8 @@\n android:insetLeft=\"@dimen/abc_edit_text_inset_horizontal_material\"\n android:insetRight=\"@dimen/abc_edit_text_inset_horizontal_material\"\n android:insetTop=\"@dimen/abc_edit_text_inset_top_material\"\n- android:insetBottom=\"@dimen/abc_edit_text_inset_bottom_material\">\n+ android:insetBottom=\"@dimen/abc_edit_text_inset_bottom_material\"\n+ >\n \n \n \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n+\n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n \ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Supporting/Expo.plist b/templates/expo-template-bare-minimum/ios/HelloWorld/Supporting/Expo.plist\nindex 03410dc8b39..6631ffa6f24 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/Supporting/Expo.plist\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/Supporting/Expo.plist\n@@ -2,9 +2,5 @@\n \n \n \n- EXUpdatesSDKVersion\n- YOUR-APP-SDK-VERSION-HERE\n- EXUpdatesURL\n- YOUR-APP-URL-HERE\n \n \ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex b3978b9515d..9743535e7ad 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -4,42 +4,42 @@ require File.join(File.dirname(`node --print \"require.resolve('react-native/pack\n require 'json'\n podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}\n \n-ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0'\n-ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+def ccache_enabled?(podfile_properties)\n+ # Environment variable takes precedence\n+ return ENV['USE_CCACHE'] == '1' if ENV['USE_CCACHE']\n+ \n+ # Fall back to Podfile properties\n+ podfile_properties['apple.ccacheEnabled'] == 'true'\n+end\n \n-platform :ios, podfile_properties['ios.deploymentTarget'] || '13.4'\n-install! 'cocoapods',\n- :deterministic_uuids => false\n+ENV['RCT_NEW_ARCH_ENABLED'] ||= '0' if podfile_properties['newArchEnabled'] == 'false'\n+ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+ENV['RCT_USE_RN_DEP'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' && podfile_properties['newArchEnabled'] != 'false'\n+ENV['RCT_USE_PREBUILT_RNCORE'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' && podfile_properties['newArchEnabled'] != 'false'\n+platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'\n \n prepare_react_native_project!\n \n-# If you are using a `react-native-flipper` your iOS build will fail when `NO_FLIPPER=1` is set.\n-# because `react-native-flipper` depends on (FlipperKit,...), which will be excluded. To fix this,\n-# you can also exclude `react-native-flipper` in `react-native.config.js`\n-#\n-# ```js\n-# module.exports = {\n-# dependencies: {\n-# ...(process.env.NO_FLIPPER ? { 'react-native-flipper': { platforms: { ios: null } } } : {}),\n-# }\n-# }\n-# ```\n-flipper_config = FlipperConfiguration.disabled\n-if ENV['NO_FLIPPER'] == '1' then\n- # Explicitly disabled through environment variables\n- flipper_config = FlipperConfiguration.disabled\n-elsif podfile_properties.key?('ios.flipper') then\n- # Configure Flipper in Podfile.properties.json\n- if podfile_properties['ios.flipper'] == 'true' then\n- flipper_config = FlipperConfiguration.enabled([\"Debug\", \"Release\"])\n- elsif podfile_properties['ios.flipper'] != 'false' then\n- flipper_config = FlipperConfiguration.enabled([\"Debug\", \"Release\"], { 'Flipper' => podfile_properties['ios.flipper'] })\n- end\n-end\n-\n target 'HelloWorld' do\n use_expo_modules!\n- config = use_native_modules!\n+\n+ if ENV['EXPO_USE_COMMUNITY_AUTOLINKING'] == '1'\n+ config_command = ['node', '-e', \"process.argv=['', '', 'config'];require('@react-native-community/cli').run()\"];\n+ else\n+ config_command = [\n+ 'node',\n+ '--no-warnings',\n+ '--eval',\n+ 'require(\\'expo/bin/autolinking\\')',\n+ 'expo-modules-autolinking',\n+ 'react-native-config',\n+ '--json',\n+ '--platform',\n+ 'ios'\n+ ]\n+ end\n+\n+ config = use_native_modules!(config_command)\n \n use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks']\n use_frameworks! :linkage => ENV['USE_FRAMEWORKS'].to_sym if ENV['USE_FRAMEWORKS']\n@@ -49,34 +49,15 @@ target 'HelloWorld' do\n :hermes_enabled => podfile_properties['expo.jsEngine'] == nil || podfile_properties['expo.jsEngine'] == 'hermes',\n # An absolute path to your application root.\n :app_path => \"#{Pod::Config.instance.installation_root}/..\",\n- # Note that if you have use_frameworks! enabled, Flipper will not work if enabled\n- :flipper_configuration => flipper_config\n+ :privacy_file_aggregation_enabled => podfile_properties['apple.privacyManifestAggregationEnabled'] != 'false',\n )\n \n post_install do |installer|\n react_native_post_install(\n installer,\n config[:reactNativePath],\n- :mac_catalyst_enabled => false\n+ :mac_catalyst_enabled => false,\n+ :ccache_enabled => ccache_enabled?(podfile_properties),\n )\n-\n- # This is necessary for Xcode 14, because it signs resource bundles by default\n- # when building for devices.\n- installer.target_installation_results.pod_target_installation_results\n- .each do |pod_name, target_installation_result|\n- target_installation_result.resource_bundle_targets.each do |resource_bundle_target|\n- resource_bundle_target.build_configurations.each do |config|\n- config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'\n- end\n- end\n- end\n- end\n-\n- post_integrate do |installer|\n- begin\n- expo_patch_react_imports!(installer)\n- rescue => e\n- Pod::UI.warn e\n- end\n end\n end\ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex f8f8993585f..0d90c6e603d 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -1,7 +1,8 @@\n {\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n- \"version\": \"50.0.43\",\n+ \"license\": \"0BSD\",\n+ \"version\": \"54.0.50\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -10,12 +11,9 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~50.0.17\",\n- \"expo-status-bar\": \"~1.11.1\",\n- \"react\": \"18.2.0\",\n- \"react-native\": \"0.73.6\"\n- },\n- \"devDependencies\": {\n- \"@babel/core\": \"^7.20.0\"\n+ \"expo\": \"~54.0.33\",\n+ \"expo-status-bar\": \"~3.0.9\",\n+ \"react\": \"19.1.0\",\n+ \"react-native\": \"0.81.5\"\n }\n }\n","51..54":"diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle\nindex a4b08330359..3f1c571b679 100644\n--- a/templates/expo-template-bare-minimum/android/app/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/app/build.gradle\n@@ -4,27 +4,6 @@ apply plugin: \"com.facebook.react\"\n \n def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath()\n \n-static def versionToNumber(major, minor, patch) {\n- return patch * 100 + minor * 10000 + major * 1000000\n-}\n-\n-def getRNVersion() {\n- def version = providers.exec {\n- workingDir(projectDir)\n- commandLine(\"node\", \"-e\", \"console.log(require('react-native/package.json').version);\")\n- }.standardOutput.asText.get().trim()\n-\n- def coreVersion = version.split(\"-\")[0]\n- def (major, minor, patch) = coreVersion.tokenize('.').collect { it.toInteger() }\n-\n- return versionToNumber(\n- major,\n- minor,\n- patch\n- )\n-}\n-def rnVersion = getRNVersion()\n-\n /**\n * This is the configuration block to customize your React Native Android app.\n * By default you don't need to apply any configuration, just uncomment the lines you need.\n@@ -35,18 +14,19 @@ react {\n hermesCommand = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/sdks/hermesc/%OS-BIN%/hermesc\"\n codegenDir = new File([\"node\", \"--print\", \"require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n \n+ enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean()\n // Use Expo CLI to bundle the app, this ensures the Metro config\n // works correctly with Expo projects.\n cliFile = new File([\"node\", \"--print\", \"require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })\"].execute(null, rootDir).text.trim())\n bundleCommand = \"export:embed\"\n \n /* Folders */\n- // The root of your project, i.e. where \"package.json\" lives. Default is '..'\n- // root = file(\"../\")\n- // The folder where the react-native NPM package is. Default is ../node_modules/react-native\n- // reactNativeDir = file(\"../node_modules/react-native\")\n- // The folder where the react-native Codegen package is. Default is ../node_modules/@react-native/codegen\n- // codegenDir = file(\"../node_modules/@react-native/codegen\")\n+ // The root of your project, i.e. where \"package.json\" lives. Default is '../..'\n+ // root = file(\"../../\")\n+ // The folder where the react-native NPM package is. Default is ../../node_modules/react-native\n+ // reactNativeDir = file(\"../../node_modules/react-native\")\n+ // The folder where the react-native Codegen package is. Default is ../../node_modules/@react-native/codegen\n+ // codegenDir = file(\"../../node_modules/@react-native/codegen\")\n \n /* Variants */\n // The list of variants to that are debuggable. For those we're going to\n@@ -79,16 +59,14 @@ react {\n // The list of flags to pass to the Hermes compiler. By default is \"-O\", \"-output-source-map\"\n // hermesFlags = [\"-O\", \"-output-source-map\"]\n \n- if (rnVersion >= versionToNumber(0, 75, 0)) {\n- /* Autolinking */\n- autolinkLibrariesWithApp()\n- }\n+ /* Autolinking */\n+ autolinkLibrariesWithApp()\n }\n \n /**\n- * Set this to true to Run Proguard on Release builds to minify the Java bytecode.\n+ * Set this to true in release builds to optimize the app using [R8](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization).\n */\n-def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInReleaseBuilds') ?: false).toBoolean()\n+def enableMinifyInReleaseBuilds = (findProperty('android.enableMinifyInReleaseBuilds') ?: false).toBoolean()\n \n /**\n * The preferred build flavor of JavaScriptCore (JSC)\n@@ -101,7 +79,7 @@ def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInRelea\n * give correct results when using with locales other than en-US. Note that\n * this variant is about 6MiB larger per architecture than default.\n */\n-def jscFlavor = 'org.webkit:android-jsc:+'\n+def jscFlavor = 'io.github.react-native-community:jsc-android:2026004.+'\n \n android {\n ndkVersion rootProject.ext.ndkVersion\n@@ -116,6 +94,8 @@ android {\n targetSdkVersion rootProject.ext.targetSdkVersion\n versionCode 1\n versionName \"1.0\"\n+\n+ buildConfigField \"String\", \"REACT_NATIVE_RELEASE_LEVEL\", \"\\\"${findProperty('reactNativeReleaseLevel') ?: 'stable'}\\\"\"\n }\n signingConfigs {\n debug {\n@@ -133,17 +113,23 @@ android {\n // Caution! In production, you need to generate your own keystore file.\n // see https://reactnative.dev/docs/signed-apk-android.\n signingConfig signingConfigs.debug\n- shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false)\n- minifyEnabled enableProguardInReleaseBuilds\n+ def enableShrinkResources = findProperty('android.enableShrinkResourcesInReleaseBuilds') ?: 'false'\n+ shrinkResources enableShrinkResources.toBoolean()\n+ minifyEnabled enableMinifyInReleaseBuilds\n proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n- crunchPngs (findProperty('android.enablePngCrunchInReleaseBuilds')?.toBoolean() ?: true)\n+ def enablePngCrunchInRelease = findProperty('android.enablePngCrunchInReleaseBuilds') ?: 'true'\n+ crunchPngs enablePngCrunchInRelease.toBoolean()\n }\n }\n packagingOptions {\n jniLibs {\n- useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false)\n+ def enableLegacyPackaging = findProperty('expo.useLegacyPackaging') ?: 'false'\n+ useLegacyPackaging enableLegacyPackaging.toBoolean()\n }\n }\n+ androidResources {\n+ ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:!CVS:!thumbs.db:!picasa.ini:!*~'\n+ }\n }\n \n // Apply static values from `gradle.properties` to the `android.packagingOptions`\n@@ -176,15 +162,15 @@ dependencies {\n \n if (isGifEnabled) {\n // For animated gif support\n- implementation(\"com.facebook.fresco:animated-gif:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-gif:${expoLibs.versions.fresco.get()}\")\n }\n \n if (isWebpEnabled) {\n // For webp support\n- implementation(\"com.facebook.fresco:webpsupport:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:webpsupport:${expoLibs.versions.fresco.get()}\")\n if (isWebpAnimatedEnabled) {\n // Animated webp support\n- implementation(\"com.facebook.fresco:animated-webp:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-webp:${expoLibs.versions.fresco.get()}\")\n }\n }\n \n@@ -194,8 +180,3 @@ dependencies {\n implementation jscFlavor\n }\n }\n-\n-if (rnVersion < versionToNumber(0, 75, 0)) {\n- apply from: new File([\"node\", \"--print\", \"require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), \"../native_modules.gradle\");\n- applyNativeModulesAppBuildGradle(project)\n-}\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\nnew file mode 100644\nindex 00000000000..3ec2507bab7\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\n@@ -0,0 +1,7 @@\n+\n+\n+ \n+\n+ \n+\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\nindex 52175508263..150248b6b3c 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n@@ -18,13 +18,12 @@\n \n \n \n- \n+ \n \n \n \n \n \n \n- \n \n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\nindex 5f6e05ce071..5abad96fa00 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n@@ -5,12 +5,13 @@ import android.content.res.Configuration\n \n import com.facebook.react.PackageList\n import com.facebook.react.ReactApplication\n+import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative\n import com.facebook.react.ReactNativeHost\n import com.facebook.react.ReactPackage\n import com.facebook.react.ReactHost\n-import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load\n+import com.facebook.react.common.ReleaseLevel\n+import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint\n import com.facebook.react.defaults.DefaultReactNativeHost\n-import com.facebook.soloader.SoLoader\n \n import expo.modules.ApplicationLifecycleDispatcher\n import expo.modules.ReactNativeHostWrapper\n@@ -18,20 +19,19 @@ import expo.modules.ReactNativeHostWrapper\n class MainApplication : Application(), ReactApplication {\n \n override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper(\n- this,\n- object : DefaultReactNativeHost(this) {\n- override fun getPackages(): List {\n- // Packages that cannot be autolinked yet can be added manually here, for example:\n- // packages.add(new MyReactNativePackage());\n- return PackageList(this).packages\n- }\n+ this,\n+ object : DefaultReactNativeHost(this) {\n+ override fun getPackages(): List =\n+ PackageList(this).packages.apply {\n+ // Packages that cannot be autolinked yet can be added manually here, for example:\n+ // add(MyReactNativePackage())\n+ }\n \n override fun getJSMainModuleName(): String = \".expo/.virtual-metro-entry\"\n \n override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG\n \n override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED\n- override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED\n }\n )\n \n@@ -40,11 +40,12 @@ class MainApplication : Application(), ReactApplication {\n \n override fun onCreate() {\n super.onCreate()\n- SoLoader.init(this, false)\n- if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {\n- // If you opted-in for the New Architecture, we load the native entry point for this app.\n- load()\n+ DefaultNewArchitectureEntryPoint.releaseLevel = try {\n+ ReleaseLevel.valueOf(BuildConfig.REACT_NATIVE_RELEASE_LEVEL.uppercase())\n+ } catch (e: IllegalArgumentException) {\n+ ReleaseLevel.STABLE\n }\n+ loadReactNative(this)\n ApplicationLifecycleDispatcher.onApplicationCreate(this)\n }\n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..31df827b18b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..ef243aab6c0\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..e9d5474519c\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..d61da15d241\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..4aeed11d00b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml\nnew file mode 100644\nindex 00000000000..883b2a080f3\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml\n@@ -0,0 +1,6 @@\n+\n+ \n+ \n+ \n+ \n+\n\\ No newline at end of file\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..a2f5908281d\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..1b523998081\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..ff10afd6e18\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..115a4c768a2\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..dcd3cd80833\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..459ca609d3a\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..8ca12fe024b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..8e19b410a1b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..b824ebdd48d\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..4c19a13c239\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\nindex 90bcc87b8e8..26f3404be26 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n@@ -1,15 +1,8 @@\n \n- \n- \n \n \ndiff --git a/templates/expo-template-bare-minimum/android/build.gradle b/templates/expo-template-bare-minimum/android/build.gradle\nindex 932bf7b34ba..0554dd156c1 100644\n--- a/templates/expo-template-bare-minimum/android/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/build.gradle\n@@ -1,41 +1,24 @@\n // Top-level build file where you can add configuration options common to all sub-projects/modules.\n \n buildscript {\n- ext {\n- buildToolsVersion = findProperty('android.buildToolsVersion') ?: '34.0.0'\n- minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '23')\n- compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '34')\n- targetSdkVersion = Integer.parseInt(findProperty('android.targetSdkVersion') ?: '34')\n- kotlinVersion = findProperty('android.kotlinVersion') ?: '1.9.23'\n-\n- ndkVersion = \"26.1.10909125\"\n- }\n- repositories {\n- google()\n- mavenCentral()\n- }\n- dependencies {\n- classpath('com.android.tools.build:gradle')\n- classpath('com.facebook.react:react-native-gradle-plugin')\n- classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')\n- }\n+ repositories {\n+ google()\n+ mavenCentral()\n+ }\n+ dependencies {\n+ classpath('com.android.tools.build:gradle')\n+ classpath('com.facebook.react:react-native-gradle-plugin')\n+ classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')\n+ }\n }\n \n-apply plugin: \"com.facebook.react.rootproject\"\n-\n allprojects {\n- repositories {\n- maven {\n- // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n- url(new File(['node', '--print', \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim(), '../android'))\n- }\n- maven {\n- // Android JSC is installed from npm\n- url(new File(['node', '--print', \"require.resolve('jsc-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), '../dist'))\n- }\n-\n- google()\n- mavenCentral()\n- maven { url 'https://www.jitpack.io' }\n- }\n+ repositories {\n+ google()\n+ mavenCentral()\n+ maven { url 'https://www.jitpack.io' }\n+ }\n }\n+\n+apply plugin: \"expo-root-project\"\n+apply plugin: \"com.facebook.react.rootproject\"\ndiff --git a/templates/expo-template-bare-minimum/android/gradle.properties b/templates/expo-template-bare-minimum/android/gradle.properties\nindex 40220def8da..97271b9456f 100644\n--- a/templates/expo-template-bare-minimum/android/gradle.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle.properties\n@@ -15,16 +15,13 @@ org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m\n # When configured, Gradle will run in incubating parallel mode.\n # This option should only be used with decoupled projects. More details, visit\n # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n-# org.gradle.parallel=true\n+org.gradle.parallel=true\n \n # AndroidX package structure to make it clearer which packages are bundled with the\n # Android operating system, and which are packaged with your app's APK\n # https://developer.android.com/topic/libraries/support-library/androidx-rn\n android.useAndroidX=true\n \n-# Automatically convert third-party libraries to use AndroidX\n-android.enableJetifier=true\n-\n # Enable AAPT2 PNG crunching\n android.enablePngCrunchInReleaseBuilds=true\n \n@@ -38,12 +35,17 @@ reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64\n # your application. You should enable this flag either if you want\n # to write custom TurboModules/Fabric components OR use libraries that\n # are providing them.\n-newArchEnabled=false\n+newArchEnabled=true\n \n # Use this property to enable or disable the Hermes JS engine.\n # If set to false, you will be using JSC instead.\n hermesEnabled=true\n \n+# Use this property to enable edge-to-edge display support.\n+# This allows your app to draw behind system bars for an immersive UI.\n+# Note: Only works with ReactActivity and should not be used with custom Activity.\n+edgeToEdgeEnabled=true\n+\n # Enable GIF support in React Native images (~200 B increase)\n expo.gif.enabled=true\n # Enable webp support in React Native images (~85 KB increase)\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar\nindex e6441136f3d..1b33c55baab 100644\nBinary files a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar and b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar differ\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\nindex 6f7a6eb33e8..d4081da476b 100644\n--- a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n@@ -1,6 +1,6 @@\n distributionBase=GRADLE_USER_HOME\n distributionPath=wrapper/dists\n-distributionUrl=https\\://services.gradle.org/distributions/gradle-8.8-all.zip\n+distributionUrl=https\\://services.gradle.org/distributions/gradle-8.14.3-bin.zip\n networkTimeout=10000\n validateDistributionUrl=true\n zipStoreBase=GRADLE_USER_HOME\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew b/templates/expo-template-bare-minimum/android/gradlew\nindex 1aa94a42690..7f94d3d4777 100755\n--- a/templates/expo-template-bare-minimum/android/gradlew\n+++ b/templates/expo-template-bare-minimum/android/gradlew\n@@ -15,6 +15,8 @@\n # See the License for the specific language governing permissions and\n # limitations under the License.\n #\n+# SPDX-License-Identifier: Apache-2.0\n+#\n \n ##############################################################################\n #\n@@ -55,7 +57,7 @@\n # Darwin, MinGW, and NonStop.\n #\n # (3) This script is generated from the Groovy template\n-# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt\n+# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt\n # within the Gradle project.\n #\n # You can find Gradle at https://github.com/gradle/gradle/.\n@@ -84,7 +86,7 @@ done\n # shellcheck disable=SC2034\n APP_BASE_NAME=${0##*/}\n # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)\n-APP_HOME=$( cd \"${APP_HOME:-./}\" > /dev/null && pwd -P ) || exit\n+APP_HOME=$( cd -P \"${APP_HOME:-./}\" > /dev/null && printf '%s\\n' \"$PWD\" ) || exit\n \n # Use the maximum available, or set MAX_FD != -1 to use that value.\n MAX_FD=maximum\n@@ -112,7 +114,7 @@ case \"$( uname )\" in #(\n NONSTOP* ) nonstop=true ;;\n esac\n \n-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n+CLASSPATH=\"\\\\\\\"\\\\\\\"\"\n \n \n # Determine the Java command to use to start the JVM.\n@@ -211,7 +213,7 @@ DEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n set -- \\\n \"-Dorg.gradle.appname=$APP_BASE_NAME\" \\\n -classpath \"$CLASSPATH\" \\\n- org.gradle.wrapper.GradleWrapperMain \\\n+ -jar \"$APP_HOME/gradle/wrapper/gradle-wrapper.jar\" \\\n \"$@\"\n \n # Stop when \"xargs\" is not available.\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew.bat b/templates/expo-template-bare-minimum/android/gradlew.bat\nindex 7101f8e4676..5eed7ee8452 100644\n--- a/templates/expo-template-bare-minimum/android/gradlew.bat\n+++ b/templates/expo-template-bare-minimum/android/gradlew.bat\n@@ -13,6 +13,8 @@\n @rem See the License for the specific language governing permissions and\r\n @rem limitations under the License.\r\n @rem\r\n+@rem SPDX-License-Identifier: Apache-2.0\r\n+@rem\r\n \r\n @if \"%DEBUG%\"==\"\" @echo off\r\n @rem ##########################################################################\r\n@@ -68,11 +70,11 @@ goto fail\n :execute\r\n @rem Setup the command line\r\n \r\n-set CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\r\n+set CLASSPATH=\r\n \r\n \r\n @rem Execute Gradle\r\n-\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\r\n+\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" -jar \"%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\" %*\r\n \r\n :end\r\n @rem End local scope for the variables with windows NT shell\r\ndiff --git a/templates/expo-template-bare-minimum/android/settings.gradle b/templates/expo-template-bare-minimum/android/settings.gradle\nindex 80b1bc3267b..7fe91512213 100644\n--- a/templates/expo-template-bare-minimum/android/settings.gradle\n+++ b/templates/expo-template-bare-minimum/android/settings.gradle\n@@ -1,66 +1,39 @@\n pluginManagement {\n- def version = providers.exec {\n- commandLine(\"node\", \"-e\", \"console.log(require('react-native/package.json').version);\")\n- }.standardOutput.asText.get().trim()\n- def (_, reactNativeMinor, reactNativePatch) = version.split(\"-\")[0].tokenize('.').collect { it.toInteger() }\n-\n- includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().toString())\n- if(reactNativeMinor == 74 && reactNativePatch <= 3){\n- includeBuild(\"react-settings-plugin\")\n- }\n+ def reactNativeGradlePlugin = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\")\n+ }.standardOutput.asText.get().trim()\n+ ).getParentFile().absolutePath\n+ includeBuild(reactNativeGradlePlugin)\n+ \n+ def expoPluginsPath = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('expo-modules-autolinking/package.json', { paths: [require.resolve('expo/package.json')] })\")\n+ }.standardOutput.asText.get().trim(),\n+ \"../android/expo-gradle-plugin\"\n+ ).absolutePath\n+ includeBuild(expoPluginsPath)\n }\n \n-plugins { id(\"com.facebook.react.settings\") }\n-\n-def getRNMinorVersion() {\n- def version = providers.exec {\n- commandLine(\"node\", \"-e\", \"console.log(require('react-native/package.json').version);\")\n- }.standardOutput.asText.get().trim()\n-\n- def coreVersion = version.split(\"-\")[0]\n- def (major, minor, patch) = coreVersion.tokenize('.').collect { it.toInteger() }\n-\n- return minor\n+plugins {\n+ id(\"com.facebook.react.settings\")\n+ id(\"expo-autolinking-settings\")\n }\n \n-if (getRNMinorVersion() >= 75) {\n- extensions.configure(com.facebook.react.ReactSettingsExtension) { ex ->\n- if (System.getenv('EXPO_UNSTABLE_CORE_AUTOLINKING') == '1') {\n- println('\\u001B[32mUsing expo-modules-autolinking as core autolinking source\\u001B[0m')\n- def command = [\n- 'node',\n- '--no-warnings',\n- '--eval',\n- 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n- 'react-native-config',\n- '--json',\n- '--platform',\n- 'android'\n- ].toList()\n- ex.autolinkLibrariesFromCommand(command)\n- } else {\n- ex.autolinkLibrariesFromCommand()\n- }\n+extensions.configure(com.facebook.react.ReactSettingsExtension) { ex ->\n+ if (System.getenv('EXPO_USE_COMMUNITY_AUTOLINKING') == '1') {\n+ ex.autolinkLibrariesFromCommand()\n+ } else {\n+ ex.autolinkLibrariesFromCommand(expoAutolinking.rnConfigCommand)\n }\n }\n+expoAutolinking.useExpoModules()\n \n rootProject.name = 'HelloWorld'\n \n-dependencyResolutionManagement {\n- versionCatalogs {\n- reactAndroidLibs {\n- from(files(new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim(), \"../gradle/libs.versions.toml\")))\n- }\n- }\n-}\n-\n-apply from: new File([\"node\", \"--print\", \"require.resolve('expo/package.json')\"].execute(null, rootDir).text.trim(), \"../scripts/autolinking.gradle\");\n-useExpoModules()\n-\n-if (getRNMinorVersion() < 75) {\n- apply from: new File([\"node\", \"--print\", \"require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), \"../native_modules.gradle\");\n- applyNativeModulesSettingsGradle(settings)\n-}\n+expoAutolinking.useExpoVersionCatalog()\n \n include ':app'\n-includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile())\n+includeBuild(expoAutolinking.reactNativeGradlePlugin)\ndiff --git a/templates/expo-template-bare-minimum/gitignore b/templates/expo-template-bare-minimum/gitignore\nindex 05647d55c75..d16e1efbb3f 100644\n--- a/templates/expo-template-bare-minimum/gitignore\n+++ b/templates/expo-template-bare-minimum/gitignore\n@@ -7,6 +7,7 @@ node_modules/\n .expo/\n dist/\n web-build/\n+expo-env.d.ts\n \n # Native\n *.orig.*\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\nindex f945940c256..8a390c764af 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n@@ -3,33 +3,25 @@\n \tarchiveVersion = 1;\n \tclasses = {\n \t};\n-\tobjectVersion = 46;\n+\tobjectVersion = 54;\n \tobjects = {\n \n /* Begin PBXBuildFile section */\n-\t\t13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };\n \t\t13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };\n-\t\t13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };\n \t\t3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; };\n-\t\t96905EF65AED1B983A6B3ABC /* libPods-HelloWorld.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */; };\n-\t\tB18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; };\n \t\tBB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; };\n+\t\tF11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F11748412D0307B40044C1D9 /* AppDelegate.swift */; };\n /* End PBXBuildFile section */\n \n /* Begin PBXFileReference section */\n \t\t13B07F961A680F5B00A75B9A /* HelloWorld.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloWorld.app; sourceTree = BUILT_PRODUCTS_DIR; };\n-\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = HelloWorld/AppDelegate.h; sourceTree = \"\"; };\n-\t\t13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = HelloWorld/AppDelegate.mm; sourceTree = \"\"; };\n \t\t13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = HelloWorld/Images.xcassets; sourceTree = \"\"; };\n \t\t13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = HelloWorld/Info.plist; sourceTree = \"\"; };\n-\t\t13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = HelloWorld/main.m; sourceTree = \"\"; };\n-\t\t58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-HelloWorld.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n-\t\t6C2E3173556A471DD304B334 /* 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 = \"\"; };\n-\t\t7A4D352CD337FB3A3BF06240 /* 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 = \"\"; };\n \t\tAA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = HelloWorld/SplashScreen.storyboard; sourceTree = \"\"; };\n \t\tBB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = \"\"; };\n \t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };\n-\t\tFAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = \"Pods/Target Support Files/Pods-HelloWorld/ExpoModulesProvider.swift\"; sourceTree = \"\"; };\n+\t\tF11748412D0307B40044C1D9 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = HelloWorld/AppDelegate.swift; sourceTree = \"\"; };\n+\t\tF11748442D0722820044C1D9 /* HelloWorld-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = \"HelloWorld-Bridging-Header.h\"; path = \"HelloWorld/HelloWorld-Bridging-Header.h\"; sourceTree = \"\"; };\n /* End PBXFileReference section */\n \n /* Begin PBXFrameworksBuildPhase section */\n@@ -37,7 +29,6 @@\n \t\t\tisa = PBXFrameworksBuildPhase;\n \t\t\tbuildActionMask = 2147483647;\n \t\t\tfiles = (\n-\t\t\t\t96905EF65AED1B983A6B3ABC /* libPods-HelloWorld.a in Frameworks */,\n \t\t\t);\n \t\t\trunOnlyForDeploymentPostprocessing = 0;\n \t\t};\n@@ -47,12 +38,11 @@\n \t\t13B07FAE1A68108700A75B9A /* HelloWorld */ = {\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n+\t\t\t\tF11748412D0307B40044C1D9 /* AppDelegate.swift */,\n+\t\t\t\tF11748442D0722820044C1D9 /* HelloWorld-Bridging-Header.h */,\n \t\t\t\tBB2F792B24A3F905000567C9 /* Supporting */,\n-\t\t\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */,\n-\t\t\t\t13B07FB01A68108700A75B9A /* AppDelegate.mm */,\n \t\t\t\t13B07FB51A68108700A75B9A /* Images.xcassets */,\n \t\t\t\t13B07FB61A68108700A75B9A /* Info.plist */,\n-\t\t\t\t13B07FB71A68108700A75B9A /* main.m */,\n \t\t\t\tAA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */,\n \t\t\t);\n \t\t\tname = HelloWorld;\n@@ -62,7 +52,6 @@\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n \t\t\t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */,\n-\t\t\t\t58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */,\n \t\t\t);\n \t\t\tname = Frameworks;\n \t\t\tsourceTree = \"\";\n@@ -81,8 +70,6 @@\n \t\t\t\t832341AE1AAA6A7D00B99B32 /* Libraries */,\n \t\t\t\t83CBBA001A601CBA00E9B192 /* Products */,\n \t\t\t\t2D16E6871FA4F8E400B85C8A /* Frameworks */,\n-\t\t\t\tD65327D7A22EEC0BE12398D9 /* Pods */,\n-\t\t\t\tD7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */,\n \t\t\t);\n \t\t\tindentWidth = 2;\n \t\t\tsourceTree = \"\";\n@@ -97,14 +84,6 @@\n \t\t\tname = Products;\n \t\t\tsourceTree = \"\";\n \t\t};\n-\t\t92DBD88DE9BF7D494EA9DA96 /* HelloWorld */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\tFAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */,\n-\t\t\t);\n-\t\t\tname = HelloWorld;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n \t\tBB2F792B24A3F905000567C9 /* Supporting */ = {\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n@@ -114,23 +93,6 @@\n \t\t\tpath = HelloWorld/Supporting;\n \t\t\tsourceTree = \"\";\n \t\t};\n-\t\tD65327D7A22EEC0BE12398D9 /* Pods */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\t6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */,\n-\t\t\t\t7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */,\n-\t\t\t);\n-\t\t\tpath = Pods;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n-\t\tD7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\t92DBD88DE9BF7D494EA9DA96 /* HelloWorld */,\n-\t\t\t);\n-\t\t\tname = ExpoModulesProviders;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n /* End PBXGroup section */\n \n /* Begin PBXNativeTarget section */\n@@ -206,6 +168,8 @@\n \t\t\tfiles = (\n \t\t\t);\n \t\t\tinputPaths = (\n+\t\t\t\t\"$(SRCROOT)/.xcode.env\",\n+\t\t\t\t\"$(SRCROOT)/.xcode.env.local\",\n \t\t\t);\n \t\t\tname = \"Bundle React Native code and images\";\n \t\t\toutputPaths = (\n@@ -265,9 +229,7 @@\n \t\t\tisa = PBXSourcesBuildPhase;\n \t\t\tbuildActionMask = 2147483647;\n \t\t\tfiles = (\n-\t\t\t\t13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,\n-\t\t\t\t13B07FC11A68108700A75B9A /* main.m in Sources */,\n-\t\t\t\tB18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */,\n+\t\t\t\tF11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */,\n \t\t\t);\n \t\t\trunOnlyForDeploymentPostprocessing = 0;\n \t\t};\n@@ -276,7 +238,6 @@\n /* Begin XCBuildConfiguration section */\n \t\t13B07F941A680F5B00A75B9A /* Debug */ = {\n \t\t\tisa = XCBuildConfiguration;\n-\t\t\tbaseConfigurationReference = 6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */;\n \t\t\tbuildSettings = {\n \t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n@@ -287,8 +248,11 @@\n \t\t\t\t\t\"FB_SONARKIT_ENABLED=1\",\n \t\t\t\t);\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t\t\"@executable_path/Frameworks\",\n+\t\t\t\t);\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -297,6 +261,7 @@\n \t\t\t\t);\n \t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = org.name.HelloWorld;\n \t\t\t\tPRODUCT_NAME = HelloWorld;\n+\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"HelloWorld/HelloWorld-Bridging-Header.h\";\n \t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n \t\t\t\tSWIFT_VERSION = 5.0;\n \t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n@@ -305,14 +270,16 @@\n \t\t};\n \t\t13B07F951A680F5B00A75B9A /* Release */ = {\n \t\t\tisa = XCBuildConfiguration;\n-\t\t\tbaseConfigurationReference = 7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */;\n \t\t\tbuildSettings = {\n \t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n \t\t\t\tCURRENT_PROJECT_VERSION = 1;\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t\t\"@executable_path/Frameworks\",\n+\t\t\t\t);\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -321,6 +288,7 @@\n \t\t\t\t);\n \t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = org.name.HelloWorld;\n \t\t\t\tPRODUCT_NAME = HelloWorld;\n+\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"HelloWorld/HelloWorld-Bridging-Header.h\";\n \t\t\t\tSWIFT_VERSION = 5.0;\n \t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n \t\t\t};\n@@ -373,8 +341,11 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t/usr/lib/swift,\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t);\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n \t\t\t\tONLY_ACTIVE_ARCH = YES;\n@@ -422,8 +393,11 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t/usr/lib/swift,\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t);\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n \t\t\t\tSDKROOT = iphoneos;\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\nnew file mode 100644\nindex 00000000000..a7887e1e5b1\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\n@@ -0,0 +1,70 @@\n+import Expo\n+import React\n+import ReactAppDependencyProvider\n+\n+@UIApplicationMain\n+public class AppDelegate: ExpoAppDelegate {\n+ var window: UIWindow?\n+\n+ var reactNativeDelegate: ExpoReactNativeFactoryDelegate?\n+ var reactNativeFactory: RCTReactNativeFactory?\n+\n+ public override func application(\n+ _ application: UIApplication,\n+ didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil\n+ ) -> Bool {\n+ let delegate = ReactNativeDelegate()\n+ let factory = ExpoReactNativeFactory(delegate: delegate)\n+ delegate.dependencyProvider = RCTAppDependencyProvider()\n+\n+ reactNativeDelegate = delegate\n+ reactNativeFactory = factory\n+ bindReactNativeFactory(factory)\n+\n+#if os(iOS) || os(tvOS)\n+ window = UIWindow(frame: UIScreen.main.bounds)\n+ factory.startReactNative(\n+ withModuleName: \"main\",\n+ in: window,\n+ launchOptions: launchOptions)\n+#endif\n+\n+ return super.application(application, didFinishLaunchingWithOptions: launchOptions)\n+ }\n+\n+ // Linking API\n+ public override func application(\n+ _ app: UIApplication,\n+ open url: URL,\n+ options: [UIApplication.OpenURLOptionsKey: Any] = [:]\n+ ) -> Bool {\n+ return super.application(app, open: url, options: options) || RCTLinkingManager.application(app, open: url, options: options)\n+ }\n+\n+ // Universal Links\n+ public override func application(\n+ _ application: UIApplication,\n+ continue userActivity: NSUserActivity,\n+ restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void\n+ ) -> Bool {\n+ let result = RCTLinkingManager.application(application, continue: userActivity, restorationHandler: restorationHandler)\n+ return super.application(application, continue: userActivity, restorationHandler: restorationHandler) || result\n+ }\n+}\n+\n+class ReactNativeDelegate: ExpoReactNativeFactoryDelegate {\n+ // Extension point for config-plugins\n+\n+ override func sourceURL(for bridge: RCTBridge) -> URL? {\n+ // needed to return the correct URL for expo-dev-client.\n+ bridge.bundleURL ?? bundleURL()\n+ }\n+\n+ override func bundleURL() -> URL? {\n+#if DEBUG\n+ return RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: \".expo/.virtual-metro-entry\")\n+#else\n+ return Bundle.main.url(forResource: \"main\", withExtension: \"jsbundle\")\n+#endif\n+ }\n+}\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h b/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h\nnew file mode 100644\nindex 00000000000..8361941afc2\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h\n@@ -0,0 +1,3 @@\n+//\n+// Use this file to import your target's public headers that you would like to expose to Swift.\n+//\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json\nnew file mode 100644\nindex 00000000000..255637e0fdb\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json\n@@ -0,0 +1,21 @@\n+{\n+ \"images\" : [\n+ {\n+ \"filename\" : \"SplashScreenLegacy.png\",\n+ \"idiom\" : \"universal\",\n+ \"scale\" : \"1x\"\n+ },\n+ {\n+ \"idiom\" : \"universal\",\n+ \"scale\" : \"2x\"\n+ },\n+ {\n+ \"idiom\" : \"universal\",\n+ \"scale\" : \"3x\"\n+ }\n+ ],\n+ \"info\" : {\n+ \"author\" : \"xcode\",\n+ \"version\" : 1\n+ }\n+}\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png\nnew file mode 100644\nindex 00000000000..bbf8e9e6016\nBinary files /dev/null and b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png differ\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist b/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist\nindex 53d78e89033..596dc7ce6b5 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist\n@@ -24,6 +24,8 @@\n \t1\n \tLSRequiresIPhoneOS\n \t\n+\tLSMinimumSystemVersion\n+\t12.0\n \tNSAppTransportSecurity\n \t\n \t\tNSAllowsArbitraryLoads\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\nindex 24eec3df5cb..58d21796e1d 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n@@ -1,91 +1,47 @@\n \n-\n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n+\n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n \ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex 57c1dd38343..9743535e7ad 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -4,39 +4,42 @@ require File.join(File.dirname(`node --print \"require.resolve('react-native/pack\n require 'json'\n podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}\n \n-ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0'\n-ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+def ccache_enabled?(podfile_properties)\n+ # Environment variable takes precedence\n+ return ENV['USE_CCACHE'] == '1' if ENV['USE_CCACHE']\n+ \n+ # Fall back to Podfile properties\n+ podfile_properties['apple.ccacheEnabled'] == 'true'\n+end\n+\n+ENV['RCT_NEW_ARCH_ENABLED'] ||= '0' if podfile_properties['newArchEnabled'] == 'false'\n+ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+ENV['RCT_USE_RN_DEP'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' && podfile_properties['newArchEnabled'] != 'false'\n+ENV['RCT_USE_PREBUILT_RNCORE'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' && podfile_properties['newArchEnabled'] != 'false'\n+platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'\n \n-use_autolinking_method_symbol = ('use' + '_native' + '_modules!').to_sym\n-origin_autolinking_method = self.method(use_autolinking_method_symbol)\n-self.define_singleton_method(use_autolinking_method_symbol) do |*args|\n- if ENV['EXPO_UNSTABLE_CORE_AUTOLINKING'] == '1'\n- Pod::UI.puts('Using expo-modules-autolinking as core autolinking source'.green)\n+prepare_react_native_project!\n+\n+target 'HelloWorld' do\n+ use_expo_modules!\n+\n+ if ENV['EXPO_USE_COMMUNITY_AUTOLINKING'] == '1'\n+ config_command = ['node', '-e', \"process.argv=['', '', 'config'];require('@react-native-community/cli').run()\"];\n+ else\n config_command = [\n 'node',\n '--no-warnings',\n '--eval',\n- 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n+ 'require(\\'expo/bin/autolinking\\')',\n+ 'expo-modules-autolinking',\n 'react-native-config',\n '--json',\n '--platform',\n 'ios'\n ]\n- origin_autolinking_method.call(config_command)\n- else\n- origin_autolinking_method.call()\n end\n-end\n-\n-platform :ios, podfile_properties['ios.deploymentTarget'] || '13.4'\n-install! 'cocoapods',\n- :deterministic_uuids => false\n \n-prepare_react_native_project!\n-\n-target 'HelloWorld' do\n- use_expo_modules!\n- config = use_native_modules!\n+ config = use_native_modules!(config_command)\n \n use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks']\n use_frameworks! :linkage => ENV['USE_FRAMEWORKS'].to_sym if ENV['USE_FRAMEWORKS']\n@@ -54,26 +57,7 @@ target 'HelloWorld' do\n installer,\n config[:reactNativePath],\n :mac_catalyst_enabled => false,\n- :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true',\n+ :ccache_enabled => ccache_enabled?(podfile_properties),\n )\n-\n- # This is necessary for Xcode 14, because it signs resource bundles by default\n- # when building for devices.\n- installer.target_installation_results.pod_target_installation_results\n- .each do |pod_name, target_installation_result|\n- target_installation_result.resource_bundle_targets.each do |resource_bundle_target|\n- resource_bundle_target.build_configurations.each do |config|\n- config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'\n- end\n- end\n- end\n- end\n-\n- post_integrate do |installer|\n- begin\n- expo_patch_react_imports!(installer)\n- rescue => e\n- Pod::UI.warn e\n- end\n end\n end\ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex 563853071f0..0d90c6e603d 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -1,7 +1,8 @@\n {\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n- \"version\": \"51.0.56\",\n+ \"license\": \"0BSD\",\n+ \"version\": \"54.0.50\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -10,12 +11,9 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~51.0.28\",\n- \"expo-status-bar\": \"~1.12.1\",\n- \"react\": \"18.2.0\",\n- \"react-native\": \"0.74.5\"\n- },\n- \"devDependencies\": {\n- \"@babel/core\": \"^7.20.0\"\n+ \"expo\": \"~54.0.33\",\n+ \"expo-status-bar\": \"~3.0.9\",\n+ \"react\": \"19.1.0\",\n+ \"react-native\": \"0.81.5\"\n }\n }\n","52..54":"diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle\nindex 84879d83acd..3f1c571b679 100644\n--- a/templates/expo-template-bare-minimum/android/app/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/app/build.gradle\n@@ -14,6 +14,7 @@ react {\n hermesCommand = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/sdks/hermesc/%OS-BIN%/hermesc\"\n codegenDir = new File([\"node\", \"--print\", \"require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n \n+ enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean()\n // Use Expo CLI to bundle the app, this ensures the Metro config\n // works correctly with Expo projects.\n cliFile = new File([\"node\", \"--print\", \"require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })\"].execute(null, rootDir).text.trim())\n@@ -63,9 +64,9 @@ react {\n }\n \n /**\n- * Set this to true to Run Proguard on Release builds to minify the Java bytecode.\n+ * Set this to true in release builds to optimize the app using [R8](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization).\n */\n-def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInReleaseBuilds') ?: false).toBoolean()\n+def enableMinifyInReleaseBuilds = (findProperty('android.enableMinifyInReleaseBuilds') ?: false).toBoolean()\n \n /**\n * The preferred build flavor of JavaScriptCore (JSC)\n@@ -78,7 +79,7 @@ def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInRelea\n * give correct results when using with locales other than en-US. Note that\n * this variant is about 6MiB larger per architecture than default.\n */\n-def jscFlavor = 'org.webkit:android-jsc:+'\n+def jscFlavor = 'io.github.react-native-community:jsc-android:2026004.+'\n \n android {\n ndkVersion rootProject.ext.ndkVersion\n@@ -93,6 +94,8 @@ android {\n targetSdkVersion rootProject.ext.targetSdkVersion\n versionCode 1\n versionName \"1.0\"\n+\n+ buildConfigField \"String\", \"REACT_NATIVE_RELEASE_LEVEL\", \"\\\"${findProperty('reactNativeReleaseLevel') ?: 'stable'}\\\"\"\n }\n signingConfigs {\n debug {\n@@ -110,15 +113,18 @@ android {\n // Caution! In production, you need to generate your own keystore file.\n // see https://reactnative.dev/docs/signed-apk-android.\n signingConfig signingConfigs.debug\n- shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false)\n- minifyEnabled enableProguardInReleaseBuilds\n+ def enableShrinkResources = findProperty('android.enableShrinkResourcesInReleaseBuilds') ?: 'false'\n+ shrinkResources enableShrinkResources.toBoolean()\n+ minifyEnabled enableMinifyInReleaseBuilds\n proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n- crunchPngs (findProperty('android.enablePngCrunchInReleaseBuilds')?.toBoolean() ?: true)\n+ def enablePngCrunchInRelease = findProperty('android.enablePngCrunchInReleaseBuilds') ?: 'true'\n+ crunchPngs enablePngCrunchInRelease.toBoolean()\n }\n }\n packagingOptions {\n jniLibs {\n- useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false)\n+ def enableLegacyPackaging = findProperty('expo.useLegacyPackaging') ?: 'false'\n+ useLegacyPackaging enableLegacyPackaging.toBoolean()\n }\n }\n androidResources {\n@@ -156,15 +162,15 @@ dependencies {\n \n if (isGifEnabled) {\n // For animated gif support\n- implementation(\"com.facebook.fresco:animated-gif:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-gif:${expoLibs.versions.fresco.get()}\")\n }\n \n if (isWebpEnabled) {\n // For webp support\n- implementation(\"com.facebook.fresco:webpsupport:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:webpsupport:${expoLibs.versions.fresco.get()}\")\n if (isWebpAnimatedEnabled) {\n // Animated webp support\n- implementation(\"com.facebook.fresco:animated-webp:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-webp:${expoLibs.versions.fresco.get()}\")\n }\n }\n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\nnew file mode 100644\nindex 00000000000..3ec2507bab7\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\n@@ -0,0 +1,7 @@\n+\n+\n+ \n+\n+ \n+\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\nindex e61349d1301..5abad96fa00 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n@@ -5,13 +5,13 @@ import android.content.res.Configuration\n \n import com.facebook.react.PackageList\n import com.facebook.react.ReactApplication\n+import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative\n import com.facebook.react.ReactNativeHost\n import com.facebook.react.ReactPackage\n import com.facebook.react.ReactHost\n-import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load\n+import com.facebook.react.common.ReleaseLevel\n+import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint\n import com.facebook.react.defaults.DefaultReactNativeHost\n-import com.facebook.react.soloader.OpenSourceMergedSoMapping\n-import com.facebook.soloader.SoLoader\n \n import expo.modules.ApplicationLifecycleDispatcher\n import expo.modules.ReactNativeHostWrapper\n@@ -19,21 +19,19 @@ import expo.modules.ReactNativeHostWrapper\n class MainApplication : Application(), ReactApplication {\n \n override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper(\n- this,\n- object : DefaultReactNativeHost(this) {\n- override fun getPackages(): List {\n- val packages = PackageList(this).packages\n- // Packages that cannot be autolinked yet can be added manually here, for example:\n- // packages.add(new MyReactNativePackage());\n- return packages\n- }\n+ this,\n+ object : DefaultReactNativeHost(this) {\n+ override fun getPackages(): List =\n+ PackageList(this).packages.apply {\n+ // Packages that cannot be autolinked yet can be added manually here, for example:\n+ // add(MyReactNativePackage())\n+ }\n \n override fun getJSMainModuleName(): String = \".expo/.virtual-metro-entry\"\n \n override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG\n \n override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED\n- override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED\n }\n )\n \n@@ -42,11 +40,12 @@ class MainApplication : Application(), ReactApplication {\n \n override fun onCreate() {\n super.onCreate()\n- SoLoader.init(this, OpenSourceMergedSoMapping)\n- if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {\n- // If you opted-in for the New Architecture, we load the native entry point for this app.\n- load()\n+ DefaultNewArchitectureEntryPoint.releaseLevel = try {\n+ ReleaseLevel.valueOf(BuildConfig.REACT_NATIVE_RELEASE_LEVEL.uppercase())\n+ } catch (e: IllegalArgumentException) {\n+ ReleaseLevel.STABLE\n }\n+ loadReactNative(this)\n ApplicationLifecycleDispatcher.onApplicationCreate(this)\n }\n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\nindex 51fbc1e5a72..26f3404be26 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n@@ -1,14 +1,7 @@\n \n- \n- \n \ndiff --git a/templates/expo-template-bare-minimum/android/build.gradle b/templates/expo-template-bare-minimum/android/build.gradle\nindex abbcb8ec8a1..0554dd156c1 100644\n--- a/templates/expo-template-bare-minimum/android/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/build.gradle\n@@ -1,41 +1,24 @@\n // Top-level build file where you can add configuration options common to all sub-projects/modules.\n \n buildscript {\n- ext {\n- buildToolsVersion = findProperty('android.buildToolsVersion') ?: '35.0.0'\n- minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '24')\n- compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '35')\n- targetSdkVersion = Integer.parseInt(findProperty('android.targetSdkVersion') ?: '34')\n- kotlinVersion = findProperty('android.kotlinVersion') ?: '1.9.25'\n-\n- ndkVersion = \"26.1.10909125\"\n- }\n- repositories {\n- google()\n- mavenCentral()\n- }\n- dependencies {\n- classpath('com.android.tools.build:gradle')\n- classpath('com.facebook.react:react-native-gradle-plugin')\n- classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')\n- }\n+ repositories {\n+ google()\n+ mavenCentral()\n+ }\n+ dependencies {\n+ classpath('com.android.tools.build:gradle')\n+ classpath('com.facebook.react:react-native-gradle-plugin')\n+ classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')\n+ }\n }\n \n-apply plugin: \"com.facebook.react.rootproject\"\n-\n allprojects {\n- repositories {\n- maven {\n- // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n- url(new File(['node', '--print', \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim(), '../android'))\n- }\n- maven {\n- // Android JSC is installed from npm\n- url(new File(['node', '--print', \"require.resolve('jsc-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), '../dist'))\n- }\n-\n- google()\n- mavenCentral()\n- maven { url 'https://www.jitpack.io' }\n- }\n+ repositories {\n+ google()\n+ mavenCentral()\n+ maven { url 'https://www.jitpack.io' }\n+ }\n }\n+\n+apply plugin: \"expo-root-project\"\n+apply plugin: \"com.facebook.react.rootproject\"\ndiff --git a/templates/expo-template-bare-minimum/android/gradle.properties b/templates/expo-template-bare-minimum/android/gradle.properties\nindex de47429c64c..97271b9456f 100644\n--- a/templates/expo-template-bare-minimum/android/gradle.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle.properties\n@@ -15,7 +15,7 @@ org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m\n # When configured, Gradle will run in incubating parallel mode.\n # This option should only be used with decoupled projects. More details, visit\n # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n-# org.gradle.parallel=true\n+org.gradle.parallel=true\n \n # AndroidX package structure to make it clearer which packages are bundled with the\n # Android operating system, and which are packaged with your app's APK\n@@ -35,12 +35,17 @@ reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64\n # your application. You should enable this flag either if you want\n # to write custom TurboModules/Fabric components OR use libraries that\n # are providing them.\n-newArchEnabled=false\n+newArchEnabled=true\n \n # Use this property to enable or disable the Hermes JS engine.\n # If set to false, you will be using JSC instead.\n hermesEnabled=true\n \n+# Use this property to enable edge-to-edge display support.\n+# This allows your app to draw behind system bars for an immersive UI.\n+# Note: Only works with ReactActivity and should not be used with custom Activity.\n+edgeToEdgeEnabled=true\n+\n # Enable GIF support in React Native images (~200 B increase)\n expo.gif.enabled=true\n # Enable webp support in React Native images (~85 KB increase)\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar\nindex a4b76b9530d..1b33c55baab 100644\nBinary files a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar and b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar differ\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\nindex 79eb9d003fe..d4081da476b 100644\n--- a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n@@ -1,6 +1,6 @@\n distributionBase=GRADLE_USER_HOME\n distributionPath=wrapper/dists\n-distributionUrl=https\\://services.gradle.org/distributions/gradle-8.10.2-all.zip\n+distributionUrl=https\\://services.gradle.org/distributions/gradle-8.14.3-bin.zip\n networkTimeout=10000\n validateDistributionUrl=true\n zipStoreBase=GRADLE_USER_HOME\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew b/templates/expo-template-bare-minimum/android/gradlew\nindex f5feea6d6b1..7f94d3d4777 100755\n--- a/templates/expo-template-bare-minimum/android/gradlew\n+++ b/templates/expo-template-bare-minimum/android/gradlew\n@@ -86,8 +86,7 @@ done\n # shellcheck disable=SC2034\n APP_BASE_NAME=${0##*/}\n # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)\n-APP_HOME=$( cd -P \"${APP_HOME:-./}\" > /dev/null && printf '%s\n-' \"$PWD\" ) || exit\n+APP_HOME=$( cd -P \"${APP_HOME:-./}\" > /dev/null && printf '%s\\n' \"$PWD\" ) || exit\n \n # Use the maximum available, or set MAX_FD != -1 to use that value.\n MAX_FD=maximum\n@@ -115,7 +114,7 @@ case \"$( uname )\" in #(\n NONSTOP* ) nonstop=true ;;\n esac\n \n-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n+CLASSPATH=\"\\\\\\\"\\\\\\\"\"\n \n \n # Determine the Java command to use to start the JVM.\n@@ -214,7 +213,7 @@ DEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n set -- \\\n \"-Dorg.gradle.appname=$APP_BASE_NAME\" \\\n -classpath \"$CLASSPATH\" \\\n- org.gradle.wrapper.GradleWrapperMain \\\n+ -jar \"$APP_HOME/gradle/wrapper/gradle-wrapper.jar\" \\\n \"$@\"\n \n # Stop when \"xargs\" is not available.\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew.bat b/templates/expo-template-bare-minimum/android/gradlew.bat\nindex 9b42019c791..5eed7ee8452 100644\n--- a/templates/expo-template-bare-minimum/android/gradlew.bat\n+++ b/templates/expo-template-bare-minimum/android/gradlew.bat\n@@ -70,11 +70,11 @@ goto fail\n :execute\r\n @rem Setup the command line\r\n \r\n-set CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\r\n+set CLASSPATH=\r\n \r\n \r\n @rem Execute Gradle\r\n-\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\r\n+\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" -jar \"%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\" %*\r\n \r\n :end\r\n @rem End local scope for the variables with windows NT shell\r\ndiff --git a/templates/expo-template-bare-minimum/android/settings.gradle b/templates/expo-template-bare-minimum/android/settings.gradle\nindex 39b188e065c..7fe91512213 100644\n--- a/templates/expo-template-bare-minimum/android/settings.gradle\n+++ b/templates/expo-template-bare-minimum/android/settings.gradle\n@@ -1,38 +1,39 @@\n pluginManagement {\n- includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().toString())\n+ def reactNativeGradlePlugin = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\")\n+ }.standardOutput.asText.get().trim()\n+ ).getParentFile().absolutePath\n+ includeBuild(reactNativeGradlePlugin)\n+ \n+ def expoPluginsPath = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('expo-modules-autolinking/package.json', { paths: [require.resolve('expo/package.json')] })\")\n+ }.standardOutput.asText.get().trim(),\n+ \"../android/expo-gradle-plugin\"\n+ ).absolutePath\n+ includeBuild(expoPluginsPath)\n+}\n+\n+plugins {\n+ id(\"com.facebook.react.settings\")\n+ id(\"expo-autolinking-settings\")\n }\n-plugins { id(\"com.facebook.react.settings\") }\n \n extensions.configure(com.facebook.react.ReactSettingsExtension) { ex ->\n if (System.getenv('EXPO_USE_COMMUNITY_AUTOLINKING') == '1') {\n ex.autolinkLibrariesFromCommand()\n } else {\n- def command = [\n- 'node',\n- '--no-warnings',\n- '--eval',\n- 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n- 'react-native-config',\n- '--json',\n- '--platform',\n- 'android'\n- ].toList()\n- ex.autolinkLibrariesFromCommand(command)\n+ ex.autolinkLibrariesFromCommand(expoAutolinking.rnConfigCommand)\n }\n }\n+expoAutolinking.useExpoModules()\n \n rootProject.name = 'HelloWorld'\n \n-dependencyResolutionManagement {\n- versionCatalogs {\n- reactAndroidLibs {\n- from(files(new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim(), \"../gradle/libs.versions.toml\")))\n- }\n- }\n-}\n-\n-apply from: new File([\"node\", \"--print\", \"require.resolve('expo/package.json')\"].execute(null, rootDir).text.trim(), \"../scripts/autolinking.gradle\");\n-useExpoModules()\n+expoAutolinking.useExpoVersionCatalog()\n \n include ':app'\n-includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile())\n+includeBuild(expoAutolinking.reactNativeGradlePlugin)\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\nindex 1ccb9b422d5..8a390c764af 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n@@ -3,33 +3,25 @@\n \tarchiveVersion = 1;\n \tclasses = {\n \t};\n-\tobjectVersion = 46;\n+\tobjectVersion = 54;\n \tobjects = {\n \n /* Begin PBXBuildFile section */\n-\t\t13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };\n \t\t13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };\n-\t\t13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };\n \t\t3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; };\n-\t\t96905EF65AED1B983A6B3ABC /* libPods-HelloWorld.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */; };\n-\t\tB18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; };\n \t\tBB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; };\n+\t\tF11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F11748412D0307B40044C1D9 /* AppDelegate.swift */; };\n /* End PBXBuildFile section */\n \n /* Begin PBXFileReference section */\n \t\t13B07F961A680F5B00A75B9A /* HelloWorld.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloWorld.app; sourceTree = BUILT_PRODUCTS_DIR; };\n-\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = HelloWorld/AppDelegate.h; sourceTree = \"\"; };\n-\t\t13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = HelloWorld/AppDelegate.mm; sourceTree = \"\"; };\n \t\t13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = HelloWorld/Images.xcassets; sourceTree = \"\"; };\n \t\t13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = HelloWorld/Info.plist; sourceTree = \"\"; };\n-\t\t13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = HelloWorld/main.m; sourceTree = \"\"; };\n-\t\t58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-HelloWorld.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n-\t\t6C2E3173556A471DD304B334 /* 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 = \"\"; };\n-\t\t7A4D352CD337FB3A3BF06240 /* 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 = \"\"; };\n \t\tAA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = HelloWorld/SplashScreen.storyboard; sourceTree = \"\"; };\n \t\tBB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = \"\"; };\n \t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };\n-\t\tFAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = \"Pods/Target Support Files/Pods-HelloWorld/ExpoModulesProvider.swift\"; sourceTree = \"\"; };\n+\t\tF11748412D0307B40044C1D9 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = HelloWorld/AppDelegate.swift; sourceTree = \"\"; };\n+\t\tF11748442D0722820044C1D9 /* HelloWorld-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = \"HelloWorld-Bridging-Header.h\"; path = \"HelloWorld/HelloWorld-Bridging-Header.h\"; sourceTree = \"\"; };\n /* End PBXFileReference section */\n \n /* Begin PBXFrameworksBuildPhase section */\n@@ -37,7 +29,6 @@\n \t\t\tisa = PBXFrameworksBuildPhase;\n \t\t\tbuildActionMask = 2147483647;\n \t\t\tfiles = (\n-\t\t\t\t96905EF65AED1B983A6B3ABC /* libPods-HelloWorld.a in Frameworks */,\n \t\t\t);\n \t\t\trunOnlyForDeploymentPostprocessing = 0;\n \t\t};\n@@ -47,12 +38,11 @@\n \t\t13B07FAE1A68108700A75B9A /* HelloWorld */ = {\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n+\t\t\t\tF11748412D0307B40044C1D9 /* AppDelegate.swift */,\n+\t\t\t\tF11748442D0722820044C1D9 /* HelloWorld-Bridging-Header.h */,\n \t\t\t\tBB2F792B24A3F905000567C9 /* Supporting */,\n-\t\t\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */,\n-\t\t\t\t13B07FB01A68108700A75B9A /* AppDelegate.mm */,\n \t\t\t\t13B07FB51A68108700A75B9A /* Images.xcassets */,\n \t\t\t\t13B07FB61A68108700A75B9A /* Info.plist */,\n-\t\t\t\t13B07FB71A68108700A75B9A /* main.m */,\n \t\t\t\tAA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */,\n \t\t\t);\n \t\t\tname = HelloWorld;\n@@ -62,7 +52,6 @@\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n \t\t\t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */,\n-\t\t\t\t58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */,\n \t\t\t);\n \t\t\tname = Frameworks;\n \t\t\tsourceTree = \"\";\n@@ -81,8 +70,6 @@\n \t\t\t\t832341AE1AAA6A7D00B99B32 /* Libraries */,\n \t\t\t\t83CBBA001A601CBA00E9B192 /* Products */,\n \t\t\t\t2D16E6871FA4F8E400B85C8A /* Frameworks */,\n-\t\t\t\tD65327D7A22EEC0BE12398D9 /* Pods */,\n-\t\t\t\tD7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */,\n \t\t\t);\n \t\t\tindentWidth = 2;\n \t\t\tsourceTree = \"\";\n@@ -97,14 +84,6 @@\n \t\t\tname = Products;\n \t\t\tsourceTree = \"\";\n \t\t};\n-\t\t92DBD88DE9BF7D494EA9DA96 /* HelloWorld */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\tFAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */,\n-\t\t\t);\n-\t\t\tname = HelloWorld;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n \t\tBB2F792B24A3F905000567C9 /* Supporting */ = {\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n@@ -114,23 +93,6 @@\n \t\t\tpath = HelloWorld/Supporting;\n \t\t\tsourceTree = \"\";\n \t\t};\n-\t\tD65327D7A22EEC0BE12398D9 /* Pods */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\t6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */,\n-\t\t\t\t7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */,\n-\t\t\t);\n-\t\t\tpath = Pods;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n-\t\tD7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\t92DBD88DE9BF7D494EA9DA96 /* HelloWorld */,\n-\t\t\t);\n-\t\t\tname = ExpoModulesProviders;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n /* End PBXGroup section */\n \n /* Begin PBXNativeTarget section */\n@@ -206,6 +168,8 @@\n \t\t\tfiles = (\n \t\t\t);\n \t\t\tinputPaths = (\n+\t\t\t\t\"$(SRCROOT)/.xcode.env\",\n+\t\t\t\t\"$(SRCROOT)/.xcode.env.local\",\n \t\t\t);\n \t\t\tname = \"Bundle React Native code and images\";\n \t\t\toutputPaths = (\n@@ -265,9 +229,7 @@\n \t\t\tisa = PBXSourcesBuildPhase;\n \t\t\tbuildActionMask = 2147483647;\n \t\t\tfiles = (\n-\t\t\t\t13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,\n-\t\t\t\t13B07FC11A68108700A75B9A /* main.m in Sources */,\n-\t\t\t\tB18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */,\n+\t\t\t\tF11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */,\n \t\t\t);\n \t\t\trunOnlyForDeploymentPostprocessing = 0;\n \t\t};\n@@ -276,7 +238,6 @@\n /* Begin XCBuildConfiguration section */\n \t\t13B07F941A680F5B00A75B9A /* Debug */ = {\n \t\t\tisa = XCBuildConfiguration;\n-\t\t\tbaseConfigurationReference = 6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */;\n \t\t\tbuildSettings = {\n \t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n@@ -288,7 +249,10 @@\n \t\t\t\t);\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n \t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t\t\"@executable_path/Frameworks\",\n+\t\t\t\t);\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -297,6 +261,7 @@\n \t\t\t\t);\n \t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = org.name.HelloWorld;\n \t\t\t\tPRODUCT_NAME = HelloWorld;\n+\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"HelloWorld/HelloWorld-Bridging-Header.h\";\n \t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n \t\t\t\tSWIFT_VERSION = 5.0;\n \t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n@@ -305,14 +270,16 @@\n \t\t};\n \t\t13B07F951A680F5B00A75B9A /* Release */ = {\n \t\t\tisa = XCBuildConfiguration;\n-\t\t\tbaseConfigurationReference = 7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */;\n \t\t\tbuildSettings = {\n \t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n \t\t\t\tCURRENT_PROJECT_VERSION = 1;\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n \t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t\t\"@executable_path/Frameworks\",\n+\t\t\t\t);\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -321,6 +288,7 @@\n \t\t\t\t);\n \t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = org.name.HelloWorld;\n \t\t\t\tPRODUCT_NAME = HelloWorld;\n+\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"HelloWorld/HelloWorld-Bridging-Header.h\";\n \t\t\t\tSWIFT_VERSION = 5.0;\n \t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n \t\t\t};\n@@ -374,7 +342,10 @@\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n \t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t/usr/lib/swift,\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t);\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n \t\t\t\tONLY_ACTIVE_ARCH = YES;\n@@ -423,7 +394,10 @@\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n \t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t/usr/lib/swift,\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t);\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n \t\t\t\tSDKROOT = iphoneos;\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\nnew file mode 100644\nindex 00000000000..a7887e1e5b1\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\n@@ -0,0 +1,70 @@\n+import Expo\n+import React\n+import ReactAppDependencyProvider\n+\n+@UIApplicationMain\n+public class AppDelegate: ExpoAppDelegate {\n+ var window: UIWindow?\n+\n+ var reactNativeDelegate: ExpoReactNativeFactoryDelegate?\n+ var reactNativeFactory: RCTReactNativeFactory?\n+\n+ public override func application(\n+ _ application: UIApplication,\n+ didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil\n+ ) -> Bool {\n+ let delegate = ReactNativeDelegate()\n+ let factory = ExpoReactNativeFactory(delegate: delegate)\n+ delegate.dependencyProvider = RCTAppDependencyProvider()\n+\n+ reactNativeDelegate = delegate\n+ reactNativeFactory = factory\n+ bindReactNativeFactory(factory)\n+\n+#if os(iOS) || os(tvOS)\n+ window = UIWindow(frame: UIScreen.main.bounds)\n+ factory.startReactNative(\n+ withModuleName: \"main\",\n+ in: window,\n+ launchOptions: launchOptions)\n+#endif\n+\n+ return super.application(application, didFinishLaunchingWithOptions: launchOptions)\n+ }\n+\n+ // Linking API\n+ public override func application(\n+ _ app: UIApplication,\n+ open url: URL,\n+ options: [UIApplication.OpenURLOptionsKey: Any] = [:]\n+ ) -> Bool {\n+ return super.application(app, open: url, options: options) || RCTLinkingManager.application(app, open: url, options: options)\n+ }\n+\n+ // Universal Links\n+ public override func application(\n+ _ application: UIApplication,\n+ continue userActivity: NSUserActivity,\n+ restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void\n+ ) -> Bool {\n+ let result = RCTLinkingManager.application(application, continue: userActivity, restorationHandler: restorationHandler)\n+ return super.application(application, continue: userActivity, restorationHandler: restorationHandler) || result\n+ }\n+}\n+\n+class ReactNativeDelegate: ExpoReactNativeFactoryDelegate {\n+ // Extension point for config-plugins\n+\n+ override func sourceURL(for bridge: RCTBridge) -> URL? {\n+ // needed to return the correct URL for expo-dev-client.\n+ bridge.bundleURL ?? bundleURL()\n+ }\n+\n+ override func bundleURL() -> URL? {\n+#if DEBUG\n+ return RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: \".expo/.virtual-metro-entry\")\n+#else\n+ return Bundle.main.url(forResource: \"main\", withExtension: \"jsbundle\")\n+#endif\n+ }\n+}\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h b/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h\nnew file mode 100644\nindex 00000000000..8361941afc2\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h\n@@ -0,0 +1,3 @@\n+//\n+// Use this file to import your target's public headers that you would like to expose to Swift.\n+//\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json\nnew file mode 100644\nindex 00000000000..255637e0fdb\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json\n@@ -0,0 +1,21 @@\n+{\n+ \"images\" : [\n+ {\n+ \"filename\" : \"SplashScreenLegacy.png\",\n+ \"idiom\" : \"universal\",\n+ \"scale\" : \"1x\"\n+ },\n+ {\n+ \"idiom\" : \"universal\",\n+ \"scale\" : \"2x\"\n+ },\n+ {\n+ \"idiom\" : \"universal\",\n+ \"scale\" : \"3x\"\n+ }\n+ ],\n+ \"info\" : {\n+ \"author\" : \"xcode\",\n+ \"version\" : 1\n+ }\n+}\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png\nnew file mode 100644\nindex 00000000000..bbf8e9e6016\nBinary files /dev/null and b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png differ\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\nindex 447b4188985..58d21796e1d 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n@@ -1,11 +1,12 @@\n \n-\n+\n \n \n \n- \n+ \n \n \n+ \n \n \n \n@@ -29,6 +30,7 @@\n \n \n \n+ \n \n \n \n@@ -38,5 +40,8 @@\n \n \n \n+ \n+ \n+ \n \n \ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex f740040e7be..9743535e7ad 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -4,12 +4,19 @@ require File.join(File.dirname(`node --print \"require.resolve('react-native/pack\n require 'json'\n podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}\n \n-ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0'\n-ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+def ccache_enabled?(podfile_properties)\n+ # Environment variable takes precedence\n+ return ENV['USE_CCACHE'] == '1' if ENV['USE_CCACHE']\n+ \n+ # Fall back to Podfile properties\n+ podfile_properties['apple.ccacheEnabled'] == 'true'\n+end\n \n+ENV['RCT_NEW_ARCH_ENABLED'] ||= '0' if podfile_properties['newArchEnabled'] == 'false'\n+ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+ENV['RCT_USE_RN_DEP'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' && podfile_properties['newArchEnabled'] != 'false'\n+ENV['RCT_USE_PREBUILT_RNCORE'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' && podfile_properties['newArchEnabled'] != 'false'\n platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'\n-install! 'cocoapods',\n- :deterministic_uuids => false\n \n prepare_react_native_project!\n \n@@ -23,7 +30,8 @@ target 'HelloWorld' do\n 'node',\n '--no-warnings',\n '--eval',\n- 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n+ 'require(\\'expo/bin/autolinking\\')',\n+ 'expo-modules-autolinking',\n 'react-native-config',\n '--json',\n '--platform',\n@@ -49,18 +57,7 @@ target 'HelloWorld' do\n installer,\n config[:reactNativePath],\n :mac_catalyst_enabled => false,\n- :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true',\n+ :ccache_enabled => ccache_enabled?(podfile_properties),\n )\n-\n- # This is necessary for Xcode 14, because it signs resource bundles by default\n- # when building for devices.\n- installer.target_installation_results.pod_target_installation_results\n- .each do |pod_name, target_installation_result|\n- target_installation_result.resource_bundle_targets.each do |resource_bundle_target|\n- resource_bundle_target.build_configurations.each do |config|\n- config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'\n- end\n- end\n- end\n end\n end\ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex b51159163bf..0d90c6e603d 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -2,7 +2,7 @@\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n \"license\": \"0BSD\",\n- \"version\": \"52.0.79\",\n+ \"version\": \"54.0.50\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -11,12 +11,9 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~52.0.49\",\n- \"expo-status-bar\": \"~2.0.1\",\n- \"react\": \"18.3.1\",\n- \"react-native\": \"0.76.9\"\n- },\n- \"devDependencies\": {\n- \"@babel/core\": \"^7.20.0\"\n+ \"expo\": \"~54.0.33\",\n+ \"expo-status-bar\": \"~3.0.9\",\n+ \"react\": \"19.1.0\",\n+ \"react-native\": \"0.81.5\"\n }\n }\n","53..54":"diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle\nindex 34b96c71c33..3f1c571b679 100644\n--- a/templates/expo-template-bare-minimum/android/app/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/app/build.gradle\n@@ -64,9 +64,9 @@ react {\n }\n \n /**\n- * Set this to true to Run Proguard on Release builds to minify the Java bytecode.\n+ * Set this to true in release builds to optimize the app using [R8](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization).\n */\n-def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInReleaseBuilds') ?: false).toBoolean()\n+def enableMinifyInReleaseBuilds = (findProperty('android.enableMinifyInReleaseBuilds') ?: false).toBoolean()\n \n /**\n * The preferred build flavor of JavaScriptCore (JSC)\n@@ -94,6 +94,8 @@ android {\n targetSdkVersion rootProject.ext.targetSdkVersion\n versionCode 1\n versionName \"1.0\"\n+\n+ buildConfigField \"String\", \"REACT_NATIVE_RELEASE_LEVEL\", \"\\\"${findProperty('reactNativeReleaseLevel') ?: 'stable'}\\\"\"\n }\n signingConfigs {\n debug {\n@@ -111,15 +113,18 @@ android {\n // Caution! In production, you need to generate your own keystore file.\n // see https://reactnative.dev/docs/signed-apk-android.\n signingConfig signingConfigs.debug\n- shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false)\n- minifyEnabled enableProguardInReleaseBuilds\n+ def enableShrinkResources = findProperty('android.enableShrinkResourcesInReleaseBuilds') ?: 'false'\n+ shrinkResources enableShrinkResources.toBoolean()\n+ minifyEnabled enableMinifyInReleaseBuilds\n proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n- crunchPngs (findProperty('android.enablePngCrunchInReleaseBuilds')?.toBoolean() ?: true)\n+ def enablePngCrunchInRelease = findProperty('android.enablePngCrunchInReleaseBuilds') ?: 'true'\n+ crunchPngs enablePngCrunchInRelease.toBoolean()\n }\n }\n packagingOptions {\n jniLibs {\n- useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false)\n+ def enableLegacyPackaging = findProperty('expo.useLegacyPackaging') ?: 'false'\n+ useLegacyPackaging enableLegacyPackaging.toBoolean()\n }\n }\n androidResources {\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\nnew file mode 100644\nindex 00000000000..3ec2507bab7\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\n@@ -0,0 +1,7 @@\n+\n+\n+ \n+\n+ \n+\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\nindex 267e20c30e5..5abad96fa00 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n@@ -5,13 +5,13 @@ import android.content.res.Configuration\n \n import com.facebook.react.PackageList\n import com.facebook.react.ReactApplication\n+import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative\n import com.facebook.react.ReactNativeHost\n import com.facebook.react.ReactPackage\n import com.facebook.react.ReactHost\n-import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load\n+import com.facebook.react.common.ReleaseLevel\n+import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint\n import com.facebook.react.defaults.DefaultReactNativeHost\n-import com.facebook.react.soloader.OpenSourceMergedSoMapping\n-import com.facebook.soloader.SoLoader\n \n import expo.modules.ApplicationLifecycleDispatcher\n import expo.modules.ReactNativeHostWrapper\n@@ -19,21 +19,19 @@ import expo.modules.ReactNativeHostWrapper\n class MainApplication : Application(), ReactApplication {\n \n override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper(\n- this,\n- object : DefaultReactNativeHost(this) {\n- override fun getPackages(): List {\n- val packages = PackageList(this).packages\n- // Packages that cannot be autolinked yet can be added manually here, for example:\n- // packages.add(MyReactNativePackage())\n- return packages\n- }\n+ this,\n+ object : DefaultReactNativeHost(this) {\n+ override fun getPackages(): List =\n+ PackageList(this).packages.apply {\n+ // Packages that cannot be autolinked yet can be added manually here, for example:\n+ // add(MyReactNativePackage())\n+ }\n \n override fun getJSMainModuleName(): String = \".expo/.virtual-metro-entry\"\n \n override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG\n \n override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED\n- override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED\n }\n )\n \n@@ -42,11 +40,12 @@ class MainApplication : Application(), ReactApplication {\n \n override fun onCreate() {\n super.onCreate()\n- SoLoader.init(this, OpenSourceMergedSoMapping)\n- if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {\n- // If you opted-in for the New Architecture, we load the native entry point for this app.\n- load()\n+ DefaultNewArchitectureEntryPoint.releaseLevel = try {\n+ ReleaseLevel.valueOf(BuildConfig.REACT_NATIVE_RELEASE_LEVEL.uppercase())\n+ } catch (e: IllegalArgumentException) {\n+ ReleaseLevel.STABLE\n }\n+ loadReactNative(this)\n ApplicationLifecycleDispatcher.onApplicationCreate(this)\n }\n \ndiff --git a/templates/expo-template-bare-minimum/android/build.gradle b/templates/expo-template-bare-minimum/android/build.gradle\nindex fa7b11e23c1..0554dd156c1 100644\n--- a/templates/expo-template-bare-minimum/android/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/build.gradle\n@@ -12,21 +12,8 @@ buildscript {\n }\n }\n \n-def reactNativeAndroidDir = new File(\n- providers.exec {\n- workingDir(rootDir)\n- commandLine(\"node\", \"--print\", \"require.resolve('react-native/package.json')\")\n- }.standardOutput.asText.get().trim(),\n- \"../android\"\n-)\n-\n allprojects {\n repositories {\n- maven {\n- // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n- url(reactNativeAndroidDir)\n- }\n-\n google()\n mavenCentral()\n maven { url 'https://www.jitpack.io' }\ndiff --git a/templates/expo-template-bare-minimum/android/gradle.properties b/templates/expo-template-bare-minimum/android/gradle.properties\nindex 7531e9eb23c..97271b9456f 100644\n--- a/templates/expo-template-bare-minimum/android/gradle.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle.properties\n@@ -15,7 +15,7 @@ org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m\n # When configured, Gradle will run in incubating parallel mode.\n # This option should only be used with decoupled projects. More details, visit\n # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n-# org.gradle.parallel=true\n+org.gradle.parallel=true\n \n # AndroidX package structure to make it clearer which packages are bundled with the\n # Android operating system, and which are packaged with your app's APK\n@@ -41,6 +41,11 @@ newArchEnabled=true\n # If set to false, you will be using JSC instead.\n hermesEnabled=true\n \n+# Use this property to enable edge-to-edge display support.\n+# This allows your app to draw behind system bars for an immersive UI.\n+# Note: Only works with ReactActivity and should not be used with custom Activity.\n+edgeToEdgeEnabled=true\n+\n # Enable GIF support in React Native images (~200 B increase)\n expo.gif.enabled=true\n # Enable webp support in React Native images (~85 KB increase)\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar\nindex a4b76b9530d..1b33c55baab 100644\nBinary files a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar and b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar differ\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\nindex 37f853b1c84..d4081da476b 100644\n--- a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n@@ -1,6 +1,6 @@\n distributionBase=GRADLE_USER_HOME\n distributionPath=wrapper/dists\n-distributionUrl=https\\://services.gradle.org/distributions/gradle-8.13-bin.zip\n+distributionUrl=https\\://services.gradle.org/distributions/gradle-8.14.3-bin.zip\n networkTimeout=10000\n validateDistributionUrl=true\n zipStoreBase=GRADLE_USER_HOME\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew b/templates/expo-template-bare-minimum/android/gradlew\nindex f3b75f3b0d4..7f94d3d4777 100755\n--- a/templates/expo-template-bare-minimum/android/gradlew\n+++ b/templates/expo-template-bare-minimum/android/gradlew\n@@ -114,7 +114,7 @@ case \"$( uname )\" in #(\n NONSTOP* ) nonstop=true ;;\n esac\n \n-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n+CLASSPATH=\"\\\\\\\"\\\\\\\"\"\n \n \n # Determine the Java command to use to start the JVM.\n@@ -213,7 +213,7 @@ DEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n set -- \\\n \"-Dorg.gradle.appname=$APP_BASE_NAME\" \\\n -classpath \"$CLASSPATH\" \\\n- org.gradle.wrapper.GradleWrapperMain \\\n+ -jar \"$APP_HOME/gradle/wrapper/gradle-wrapper.jar\" \\\n \"$@\"\n \n # Stop when \"xargs\" is not available.\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew.bat b/templates/expo-template-bare-minimum/android/gradlew.bat\nindex 9b42019c791..5eed7ee8452 100644\n--- a/templates/expo-template-bare-minimum/android/gradlew.bat\n+++ b/templates/expo-template-bare-minimum/android/gradlew.bat\n@@ -70,11 +70,11 @@ goto fail\n :execute\r\n @rem Setup the command line\r\n \r\n-set CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\r\n+set CLASSPATH=\r\n \r\n \r\n @rem Execute Gradle\r\n-\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\r\n+\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" -jar \"%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\" %*\r\n \r\n :end\r\n @rem End local scope for the variables with windows NT shell\r\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\nindex 1b7513bd31b..8a390c764af 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n@@ -168,6 +168,8 @@\n \t\t\tfiles = (\n \t\t\t);\n \t\t\tinputPaths = (\n+\t\t\t\t\"$(SRCROOT)/.xcode.env\",\n+\t\t\t\t\"$(SRCROOT)/.xcode.env.local\",\n \t\t\t);\n \t\t\tname = \"Bundle React Native code and images\";\n \t\t\toutputPaths = (\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json\nnew file mode 100644\nindex 00000000000..255637e0fdb\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json\n@@ -0,0 +1,21 @@\n+{\n+ \"images\" : [\n+ {\n+ \"filename\" : \"SplashScreenLegacy.png\",\n+ \"idiom\" : \"universal\",\n+ \"scale\" : \"1x\"\n+ },\n+ {\n+ \"idiom\" : \"universal\",\n+ \"scale\" : \"2x\"\n+ },\n+ {\n+ \"idiom\" : \"universal\",\n+ \"scale\" : \"3x\"\n+ }\n+ ],\n+ \"info\" : {\n+ \"author\" : \"xcode\",\n+ \"version\" : 1\n+ }\n+}\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png\nnew file mode 100644\nindex 00000000000..bbf8e9e6016\nBinary files /dev/null and b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png differ\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\nindex 447b4188985..58d21796e1d 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n@@ -1,11 +1,12 @@\n \n-\n+\n \n \n \n- \n+ \n \n \n+ \n \n \n \n@@ -29,6 +30,7 @@\n \n \n \n+ \n \n \n \n@@ -38,5 +40,8 @@\n \n \n \n+ \n+ \n+ \n \n \ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex 29503ff0cc1..9743535e7ad 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -4,12 +4,19 @@ require File.join(File.dirname(`node --print \"require.resolve('react-native/pack\n require 'json'\n podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}\n \n-ENV['RCT_NEW_ARCH_ENABLED'] = '0' if podfile_properties['newArchEnabled'] == 'false'\n-ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+def ccache_enabled?(podfile_properties)\n+ # Environment variable takes precedence\n+ return ENV['USE_CCACHE'] == '1' if ENV['USE_CCACHE']\n+ \n+ # Fall back to Podfile properties\n+ podfile_properties['apple.ccacheEnabled'] == 'true'\n+end\n \n+ENV['RCT_NEW_ARCH_ENABLED'] ||= '0' if podfile_properties['newArchEnabled'] == 'false'\n+ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+ENV['RCT_USE_RN_DEP'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' && podfile_properties['newArchEnabled'] != 'false'\n+ENV['RCT_USE_PREBUILT_RNCORE'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' && podfile_properties['newArchEnabled'] != 'false'\n platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'\n-install! 'cocoapods',\n- :deterministic_uuids => false\n \n prepare_react_native_project!\n \n@@ -20,7 +27,10 @@ target 'HelloWorld' do\n config_command = ['node', '-e', \"process.argv=['', '', 'config'];require('@react-native-community/cli').run()\"];\n else\n config_command = [\n- 'npx',\n+ 'node',\n+ '--no-warnings',\n+ '--eval',\n+ 'require(\\'expo/bin/autolinking\\')',\n 'expo-modules-autolinking',\n 'react-native-config',\n '--json',\n@@ -47,18 +57,7 @@ target 'HelloWorld' do\n installer,\n config[:reactNativePath],\n :mac_catalyst_enabled => false,\n- :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true',\n+ :ccache_enabled => ccache_enabled?(podfile_properties),\n )\n-\n- # This is necessary for Xcode 14, because it signs resource bundles by default\n- # when building for devices.\n- installer.target_installation_results.pod_target_installation_results\n- .each do |pod_name, target_installation_result|\n- target_installation_result.resource_bundle_targets.each do |resource_bundle_target|\n- resource_bundle_target.build_configurations.each do |config|\n- config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'\n- end\n- end\n- end\n end\n end\ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex 661f6b6addf..0d90c6e603d 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -2,7 +2,7 @@\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n \"license\": \"0BSD\",\n- \"version\": \"53.0.42\",\n+ \"version\": \"54.0.50\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -11,12 +11,9 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~53.0.27\",\n- \"expo-status-bar\": \"~2.2.3\",\n- \"react\": \"19.0.0\",\n- \"react-native\": \"0.79.6\"\n- },\n- \"devDependencies\": {\n- \"@babel/core\": \"^7.20.0\"\n+ \"expo\": \"~54.0.33\",\n+ \"expo-status-bar\": \"~3.0.9\",\n+ \"react\": \"19.1.0\",\n+ \"react-native\": \"0.81.5\"\n }\n }\n","54..54":"","50..55":"diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle\nindex 27c6e63957e..fc185e53bc3 100644\n--- a/templates/expo-template-bare-minimum/android/app/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/app/build.gradle\n@@ -11,21 +11,22 @@ def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath()\n react {\n entryFile = file([\"node\", \"-e\", \"require('expo/scripts/resolveAppEntry')\", projectRoot, \"android\", \"absolute\"].execute(null, rootDir).text.trim())\n reactNativeDir = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n- hermesCommand = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/sdks/hermesc/%OS-BIN%/hermesc\"\n+ hermesCommand = new File([\"node\", \"--print\", \"require.resolve('hermes-compiler/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/hermesc/%OS-BIN%/hermesc\"\n codegenDir = new File([\"node\", \"--print\", \"require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n \n+ enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean()\n // Use Expo CLI to bundle the app, this ensures the Metro config\n // works correctly with Expo projects.\n cliFile = new File([\"node\", \"--print\", \"require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })\"].execute(null, rootDir).text.trim())\n bundleCommand = \"export:embed\"\n \n /* Folders */\n- // The root of your project, i.e. where \"package.json\" lives. Default is '..'\n- // root = file(\"../\")\n- // The folder where the react-native NPM package is. Default is ../node_modules/react-native\n- // reactNativeDir = file(\"../node_modules/react-native\")\n- // The folder where the react-native Codegen package is. Default is ../node_modules/@react-native/codegen\n- // codegenDir = file(\"../node_modules/@react-native/codegen\")\n+ // The root of your project, i.e. where \"package.json\" lives. Default is '../..'\n+ // root = file(\"../../\")\n+ // The folder where the react-native NPM package is. Default is ../../node_modules/react-native\n+ // reactNativeDir = file(\"../../node_modules/react-native\")\n+ // The folder where the react-native Codegen package is. Default is ../../node_modules/@react-native/codegen\n+ // codegenDir = file(\"../../node_modules/@react-native/codegen\")\n \n /* Variants */\n // The list of variants to that are debuggable. For those we're going to\n@@ -57,12 +58,15 @@ react {\n //\n // The list of flags to pass to the Hermes compiler. By default is \"-O\", \"-output-source-map\"\n // hermesFlags = [\"-O\", \"-output-source-map\"]\n+\n+ /* Autolinking */\n+ autolinkLibrariesWithApp()\n }\n \n /**\n- * Set this to true to Run Proguard on Release builds to minify the Java bytecode.\n+ * Set this to true in release builds to optimize the app using [R8](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization).\n */\n-def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInReleaseBuilds') ?: false).toBoolean()\n+def enableMinifyInReleaseBuilds = (findProperty('android.enableMinifyInReleaseBuilds') ?: false).toBoolean()\n \n /**\n * The preferred build flavor of JavaScriptCore (JSC)\n@@ -75,7 +79,7 @@ def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInRelea\n * give correct results when using with locales other than en-US. Note that\n * this variant is about 6MiB larger per architecture than default.\n */\n-def jscFlavor = 'org.webkit:android-jsc:+'\n+def jscFlavor = 'io.github.react-native-community:jsc-android:2026004.+'\n \n android {\n ndkVersion rootProject.ext.ndkVersion\n@@ -91,7 +95,7 @@ android {\n versionCode 1\n versionName \"1.0\"\n \n- buildConfigField(\"boolean\", \"REACT_NATIVE_UNSTABLE_USE_RUNTIME_SCHEDULER_ALWAYS\", (findProperty(\"reactNative.unstable_useRuntimeSchedulerAlways\") ?: true).toString())\n+ buildConfigField \"String\", \"REACT_NATIVE_RELEASE_LEVEL\", \"\\\"${findProperty('reactNativeReleaseLevel') ?: 'stable'}\\\"\"\n }\n signingConfigs {\n debug {\n@@ -109,16 +113,23 @@ android {\n // Caution! In production, you need to generate your own keystore file.\n // see https://reactnative.dev/docs/signed-apk-android.\n signingConfig signingConfigs.debug\n- shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false)\n- minifyEnabled enableProguardInReleaseBuilds\n+ def enableShrinkResources = findProperty('android.enableShrinkResourcesInReleaseBuilds') ?: 'false'\n+ shrinkResources enableShrinkResources.toBoolean()\n+ minifyEnabled enableMinifyInReleaseBuilds\n proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n+ def enablePngCrunchInRelease = findProperty('android.enablePngCrunchInReleaseBuilds') ?: 'true'\n+ crunchPngs enablePngCrunchInRelease.toBoolean()\n }\n }\n packagingOptions {\n jniLibs {\n- useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false)\n+ def enableLegacyPackaging = findProperty('expo.useLegacyPackaging') ?: 'false'\n+ useLegacyPackaging enableLegacyPackaging.toBoolean()\n }\n }\n+ androidResources {\n+ ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:!CVS:!thumbs.db:!picasa.ini:!*~'\n+ }\n }\n \n // Apply static values from `gradle.properties` to the `android.packagingOptions`\n@@ -151,26 +162,21 @@ dependencies {\n \n if (isGifEnabled) {\n // For animated gif support\n- implementation(\"com.facebook.fresco:animated-gif:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-gif:${expoLibs.versions.fresco.get()}\")\n }\n \n if (isWebpEnabled) {\n // For webp support\n- implementation(\"com.facebook.fresco:webpsupport:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:webpsupport:${expoLibs.versions.fresco.get()}\")\n if (isWebpAnimatedEnabled) {\n // Animated webp support\n- implementation(\"com.facebook.fresco:animated-webp:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-webp:${expoLibs.versions.fresco.get()}\")\n }\n }\n \n- implementation(\"com.facebook.react:flipper-integration\")\n-\n if (hermesEnabled.toBoolean()) {\n implementation(\"com.facebook.react:hermes-android\")\n } else {\n implementation jscFlavor\n }\n }\n-\n-apply from: new File([\"node\", \"--print\", \"require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), \"../native_modules.gradle\");\n-applyNativeModulesAppBuildGradle(project)\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\nnew file mode 100644\nindex 00000000000..3ec2507bab7\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\n@@ -0,0 +1,7 @@\n+\n+\n+ \n+\n+ \n+\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\nindex f8d77fc832f..14bdba124ab 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n@@ -1,12 +1,13 @@\n-\n+\n \n \n \n \n \n \n- \n- \n+ \n+ \n \n \n \n@@ -18,15 +19,12 @@\n \n \n \n- \n- \n- \n- \n+ \n+ \n \n \n \n \n \n- \n \n-\n\\ No newline at end of file\n+\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\nindex 8258c40ed4c..cbb5ddb85d0 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n@@ -2,59 +2,39 @@ package com.helloworld\n \n import android.app.Application\n import android.content.res.Configuration\n-import androidx.annotation.NonNull\n \n import com.facebook.react.PackageList\n import com.facebook.react.ReactApplication\n-import com.facebook.react.ReactNativeHost\n+import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative\n import com.facebook.react.ReactPackage\n import com.facebook.react.ReactHost\n-import com.facebook.react.config.ReactFeatureFlags\n-import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load\n-import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost\n-import com.facebook.react.defaults.DefaultReactNativeHost\n-import com.facebook.react.flipper.ReactNativeFlipper\n-import com.facebook.soloader.SoLoader\n+import com.facebook.react.common.ReleaseLevel\n+import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint\n \n import expo.modules.ApplicationLifecycleDispatcher\n-import expo.modules.ReactNativeHostWrapper\n+import expo.modules.ExpoReactHostFactory\n \n class MainApplication : Application(), ReactApplication {\n \n- override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper(\n- this,\n- object : DefaultReactNativeHost(this) {\n- override fun getPackages(): List {\n- // Packages that cannot be autolinked yet can be added manually here, for example:\n- // packages.add(new MyReactNativePackage());\n- return PackageList(this).packages\n- }\n-\n- override fun getJSMainModuleName(): String = \".expo/.virtual-metro-entry\"\n-\n- override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG\n-\n- override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED\n- override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED\n- }\n- )\n-\n- override val reactHost: ReactHost\n- get() = getDefaultReactHost(this.applicationContext, reactNativeHost)\n+ override val reactHost: ReactHost by lazy {\n+ ExpoReactHostFactory.getDefaultReactHost(\n+ context = applicationContext,\n+ packageList =\n+ PackageList(this).packages.apply {\n+ // Packages that cannot be autolinked yet can be added manually here, for example:\n+ // add(MyReactNativePackage())\n+ }\n+ )\n+ }\n \n override fun onCreate() {\n super.onCreate()\n- SoLoader.init(this, false)\n- if (!BuildConfig.REACT_NATIVE_UNSTABLE_USE_RUNTIME_SCHEDULER_ALWAYS) {\n- ReactFeatureFlags.unstable_useRuntimeSchedulerAlways = false\n- }\n- if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {\n- // If you opted-in for the New Architecture, we load the native entry point for this app.\n- load()\n- }\n- if (BuildConfig.DEBUG) {\n- ReactNativeFlipper.initializeFlipper(this, reactNativeHost.reactInstanceManager)\n+ DefaultNewArchitectureEntryPoint.releaseLevel = try {\n+ ReleaseLevel.valueOf(BuildConfig.REACT_NATIVE_RELEASE_LEVEL.uppercase())\n+ } catch (e: IllegalArgumentException) {\n+ ReleaseLevel.STABLE\n }\n+ loadReactNative(this)\n ApplicationLifecycleDispatcher.onApplicationCreate(this)\n }\n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..31df827b18b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..ef243aab6c0\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..e9d5474519c\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..d61da15d241\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..4aeed11d00b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml\nnew file mode 100644\nindex 00000000000..883b2a080f3\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml\n@@ -0,0 +1,6 @@\n+\n+ \n+ \n+ \n+ \n+\n\\ No newline at end of file\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/rn_edit_text_material.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/rn_edit_text_material.xml\nindex 73b37e4d996..5c25e728ea2 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/rn_edit_text_material.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/rn_edit_text_material.xml\n@@ -17,7 +17,8 @@\n android:insetLeft=\"@dimen/abc_edit_text_inset_horizontal_material\"\n android:insetRight=\"@dimen/abc_edit_text_inset_horizontal_material\"\n android:insetTop=\"@dimen/abc_edit_text_inset_top_material\"\n- android:insetBottom=\"@dimen/abc_edit_text_inset_bottom_material\">\n+ android:insetBottom=\"@dimen/abc_edit_text_inset_bottom_material\"\n+ >\n \n \n \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n+\n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n \ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Supporting/Expo.plist b/templates/expo-template-bare-minimum/ios/HelloWorld/Supporting/Expo.plist\nindex 03410dc8b39..6631ffa6f24 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/Supporting/Expo.plist\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/Supporting/Expo.plist\n@@ -2,9 +2,5 @@\n \n \n \n- EXUpdatesSDKVersion\n- YOUR-APP-SDK-VERSION-HERE\n- EXUpdatesURL\n- YOUR-APP-URL-HERE\n \n \ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex b3978b9515d..03484edf156 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -4,42 +4,42 @@ require File.join(File.dirname(`node --print \"require.resolve('react-native/pack\n require 'json'\n podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}\n \n-ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0'\n-ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+def ccache_enabled?(podfile_properties)\n+ # Environment variable takes precedence\n+ return ENV['USE_CCACHE'] == '1' if ENV['USE_CCACHE']\n \n-platform :ios, podfile_properties['ios.deploymentTarget'] || '13.4'\n-install! 'cocoapods',\n- :deterministic_uuids => false\n+ # Fall back to Podfile properties\n+ podfile_properties['apple.ccacheEnabled'] == 'true'\n+end\n \n-prepare_react_native_project!\n+ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+ENV['RCT_USE_RN_DEP'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true'\n+ENV['RCT_USE_PREBUILT_RNCORE'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true'\n+ENV['RCT_HERMES_V1_ENABLED'] ||= '1' if podfile_properties['expo.useHermesV1'] == 'true'\n+platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'\n \n-# If you are using a `react-native-flipper` your iOS build will fail when `NO_FLIPPER=1` is set.\n-# because `react-native-flipper` depends on (FlipperKit,...), which will be excluded. To fix this,\n-# you can also exclude `react-native-flipper` in `react-native.config.js`\n-#\n-# ```js\n-# module.exports = {\n-# dependencies: {\n-# ...(process.env.NO_FLIPPER ? { 'react-native-flipper': { platforms: { ios: null } } } : {}),\n-# }\n-# }\n-# ```\n-flipper_config = FlipperConfiguration.disabled\n-if ENV['NO_FLIPPER'] == '1' then\n- # Explicitly disabled through environment variables\n- flipper_config = FlipperConfiguration.disabled\n-elsif podfile_properties.key?('ios.flipper') then\n- # Configure Flipper in Podfile.properties.json\n- if podfile_properties['ios.flipper'] == 'true' then\n- flipper_config = FlipperConfiguration.enabled([\"Debug\", \"Release\"])\n- elsif podfile_properties['ios.flipper'] != 'false' then\n- flipper_config = FlipperConfiguration.enabled([\"Debug\", \"Release\"], { 'Flipper' => podfile_properties['ios.flipper'] })\n- end\n-end\n+prepare_react_native_project!\n \n target 'HelloWorld' do\n use_expo_modules!\n- config = use_native_modules!\n+\n+ if ENV['EXPO_USE_COMMUNITY_AUTOLINKING'] == '1'\n+ config_command = ['node', '-e', \"process.argv=['', '', 'config'];require('@react-native-community/cli').run()\"];\n+ else\n+ config_command = [\n+ 'node',\n+ '--no-warnings',\n+ '--eval',\n+ 'require(\\'expo/bin/autolinking\\')',\n+ 'expo-modules-autolinking',\n+ 'react-native-config',\n+ '--json',\n+ '--platform',\n+ 'ios'\n+ ]\n+ end\n+\n+ config = use_native_modules!(config_command)\n \n use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks']\n use_frameworks! :linkage => ENV['USE_FRAMEWORKS'].to_sym if ENV['USE_FRAMEWORKS']\n@@ -49,34 +49,15 @@ target 'HelloWorld' do\n :hermes_enabled => podfile_properties['expo.jsEngine'] == nil || podfile_properties['expo.jsEngine'] == 'hermes',\n # An absolute path to your application root.\n :app_path => \"#{Pod::Config.instance.installation_root}/..\",\n- # Note that if you have use_frameworks! enabled, Flipper will not work if enabled\n- :flipper_configuration => flipper_config\n+ :privacy_file_aggregation_enabled => podfile_properties['apple.privacyManifestAggregationEnabled'] != 'false',\n )\n \n post_install do |installer|\n react_native_post_install(\n installer,\n config[:reactNativePath],\n- :mac_catalyst_enabled => false\n+ :mac_catalyst_enabled => false,\n+ :ccache_enabled => ccache_enabled?(podfile_properties),\n )\n-\n- # This is necessary for Xcode 14, because it signs resource bundles by default\n- # when building for devices.\n- installer.target_installation_results.pod_target_installation_results\n- .each do |pod_name, target_installation_result|\n- target_installation_result.resource_bundle_targets.each do |resource_bundle_target|\n- resource_bundle_target.build_configurations.each do |config|\n- config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'\n- end\n- end\n- end\n- end\n-\n- post_integrate do |installer|\n- begin\n- expo_patch_react_imports!(installer)\n- rescue => e\n- Pod::UI.warn e\n- end\n end\n end\ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex f8f8993585f..7d81baed15d 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -1,7 +1,8 @@\n {\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n- \"version\": \"50.0.43\",\n+ \"license\": \"0BSD\",\n+ \"version\": \"55.0.26\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -10,12 +11,9 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~50.0.17\",\n- \"expo-status-bar\": \"~1.11.1\",\n- \"react\": \"18.2.0\",\n- \"react-native\": \"0.73.6\"\n- },\n- \"devDependencies\": {\n- \"@babel/core\": \"^7.20.0\"\n+ \"expo\": \"~55.0.14\",\n+ \"expo-status-bar\": \"~55.0.5\",\n+ \"react\": \"19.2.0\",\n+ \"react-native\": \"0.83.4\"\n }\n }\n","51..55":"diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle\nindex a4b08330359..fc185e53bc3 100644\n--- a/templates/expo-template-bare-minimum/android/app/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/app/build.gradle\n@@ -4,27 +4,6 @@ apply plugin: \"com.facebook.react\"\n \n def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath()\n \n-static def versionToNumber(major, minor, patch) {\n- return patch * 100 + minor * 10000 + major * 1000000\n-}\n-\n-def getRNVersion() {\n- def version = providers.exec {\n- workingDir(projectDir)\n- commandLine(\"node\", \"-e\", \"console.log(require('react-native/package.json').version);\")\n- }.standardOutput.asText.get().trim()\n-\n- def coreVersion = version.split(\"-\")[0]\n- def (major, minor, patch) = coreVersion.tokenize('.').collect { it.toInteger() }\n-\n- return versionToNumber(\n- major,\n- minor,\n- patch\n- )\n-}\n-def rnVersion = getRNVersion()\n-\n /**\n * This is the configuration block to customize your React Native Android app.\n * By default you don't need to apply any configuration, just uncomment the lines you need.\n@@ -32,21 +11,22 @@ def rnVersion = getRNVersion()\n react {\n entryFile = file([\"node\", \"-e\", \"require('expo/scripts/resolveAppEntry')\", projectRoot, \"android\", \"absolute\"].execute(null, rootDir).text.trim())\n reactNativeDir = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n- hermesCommand = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/sdks/hermesc/%OS-BIN%/hermesc\"\n+ hermesCommand = new File([\"node\", \"--print\", \"require.resolve('hermes-compiler/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/hermesc/%OS-BIN%/hermesc\"\n codegenDir = new File([\"node\", \"--print\", \"require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n \n+ enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean()\n // Use Expo CLI to bundle the app, this ensures the Metro config\n // works correctly with Expo projects.\n cliFile = new File([\"node\", \"--print\", \"require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })\"].execute(null, rootDir).text.trim())\n bundleCommand = \"export:embed\"\n \n /* Folders */\n- // The root of your project, i.e. where \"package.json\" lives. Default is '..'\n- // root = file(\"../\")\n- // The folder where the react-native NPM package is. Default is ../node_modules/react-native\n- // reactNativeDir = file(\"../node_modules/react-native\")\n- // The folder where the react-native Codegen package is. Default is ../node_modules/@react-native/codegen\n- // codegenDir = file(\"../node_modules/@react-native/codegen\")\n+ // The root of your project, i.e. where \"package.json\" lives. Default is '../..'\n+ // root = file(\"../../\")\n+ // The folder where the react-native NPM package is. Default is ../../node_modules/react-native\n+ // reactNativeDir = file(\"../../node_modules/react-native\")\n+ // The folder where the react-native Codegen package is. Default is ../../node_modules/@react-native/codegen\n+ // codegenDir = file(\"../../node_modules/@react-native/codegen\")\n \n /* Variants */\n // The list of variants to that are debuggable. For those we're going to\n@@ -79,16 +59,14 @@ react {\n // The list of flags to pass to the Hermes compiler. By default is \"-O\", \"-output-source-map\"\n // hermesFlags = [\"-O\", \"-output-source-map\"]\n \n- if (rnVersion >= versionToNumber(0, 75, 0)) {\n- /* Autolinking */\n- autolinkLibrariesWithApp()\n- }\n+ /* Autolinking */\n+ autolinkLibrariesWithApp()\n }\n \n /**\n- * Set this to true to Run Proguard on Release builds to minify the Java bytecode.\n+ * Set this to true in release builds to optimize the app using [R8](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization).\n */\n-def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInReleaseBuilds') ?: false).toBoolean()\n+def enableMinifyInReleaseBuilds = (findProperty('android.enableMinifyInReleaseBuilds') ?: false).toBoolean()\n \n /**\n * The preferred build flavor of JavaScriptCore (JSC)\n@@ -101,7 +79,7 @@ def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInRelea\n * give correct results when using with locales other than en-US. Note that\n * this variant is about 6MiB larger per architecture than default.\n */\n-def jscFlavor = 'org.webkit:android-jsc:+'\n+def jscFlavor = 'io.github.react-native-community:jsc-android:2026004.+'\n \n android {\n ndkVersion rootProject.ext.ndkVersion\n@@ -116,6 +94,8 @@ android {\n targetSdkVersion rootProject.ext.targetSdkVersion\n versionCode 1\n versionName \"1.0\"\n+\n+ buildConfigField \"String\", \"REACT_NATIVE_RELEASE_LEVEL\", \"\\\"${findProperty('reactNativeReleaseLevel') ?: 'stable'}\\\"\"\n }\n signingConfigs {\n debug {\n@@ -133,17 +113,23 @@ android {\n // Caution! In production, you need to generate your own keystore file.\n // see https://reactnative.dev/docs/signed-apk-android.\n signingConfig signingConfigs.debug\n- shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false)\n- minifyEnabled enableProguardInReleaseBuilds\n+ def enableShrinkResources = findProperty('android.enableShrinkResourcesInReleaseBuilds') ?: 'false'\n+ shrinkResources enableShrinkResources.toBoolean()\n+ minifyEnabled enableMinifyInReleaseBuilds\n proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n- crunchPngs (findProperty('android.enablePngCrunchInReleaseBuilds')?.toBoolean() ?: true)\n+ def enablePngCrunchInRelease = findProperty('android.enablePngCrunchInReleaseBuilds') ?: 'true'\n+ crunchPngs enablePngCrunchInRelease.toBoolean()\n }\n }\n packagingOptions {\n jniLibs {\n- useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false)\n+ def enableLegacyPackaging = findProperty('expo.useLegacyPackaging') ?: 'false'\n+ useLegacyPackaging enableLegacyPackaging.toBoolean()\n }\n }\n+ androidResources {\n+ ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:!CVS:!thumbs.db:!picasa.ini:!*~'\n+ }\n }\n \n // Apply static values from `gradle.properties` to the `android.packagingOptions`\n@@ -176,15 +162,15 @@ dependencies {\n \n if (isGifEnabled) {\n // For animated gif support\n- implementation(\"com.facebook.fresco:animated-gif:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-gif:${expoLibs.versions.fresco.get()}\")\n }\n \n if (isWebpEnabled) {\n // For webp support\n- implementation(\"com.facebook.fresco:webpsupport:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:webpsupport:${expoLibs.versions.fresco.get()}\")\n if (isWebpAnimatedEnabled) {\n // Animated webp support\n- implementation(\"com.facebook.fresco:animated-webp:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-webp:${expoLibs.versions.fresco.get()}\")\n }\n }\n \n@@ -194,8 +180,3 @@ dependencies {\n implementation jscFlavor\n }\n }\n-\n-if (rnVersion < versionToNumber(0, 75, 0)) {\n- apply from: new File([\"node\", \"--print\", \"require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), \"../native_modules.gradle\");\n- applyNativeModulesAppBuildGradle(project)\n-}\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\nnew file mode 100644\nindex 00000000000..3ec2507bab7\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\n@@ -0,0 +1,7 @@\n+\n+\n+ \n+\n+ \n+\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\nindex 52175508263..14bdba124ab 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n@@ -1,12 +1,13 @@\n-\n+\n \n \n \n \n \n \n- \n- \n+ \n+ \n \n \n \n@@ -18,13 +19,12 @@\n \n \n \n- \n- \n+ \n+ \n \n \n \n \n \n- \n \n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\nindex 5f6e05ce071..cbb5ddb85d0 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n@@ -5,46 +5,36 @@ import android.content.res.Configuration\n \n import com.facebook.react.PackageList\n import com.facebook.react.ReactApplication\n-import com.facebook.react.ReactNativeHost\n+import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative\n import com.facebook.react.ReactPackage\n import com.facebook.react.ReactHost\n-import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load\n-import com.facebook.react.defaults.DefaultReactNativeHost\n-import com.facebook.soloader.SoLoader\n+import com.facebook.react.common.ReleaseLevel\n+import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint\n \n import expo.modules.ApplicationLifecycleDispatcher\n-import expo.modules.ReactNativeHostWrapper\n+import expo.modules.ExpoReactHostFactory\n \n class MainApplication : Application(), ReactApplication {\n \n- override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper(\n- this,\n- object : DefaultReactNativeHost(this) {\n- override fun getPackages(): List {\n- // Packages that cannot be autolinked yet can be added manually here, for example:\n- // packages.add(new MyReactNativePackage());\n- return PackageList(this).packages\n- }\n-\n- override fun getJSMainModuleName(): String = \".expo/.virtual-metro-entry\"\n-\n- override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG\n-\n- override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED\n- override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED\n- }\n- )\n-\n- override val reactHost: ReactHost\n- get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost)\n+ override val reactHost: ReactHost by lazy {\n+ ExpoReactHostFactory.getDefaultReactHost(\n+ context = applicationContext,\n+ packageList =\n+ PackageList(this).packages.apply {\n+ // Packages that cannot be autolinked yet can be added manually here, for example:\n+ // add(MyReactNativePackage())\n+ }\n+ )\n+ }\n \n override fun onCreate() {\n super.onCreate()\n- SoLoader.init(this, false)\n- if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {\n- // If you opted-in for the New Architecture, we load the native entry point for this app.\n- load()\n+ DefaultNewArchitectureEntryPoint.releaseLevel = try {\n+ ReleaseLevel.valueOf(BuildConfig.REACT_NATIVE_RELEASE_LEVEL.uppercase())\n+ } catch (e: IllegalArgumentException) {\n+ ReleaseLevel.STABLE\n }\n+ loadReactNative(this)\n ApplicationLifecycleDispatcher.onApplicationCreate(this)\n }\n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..31df827b18b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..ef243aab6c0\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..e9d5474519c\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..d61da15d241\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..4aeed11d00b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml\nnew file mode 100644\nindex 00000000000..883b2a080f3\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml\n@@ -0,0 +1,6 @@\n+\n+ \n+ \n+ \n+ \n+\n\\ No newline at end of file\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..a2f5908281d\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..1b523998081\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..ff10afd6e18\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..115a4c768a2\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..dcd3cd80833\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..459ca609d3a\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..8ca12fe024b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..8e19b410a1b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..b824ebdd48d\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..4c19a13c239\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\nindex 90bcc87b8e8..26f3404be26 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n@@ -1,15 +1,8 @@\n \n- \n- \n \n \ndiff --git a/templates/expo-template-bare-minimum/android/build.gradle b/templates/expo-template-bare-minimum/android/build.gradle\nindex 932bf7b34ba..0554dd156c1 100644\n--- a/templates/expo-template-bare-minimum/android/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/build.gradle\n@@ -1,41 +1,24 @@\n // Top-level build file where you can add configuration options common to all sub-projects/modules.\n \n buildscript {\n- ext {\n- buildToolsVersion = findProperty('android.buildToolsVersion') ?: '34.0.0'\n- minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '23')\n- compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '34')\n- targetSdkVersion = Integer.parseInt(findProperty('android.targetSdkVersion') ?: '34')\n- kotlinVersion = findProperty('android.kotlinVersion') ?: '1.9.23'\n-\n- ndkVersion = \"26.1.10909125\"\n- }\n- repositories {\n- google()\n- mavenCentral()\n- }\n- dependencies {\n- classpath('com.android.tools.build:gradle')\n- classpath('com.facebook.react:react-native-gradle-plugin')\n- classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')\n- }\n+ repositories {\n+ google()\n+ mavenCentral()\n+ }\n+ dependencies {\n+ classpath('com.android.tools.build:gradle')\n+ classpath('com.facebook.react:react-native-gradle-plugin')\n+ classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')\n+ }\n }\n \n-apply plugin: \"com.facebook.react.rootproject\"\n-\n allprojects {\n- repositories {\n- maven {\n- // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n- url(new File(['node', '--print', \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim(), '../android'))\n- }\n- maven {\n- // Android JSC is installed from npm\n- url(new File(['node', '--print', \"require.resolve('jsc-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), '../dist'))\n- }\n-\n- google()\n- mavenCentral()\n- maven { url 'https://www.jitpack.io' }\n- }\n+ repositories {\n+ google()\n+ mavenCentral()\n+ maven { url 'https://www.jitpack.io' }\n+ }\n }\n+\n+apply plugin: \"expo-root-project\"\n+apply plugin: \"com.facebook.react.rootproject\"\ndiff --git a/templates/expo-template-bare-minimum/android/gradle.properties b/templates/expo-template-bare-minimum/android/gradle.properties\nindex 40220def8da..97271b9456f 100644\n--- a/templates/expo-template-bare-minimum/android/gradle.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle.properties\n@@ -15,16 +15,13 @@ org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m\n # When configured, Gradle will run in incubating parallel mode.\n # This option should only be used with decoupled projects. More details, visit\n # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n-# org.gradle.parallel=true\n+org.gradle.parallel=true\n \n # AndroidX package structure to make it clearer which packages are bundled with the\n # Android operating system, and which are packaged with your app's APK\n # https://developer.android.com/topic/libraries/support-library/androidx-rn\n android.useAndroidX=true\n \n-# Automatically convert third-party libraries to use AndroidX\n-android.enableJetifier=true\n-\n # Enable AAPT2 PNG crunching\n android.enablePngCrunchInReleaseBuilds=true\n \n@@ -38,12 +35,17 @@ reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64\n # your application. You should enable this flag either if you want\n # to write custom TurboModules/Fabric components OR use libraries that\n # are providing them.\n-newArchEnabled=false\n+newArchEnabled=true\n \n # Use this property to enable or disable the Hermes JS engine.\n # If set to false, you will be using JSC instead.\n hermesEnabled=true\n \n+# Use this property to enable edge-to-edge display support.\n+# This allows your app to draw behind system bars for an immersive UI.\n+# Note: Only works with ReactActivity and should not be used with custom Activity.\n+edgeToEdgeEnabled=true\n+\n # Enable GIF support in React Native images (~200 B increase)\n expo.gif.enabled=true\n # Enable webp support in React Native images (~85 KB increase)\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar\nindex e6441136f3d..8bdaf60c75a 100644\nBinary files a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar and b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar differ\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\nindex 6f7a6eb33e8..2a84e188b85 100644\n--- a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n@@ -1,6 +1,6 @@\n distributionBase=GRADLE_USER_HOME\n distributionPath=wrapper/dists\n-distributionUrl=https\\://services.gradle.org/distributions/gradle-8.8-all.zip\n+distributionUrl=https\\://services.gradle.org/distributions/gradle-9.0.0-bin.zip\n networkTimeout=10000\n validateDistributionUrl=true\n zipStoreBase=GRADLE_USER_HOME\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew b/templates/expo-template-bare-minimum/android/gradlew\nindex 1aa94a42690..bbb00327904 100755\n--- a/templates/expo-template-bare-minimum/android/gradlew\n+++ b/templates/expo-template-bare-minimum/android/gradlew\n@@ -1,7 +1,7 @@\n #!/bin/sh\n \n #\n-# Copyright © 2015-2021 the original authors.\n+# Copyright © 2015 the original authors.\n #\n # Licensed under the Apache License, Version 2.0 (the \"License\");\n # you may not use this file except in compliance with the License.\n@@ -15,6 +15,8 @@\n # See the License for the specific language governing permissions and\n # limitations under the License.\n #\n+# SPDX-License-Identifier: Apache-2.0\n+#\n \n ##############################################################################\n #\n@@ -55,7 +57,7 @@\n # Darwin, MinGW, and NonStop.\n #\n # (3) This script is generated from the Groovy template\n-# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt\n+# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt\n # within the Gradle project.\n #\n # You can find Gradle at https://github.com/gradle/gradle/.\n@@ -84,7 +86,7 @@ done\n # shellcheck disable=SC2034\n APP_BASE_NAME=${0##*/}\n # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)\n-APP_HOME=$( cd \"${APP_HOME:-./}\" > /dev/null && pwd -P ) || exit\n+APP_HOME=$( cd -P \"${APP_HOME:-./}\" > /dev/null && printf '%s\\n' \"$PWD\" ) || exit\n \n # Use the maximum available, or set MAX_FD != -1 to use that value.\n MAX_FD=maximum\n@@ -112,7 +114,7 @@ case \"$( uname )\" in #(\n NONSTOP* ) nonstop=true ;;\n esac\n \n-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n+CLASSPATH=\"\\\\\\\"\\\\\\\"\"\n \n \n # Determine the Java command to use to start the JVM.\n@@ -211,7 +213,7 @@ DEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n set -- \\\n \"-Dorg.gradle.appname=$APP_BASE_NAME\" \\\n -classpath \"$CLASSPATH\" \\\n- org.gradle.wrapper.GradleWrapperMain \\\n+ -jar \"$APP_HOME/gradle/wrapper/gradle-wrapper.jar\" \\\n \"$@\"\n \n # Stop when \"xargs\" is not available.\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew.bat b/templates/expo-template-bare-minimum/android/gradlew.bat\nindex 7101f8e4676..5eed7ee8452 100644\n--- a/templates/expo-template-bare-minimum/android/gradlew.bat\n+++ b/templates/expo-template-bare-minimum/android/gradlew.bat\n@@ -13,6 +13,8 @@\n @rem See the License for the specific language governing permissions and\r\n @rem limitations under the License.\r\n @rem\r\n+@rem SPDX-License-Identifier: Apache-2.0\r\n+@rem\r\n \r\n @if \"%DEBUG%\"==\"\" @echo off\r\n @rem ##########################################################################\r\n@@ -68,11 +70,11 @@ goto fail\n :execute\r\n @rem Setup the command line\r\n \r\n-set CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\r\n+set CLASSPATH=\r\n \r\n \r\n @rem Execute Gradle\r\n-\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\r\n+\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" -jar \"%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\" %*\r\n \r\n :end\r\n @rem End local scope for the variables with windows NT shell\r\ndiff --git a/templates/expo-template-bare-minimum/android/settings.gradle b/templates/expo-template-bare-minimum/android/settings.gradle\nindex 80b1bc3267b..7fe91512213 100644\n--- a/templates/expo-template-bare-minimum/android/settings.gradle\n+++ b/templates/expo-template-bare-minimum/android/settings.gradle\n@@ -1,66 +1,39 @@\n pluginManagement {\n- def version = providers.exec {\n- commandLine(\"node\", \"-e\", \"console.log(require('react-native/package.json').version);\")\n- }.standardOutput.asText.get().trim()\n- def (_, reactNativeMinor, reactNativePatch) = version.split(\"-\")[0].tokenize('.').collect { it.toInteger() }\n-\n- includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().toString())\n- if(reactNativeMinor == 74 && reactNativePatch <= 3){\n- includeBuild(\"react-settings-plugin\")\n- }\n+ def reactNativeGradlePlugin = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\")\n+ }.standardOutput.asText.get().trim()\n+ ).getParentFile().absolutePath\n+ includeBuild(reactNativeGradlePlugin)\n+ \n+ def expoPluginsPath = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('expo-modules-autolinking/package.json', { paths: [require.resolve('expo/package.json')] })\")\n+ }.standardOutput.asText.get().trim(),\n+ \"../android/expo-gradle-plugin\"\n+ ).absolutePath\n+ includeBuild(expoPluginsPath)\n }\n \n-plugins { id(\"com.facebook.react.settings\") }\n-\n-def getRNMinorVersion() {\n- def version = providers.exec {\n- commandLine(\"node\", \"-e\", \"console.log(require('react-native/package.json').version);\")\n- }.standardOutput.asText.get().trim()\n-\n- def coreVersion = version.split(\"-\")[0]\n- def (major, minor, patch) = coreVersion.tokenize('.').collect { it.toInteger() }\n-\n- return minor\n+plugins {\n+ id(\"com.facebook.react.settings\")\n+ id(\"expo-autolinking-settings\")\n }\n \n-if (getRNMinorVersion() >= 75) {\n- extensions.configure(com.facebook.react.ReactSettingsExtension) { ex ->\n- if (System.getenv('EXPO_UNSTABLE_CORE_AUTOLINKING') == '1') {\n- println('\\u001B[32mUsing expo-modules-autolinking as core autolinking source\\u001B[0m')\n- def command = [\n- 'node',\n- '--no-warnings',\n- '--eval',\n- 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n- 'react-native-config',\n- '--json',\n- '--platform',\n- 'android'\n- ].toList()\n- ex.autolinkLibrariesFromCommand(command)\n- } else {\n- ex.autolinkLibrariesFromCommand()\n- }\n+extensions.configure(com.facebook.react.ReactSettingsExtension) { ex ->\n+ if (System.getenv('EXPO_USE_COMMUNITY_AUTOLINKING') == '1') {\n+ ex.autolinkLibrariesFromCommand()\n+ } else {\n+ ex.autolinkLibrariesFromCommand(expoAutolinking.rnConfigCommand)\n }\n }\n+expoAutolinking.useExpoModules()\n \n rootProject.name = 'HelloWorld'\n \n-dependencyResolutionManagement {\n- versionCatalogs {\n- reactAndroidLibs {\n- from(files(new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim(), \"../gradle/libs.versions.toml\")))\n- }\n- }\n-}\n-\n-apply from: new File([\"node\", \"--print\", \"require.resolve('expo/package.json')\"].execute(null, rootDir).text.trim(), \"../scripts/autolinking.gradle\");\n-useExpoModules()\n-\n-if (getRNMinorVersion() < 75) {\n- apply from: new File([\"node\", \"--print\", \"require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), \"../native_modules.gradle\");\n- applyNativeModulesSettingsGradle(settings)\n-}\n+expoAutolinking.useExpoVersionCatalog()\n \n include ':app'\n-includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile())\n+includeBuild(expoAutolinking.reactNativeGradlePlugin)\ndiff --git a/templates/expo-template-bare-minimum/gitignore b/templates/expo-template-bare-minimum/gitignore\nindex 05647d55c75..d16e1efbb3f 100644\n--- a/templates/expo-template-bare-minimum/gitignore\n+++ b/templates/expo-template-bare-minimum/gitignore\n@@ -7,6 +7,7 @@ node_modules/\n .expo/\n dist/\n web-build/\n+expo-env.d.ts\n \n # Native\n *.orig.*\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\nindex f945940c256..8a390c764af 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n@@ -3,33 +3,25 @@\n \tarchiveVersion = 1;\n \tclasses = {\n \t};\n-\tobjectVersion = 46;\n+\tobjectVersion = 54;\n \tobjects = {\n \n /* Begin PBXBuildFile section */\n-\t\t13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };\n \t\t13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };\n-\t\t13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };\n \t\t3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; };\n-\t\t96905EF65AED1B983A6B3ABC /* libPods-HelloWorld.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */; };\n-\t\tB18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; };\n \t\tBB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; };\n+\t\tF11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F11748412D0307B40044C1D9 /* AppDelegate.swift */; };\n /* End PBXBuildFile section */\n \n /* Begin PBXFileReference section */\n \t\t13B07F961A680F5B00A75B9A /* HelloWorld.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloWorld.app; sourceTree = BUILT_PRODUCTS_DIR; };\n-\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = HelloWorld/AppDelegate.h; sourceTree = \"\"; };\n-\t\t13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = HelloWorld/AppDelegate.mm; sourceTree = \"\"; };\n \t\t13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = HelloWorld/Images.xcassets; sourceTree = \"\"; };\n \t\t13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = HelloWorld/Info.plist; sourceTree = \"\"; };\n-\t\t13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = HelloWorld/main.m; sourceTree = \"\"; };\n-\t\t58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-HelloWorld.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n-\t\t6C2E3173556A471DD304B334 /* 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 = \"\"; };\n-\t\t7A4D352CD337FB3A3BF06240 /* 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 = \"\"; };\n \t\tAA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = HelloWorld/SplashScreen.storyboard; sourceTree = \"\"; };\n \t\tBB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = \"\"; };\n \t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };\n-\t\tFAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = \"Pods/Target Support Files/Pods-HelloWorld/ExpoModulesProvider.swift\"; sourceTree = \"\"; };\n+\t\tF11748412D0307B40044C1D9 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = HelloWorld/AppDelegate.swift; sourceTree = \"\"; };\n+\t\tF11748442D0722820044C1D9 /* HelloWorld-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = \"HelloWorld-Bridging-Header.h\"; path = \"HelloWorld/HelloWorld-Bridging-Header.h\"; sourceTree = \"\"; };\n /* End PBXFileReference section */\n \n /* Begin PBXFrameworksBuildPhase section */\n@@ -37,7 +29,6 @@\n \t\t\tisa = PBXFrameworksBuildPhase;\n \t\t\tbuildActionMask = 2147483647;\n \t\t\tfiles = (\n-\t\t\t\t96905EF65AED1B983A6B3ABC /* libPods-HelloWorld.a in Frameworks */,\n \t\t\t);\n \t\t\trunOnlyForDeploymentPostprocessing = 0;\n \t\t};\n@@ -47,12 +38,11 @@\n \t\t13B07FAE1A68108700A75B9A /* HelloWorld */ = {\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n+\t\t\t\tF11748412D0307B40044C1D9 /* AppDelegate.swift */,\n+\t\t\t\tF11748442D0722820044C1D9 /* HelloWorld-Bridging-Header.h */,\n \t\t\t\tBB2F792B24A3F905000567C9 /* Supporting */,\n-\t\t\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */,\n-\t\t\t\t13B07FB01A68108700A75B9A /* AppDelegate.mm */,\n \t\t\t\t13B07FB51A68108700A75B9A /* Images.xcassets */,\n \t\t\t\t13B07FB61A68108700A75B9A /* Info.plist */,\n-\t\t\t\t13B07FB71A68108700A75B9A /* main.m */,\n \t\t\t\tAA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */,\n \t\t\t);\n \t\t\tname = HelloWorld;\n@@ -62,7 +52,6 @@\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n \t\t\t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */,\n-\t\t\t\t58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */,\n \t\t\t);\n \t\t\tname = Frameworks;\n \t\t\tsourceTree = \"\";\n@@ -81,8 +70,6 @@\n \t\t\t\t832341AE1AAA6A7D00B99B32 /* Libraries */,\n \t\t\t\t83CBBA001A601CBA00E9B192 /* Products */,\n \t\t\t\t2D16E6871FA4F8E400B85C8A /* Frameworks */,\n-\t\t\t\tD65327D7A22EEC0BE12398D9 /* Pods */,\n-\t\t\t\tD7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */,\n \t\t\t);\n \t\t\tindentWidth = 2;\n \t\t\tsourceTree = \"\";\n@@ -97,14 +84,6 @@\n \t\t\tname = Products;\n \t\t\tsourceTree = \"\";\n \t\t};\n-\t\t92DBD88DE9BF7D494EA9DA96 /* HelloWorld */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\tFAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */,\n-\t\t\t);\n-\t\t\tname = HelloWorld;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n \t\tBB2F792B24A3F905000567C9 /* Supporting */ = {\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n@@ -114,23 +93,6 @@\n \t\t\tpath = HelloWorld/Supporting;\n \t\t\tsourceTree = \"\";\n \t\t};\n-\t\tD65327D7A22EEC0BE12398D9 /* Pods */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\t6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */,\n-\t\t\t\t7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */,\n-\t\t\t);\n-\t\t\tpath = Pods;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n-\t\tD7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\t92DBD88DE9BF7D494EA9DA96 /* HelloWorld */,\n-\t\t\t);\n-\t\t\tname = ExpoModulesProviders;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n /* End PBXGroup section */\n \n /* Begin PBXNativeTarget section */\n@@ -206,6 +168,8 @@\n \t\t\tfiles = (\n \t\t\t);\n \t\t\tinputPaths = (\n+\t\t\t\t\"$(SRCROOT)/.xcode.env\",\n+\t\t\t\t\"$(SRCROOT)/.xcode.env.local\",\n \t\t\t);\n \t\t\tname = \"Bundle React Native code and images\";\n \t\t\toutputPaths = (\n@@ -265,9 +229,7 @@\n \t\t\tisa = PBXSourcesBuildPhase;\n \t\t\tbuildActionMask = 2147483647;\n \t\t\tfiles = (\n-\t\t\t\t13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,\n-\t\t\t\t13B07FC11A68108700A75B9A /* main.m in Sources */,\n-\t\t\t\tB18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */,\n+\t\t\t\tF11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */,\n \t\t\t);\n \t\t\trunOnlyForDeploymentPostprocessing = 0;\n \t\t};\n@@ -276,7 +238,6 @@\n /* Begin XCBuildConfiguration section */\n \t\t13B07F941A680F5B00A75B9A /* Debug */ = {\n \t\t\tisa = XCBuildConfiguration;\n-\t\t\tbaseConfigurationReference = 6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */;\n \t\t\tbuildSettings = {\n \t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n@@ -287,8 +248,11 @@\n \t\t\t\t\t\"FB_SONARKIT_ENABLED=1\",\n \t\t\t\t);\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t\t\"@executable_path/Frameworks\",\n+\t\t\t\t);\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -297,6 +261,7 @@\n \t\t\t\t);\n \t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = org.name.HelloWorld;\n \t\t\t\tPRODUCT_NAME = HelloWorld;\n+\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"HelloWorld/HelloWorld-Bridging-Header.h\";\n \t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n \t\t\t\tSWIFT_VERSION = 5.0;\n \t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n@@ -305,14 +270,16 @@\n \t\t};\n \t\t13B07F951A680F5B00A75B9A /* Release */ = {\n \t\t\tisa = XCBuildConfiguration;\n-\t\t\tbaseConfigurationReference = 7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */;\n \t\t\tbuildSettings = {\n \t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n \t\t\t\tCURRENT_PROJECT_VERSION = 1;\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t\t\"@executable_path/Frameworks\",\n+\t\t\t\t);\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -321,6 +288,7 @@\n \t\t\t\t);\n \t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = org.name.HelloWorld;\n \t\t\t\tPRODUCT_NAME = HelloWorld;\n+\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"HelloWorld/HelloWorld-Bridging-Header.h\";\n \t\t\t\tSWIFT_VERSION = 5.0;\n \t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n \t\t\t};\n@@ -373,8 +341,11 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t/usr/lib/swift,\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t);\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n \t\t\t\tONLY_ACTIVE_ARCH = YES;\n@@ -422,8 +393,11 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t/usr/lib/swift,\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t);\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n \t\t\t\tSDKROOT = iphoneos;\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\nnew file mode 100644\nindex 00000000000..9670a1ff07e\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\n@@ -0,0 +1,69 @@\n+internal import Expo\n+import React\n+import ReactAppDependencyProvider\n+\n+@main\n+class AppDelegate: ExpoAppDelegate {\n+ var window: UIWindow?\n+\n+ var reactNativeDelegate: ExpoReactNativeFactoryDelegate?\n+ var reactNativeFactory: RCTReactNativeFactory?\n+\n+ public override func application(\n+ _ application: UIApplication,\n+ didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil\n+ ) -> Bool {\n+ let delegate = ReactNativeDelegate()\n+ let factory = ExpoReactNativeFactory(delegate: delegate)\n+ delegate.dependencyProvider = RCTAppDependencyProvider()\n+\n+ reactNativeDelegate = delegate\n+ reactNativeFactory = factory\n+\n+#if os(iOS) || os(tvOS)\n+ window = UIWindow(frame: UIScreen.main.bounds)\n+ factory.startReactNative(\n+ withModuleName: \"main\",\n+ in: window,\n+ launchOptions: launchOptions)\n+#endif\n+\n+ return super.application(application, didFinishLaunchingWithOptions: launchOptions)\n+ }\n+\n+ // Linking API\n+ public override func application(\n+ _ app: UIApplication,\n+ open url: URL,\n+ options: [UIApplication.OpenURLOptionsKey: Any] = [:]\n+ ) -> Bool {\n+ return super.application(app, open: url, options: options) || RCTLinkingManager.application(app, open: url, options: options)\n+ }\n+\n+ // Universal Links\n+ public override func application(\n+ _ application: UIApplication,\n+ continue userActivity: NSUserActivity,\n+ restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void\n+ ) -> Bool {\n+ let result = RCTLinkingManager.application(application, continue: userActivity, restorationHandler: restorationHandler)\n+ return super.application(application, continue: userActivity, restorationHandler: restorationHandler) || result\n+ }\n+}\n+\n+class ReactNativeDelegate: ExpoReactNativeFactoryDelegate {\n+ // Extension point for config-plugins\n+\n+ override func sourceURL(for bridge: RCTBridge) -> URL? {\n+ // needed to return the correct URL for expo-dev-client.\n+ bridge.bundleURL ?? bundleURL()\n+ }\n+\n+ override func bundleURL() -> URL? {\n+#if DEBUG\n+ return RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: \".expo/.virtual-metro-entry\")\n+#else\n+ return Bundle.main.url(forResource: \"main\", withExtension: \"jsbundle\")\n+#endif\n+ }\n+}\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h b/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h\nnew file mode 100644\nindex 00000000000..8361941afc2\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h\n@@ -0,0 +1,3 @@\n+//\n+// Use this file to import your target's public headers that you would like to expose to Swift.\n+//\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json\nnew file mode 100644\nindex 00000000000..255637e0fdb\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json\n@@ -0,0 +1,21 @@\n+{\n+ \"images\" : [\n+ {\n+ \"filename\" : \"SplashScreenLegacy.png\",\n+ \"idiom\" : \"universal\",\n+ \"scale\" : \"1x\"\n+ },\n+ {\n+ \"idiom\" : \"universal\",\n+ \"scale\" : \"2x\"\n+ },\n+ {\n+ \"idiom\" : \"universal\",\n+ \"scale\" : \"3x\"\n+ }\n+ ],\n+ \"info\" : {\n+ \"author\" : \"xcode\",\n+ \"version\" : 1\n+ }\n+}\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png\nnew file mode 100644\nindex 00000000000..bbf8e9e6016\nBinary files /dev/null and b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png differ\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist b/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist\nindex 53d78e89033..596dc7ce6b5 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist\n@@ -24,6 +24,8 @@\n \t1\n \tLSRequiresIPhoneOS\n \t\n+\tLSMinimumSystemVersion\n+\t12.0\n \tNSAppTransportSecurity\n \t\n \t\tNSAllowsArbitraryLoads\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\nindex 24eec3df5cb..58d21796e1d 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n@@ -1,91 +1,47 @@\n \n-\n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n+\n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n \ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex 57c1dd38343..03484edf156 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -4,39 +4,42 @@ require File.join(File.dirname(`node --print \"require.resolve('react-native/pack\n require 'json'\n podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}\n \n-ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0'\n-ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+def ccache_enabled?(podfile_properties)\n+ # Environment variable takes precedence\n+ return ENV['USE_CCACHE'] == '1' if ENV['USE_CCACHE']\n \n-use_autolinking_method_symbol = ('use' + '_native' + '_modules!').to_sym\n-origin_autolinking_method = self.method(use_autolinking_method_symbol)\n-self.define_singleton_method(use_autolinking_method_symbol) do |*args|\n- if ENV['EXPO_UNSTABLE_CORE_AUTOLINKING'] == '1'\n- Pod::UI.puts('Using expo-modules-autolinking as core autolinking source'.green)\n+ # Fall back to Podfile properties\n+ podfile_properties['apple.ccacheEnabled'] == 'true'\n+end\n+\n+ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+ENV['RCT_USE_RN_DEP'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true'\n+ENV['RCT_USE_PREBUILT_RNCORE'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true'\n+ENV['RCT_HERMES_V1_ENABLED'] ||= '1' if podfile_properties['expo.useHermesV1'] == 'true'\n+platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'\n+\n+prepare_react_native_project!\n+\n+target 'HelloWorld' do\n+ use_expo_modules!\n+\n+ if ENV['EXPO_USE_COMMUNITY_AUTOLINKING'] == '1'\n+ config_command = ['node', '-e', \"process.argv=['', '', 'config'];require('@react-native-community/cli').run()\"];\n+ else\n config_command = [\n 'node',\n '--no-warnings',\n '--eval',\n- 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n+ 'require(\\'expo/bin/autolinking\\')',\n+ 'expo-modules-autolinking',\n 'react-native-config',\n '--json',\n '--platform',\n 'ios'\n ]\n- origin_autolinking_method.call(config_command)\n- else\n- origin_autolinking_method.call()\n end\n-end\n-\n-platform :ios, podfile_properties['ios.deploymentTarget'] || '13.4'\n-install! 'cocoapods',\n- :deterministic_uuids => false\n \n-prepare_react_native_project!\n-\n-target 'HelloWorld' do\n- use_expo_modules!\n- config = use_native_modules!\n+ config = use_native_modules!(config_command)\n \n use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks']\n use_frameworks! :linkage => ENV['USE_FRAMEWORKS'].to_sym if ENV['USE_FRAMEWORKS']\n@@ -54,26 +57,7 @@ target 'HelloWorld' do\n installer,\n config[:reactNativePath],\n :mac_catalyst_enabled => false,\n- :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true',\n+ :ccache_enabled => ccache_enabled?(podfile_properties),\n )\n-\n- # This is necessary for Xcode 14, because it signs resource bundles by default\n- # when building for devices.\n- installer.target_installation_results.pod_target_installation_results\n- .each do |pod_name, target_installation_result|\n- target_installation_result.resource_bundle_targets.each do |resource_bundle_target|\n- resource_bundle_target.build_configurations.each do |config|\n- config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'\n- end\n- end\n- end\n- end\n-\n- post_integrate do |installer|\n- begin\n- expo_patch_react_imports!(installer)\n- rescue => e\n- Pod::UI.warn e\n- end\n end\n end\ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex 563853071f0..7d81baed15d 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -1,7 +1,8 @@\n {\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n- \"version\": \"51.0.56\",\n+ \"license\": \"0BSD\",\n+ \"version\": \"55.0.26\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -10,12 +11,9 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~51.0.28\",\n- \"expo-status-bar\": \"~1.12.1\",\n- \"react\": \"18.2.0\",\n- \"react-native\": \"0.74.5\"\n- },\n- \"devDependencies\": {\n- \"@babel/core\": \"^7.20.0\"\n+ \"expo\": \"~55.0.14\",\n+ \"expo-status-bar\": \"~55.0.5\",\n+ \"react\": \"19.2.0\",\n+ \"react-native\": \"0.83.4\"\n }\n }\n","52..55":"diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle\nindex 84879d83acd..fc185e53bc3 100644\n--- a/templates/expo-template-bare-minimum/android/app/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/app/build.gradle\n@@ -11,9 +11,10 @@ def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath()\n react {\n entryFile = file([\"node\", \"-e\", \"require('expo/scripts/resolveAppEntry')\", projectRoot, \"android\", \"absolute\"].execute(null, rootDir).text.trim())\n reactNativeDir = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n- hermesCommand = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/sdks/hermesc/%OS-BIN%/hermesc\"\n+ hermesCommand = new File([\"node\", \"--print\", \"require.resolve('hermes-compiler/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/hermesc/%OS-BIN%/hermesc\"\n codegenDir = new File([\"node\", \"--print\", \"require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n \n+ enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean()\n // Use Expo CLI to bundle the app, this ensures the Metro config\n // works correctly with Expo projects.\n cliFile = new File([\"node\", \"--print\", \"require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })\"].execute(null, rootDir).text.trim())\n@@ -63,9 +64,9 @@ react {\n }\n \n /**\n- * Set this to true to Run Proguard on Release builds to minify the Java bytecode.\n+ * Set this to true in release builds to optimize the app using [R8](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization).\n */\n-def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInReleaseBuilds') ?: false).toBoolean()\n+def enableMinifyInReleaseBuilds = (findProperty('android.enableMinifyInReleaseBuilds') ?: false).toBoolean()\n \n /**\n * The preferred build flavor of JavaScriptCore (JSC)\n@@ -78,7 +79,7 @@ def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInRelea\n * give correct results when using with locales other than en-US. Note that\n * this variant is about 6MiB larger per architecture than default.\n */\n-def jscFlavor = 'org.webkit:android-jsc:+'\n+def jscFlavor = 'io.github.react-native-community:jsc-android:2026004.+'\n \n android {\n ndkVersion rootProject.ext.ndkVersion\n@@ -93,6 +94,8 @@ android {\n targetSdkVersion rootProject.ext.targetSdkVersion\n versionCode 1\n versionName \"1.0\"\n+\n+ buildConfigField \"String\", \"REACT_NATIVE_RELEASE_LEVEL\", \"\\\"${findProperty('reactNativeReleaseLevel') ?: 'stable'}\\\"\"\n }\n signingConfigs {\n debug {\n@@ -110,15 +113,18 @@ android {\n // Caution! In production, you need to generate your own keystore file.\n // see https://reactnative.dev/docs/signed-apk-android.\n signingConfig signingConfigs.debug\n- shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false)\n- minifyEnabled enableProguardInReleaseBuilds\n+ def enableShrinkResources = findProperty('android.enableShrinkResourcesInReleaseBuilds') ?: 'false'\n+ shrinkResources enableShrinkResources.toBoolean()\n+ minifyEnabled enableMinifyInReleaseBuilds\n proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n- crunchPngs (findProperty('android.enablePngCrunchInReleaseBuilds')?.toBoolean() ?: true)\n+ def enablePngCrunchInRelease = findProperty('android.enablePngCrunchInReleaseBuilds') ?: 'true'\n+ crunchPngs enablePngCrunchInRelease.toBoolean()\n }\n }\n packagingOptions {\n jniLibs {\n- useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false)\n+ def enableLegacyPackaging = findProperty('expo.useLegacyPackaging') ?: 'false'\n+ useLegacyPackaging enableLegacyPackaging.toBoolean()\n }\n }\n androidResources {\n@@ -156,15 +162,15 @@ dependencies {\n \n if (isGifEnabled) {\n // For animated gif support\n- implementation(\"com.facebook.fresco:animated-gif:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-gif:${expoLibs.versions.fresco.get()}\")\n }\n \n if (isWebpEnabled) {\n // For webp support\n- implementation(\"com.facebook.fresco:webpsupport:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:webpsupport:${expoLibs.versions.fresco.get()}\")\n if (isWebpAnimatedEnabled) {\n // Animated webp support\n- implementation(\"com.facebook.fresco:animated-webp:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-webp:${expoLibs.versions.fresco.get()}\")\n }\n }\n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\nnew file mode 100644\nindex 00000000000..3ec2507bab7\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\n@@ -0,0 +1,7 @@\n+\n+\n+ \n+\n+ \n+\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\nindex 150248b6b3c..14bdba124ab 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n@@ -1,12 +1,13 @@\n-\n+\n \n \n \n \n \n \n- \n- \n+ \n+ \n \n \n \n@@ -19,7 +20,7 @@\n \n \n \n- \n+ \n \n \n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\nindex e61349d1301..cbb5ddb85d0 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n@@ -5,48 +5,36 @@ import android.content.res.Configuration\n \n import com.facebook.react.PackageList\n import com.facebook.react.ReactApplication\n-import com.facebook.react.ReactNativeHost\n+import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative\n import com.facebook.react.ReactPackage\n import com.facebook.react.ReactHost\n-import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load\n-import com.facebook.react.defaults.DefaultReactNativeHost\n-import com.facebook.react.soloader.OpenSourceMergedSoMapping\n-import com.facebook.soloader.SoLoader\n+import com.facebook.react.common.ReleaseLevel\n+import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint\n \n import expo.modules.ApplicationLifecycleDispatcher\n-import expo.modules.ReactNativeHostWrapper\n+import expo.modules.ExpoReactHostFactory\n \n class MainApplication : Application(), ReactApplication {\n \n- override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper(\n- this,\n- object : DefaultReactNativeHost(this) {\n- override fun getPackages(): List {\n- val packages = PackageList(this).packages\n- // Packages that cannot be autolinked yet can be added manually here, for example:\n- // packages.add(new MyReactNativePackage());\n- return packages\n- }\n-\n- override fun getJSMainModuleName(): String = \".expo/.virtual-metro-entry\"\n-\n- override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG\n-\n- override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED\n- override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED\n- }\n- )\n-\n- override val reactHost: ReactHost\n- get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost)\n+ override val reactHost: ReactHost by lazy {\n+ ExpoReactHostFactory.getDefaultReactHost(\n+ context = applicationContext,\n+ packageList =\n+ PackageList(this).packages.apply {\n+ // Packages that cannot be autolinked yet can be added manually here, for example:\n+ // add(MyReactNativePackage())\n+ }\n+ )\n+ }\n \n override fun onCreate() {\n super.onCreate()\n- SoLoader.init(this, OpenSourceMergedSoMapping)\n- if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {\n- // If you opted-in for the New Architecture, we load the native entry point for this app.\n- load()\n+ DefaultNewArchitectureEntryPoint.releaseLevel = try {\n+ ReleaseLevel.valueOf(BuildConfig.REACT_NATIVE_RELEASE_LEVEL.uppercase())\n+ } catch (e: IllegalArgumentException) {\n+ ReleaseLevel.STABLE\n }\n+ loadReactNative(this)\n ApplicationLifecycleDispatcher.onApplicationCreate(this)\n }\n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\nindex 51fbc1e5a72..26f3404be26 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n@@ -1,14 +1,7 @@\n \n- \n- \n \ndiff --git a/templates/expo-template-bare-minimum/android/build.gradle b/templates/expo-template-bare-minimum/android/build.gradle\nindex abbcb8ec8a1..0554dd156c1 100644\n--- a/templates/expo-template-bare-minimum/android/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/build.gradle\n@@ -1,41 +1,24 @@\n // Top-level build file where you can add configuration options common to all sub-projects/modules.\n \n buildscript {\n- ext {\n- buildToolsVersion = findProperty('android.buildToolsVersion') ?: '35.0.0'\n- minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '24')\n- compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '35')\n- targetSdkVersion = Integer.parseInt(findProperty('android.targetSdkVersion') ?: '34')\n- kotlinVersion = findProperty('android.kotlinVersion') ?: '1.9.25'\n-\n- ndkVersion = \"26.1.10909125\"\n- }\n- repositories {\n- google()\n- mavenCentral()\n- }\n- dependencies {\n- classpath('com.android.tools.build:gradle')\n- classpath('com.facebook.react:react-native-gradle-plugin')\n- classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')\n- }\n+ repositories {\n+ google()\n+ mavenCentral()\n+ }\n+ dependencies {\n+ classpath('com.android.tools.build:gradle')\n+ classpath('com.facebook.react:react-native-gradle-plugin')\n+ classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')\n+ }\n }\n \n-apply plugin: \"com.facebook.react.rootproject\"\n-\n allprojects {\n- repositories {\n- maven {\n- // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n- url(new File(['node', '--print', \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim(), '../android'))\n- }\n- maven {\n- // Android JSC is installed from npm\n- url(new File(['node', '--print', \"require.resolve('jsc-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), '../dist'))\n- }\n-\n- google()\n- mavenCentral()\n- maven { url 'https://www.jitpack.io' }\n- }\n+ repositories {\n+ google()\n+ mavenCentral()\n+ maven { url 'https://www.jitpack.io' }\n+ }\n }\n+\n+apply plugin: \"expo-root-project\"\n+apply plugin: \"com.facebook.react.rootproject\"\ndiff --git a/templates/expo-template-bare-minimum/android/gradle.properties b/templates/expo-template-bare-minimum/android/gradle.properties\nindex de47429c64c..97271b9456f 100644\n--- a/templates/expo-template-bare-minimum/android/gradle.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle.properties\n@@ -15,7 +15,7 @@ org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m\n # When configured, Gradle will run in incubating parallel mode.\n # This option should only be used with decoupled projects. More details, visit\n # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n-# org.gradle.parallel=true\n+org.gradle.parallel=true\n \n # AndroidX package structure to make it clearer which packages are bundled with the\n # Android operating system, and which are packaged with your app's APK\n@@ -35,12 +35,17 @@ reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64\n # your application. You should enable this flag either if you want\n # to write custom TurboModules/Fabric components OR use libraries that\n # are providing them.\n-newArchEnabled=false\n+newArchEnabled=true\n \n # Use this property to enable or disable the Hermes JS engine.\n # If set to false, you will be using JSC instead.\n hermesEnabled=true\n \n+# Use this property to enable edge-to-edge display support.\n+# This allows your app to draw behind system bars for an immersive UI.\n+# Note: Only works with ReactActivity and should not be used with custom Activity.\n+edgeToEdgeEnabled=true\n+\n # Enable GIF support in React Native images (~200 B increase)\n expo.gif.enabled=true\n # Enable webp support in React Native images (~85 KB increase)\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar\nindex a4b76b9530d..8bdaf60c75a 100644\nBinary files a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar and b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar differ\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\nindex 79eb9d003fe..2a84e188b85 100644\n--- a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n@@ -1,6 +1,6 @@\n distributionBase=GRADLE_USER_HOME\n distributionPath=wrapper/dists\n-distributionUrl=https\\://services.gradle.org/distributions/gradle-8.10.2-all.zip\n+distributionUrl=https\\://services.gradle.org/distributions/gradle-9.0.0-bin.zip\n networkTimeout=10000\n validateDistributionUrl=true\n zipStoreBase=GRADLE_USER_HOME\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew b/templates/expo-template-bare-minimum/android/gradlew\nindex f5feea6d6b1..bbb00327904 100755\n--- a/templates/expo-template-bare-minimum/android/gradlew\n+++ b/templates/expo-template-bare-minimum/android/gradlew\n@@ -1,7 +1,7 @@\n #!/bin/sh\n \n #\n-# Copyright © 2015-2021 the original authors.\n+# Copyright © 2015 the original authors.\n #\n # Licensed under the Apache License, Version 2.0 (the \"License\");\n # you may not use this file except in compliance with the License.\n@@ -86,8 +86,7 @@ done\n # shellcheck disable=SC2034\n APP_BASE_NAME=${0##*/}\n # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)\n-APP_HOME=$( cd -P \"${APP_HOME:-./}\" > /dev/null && printf '%s\n-' \"$PWD\" ) || exit\n+APP_HOME=$( cd -P \"${APP_HOME:-./}\" > /dev/null && printf '%s\\n' \"$PWD\" ) || exit\n \n # Use the maximum available, or set MAX_FD != -1 to use that value.\n MAX_FD=maximum\n@@ -115,7 +114,7 @@ case \"$( uname )\" in #(\n NONSTOP* ) nonstop=true ;;\n esac\n \n-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n+CLASSPATH=\"\\\\\\\"\\\\\\\"\"\n \n \n # Determine the Java command to use to start the JVM.\n@@ -214,7 +213,7 @@ DEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n set -- \\\n \"-Dorg.gradle.appname=$APP_BASE_NAME\" \\\n -classpath \"$CLASSPATH\" \\\n- org.gradle.wrapper.GradleWrapperMain \\\n+ -jar \"$APP_HOME/gradle/wrapper/gradle-wrapper.jar\" \\\n \"$@\"\n \n # Stop when \"xargs\" is not available.\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew.bat b/templates/expo-template-bare-minimum/android/gradlew.bat\nindex 9b42019c791..5eed7ee8452 100644\n--- a/templates/expo-template-bare-minimum/android/gradlew.bat\n+++ b/templates/expo-template-bare-minimum/android/gradlew.bat\n@@ -70,11 +70,11 @@ goto fail\n :execute\r\n @rem Setup the command line\r\n \r\n-set CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\r\n+set CLASSPATH=\r\n \r\n \r\n @rem Execute Gradle\r\n-\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\r\n+\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" -jar \"%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\" %*\r\n \r\n :end\r\n @rem End local scope for the variables with windows NT shell\r\ndiff --git a/templates/expo-template-bare-minimum/android/settings.gradle b/templates/expo-template-bare-minimum/android/settings.gradle\nindex 39b188e065c..7fe91512213 100644\n--- a/templates/expo-template-bare-minimum/android/settings.gradle\n+++ b/templates/expo-template-bare-minimum/android/settings.gradle\n@@ -1,38 +1,39 @@\n pluginManagement {\n- includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().toString())\n+ def reactNativeGradlePlugin = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\")\n+ }.standardOutput.asText.get().trim()\n+ ).getParentFile().absolutePath\n+ includeBuild(reactNativeGradlePlugin)\n+ \n+ def expoPluginsPath = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('expo-modules-autolinking/package.json', { paths: [require.resolve('expo/package.json')] })\")\n+ }.standardOutput.asText.get().trim(),\n+ \"../android/expo-gradle-plugin\"\n+ ).absolutePath\n+ includeBuild(expoPluginsPath)\n+}\n+\n+plugins {\n+ id(\"com.facebook.react.settings\")\n+ id(\"expo-autolinking-settings\")\n }\n-plugins { id(\"com.facebook.react.settings\") }\n \n extensions.configure(com.facebook.react.ReactSettingsExtension) { ex ->\n if (System.getenv('EXPO_USE_COMMUNITY_AUTOLINKING') == '1') {\n ex.autolinkLibrariesFromCommand()\n } else {\n- def command = [\n- 'node',\n- '--no-warnings',\n- '--eval',\n- 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n- 'react-native-config',\n- '--json',\n- '--platform',\n- 'android'\n- ].toList()\n- ex.autolinkLibrariesFromCommand(command)\n+ ex.autolinkLibrariesFromCommand(expoAutolinking.rnConfigCommand)\n }\n }\n+expoAutolinking.useExpoModules()\n \n rootProject.name = 'HelloWorld'\n \n-dependencyResolutionManagement {\n- versionCatalogs {\n- reactAndroidLibs {\n- from(files(new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim(), \"../gradle/libs.versions.toml\")))\n- }\n- }\n-}\n-\n-apply from: new File([\"node\", \"--print\", \"require.resolve('expo/package.json')\"].execute(null, rootDir).text.trim(), \"../scripts/autolinking.gradle\");\n-useExpoModules()\n+expoAutolinking.useExpoVersionCatalog()\n \n include ':app'\n-includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile())\n+includeBuild(expoAutolinking.reactNativeGradlePlugin)\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\nindex 1ccb9b422d5..8a390c764af 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n@@ -3,33 +3,25 @@\n \tarchiveVersion = 1;\n \tclasses = {\n \t};\n-\tobjectVersion = 46;\n+\tobjectVersion = 54;\n \tobjects = {\n \n /* Begin PBXBuildFile section */\n-\t\t13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };\n \t\t13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };\n-\t\t13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };\n \t\t3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; };\n-\t\t96905EF65AED1B983A6B3ABC /* libPods-HelloWorld.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */; };\n-\t\tB18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; };\n \t\tBB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; };\n+\t\tF11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F11748412D0307B40044C1D9 /* AppDelegate.swift */; };\n /* End PBXBuildFile section */\n \n /* Begin PBXFileReference section */\n \t\t13B07F961A680F5B00A75B9A /* HelloWorld.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloWorld.app; sourceTree = BUILT_PRODUCTS_DIR; };\n-\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = HelloWorld/AppDelegate.h; sourceTree = \"\"; };\n-\t\t13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = HelloWorld/AppDelegate.mm; sourceTree = \"\"; };\n \t\t13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = HelloWorld/Images.xcassets; sourceTree = \"\"; };\n \t\t13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = HelloWorld/Info.plist; sourceTree = \"\"; };\n-\t\t13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = HelloWorld/main.m; sourceTree = \"\"; };\n-\t\t58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-HelloWorld.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n-\t\t6C2E3173556A471DD304B334 /* 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 = \"\"; };\n-\t\t7A4D352CD337FB3A3BF06240 /* 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 = \"\"; };\n \t\tAA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = HelloWorld/SplashScreen.storyboard; sourceTree = \"\"; };\n \t\tBB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = \"\"; };\n \t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };\n-\t\tFAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = \"Pods/Target Support Files/Pods-HelloWorld/ExpoModulesProvider.swift\"; sourceTree = \"\"; };\n+\t\tF11748412D0307B40044C1D9 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = HelloWorld/AppDelegate.swift; sourceTree = \"\"; };\n+\t\tF11748442D0722820044C1D9 /* HelloWorld-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = \"HelloWorld-Bridging-Header.h\"; path = \"HelloWorld/HelloWorld-Bridging-Header.h\"; sourceTree = \"\"; };\n /* End PBXFileReference section */\n \n /* Begin PBXFrameworksBuildPhase section */\n@@ -37,7 +29,6 @@\n \t\t\tisa = PBXFrameworksBuildPhase;\n \t\t\tbuildActionMask = 2147483647;\n \t\t\tfiles = (\n-\t\t\t\t96905EF65AED1B983A6B3ABC /* libPods-HelloWorld.a in Frameworks */,\n \t\t\t);\n \t\t\trunOnlyForDeploymentPostprocessing = 0;\n \t\t};\n@@ -47,12 +38,11 @@\n \t\t13B07FAE1A68108700A75B9A /* HelloWorld */ = {\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n+\t\t\t\tF11748412D0307B40044C1D9 /* AppDelegate.swift */,\n+\t\t\t\tF11748442D0722820044C1D9 /* HelloWorld-Bridging-Header.h */,\n \t\t\t\tBB2F792B24A3F905000567C9 /* Supporting */,\n-\t\t\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */,\n-\t\t\t\t13B07FB01A68108700A75B9A /* AppDelegate.mm */,\n \t\t\t\t13B07FB51A68108700A75B9A /* Images.xcassets */,\n \t\t\t\t13B07FB61A68108700A75B9A /* Info.plist */,\n-\t\t\t\t13B07FB71A68108700A75B9A /* main.m */,\n \t\t\t\tAA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */,\n \t\t\t);\n \t\t\tname = HelloWorld;\n@@ -62,7 +52,6 @@\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n \t\t\t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */,\n-\t\t\t\t58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */,\n \t\t\t);\n \t\t\tname = Frameworks;\n \t\t\tsourceTree = \"\";\n@@ -81,8 +70,6 @@\n \t\t\t\t832341AE1AAA6A7D00B99B32 /* Libraries */,\n \t\t\t\t83CBBA001A601CBA00E9B192 /* Products */,\n \t\t\t\t2D16E6871FA4F8E400B85C8A /* Frameworks */,\n-\t\t\t\tD65327D7A22EEC0BE12398D9 /* Pods */,\n-\t\t\t\tD7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */,\n \t\t\t);\n \t\t\tindentWidth = 2;\n \t\t\tsourceTree = \"\";\n@@ -97,14 +84,6 @@\n \t\t\tname = Products;\n \t\t\tsourceTree = \"\";\n \t\t};\n-\t\t92DBD88DE9BF7D494EA9DA96 /* HelloWorld */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\tFAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */,\n-\t\t\t);\n-\t\t\tname = HelloWorld;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n \t\tBB2F792B24A3F905000567C9 /* Supporting */ = {\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n@@ -114,23 +93,6 @@\n \t\t\tpath = HelloWorld/Supporting;\n \t\t\tsourceTree = \"\";\n \t\t};\n-\t\tD65327D7A22EEC0BE12398D9 /* Pods */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\t6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */,\n-\t\t\t\t7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */,\n-\t\t\t);\n-\t\t\tpath = Pods;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n-\t\tD7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\t92DBD88DE9BF7D494EA9DA96 /* HelloWorld */,\n-\t\t\t);\n-\t\t\tname = ExpoModulesProviders;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n /* End PBXGroup section */\n \n /* Begin PBXNativeTarget section */\n@@ -206,6 +168,8 @@\n \t\t\tfiles = (\n \t\t\t);\n \t\t\tinputPaths = (\n+\t\t\t\t\"$(SRCROOT)/.xcode.env\",\n+\t\t\t\t\"$(SRCROOT)/.xcode.env.local\",\n \t\t\t);\n \t\t\tname = \"Bundle React Native code and images\";\n \t\t\toutputPaths = (\n@@ -265,9 +229,7 @@\n \t\t\tisa = PBXSourcesBuildPhase;\n \t\t\tbuildActionMask = 2147483647;\n \t\t\tfiles = (\n-\t\t\t\t13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,\n-\t\t\t\t13B07FC11A68108700A75B9A /* main.m in Sources */,\n-\t\t\t\tB18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */,\n+\t\t\t\tF11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */,\n \t\t\t);\n \t\t\trunOnlyForDeploymentPostprocessing = 0;\n \t\t};\n@@ -276,7 +238,6 @@\n /* Begin XCBuildConfiguration section */\n \t\t13B07F941A680F5B00A75B9A /* Debug */ = {\n \t\t\tisa = XCBuildConfiguration;\n-\t\t\tbaseConfigurationReference = 6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */;\n \t\t\tbuildSettings = {\n \t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n@@ -288,7 +249,10 @@\n \t\t\t\t);\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n \t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t\t\"@executable_path/Frameworks\",\n+\t\t\t\t);\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -297,6 +261,7 @@\n \t\t\t\t);\n \t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = org.name.HelloWorld;\n \t\t\t\tPRODUCT_NAME = HelloWorld;\n+\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"HelloWorld/HelloWorld-Bridging-Header.h\";\n \t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n \t\t\t\tSWIFT_VERSION = 5.0;\n \t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n@@ -305,14 +270,16 @@\n \t\t};\n \t\t13B07F951A680F5B00A75B9A /* Release */ = {\n \t\t\tisa = XCBuildConfiguration;\n-\t\t\tbaseConfigurationReference = 7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */;\n \t\t\tbuildSettings = {\n \t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n \t\t\t\tCURRENT_PROJECT_VERSION = 1;\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n \t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t\t\"@executable_path/Frameworks\",\n+\t\t\t\t);\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -321,6 +288,7 @@\n \t\t\t\t);\n \t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = org.name.HelloWorld;\n \t\t\t\tPRODUCT_NAME = HelloWorld;\n+\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"HelloWorld/HelloWorld-Bridging-Header.h\";\n \t\t\t\tSWIFT_VERSION = 5.0;\n \t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n \t\t\t};\n@@ -374,7 +342,10 @@\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n \t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t/usr/lib/swift,\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t);\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n \t\t\t\tONLY_ACTIVE_ARCH = YES;\n@@ -423,7 +394,10 @@\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n \t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t/usr/lib/swift,\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t);\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n \t\t\t\tSDKROOT = iphoneos;\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\nnew file mode 100644\nindex 00000000000..9670a1ff07e\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\n@@ -0,0 +1,69 @@\n+internal import Expo\n+import React\n+import ReactAppDependencyProvider\n+\n+@main\n+class AppDelegate: ExpoAppDelegate {\n+ var window: UIWindow?\n+\n+ var reactNativeDelegate: ExpoReactNativeFactoryDelegate?\n+ var reactNativeFactory: RCTReactNativeFactory?\n+\n+ public override func application(\n+ _ application: UIApplication,\n+ didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil\n+ ) -> Bool {\n+ let delegate = ReactNativeDelegate()\n+ let factory = ExpoReactNativeFactory(delegate: delegate)\n+ delegate.dependencyProvider = RCTAppDependencyProvider()\n+\n+ reactNativeDelegate = delegate\n+ reactNativeFactory = factory\n+\n+#if os(iOS) || os(tvOS)\n+ window = UIWindow(frame: UIScreen.main.bounds)\n+ factory.startReactNative(\n+ withModuleName: \"main\",\n+ in: window,\n+ launchOptions: launchOptions)\n+#endif\n+\n+ return super.application(application, didFinishLaunchingWithOptions: launchOptions)\n+ }\n+\n+ // Linking API\n+ public override func application(\n+ _ app: UIApplication,\n+ open url: URL,\n+ options: [UIApplication.OpenURLOptionsKey: Any] = [:]\n+ ) -> Bool {\n+ return super.application(app, open: url, options: options) || RCTLinkingManager.application(app, open: url, options: options)\n+ }\n+\n+ // Universal Links\n+ public override func application(\n+ _ application: UIApplication,\n+ continue userActivity: NSUserActivity,\n+ restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void\n+ ) -> Bool {\n+ let result = RCTLinkingManager.application(application, continue: userActivity, restorationHandler: restorationHandler)\n+ return super.application(application, continue: userActivity, restorationHandler: restorationHandler) || result\n+ }\n+}\n+\n+class ReactNativeDelegate: ExpoReactNativeFactoryDelegate {\n+ // Extension point for config-plugins\n+\n+ override func sourceURL(for bridge: RCTBridge) -> URL? {\n+ // needed to return the correct URL for expo-dev-client.\n+ bridge.bundleURL ?? bundleURL()\n+ }\n+\n+ override func bundleURL() -> URL? {\n+#if DEBUG\n+ return RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: \".expo/.virtual-metro-entry\")\n+#else\n+ return Bundle.main.url(forResource: \"main\", withExtension: \"jsbundle\")\n+#endif\n+ }\n+}\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h b/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h\nnew file mode 100644\nindex 00000000000..8361941afc2\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h\n@@ -0,0 +1,3 @@\n+//\n+// Use this file to import your target's public headers that you would like to expose to Swift.\n+//\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json\nnew file mode 100644\nindex 00000000000..255637e0fdb\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json\n@@ -0,0 +1,21 @@\n+{\n+ \"images\" : [\n+ {\n+ \"filename\" : \"SplashScreenLegacy.png\",\n+ \"idiom\" : \"universal\",\n+ \"scale\" : \"1x\"\n+ },\n+ {\n+ \"idiom\" : \"universal\",\n+ \"scale\" : \"2x\"\n+ },\n+ {\n+ \"idiom\" : \"universal\",\n+ \"scale\" : \"3x\"\n+ }\n+ ],\n+ \"info\" : {\n+ \"author\" : \"xcode\",\n+ \"version\" : 1\n+ }\n+}\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png\nnew file mode 100644\nindex 00000000000..bbf8e9e6016\nBinary files /dev/null and b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png differ\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\nindex 447b4188985..58d21796e1d 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n@@ -1,11 +1,12 @@\n \n-\n+\n \n \n \n- \n+ \n \n \n+ \n \n \n \n@@ -29,6 +30,7 @@\n \n \n \n+ \n \n \n \n@@ -38,5 +40,8 @@\n \n \n \n+ \n+ \n+ \n \n \ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex f740040e7be..03484edf156 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -4,12 +4,19 @@ require File.join(File.dirname(`node --print \"require.resolve('react-native/pack\n require 'json'\n podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}\n \n-ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0'\n-ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+def ccache_enabled?(podfile_properties)\n+ # Environment variable takes precedence\n+ return ENV['USE_CCACHE'] == '1' if ENV['USE_CCACHE']\n \n+ # Fall back to Podfile properties\n+ podfile_properties['apple.ccacheEnabled'] == 'true'\n+end\n+\n+ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+ENV['RCT_USE_RN_DEP'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true'\n+ENV['RCT_USE_PREBUILT_RNCORE'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true'\n+ENV['RCT_HERMES_V1_ENABLED'] ||= '1' if podfile_properties['expo.useHermesV1'] == 'true'\n platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'\n-install! 'cocoapods',\n- :deterministic_uuids => false\n \n prepare_react_native_project!\n \n@@ -23,7 +30,8 @@ target 'HelloWorld' do\n 'node',\n '--no-warnings',\n '--eval',\n- 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n+ 'require(\\'expo/bin/autolinking\\')',\n+ 'expo-modules-autolinking',\n 'react-native-config',\n '--json',\n '--platform',\n@@ -49,18 +57,7 @@ target 'HelloWorld' do\n installer,\n config[:reactNativePath],\n :mac_catalyst_enabled => false,\n- :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true',\n+ :ccache_enabled => ccache_enabled?(podfile_properties),\n )\n-\n- # This is necessary for Xcode 14, because it signs resource bundles by default\n- # when building for devices.\n- installer.target_installation_results.pod_target_installation_results\n- .each do |pod_name, target_installation_result|\n- target_installation_result.resource_bundle_targets.each do |resource_bundle_target|\n- resource_bundle_target.build_configurations.each do |config|\n- config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'\n- end\n- end\n- end\n end\n end\ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex b51159163bf..7d81baed15d 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -2,7 +2,7 @@\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n \"license\": \"0BSD\",\n- \"version\": \"52.0.79\",\n+ \"version\": \"55.0.26\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -11,12 +11,9 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~52.0.49\",\n- \"expo-status-bar\": \"~2.0.1\",\n- \"react\": \"18.3.1\",\n- \"react-native\": \"0.76.9\"\n- },\n- \"devDependencies\": {\n- \"@babel/core\": \"^7.20.0\"\n+ \"expo\": \"~55.0.14\",\n+ \"expo-status-bar\": \"~55.0.5\",\n+ \"react\": \"19.2.0\",\n+ \"react-native\": \"0.83.4\"\n }\n }\n","53..55":"diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle\nindex 34b96c71c33..fc185e53bc3 100644\n--- a/templates/expo-template-bare-minimum/android/app/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/app/build.gradle\n@@ -11,7 +11,7 @@ def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath()\n react {\n entryFile = file([\"node\", \"-e\", \"require('expo/scripts/resolveAppEntry')\", projectRoot, \"android\", \"absolute\"].execute(null, rootDir).text.trim())\n reactNativeDir = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n- hermesCommand = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/sdks/hermesc/%OS-BIN%/hermesc\"\n+ hermesCommand = new File([\"node\", \"--print\", \"require.resolve('hermes-compiler/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/hermesc/%OS-BIN%/hermesc\"\n codegenDir = new File([\"node\", \"--print\", \"require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n \n enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean()\n@@ -64,9 +64,9 @@ react {\n }\n \n /**\n- * Set this to true to Run Proguard on Release builds to minify the Java bytecode.\n+ * Set this to true in release builds to optimize the app using [R8](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization).\n */\n-def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInReleaseBuilds') ?: false).toBoolean()\n+def enableMinifyInReleaseBuilds = (findProperty('android.enableMinifyInReleaseBuilds') ?: false).toBoolean()\n \n /**\n * The preferred build flavor of JavaScriptCore (JSC)\n@@ -94,6 +94,8 @@ android {\n targetSdkVersion rootProject.ext.targetSdkVersion\n versionCode 1\n versionName \"1.0\"\n+\n+ buildConfigField \"String\", \"REACT_NATIVE_RELEASE_LEVEL\", \"\\\"${findProperty('reactNativeReleaseLevel') ?: 'stable'}\\\"\"\n }\n signingConfigs {\n debug {\n@@ -111,15 +113,18 @@ android {\n // Caution! In production, you need to generate your own keystore file.\n // see https://reactnative.dev/docs/signed-apk-android.\n signingConfig signingConfigs.debug\n- shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false)\n- minifyEnabled enableProguardInReleaseBuilds\n+ def enableShrinkResources = findProperty('android.enableShrinkResourcesInReleaseBuilds') ?: 'false'\n+ shrinkResources enableShrinkResources.toBoolean()\n+ minifyEnabled enableMinifyInReleaseBuilds\n proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n- crunchPngs (findProperty('android.enablePngCrunchInReleaseBuilds')?.toBoolean() ?: true)\n+ def enablePngCrunchInRelease = findProperty('android.enablePngCrunchInReleaseBuilds') ?: 'true'\n+ crunchPngs enablePngCrunchInRelease.toBoolean()\n }\n }\n packagingOptions {\n jniLibs {\n- useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false)\n+ def enableLegacyPackaging = findProperty('expo.useLegacyPackaging') ?: 'false'\n+ useLegacyPackaging enableLegacyPackaging.toBoolean()\n }\n }\n androidResources {\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\nnew file mode 100644\nindex 00000000000..3ec2507bab7\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\n@@ -0,0 +1,7 @@\n+\n+\n+ \n+\n+ \n+\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\nindex 150248b6b3c..14bdba124ab 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n@@ -1,12 +1,13 @@\n-\n+\n \n \n \n \n \n \n- \n- \n+ \n+ \n \n \n \n@@ -19,7 +20,7 @@\n \n \n \n- \n+ \n \n \n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\nindex 267e20c30e5..cbb5ddb85d0 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n@@ -5,48 +5,36 @@ import android.content.res.Configuration\n \n import com.facebook.react.PackageList\n import com.facebook.react.ReactApplication\n-import com.facebook.react.ReactNativeHost\n+import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative\n import com.facebook.react.ReactPackage\n import com.facebook.react.ReactHost\n-import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load\n-import com.facebook.react.defaults.DefaultReactNativeHost\n-import com.facebook.react.soloader.OpenSourceMergedSoMapping\n-import com.facebook.soloader.SoLoader\n+import com.facebook.react.common.ReleaseLevel\n+import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint\n \n import expo.modules.ApplicationLifecycleDispatcher\n-import expo.modules.ReactNativeHostWrapper\n+import expo.modules.ExpoReactHostFactory\n \n class MainApplication : Application(), ReactApplication {\n \n- override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper(\n- this,\n- object : DefaultReactNativeHost(this) {\n- override fun getPackages(): List {\n- val packages = PackageList(this).packages\n- // Packages that cannot be autolinked yet can be added manually here, for example:\n- // packages.add(MyReactNativePackage())\n- return packages\n- }\n-\n- override fun getJSMainModuleName(): String = \".expo/.virtual-metro-entry\"\n-\n- override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG\n-\n- override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED\n- override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED\n- }\n- )\n-\n- override val reactHost: ReactHost\n- get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost)\n+ override val reactHost: ReactHost by lazy {\n+ ExpoReactHostFactory.getDefaultReactHost(\n+ context = applicationContext,\n+ packageList =\n+ PackageList(this).packages.apply {\n+ // Packages that cannot be autolinked yet can be added manually here, for example:\n+ // add(MyReactNativePackage())\n+ }\n+ )\n+ }\n \n override fun onCreate() {\n super.onCreate()\n- SoLoader.init(this, OpenSourceMergedSoMapping)\n- if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {\n- // If you opted-in for the New Architecture, we load the native entry point for this app.\n- load()\n+ DefaultNewArchitectureEntryPoint.releaseLevel = try {\n+ ReleaseLevel.valueOf(BuildConfig.REACT_NATIVE_RELEASE_LEVEL.uppercase())\n+ } catch (e: IllegalArgumentException) {\n+ ReleaseLevel.STABLE\n }\n+ loadReactNative(this)\n ApplicationLifecycleDispatcher.onApplicationCreate(this)\n }\n \ndiff --git a/templates/expo-template-bare-minimum/android/build.gradle b/templates/expo-template-bare-minimum/android/build.gradle\nindex fa7b11e23c1..0554dd156c1 100644\n--- a/templates/expo-template-bare-minimum/android/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/build.gradle\n@@ -12,21 +12,8 @@ buildscript {\n }\n }\n \n-def reactNativeAndroidDir = new File(\n- providers.exec {\n- workingDir(rootDir)\n- commandLine(\"node\", \"--print\", \"require.resolve('react-native/package.json')\")\n- }.standardOutput.asText.get().trim(),\n- \"../android\"\n-)\n-\n allprojects {\n repositories {\n- maven {\n- // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n- url(reactNativeAndroidDir)\n- }\n-\n google()\n mavenCentral()\n maven { url 'https://www.jitpack.io' }\ndiff --git a/templates/expo-template-bare-minimum/android/gradle.properties b/templates/expo-template-bare-minimum/android/gradle.properties\nindex 7531e9eb23c..97271b9456f 100644\n--- a/templates/expo-template-bare-minimum/android/gradle.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle.properties\n@@ -15,7 +15,7 @@ org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m\n # When configured, Gradle will run in incubating parallel mode.\n # This option should only be used with decoupled projects. More details, visit\n # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n-# org.gradle.parallel=true\n+org.gradle.parallel=true\n \n # AndroidX package structure to make it clearer which packages are bundled with the\n # Android operating system, and which are packaged with your app's APK\n@@ -41,6 +41,11 @@ newArchEnabled=true\n # If set to false, you will be using JSC instead.\n hermesEnabled=true\n \n+# Use this property to enable edge-to-edge display support.\n+# This allows your app to draw behind system bars for an immersive UI.\n+# Note: Only works with ReactActivity and should not be used with custom Activity.\n+edgeToEdgeEnabled=true\n+\n # Enable GIF support in React Native images (~200 B increase)\n expo.gif.enabled=true\n # Enable webp support in React Native images (~85 KB increase)\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar\nindex a4b76b9530d..8bdaf60c75a 100644\nBinary files a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar and b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar differ\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\nindex 37f853b1c84..2a84e188b85 100644\n--- a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n@@ -1,6 +1,6 @@\n distributionBase=GRADLE_USER_HOME\n distributionPath=wrapper/dists\n-distributionUrl=https\\://services.gradle.org/distributions/gradle-8.13-bin.zip\n+distributionUrl=https\\://services.gradle.org/distributions/gradle-9.0.0-bin.zip\n networkTimeout=10000\n validateDistributionUrl=true\n zipStoreBase=GRADLE_USER_HOME\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew b/templates/expo-template-bare-minimum/android/gradlew\nindex f3b75f3b0d4..bbb00327904 100755\n--- a/templates/expo-template-bare-minimum/android/gradlew\n+++ b/templates/expo-template-bare-minimum/android/gradlew\n@@ -1,7 +1,7 @@\n #!/bin/sh\n \n #\n-# Copyright © 2015-2021 the original authors.\n+# Copyright © 2015 the original authors.\n #\n # Licensed under the Apache License, Version 2.0 (the \"License\");\n # you may not use this file except in compliance with the License.\n@@ -114,7 +114,7 @@ case \"$( uname )\" in #(\n NONSTOP* ) nonstop=true ;;\n esac\n \n-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n+CLASSPATH=\"\\\\\\\"\\\\\\\"\"\n \n \n # Determine the Java command to use to start the JVM.\n@@ -213,7 +213,7 @@ DEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n set -- \\\n \"-Dorg.gradle.appname=$APP_BASE_NAME\" \\\n -classpath \"$CLASSPATH\" \\\n- org.gradle.wrapper.GradleWrapperMain \\\n+ -jar \"$APP_HOME/gradle/wrapper/gradle-wrapper.jar\" \\\n \"$@\"\n \n # Stop when \"xargs\" is not available.\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew.bat b/templates/expo-template-bare-minimum/android/gradlew.bat\nindex 9b42019c791..5eed7ee8452 100644\n--- a/templates/expo-template-bare-minimum/android/gradlew.bat\n+++ b/templates/expo-template-bare-minimum/android/gradlew.bat\n@@ -70,11 +70,11 @@ goto fail\n :execute\r\n @rem Setup the command line\r\n \r\n-set CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\r\n+set CLASSPATH=\r\n \r\n \r\n @rem Execute Gradle\r\n-\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\r\n+\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" -jar \"%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\" %*\r\n \r\n :end\r\n @rem End local scope for the variables with windows NT shell\r\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\nindex 1b7513bd31b..8a390c764af 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n@@ -168,6 +168,8 @@\n \t\t\tfiles = (\n \t\t\t);\n \t\t\tinputPaths = (\n+\t\t\t\t\"$(SRCROOT)/.xcode.env\",\n+\t\t\t\t\"$(SRCROOT)/.xcode.env.local\",\n \t\t\t);\n \t\t\tname = \"Bundle React Native code and images\";\n \t\t\toutputPaths = (\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\nindex a7887e1e5b1..9670a1ff07e 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\n@@ -1,9 +1,9 @@\n-import Expo\n+internal import Expo\n import React\n import ReactAppDependencyProvider\n \n-@UIApplicationMain\n-public class AppDelegate: ExpoAppDelegate {\n+@main\n+class AppDelegate: ExpoAppDelegate {\n var window: UIWindow?\n \n var reactNativeDelegate: ExpoReactNativeFactoryDelegate?\n@@ -19,7 +19,6 @@ public class AppDelegate: ExpoAppDelegate {\n \n reactNativeDelegate = delegate\n reactNativeFactory = factory\n- bindReactNativeFactory(factory)\n \n #if os(iOS) || os(tvOS)\n window = UIWindow(frame: UIScreen.main.bounds)\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json\nnew file mode 100644\nindex 00000000000..255637e0fdb\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json\n@@ -0,0 +1,21 @@\n+{\n+ \"images\" : [\n+ {\n+ \"filename\" : \"SplashScreenLegacy.png\",\n+ \"idiom\" : \"universal\",\n+ \"scale\" : \"1x\"\n+ },\n+ {\n+ \"idiom\" : \"universal\",\n+ \"scale\" : \"2x\"\n+ },\n+ {\n+ \"idiom\" : \"universal\",\n+ \"scale\" : \"3x\"\n+ }\n+ ],\n+ \"info\" : {\n+ \"author\" : \"xcode\",\n+ \"version\" : 1\n+ }\n+}\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png\nnew file mode 100644\nindex 00000000000..bbf8e9e6016\nBinary files /dev/null and b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png differ\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\nindex 447b4188985..58d21796e1d 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n@@ -1,11 +1,12 @@\n \n-\n+\n \n \n \n- \n+ \n \n \n+ \n \n \n \n@@ -29,6 +30,7 @@\n \n \n \n+ \n \n \n \n@@ -38,5 +40,8 @@\n \n \n \n+ \n+ \n+ \n \n \ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex 29503ff0cc1..03484edf156 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -4,12 +4,19 @@ require File.join(File.dirname(`node --print \"require.resolve('react-native/pack\n require 'json'\n podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}\n \n-ENV['RCT_NEW_ARCH_ENABLED'] = '0' if podfile_properties['newArchEnabled'] == 'false'\n-ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+def ccache_enabled?(podfile_properties)\n+ # Environment variable takes precedence\n+ return ENV['USE_CCACHE'] == '1' if ENV['USE_CCACHE']\n \n+ # Fall back to Podfile properties\n+ podfile_properties['apple.ccacheEnabled'] == 'true'\n+end\n+\n+ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+ENV['RCT_USE_RN_DEP'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true'\n+ENV['RCT_USE_PREBUILT_RNCORE'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true'\n+ENV['RCT_HERMES_V1_ENABLED'] ||= '1' if podfile_properties['expo.useHermesV1'] == 'true'\n platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'\n-install! 'cocoapods',\n- :deterministic_uuids => false\n \n prepare_react_native_project!\n \n@@ -20,7 +27,10 @@ target 'HelloWorld' do\n config_command = ['node', '-e', \"process.argv=['', '', 'config'];require('@react-native-community/cli').run()\"];\n else\n config_command = [\n- 'npx',\n+ 'node',\n+ '--no-warnings',\n+ '--eval',\n+ 'require(\\'expo/bin/autolinking\\')',\n 'expo-modules-autolinking',\n 'react-native-config',\n '--json',\n@@ -47,18 +57,7 @@ target 'HelloWorld' do\n installer,\n config[:reactNativePath],\n :mac_catalyst_enabled => false,\n- :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true',\n+ :ccache_enabled => ccache_enabled?(podfile_properties),\n )\n-\n- # This is necessary for Xcode 14, because it signs resource bundles by default\n- # when building for devices.\n- installer.target_installation_results.pod_target_installation_results\n- .each do |pod_name, target_installation_result|\n- target_installation_result.resource_bundle_targets.each do |resource_bundle_target|\n- resource_bundle_target.build_configurations.each do |config|\n- config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'\n- end\n- end\n- end\n end\n end\ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex 661f6b6addf..7d81baed15d 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -2,7 +2,7 @@\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n \"license\": \"0BSD\",\n- \"version\": \"53.0.42\",\n+ \"version\": \"55.0.26\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -11,12 +11,9 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~53.0.27\",\n- \"expo-status-bar\": \"~2.2.3\",\n- \"react\": \"19.0.0\",\n- \"react-native\": \"0.79.6\"\n- },\n- \"devDependencies\": {\n- \"@babel/core\": \"^7.20.0\"\n+ \"expo\": \"~55.0.14\",\n+ \"expo-status-bar\": \"~55.0.5\",\n+ \"react\": \"19.2.0\",\n+ \"react-native\": \"0.83.4\"\n }\n }\n","54..55":"diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle\nindex 3f1c571b679..fc185e53bc3 100644\n--- a/templates/expo-template-bare-minimum/android/app/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/app/build.gradle\n@@ -11,7 +11,7 @@ def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath()\n react {\n entryFile = file([\"node\", \"-e\", \"require('expo/scripts/resolveAppEntry')\", projectRoot, \"android\", \"absolute\"].execute(null, rootDir).text.trim())\n reactNativeDir = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n- hermesCommand = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/sdks/hermesc/%OS-BIN%/hermesc\"\n+ hermesCommand = new File([\"node\", \"--print\", \"require.resolve('hermes-compiler/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/hermesc/%OS-BIN%/hermesc\"\n codegenDir = new File([\"node\", \"--print\", \"require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n \n enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean()\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\nindex 150248b6b3c..14bdba124ab 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n@@ -1,12 +1,13 @@\n-\n+\n \n \n \n \n \n \n- \n- \n+ \n+ \n \n \n \n@@ -19,7 +20,7 @@\n \n \n \n- \n+ \n \n \n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\nindex 5abad96fa00..cbb5ddb85d0 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n@@ -6,37 +6,26 @@ import android.content.res.Configuration\n import com.facebook.react.PackageList\n import com.facebook.react.ReactApplication\n import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative\n-import com.facebook.react.ReactNativeHost\n import com.facebook.react.ReactPackage\n import com.facebook.react.ReactHost\n import com.facebook.react.common.ReleaseLevel\n import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint\n-import com.facebook.react.defaults.DefaultReactNativeHost\n \n import expo.modules.ApplicationLifecycleDispatcher\n-import expo.modules.ReactNativeHostWrapper\n+import expo.modules.ExpoReactHostFactory\n \n class MainApplication : Application(), ReactApplication {\n \n- override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper(\n- this,\n- object : DefaultReactNativeHost(this) {\n- override fun getPackages(): List =\n- PackageList(this).packages.apply {\n- // Packages that cannot be autolinked yet can be added manually here, for example:\n- // add(MyReactNativePackage())\n- }\n-\n- override fun getJSMainModuleName(): String = \".expo/.virtual-metro-entry\"\n-\n- override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG\n-\n- override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED\n- }\n- )\n-\n- override val reactHost: ReactHost\n- get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost)\n+ override val reactHost: ReactHost by lazy {\n+ ExpoReactHostFactory.getDefaultReactHost(\n+ context = applicationContext,\n+ packageList =\n+ PackageList(this).packages.apply {\n+ // Packages that cannot be autolinked yet can be added manually here, for example:\n+ // add(MyReactNativePackage())\n+ }\n+ )\n+ }\n \n override fun onCreate() {\n super.onCreate()\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar\nindex 1b33c55baab..8bdaf60c75a 100644\nBinary files a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar and b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar differ\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\nindex d4081da476b..2a84e188b85 100644\n--- a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n@@ -1,6 +1,6 @@\n distributionBase=GRADLE_USER_HOME\n distributionPath=wrapper/dists\n-distributionUrl=https\\://services.gradle.org/distributions/gradle-8.14.3-bin.zip\n+distributionUrl=https\\://services.gradle.org/distributions/gradle-9.0.0-bin.zip\n networkTimeout=10000\n validateDistributionUrl=true\n zipStoreBase=GRADLE_USER_HOME\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew b/templates/expo-template-bare-minimum/android/gradlew\nindex 7f94d3d4777..bbb00327904 100755\n--- a/templates/expo-template-bare-minimum/android/gradlew\n+++ b/templates/expo-template-bare-minimum/android/gradlew\n@@ -1,7 +1,7 @@\n #!/bin/sh\n \n #\n-# Copyright © 2015-2021 the original authors.\n+# Copyright © 2015 the original authors.\n #\n # Licensed under the Apache License, Version 2.0 (the \"License\");\n # you may not use this file except in compliance with the License.\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\nindex a7887e1e5b1..9670a1ff07e 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\n@@ -1,9 +1,9 @@\n-import Expo\n+internal import Expo\n import React\n import ReactAppDependencyProvider\n \n-@UIApplicationMain\n-public class AppDelegate: ExpoAppDelegate {\n+@main\n+class AppDelegate: ExpoAppDelegate {\n var window: UIWindow?\n \n var reactNativeDelegate: ExpoReactNativeFactoryDelegate?\n@@ -19,7 +19,6 @@ public class AppDelegate: ExpoAppDelegate {\n \n reactNativeDelegate = delegate\n reactNativeFactory = factory\n- bindReactNativeFactory(factory)\n \n #if os(iOS) || os(tvOS)\n window = UIWindow(frame: UIScreen.main.bounds)\ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex 9743535e7ad..03484edf156 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -7,15 +7,15 @@ podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties\n def ccache_enabled?(podfile_properties)\n # Environment variable takes precedence\n return ENV['USE_CCACHE'] == '1' if ENV['USE_CCACHE']\n- \n+\n # Fall back to Podfile properties\n podfile_properties['apple.ccacheEnabled'] == 'true'\n end\n \n-ENV['RCT_NEW_ARCH_ENABLED'] ||= '0' if podfile_properties['newArchEnabled'] == 'false'\n ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n-ENV['RCT_USE_RN_DEP'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' && podfile_properties['newArchEnabled'] != 'false'\n-ENV['RCT_USE_PREBUILT_RNCORE'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' && podfile_properties['newArchEnabled'] != 'false'\n+ENV['RCT_USE_RN_DEP'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true'\n+ENV['RCT_USE_PREBUILT_RNCORE'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true'\n+ENV['RCT_HERMES_V1_ENABLED'] ||= '1' if podfile_properties['expo.useHermesV1'] == 'true'\n platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'\n \n prepare_react_native_project!\ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex 0d90c6e603d..7d81baed15d 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -2,7 +2,7 @@\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n \"license\": \"0BSD\",\n- \"version\": \"54.0.50\",\n+ \"version\": \"55.0.26\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -11,9 +11,9 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~54.0.33\",\n- \"expo-status-bar\": \"~3.0.9\",\n- \"react\": \"19.1.0\",\n- \"react-native\": \"0.81.5\"\n+ \"expo\": \"~55.0.14\",\n+ \"expo-status-bar\": \"~55.0.5\",\n+ \"react\": \"19.2.0\",\n+ \"react-native\": \"0.83.4\"\n }\n }\n","55..55":"","50..unversioned":"diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle\nindex 27c6e63957e..fc185e53bc3 100644\n--- a/templates/expo-template-bare-minimum/android/app/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/app/build.gradle\n@@ -11,21 +11,22 @@ def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath()\n react {\n entryFile = file([\"node\", \"-e\", \"require('expo/scripts/resolveAppEntry')\", projectRoot, \"android\", \"absolute\"].execute(null, rootDir).text.trim())\n reactNativeDir = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n- hermesCommand = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/sdks/hermesc/%OS-BIN%/hermesc\"\n+ hermesCommand = new File([\"node\", \"--print\", \"require.resolve('hermes-compiler/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/hermesc/%OS-BIN%/hermesc\"\n codegenDir = new File([\"node\", \"--print\", \"require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n \n+ enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean()\n // Use Expo CLI to bundle the app, this ensures the Metro config\n // works correctly with Expo projects.\n cliFile = new File([\"node\", \"--print\", \"require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })\"].execute(null, rootDir).text.trim())\n bundleCommand = \"export:embed\"\n \n /* Folders */\n- // The root of your project, i.e. where \"package.json\" lives. Default is '..'\n- // root = file(\"../\")\n- // The folder where the react-native NPM package is. Default is ../node_modules/react-native\n- // reactNativeDir = file(\"../node_modules/react-native\")\n- // The folder where the react-native Codegen package is. Default is ../node_modules/@react-native/codegen\n- // codegenDir = file(\"../node_modules/@react-native/codegen\")\n+ // The root of your project, i.e. where \"package.json\" lives. Default is '../..'\n+ // root = file(\"../../\")\n+ // The folder where the react-native NPM package is. Default is ../../node_modules/react-native\n+ // reactNativeDir = file(\"../../node_modules/react-native\")\n+ // The folder where the react-native Codegen package is. Default is ../../node_modules/@react-native/codegen\n+ // codegenDir = file(\"../../node_modules/@react-native/codegen\")\n \n /* Variants */\n // The list of variants to that are debuggable. For those we're going to\n@@ -57,12 +58,15 @@ react {\n //\n // The list of flags to pass to the Hermes compiler. By default is \"-O\", \"-output-source-map\"\n // hermesFlags = [\"-O\", \"-output-source-map\"]\n+\n+ /* Autolinking */\n+ autolinkLibrariesWithApp()\n }\n \n /**\n- * Set this to true to Run Proguard on Release builds to minify the Java bytecode.\n+ * Set this to true in release builds to optimize the app using [R8](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization).\n */\n-def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInReleaseBuilds') ?: false).toBoolean()\n+def enableMinifyInReleaseBuilds = (findProperty('android.enableMinifyInReleaseBuilds') ?: false).toBoolean()\n \n /**\n * The preferred build flavor of JavaScriptCore (JSC)\n@@ -75,7 +79,7 @@ def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInRelea\n * give correct results when using with locales other than en-US. Note that\n * this variant is about 6MiB larger per architecture than default.\n */\n-def jscFlavor = 'org.webkit:android-jsc:+'\n+def jscFlavor = 'io.github.react-native-community:jsc-android:2026004.+'\n \n android {\n ndkVersion rootProject.ext.ndkVersion\n@@ -91,7 +95,7 @@ android {\n versionCode 1\n versionName \"1.0\"\n \n- buildConfigField(\"boolean\", \"REACT_NATIVE_UNSTABLE_USE_RUNTIME_SCHEDULER_ALWAYS\", (findProperty(\"reactNative.unstable_useRuntimeSchedulerAlways\") ?: true).toString())\n+ buildConfigField \"String\", \"REACT_NATIVE_RELEASE_LEVEL\", \"\\\"${findProperty('reactNativeReleaseLevel') ?: 'stable'}\\\"\"\n }\n signingConfigs {\n debug {\n@@ -109,16 +113,23 @@ android {\n // Caution! In production, you need to generate your own keystore file.\n // see https://reactnative.dev/docs/signed-apk-android.\n signingConfig signingConfigs.debug\n- shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false)\n- minifyEnabled enableProguardInReleaseBuilds\n+ def enableShrinkResources = findProperty('android.enableShrinkResourcesInReleaseBuilds') ?: 'false'\n+ shrinkResources enableShrinkResources.toBoolean()\n+ minifyEnabled enableMinifyInReleaseBuilds\n proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n+ def enablePngCrunchInRelease = findProperty('android.enablePngCrunchInReleaseBuilds') ?: 'true'\n+ crunchPngs enablePngCrunchInRelease.toBoolean()\n }\n }\n packagingOptions {\n jniLibs {\n- useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false)\n+ def enableLegacyPackaging = findProperty('expo.useLegacyPackaging') ?: 'false'\n+ useLegacyPackaging enableLegacyPackaging.toBoolean()\n }\n }\n+ androidResources {\n+ ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:!CVS:!thumbs.db:!picasa.ini:!*~'\n+ }\n }\n \n // Apply static values from `gradle.properties` to the `android.packagingOptions`\n@@ -151,26 +162,21 @@ dependencies {\n \n if (isGifEnabled) {\n // For animated gif support\n- implementation(\"com.facebook.fresco:animated-gif:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-gif:${expoLibs.versions.fresco.get()}\")\n }\n \n if (isWebpEnabled) {\n // For webp support\n- implementation(\"com.facebook.fresco:webpsupport:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:webpsupport:${expoLibs.versions.fresco.get()}\")\n if (isWebpAnimatedEnabled) {\n // Animated webp support\n- implementation(\"com.facebook.fresco:animated-webp:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-webp:${expoLibs.versions.fresco.get()}\")\n }\n }\n \n- implementation(\"com.facebook.react:flipper-integration\")\n-\n if (hermesEnabled.toBoolean()) {\n implementation(\"com.facebook.react:hermes-android\")\n } else {\n implementation jscFlavor\n }\n }\n-\n-apply from: new File([\"node\", \"--print\", \"require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), \"../native_modules.gradle\");\n-applyNativeModulesAppBuildGradle(project)\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\nnew file mode 100644\nindex 00000000000..3ec2507bab7\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\n@@ -0,0 +1,7 @@\n+\n+\n+ \n+\n+ \n+\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\nindex f8d77fc832f..14bdba124ab 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n@@ -1,12 +1,13 @@\n-\n+\n \n \n \n \n \n \n- \n- \n+ \n+ \n \n \n \n@@ -18,15 +19,12 @@\n \n \n \n- \n- \n- \n- \n+ \n+ \n \n \n \n \n \n- \n \n-\n\\ No newline at end of file\n+\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\nindex 8258c40ed4c..cbb5ddb85d0 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n@@ -2,59 +2,39 @@ package com.helloworld\n \n import android.app.Application\n import android.content.res.Configuration\n-import androidx.annotation.NonNull\n \n import com.facebook.react.PackageList\n import com.facebook.react.ReactApplication\n-import com.facebook.react.ReactNativeHost\n+import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative\n import com.facebook.react.ReactPackage\n import com.facebook.react.ReactHost\n-import com.facebook.react.config.ReactFeatureFlags\n-import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load\n-import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost\n-import com.facebook.react.defaults.DefaultReactNativeHost\n-import com.facebook.react.flipper.ReactNativeFlipper\n-import com.facebook.soloader.SoLoader\n+import com.facebook.react.common.ReleaseLevel\n+import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint\n \n import expo.modules.ApplicationLifecycleDispatcher\n-import expo.modules.ReactNativeHostWrapper\n+import expo.modules.ExpoReactHostFactory\n \n class MainApplication : Application(), ReactApplication {\n \n- override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper(\n- this,\n- object : DefaultReactNativeHost(this) {\n- override fun getPackages(): List {\n- // Packages that cannot be autolinked yet can be added manually here, for example:\n- // packages.add(new MyReactNativePackage());\n- return PackageList(this).packages\n- }\n-\n- override fun getJSMainModuleName(): String = \".expo/.virtual-metro-entry\"\n-\n- override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG\n-\n- override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED\n- override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED\n- }\n- )\n-\n- override val reactHost: ReactHost\n- get() = getDefaultReactHost(this.applicationContext, reactNativeHost)\n+ override val reactHost: ReactHost by lazy {\n+ ExpoReactHostFactory.getDefaultReactHost(\n+ context = applicationContext,\n+ packageList =\n+ PackageList(this).packages.apply {\n+ // Packages that cannot be autolinked yet can be added manually here, for example:\n+ // add(MyReactNativePackage())\n+ }\n+ )\n+ }\n \n override fun onCreate() {\n super.onCreate()\n- SoLoader.init(this, false)\n- if (!BuildConfig.REACT_NATIVE_UNSTABLE_USE_RUNTIME_SCHEDULER_ALWAYS) {\n- ReactFeatureFlags.unstable_useRuntimeSchedulerAlways = false\n- }\n- if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {\n- // If you opted-in for the New Architecture, we load the native entry point for this app.\n- load()\n- }\n- if (BuildConfig.DEBUG) {\n- ReactNativeFlipper.initializeFlipper(this, reactNativeHost.reactInstanceManager)\n+ DefaultNewArchitectureEntryPoint.releaseLevel = try {\n+ ReleaseLevel.valueOf(BuildConfig.REACT_NATIVE_RELEASE_LEVEL.uppercase())\n+ } catch (e: IllegalArgumentException) {\n+ ReleaseLevel.STABLE\n }\n+ loadReactNative(this)\n ApplicationLifecycleDispatcher.onApplicationCreate(this)\n }\n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..31df827b18b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..ef243aab6c0\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..e9d5474519c\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..d61da15d241\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..4aeed11d00b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml\nnew file mode 100644\nindex 00000000000..883b2a080f3\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml\n@@ -0,0 +1,6 @@\n+\n+ \n+ \n+ \n+ \n+\n\\ No newline at end of file\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/rn_edit_text_material.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/rn_edit_text_material.xml\nindex 73b37e4d996..5c25e728ea2 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/rn_edit_text_material.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/rn_edit_text_material.xml\n@@ -17,7 +17,8 @@\n android:insetLeft=\"@dimen/abc_edit_text_inset_horizontal_material\"\n android:insetRight=\"@dimen/abc_edit_text_inset_horizontal_material\"\n android:insetTop=\"@dimen/abc_edit_text_inset_top_material\"\n- android:insetBottom=\"@dimen/abc_edit_text_inset_bottom_material\">\n+ android:insetBottom=\"@dimen/abc_edit_text_inset_bottom_material\"\n+ >\n \n \n \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n+\n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n \ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Supporting/Expo.plist b/templates/expo-template-bare-minimum/ios/HelloWorld/Supporting/Expo.plist\nindex 03410dc8b39..6631ffa6f24 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/Supporting/Expo.plist\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/Supporting/Expo.plist\n@@ -2,9 +2,5 @@\n \n \n \n- EXUpdatesSDKVersion\n- YOUR-APP-SDK-VERSION-HERE\n- EXUpdatesURL\n- YOUR-APP-URL-HERE\n \n \ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex b3978b9515d..a2af7b4a5de 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -4,42 +4,43 @@ require File.join(File.dirname(`node --print \"require.resolve('react-native/pack\n require 'json'\n podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}\n \n-ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0'\n-ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+def ccache_enabled?(podfile_properties)\n+ # Environment variable takes precedence\n+ return ENV['USE_CCACHE'] == '1' if ENV['USE_CCACHE']\n \n-platform :ios, podfile_properties['ios.deploymentTarget'] || '13.4'\n-install! 'cocoapods',\n- :deterministic_uuids => false\n+ # Fall back to Podfile properties\n+ podfile_properties['apple.ccacheEnabled'] == 'true'\n+end\n \n-prepare_react_native_project!\n+ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+ENV['RCT_USE_RN_DEP'] ||= '0' if podfile_properties['ios.buildReactNativeFromSource'] == 'true'\n+ENV['RCT_USE_PREBUILT_RNCORE'] ||= '0' if podfile_properties['ios.buildReactNativeFromSource'] == 'true'\n+ENV['RCT_HERMES_V1_ENABLED'] ||= '1' if podfile_properties['expo.useHermesV1'] == 'true'\n+ENV['EXPO_USE_PRECOMPILED_MODULES'] ||= '1' if podfile_properties['EXPO_USE_PRECOMPILED_MODULES'] == '1'\n+platform :ios, podfile_properties['ios.deploymentTarget'] || '16.4'\n \n-# If you are using a `react-native-flipper` your iOS build will fail when `NO_FLIPPER=1` is set.\n-# because `react-native-flipper` depends on (FlipperKit,...), which will be excluded. To fix this,\n-# you can also exclude `react-native-flipper` in `react-native.config.js`\n-#\n-# ```js\n-# module.exports = {\n-# dependencies: {\n-# ...(process.env.NO_FLIPPER ? { 'react-native-flipper': { platforms: { ios: null } } } : {}),\n-# }\n-# }\n-# ```\n-flipper_config = FlipperConfiguration.disabled\n-if ENV['NO_FLIPPER'] == '1' then\n- # Explicitly disabled through environment variables\n- flipper_config = FlipperConfiguration.disabled\n-elsif podfile_properties.key?('ios.flipper') then\n- # Configure Flipper in Podfile.properties.json\n- if podfile_properties['ios.flipper'] == 'true' then\n- flipper_config = FlipperConfiguration.enabled([\"Debug\", \"Release\"])\n- elsif podfile_properties['ios.flipper'] != 'false' then\n- flipper_config = FlipperConfiguration.enabled([\"Debug\", \"Release\"], { 'Flipper' => podfile_properties['ios.flipper'] })\n- end\n-end\n+prepare_react_native_project!\n \n target 'HelloWorld' do\n use_expo_modules!\n- config = use_native_modules!\n+\n+ if ENV['EXPO_USE_COMMUNITY_AUTOLINKING'] == '1'\n+ config_command = ['node', '-e', \"process.argv=['', '', 'config'];require('@react-native-community/cli').run()\"];\n+ else\n+ config_command = [\n+ 'node',\n+ '--no-warnings',\n+ '--eval',\n+ 'require(\\'expo/bin/autolinking\\')',\n+ 'expo-modules-autolinking',\n+ 'react-native-config',\n+ '--json',\n+ '--platform',\n+ 'ios'\n+ ]\n+ end\n+\n+ config = use_native_modules!(config_command)\n \n use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks']\n use_frameworks! :linkage => ENV['USE_FRAMEWORKS'].to_sym if ENV['USE_FRAMEWORKS']\n@@ -49,34 +50,15 @@ target 'HelloWorld' do\n :hermes_enabled => podfile_properties['expo.jsEngine'] == nil || podfile_properties['expo.jsEngine'] == 'hermes',\n # An absolute path to your application root.\n :app_path => \"#{Pod::Config.instance.installation_root}/..\",\n- # Note that if you have use_frameworks! enabled, Flipper will not work if enabled\n- :flipper_configuration => flipper_config\n+ :privacy_file_aggregation_enabled => podfile_properties['apple.privacyManifestAggregationEnabled'] != 'false',\n )\n \n post_install do |installer|\n react_native_post_install(\n installer,\n config[:reactNativePath],\n- :mac_catalyst_enabled => false\n+ :mac_catalyst_enabled => false,\n+ :ccache_enabled => ccache_enabled?(podfile_properties),\n )\n-\n- # This is necessary for Xcode 14, because it signs resource bundles by default\n- # when building for devices.\n- installer.target_installation_results.pod_target_installation_results\n- .each do |pod_name, target_installation_result|\n- target_installation_result.resource_bundle_targets.each do |resource_bundle_target|\n- resource_bundle_target.build_configurations.each do |config|\n- config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'\n- end\n- end\n- end\n- end\n-\n- post_integrate do |installer|\n- begin\n- expo_patch_react_imports!(installer)\n- rescue => e\n- Pod::UI.warn e\n- end\n end\n end\ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex f8f8993585f..e6346b6d456 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -1,7 +1,8 @@\n {\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n- \"version\": \"50.0.43\",\n+ \"license\": \"0BSD\",\n+ \"version\": \"55.0.14\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -10,12 +11,9 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~50.0.17\",\n- \"expo-status-bar\": \"~1.11.1\",\n- \"react\": \"18.2.0\",\n- \"react-native\": \"0.73.6\"\n- },\n- \"devDependencies\": {\n- \"@babel/core\": \"^7.20.0\"\n+ \"expo\": \"~55.0.2\",\n+ \"expo-status-bar\": \"~55.0.4\",\n+ \"react\": \"19.2.3\",\n+ \"react-native\": \"0.85.0\"\n }\n }\n","51..unversioned":"diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle\nindex a4b08330359..fc185e53bc3 100644\n--- a/templates/expo-template-bare-minimum/android/app/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/app/build.gradle\n@@ -4,27 +4,6 @@ apply plugin: \"com.facebook.react\"\n \n def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath()\n \n-static def versionToNumber(major, minor, patch) {\n- return patch * 100 + minor * 10000 + major * 1000000\n-}\n-\n-def getRNVersion() {\n- def version = providers.exec {\n- workingDir(projectDir)\n- commandLine(\"node\", \"-e\", \"console.log(require('react-native/package.json').version);\")\n- }.standardOutput.asText.get().trim()\n-\n- def coreVersion = version.split(\"-\")[0]\n- def (major, minor, patch) = coreVersion.tokenize('.').collect { it.toInteger() }\n-\n- return versionToNumber(\n- major,\n- minor,\n- patch\n- )\n-}\n-def rnVersion = getRNVersion()\n-\n /**\n * This is the configuration block to customize your React Native Android app.\n * By default you don't need to apply any configuration, just uncomment the lines you need.\n@@ -32,21 +11,22 @@ def rnVersion = getRNVersion()\n react {\n entryFile = file([\"node\", \"-e\", \"require('expo/scripts/resolveAppEntry')\", projectRoot, \"android\", \"absolute\"].execute(null, rootDir).text.trim())\n reactNativeDir = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n- hermesCommand = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/sdks/hermesc/%OS-BIN%/hermesc\"\n+ hermesCommand = new File([\"node\", \"--print\", \"require.resolve('hermes-compiler/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/hermesc/%OS-BIN%/hermesc\"\n codegenDir = new File([\"node\", \"--print\", \"require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n \n+ enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean()\n // Use Expo CLI to bundle the app, this ensures the Metro config\n // works correctly with Expo projects.\n cliFile = new File([\"node\", \"--print\", \"require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })\"].execute(null, rootDir).text.trim())\n bundleCommand = \"export:embed\"\n \n /* Folders */\n- // The root of your project, i.e. where \"package.json\" lives. Default is '..'\n- // root = file(\"../\")\n- // The folder where the react-native NPM package is. Default is ../node_modules/react-native\n- // reactNativeDir = file(\"../node_modules/react-native\")\n- // The folder where the react-native Codegen package is. Default is ../node_modules/@react-native/codegen\n- // codegenDir = file(\"../node_modules/@react-native/codegen\")\n+ // The root of your project, i.e. where \"package.json\" lives. Default is '../..'\n+ // root = file(\"../../\")\n+ // The folder where the react-native NPM package is. Default is ../../node_modules/react-native\n+ // reactNativeDir = file(\"../../node_modules/react-native\")\n+ // The folder where the react-native Codegen package is. Default is ../../node_modules/@react-native/codegen\n+ // codegenDir = file(\"../../node_modules/@react-native/codegen\")\n \n /* Variants */\n // The list of variants to that are debuggable. For those we're going to\n@@ -79,16 +59,14 @@ react {\n // The list of flags to pass to the Hermes compiler. By default is \"-O\", \"-output-source-map\"\n // hermesFlags = [\"-O\", \"-output-source-map\"]\n \n- if (rnVersion >= versionToNumber(0, 75, 0)) {\n- /* Autolinking */\n- autolinkLibrariesWithApp()\n- }\n+ /* Autolinking */\n+ autolinkLibrariesWithApp()\n }\n \n /**\n- * Set this to true to Run Proguard on Release builds to minify the Java bytecode.\n+ * Set this to true in release builds to optimize the app using [R8](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization).\n */\n-def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInReleaseBuilds') ?: false).toBoolean()\n+def enableMinifyInReleaseBuilds = (findProperty('android.enableMinifyInReleaseBuilds') ?: false).toBoolean()\n \n /**\n * The preferred build flavor of JavaScriptCore (JSC)\n@@ -101,7 +79,7 @@ def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInRelea\n * give correct results when using with locales other than en-US. Note that\n * this variant is about 6MiB larger per architecture than default.\n */\n-def jscFlavor = 'org.webkit:android-jsc:+'\n+def jscFlavor = 'io.github.react-native-community:jsc-android:2026004.+'\n \n android {\n ndkVersion rootProject.ext.ndkVersion\n@@ -116,6 +94,8 @@ android {\n targetSdkVersion rootProject.ext.targetSdkVersion\n versionCode 1\n versionName \"1.0\"\n+\n+ buildConfigField \"String\", \"REACT_NATIVE_RELEASE_LEVEL\", \"\\\"${findProperty('reactNativeReleaseLevel') ?: 'stable'}\\\"\"\n }\n signingConfigs {\n debug {\n@@ -133,17 +113,23 @@ android {\n // Caution! In production, you need to generate your own keystore file.\n // see https://reactnative.dev/docs/signed-apk-android.\n signingConfig signingConfigs.debug\n- shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false)\n- minifyEnabled enableProguardInReleaseBuilds\n+ def enableShrinkResources = findProperty('android.enableShrinkResourcesInReleaseBuilds') ?: 'false'\n+ shrinkResources enableShrinkResources.toBoolean()\n+ minifyEnabled enableMinifyInReleaseBuilds\n proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n- crunchPngs (findProperty('android.enablePngCrunchInReleaseBuilds')?.toBoolean() ?: true)\n+ def enablePngCrunchInRelease = findProperty('android.enablePngCrunchInReleaseBuilds') ?: 'true'\n+ crunchPngs enablePngCrunchInRelease.toBoolean()\n }\n }\n packagingOptions {\n jniLibs {\n- useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false)\n+ def enableLegacyPackaging = findProperty('expo.useLegacyPackaging') ?: 'false'\n+ useLegacyPackaging enableLegacyPackaging.toBoolean()\n }\n }\n+ androidResources {\n+ ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:!CVS:!thumbs.db:!picasa.ini:!*~'\n+ }\n }\n \n // Apply static values from `gradle.properties` to the `android.packagingOptions`\n@@ -176,15 +162,15 @@ dependencies {\n \n if (isGifEnabled) {\n // For animated gif support\n- implementation(\"com.facebook.fresco:animated-gif:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-gif:${expoLibs.versions.fresco.get()}\")\n }\n \n if (isWebpEnabled) {\n // For webp support\n- implementation(\"com.facebook.fresco:webpsupport:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:webpsupport:${expoLibs.versions.fresco.get()}\")\n if (isWebpAnimatedEnabled) {\n // Animated webp support\n- implementation(\"com.facebook.fresco:animated-webp:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-webp:${expoLibs.versions.fresco.get()}\")\n }\n }\n \n@@ -194,8 +180,3 @@ dependencies {\n implementation jscFlavor\n }\n }\n-\n-if (rnVersion < versionToNumber(0, 75, 0)) {\n- apply from: new File([\"node\", \"--print\", \"require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), \"../native_modules.gradle\");\n- applyNativeModulesAppBuildGradle(project)\n-}\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\nnew file mode 100644\nindex 00000000000..3ec2507bab7\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\n@@ -0,0 +1,7 @@\n+\n+\n+ \n+\n+ \n+\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\nindex 52175508263..14bdba124ab 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n@@ -1,12 +1,13 @@\n-\n+\n \n \n \n \n \n \n- \n- \n+ \n+ \n \n \n \n@@ -18,13 +19,12 @@\n \n \n \n- \n- \n+ \n+ \n \n \n \n \n \n- \n \n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\nindex 5f6e05ce071..cbb5ddb85d0 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n@@ -5,46 +5,36 @@ import android.content.res.Configuration\n \n import com.facebook.react.PackageList\n import com.facebook.react.ReactApplication\n-import com.facebook.react.ReactNativeHost\n+import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative\n import com.facebook.react.ReactPackage\n import com.facebook.react.ReactHost\n-import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load\n-import com.facebook.react.defaults.DefaultReactNativeHost\n-import com.facebook.soloader.SoLoader\n+import com.facebook.react.common.ReleaseLevel\n+import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint\n \n import expo.modules.ApplicationLifecycleDispatcher\n-import expo.modules.ReactNativeHostWrapper\n+import expo.modules.ExpoReactHostFactory\n \n class MainApplication : Application(), ReactApplication {\n \n- override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper(\n- this,\n- object : DefaultReactNativeHost(this) {\n- override fun getPackages(): List {\n- // Packages that cannot be autolinked yet can be added manually here, for example:\n- // packages.add(new MyReactNativePackage());\n- return PackageList(this).packages\n- }\n-\n- override fun getJSMainModuleName(): String = \".expo/.virtual-metro-entry\"\n-\n- override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG\n-\n- override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED\n- override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED\n- }\n- )\n-\n- override val reactHost: ReactHost\n- get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost)\n+ override val reactHost: ReactHost by lazy {\n+ ExpoReactHostFactory.getDefaultReactHost(\n+ context = applicationContext,\n+ packageList =\n+ PackageList(this).packages.apply {\n+ // Packages that cannot be autolinked yet can be added manually here, for example:\n+ // add(MyReactNativePackage())\n+ }\n+ )\n+ }\n \n override fun onCreate() {\n super.onCreate()\n- SoLoader.init(this, false)\n- if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {\n- // If you opted-in for the New Architecture, we load the native entry point for this app.\n- load()\n+ DefaultNewArchitectureEntryPoint.releaseLevel = try {\n+ ReleaseLevel.valueOf(BuildConfig.REACT_NATIVE_RELEASE_LEVEL.uppercase())\n+ } catch (e: IllegalArgumentException) {\n+ ReleaseLevel.STABLE\n }\n+ loadReactNative(this)\n ApplicationLifecycleDispatcher.onApplicationCreate(this)\n }\n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..31df827b18b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..ef243aab6c0\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..e9d5474519c\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..d61da15d241\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..4aeed11d00b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml\nnew file mode 100644\nindex 00000000000..883b2a080f3\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml\n@@ -0,0 +1,6 @@\n+\n+ \n+ \n+ \n+ \n+\n\\ No newline at end of file\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..a2f5908281d\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..1b523998081\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..ff10afd6e18\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..115a4c768a2\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..dcd3cd80833\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..459ca609d3a\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..8ca12fe024b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..8e19b410a1b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..b824ebdd48d\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..4c19a13c239\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\nindex 90bcc87b8e8..26f3404be26 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n@@ -1,15 +1,8 @@\n \n- \n- \n \n \ndiff --git a/templates/expo-template-bare-minimum/android/build.gradle b/templates/expo-template-bare-minimum/android/build.gradle\nindex 932bf7b34ba..0554dd156c1 100644\n--- a/templates/expo-template-bare-minimum/android/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/build.gradle\n@@ -1,41 +1,24 @@\n // Top-level build file where you can add configuration options common to all sub-projects/modules.\n \n buildscript {\n- ext {\n- buildToolsVersion = findProperty('android.buildToolsVersion') ?: '34.0.0'\n- minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '23')\n- compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '34')\n- targetSdkVersion = Integer.parseInt(findProperty('android.targetSdkVersion') ?: '34')\n- kotlinVersion = findProperty('android.kotlinVersion') ?: '1.9.23'\n-\n- ndkVersion = \"26.1.10909125\"\n- }\n- repositories {\n- google()\n- mavenCentral()\n- }\n- dependencies {\n- classpath('com.android.tools.build:gradle')\n- classpath('com.facebook.react:react-native-gradle-plugin')\n- classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')\n- }\n+ repositories {\n+ google()\n+ mavenCentral()\n+ }\n+ dependencies {\n+ classpath('com.android.tools.build:gradle')\n+ classpath('com.facebook.react:react-native-gradle-plugin')\n+ classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')\n+ }\n }\n \n-apply plugin: \"com.facebook.react.rootproject\"\n-\n allprojects {\n- repositories {\n- maven {\n- // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n- url(new File(['node', '--print', \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim(), '../android'))\n- }\n- maven {\n- // Android JSC is installed from npm\n- url(new File(['node', '--print', \"require.resolve('jsc-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), '../dist'))\n- }\n-\n- google()\n- mavenCentral()\n- maven { url 'https://www.jitpack.io' }\n- }\n+ repositories {\n+ google()\n+ mavenCentral()\n+ maven { url 'https://www.jitpack.io' }\n+ }\n }\n+\n+apply plugin: \"expo-root-project\"\n+apply plugin: \"com.facebook.react.rootproject\"\ndiff --git a/templates/expo-template-bare-minimum/android/gitignore b/templates/expo-template-bare-minimum/android/gitignore\nindex 8a6be077181..1ea9b6464ec 100644\n--- a/templates/expo-template-bare-minimum/android/gitignore\n+++ b/templates/expo-template-bare-minimum/android/gitignore\n@@ -12,5 +12,8 @@ local.properties\n *.hprof\n .cxx/\n \n+# generated inline modules\n+app/src/main/java/inline/\n+\n # Bundle artifacts\n *.jsbundle\ndiff --git a/templates/expo-template-bare-minimum/android/gradle.properties b/templates/expo-template-bare-minimum/android/gradle.properties\nindex 40220def8da..97271b9456f 100644\n--- a/templates/expo-template-bare-minimum/android/gradle.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle.properties\n@@ -15,16 +15,13 @@ org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m\n # When configured, Gradle will run in incubating parallel mode.\n # This option should only be used with decoupled projects. More details, visit\n # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n-# org.gradle.parallel=true\n+org.gradle.parallel=true\n \n # AndroidX package structure to make it clearer which packages are bundled with the\n # Android operating system, and which are packaged with your app's APK\n # https://developer.android.com/topic/libraries/support-library/androidx-rn\n android.useAndroidX=true\n \n-# Automatically convert third-party libraries to use AndroidX\n-android.enableJetifier=true\n-\n # Enable AAPT2 PNG crunching\n android.enablePngCrunchInReleaseBuilds=true\n \n@@ -38,12 +35,17 @@ reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64\n # your application. You should enable this flag either if you want\n # to write custom TurboModules/Fabric components OR use libraries that\n # are providing them.\n-newArchEnabled=false\n+newArchEnabled=true\n \n # Use this property to enable or disable the Hermes JS engine.\n # If set to false, you will be using JSC instead.\n hermesEnabled=true\n \n+# Use this property to enable edge-to-edge display support.\n+# This allows your app to draw behind system bars for an immersive UI.\n+# Note: Only works with ReactActivity and should not be used with custom Activity.\n+edgeToEdgeEnabled=true\n+\n # Enable GIF support in React Native images (~200 B increase)\n expo.gif.enabled=true\n # Enable webp support in React Native images (~85 KB increase)\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar\nindex e6441136f3d..61285a659d1 100644\nBinary files a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar and b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar differ\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\nindex 6f7a6eb33e8..37f78a6af83 100644\n--- a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n@@ -1,6 +1,6 @@\n distributionBase=GRADLE_USER_HOME\n distributionPath=wrapper/dists\n-distributionUrl=https\\://services.gradle.org/distributions/gradle-8.8-all.zip\n+distributionUrl=https\\://services.gradle.org/distributions/gradle-9.3.1-bin.zip\n networkTimeout=10000\n validateDistributionUrl=true\n zipStoreBase=GRADLE_USER_HOME\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew b/templates/expo-template-bare-minimum/android/gradlew\nindex 1aa94a42690..adff685a034 100755\n--- a/templates/expo-template-bare-minimum/android/gradlew\n+++ b/templates/expo-template-bare-minimum/android/gradlew\n@@ -1,7 +1,7 @@\n #!/bin/sh\n \n #\n-# Copyright © 2015-2021 the original authors.\n+# Copyright © 2015 the original authors.\n #\n # Licensed under the Apache License, Version 2.0 (the \"License\");\n # you may not use this file except in compliance with the License.\n@@ -15,6 +15,8 @@\n # See the License for the specific language governing permissions and\n # limitations under the License.\n #\n+# SPDX-License-Identifier: Apache-2.0\n+#\n \n ##############################################################################\n #\n@@ -55,7 +57,7 @@\n # Darwin, MinGW, and NonStop.\n #\n # (3) This script is generated from the Groovy template\n-# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt\n+# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt\n # within the Gradle project.\n #\n # You can find Gradle at https://github.com/gradle/gradle/.\n@@ -84,7 +86,7 @@ done\n # shellcheck disable=SC2034\n APP_BASE_NAME=${0##*/}\n # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)\n-APP_HOME=$( cd \"${APP_HOME:-./}\" > /dev/null && pwd -P ) || exit\n+APP_HOME=$( cd -P \"${APP_HOME:-./}\" > /dev/null && printf '%s\\n' \"$PWD\" ) || exit\n \n # Use the maximum available, or set MAX_FD != -1 to use that value.\n MAX_FD=maximum\n@@ -112,7 +114,6 @@ case \"$( uname )\" in #(\n NONSTOP* ) nonstop=true ;;\n esac\n \n-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n \n \n # Determine the Java command to use to start the JVM.\n@@ -170,7 +171,6 @@ fi\n # For Cygwin or MSYS, switch paths to Windows format before running java\n if \"$cygwin\" || \"$msys\" ; then\n APP_HOME=$( cygpath --path --mixed \"$APP_HOME\" )\n- CLASSPATH=$( cygpath --path --mixed \"$CLASSPATH\" )\n \n JAVACMD=$( cygpath --unix \"$JAVACMD\" )\n \n@@ -203,15 +203,14 @@ fi\n DEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n \n # Collect all arguments for the java command:\n-# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,\n+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,\n # and any embedded shellness will be escaped.\n # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be\n # treated as '${Hostname}' itself on the command line.\n \n set -- \\\n \"-Dorg.gradle.appname=$APP_BASE_NAME\" \\\n- -classpath \"$CLASSPATH\" \\\n- org.gradle.wrapper.GradleWrapperMain \\\n+ -jar \"$APP_HOME/gradle/wrapper/gradle-wrapper.jar\" \\\n \"$@\"\n \n # Stop when \"xargs\" is not available.\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew.bat b/templates/expo-template-bare-minimum/android/gradlew.bat\nindex 7101f8e4676..39baf4d6846 100644\n--- a/templates/expo-template-bare-minimum/android/gradlew.bat\n+++ b/templates/expo-template-bare-minimum/android/gradlew.bat\n@@ -1,3 +1,8 @@\n+@REM Copyright (c) Meta Platforms, Inc. and affiliates.\r\n+@REM\r\n+@REM This source code is licensed under the MIT license found in the\r\n+@REM LICENSE file in the root directory of this source tree.\r\n+\r\n @rem\r\n @rem Copyright 2015 the original author or authors.\r\n @rem\r\n@@ -13,6 +18,8 @@\n @rem See the License for the specific language governing permissions and\r\n @rem limitations under the License.\r\n @rem\r\n+@rem SPDX-License-Identifier: Apache-2.0\r\n+@rem\r\n \r\n @if \"%DEBUG%\"==\"\" @echo off\r\n @rem ##########################################################################\r\n@@ -68,11 +75,10 @@ goto fail\n :execute\r\n @rem Setup the command line\r\n \r\n-set CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\r\n \r\n \r\n @rem Execute Gradle\r\n-\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\r\n+\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -jar \"%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\" %*\r\n \r\n :end\r\n @rem End local scope for the variables with windows NT shell\r\ndiff --git a/templates/expo-template-bare-minimum/android/settings.gradle b/templates/expo-template-bare-minimum/android/settings.gradle\nindex 80b1bc3267b..7fe91512213 100644\n--- a/templates/expo-template-bare-minimum/android/settings.gradle\n+++ b/templates/expo-template-bare-minimum/android/settings.gradle\n@@ -1,66 +1,39 @@\n pluginManagement {\n- def version = providers.exec {\n- commandLine(\"node\", \"-e\", \"console.log(require('react-native/package.json').version);\")\n- }.standardOutput.asText.get().trim()\n- def (_, reactNativeMinor, reactNativePatch) = version.split(\"-\")[0].tokenize('.').collect { it.toInteger() }\n-\n- includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().toString())\n- if(reactNativeMinor == 74 && reactNativePatch <= 3){\n- includeBuild(\"react-settings-plugin\")\n- }\n+ def reactNativeGradlePlugin = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\")\n+ }.standardOutput.asText.get().trim()\n+ ).getParentFile().absolutePath\n+ includeBuild(reactNativeGradlePlugin)\n+ \n+ def expoPluginsPath = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('expo-modules-autolinking/package.json', { paths: [require.resolve('expo/package.json')] })\")\n+ }.standardOutput.asText.get().trim(),\n+ \"../android/expo-gradle-plugin\"\n+ ).absolutePath\n+ includeBuild(expoPluginsPath)\n }\n \n-plugins { id(\"com.facebook.react.settings\") }\n-\n-def getRNMinorVersion() {\n- def version = providers.exec {\n- commandLine(\"node\", \"-e\", \"console.log(require('react-native/package.json').version);\")\n- }.standardOutput.asText.get().trim()\n-\n- def coreVersion = version.split(\"-\")[0]\n- def (major, minor, patch) = coreVersion.tokenize('.').collect { it.toInteger() }\n-\n- return minor\n+plugins {\n+ id(\"com.facebook.react.settings\")\n+ id(\"expo-autolinking-settings\")\n }\n \n-if (getRNMinorVersion() >= 75) {\n- extensions.configure(com.facebook.react.ReactSettingsExtension) { ex ->\n- if (System.getenv('EXPO_UNSTABLE_CORE_AUTOLINKING') == '1') {\n- println('\\u001B[32mUsing expo-modules-autolinking as core autolinking source\\u001B[0m')\n- def command = [\n- 'node',\n- '--no-warnings',\n- '--eval',\n- 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n- 'react-native-config',\n- '--json',\n- '--platform',\n- 'android'\n- ].toList()\n- ex.autolinkLibrariesFromCommand(command)\n- } else {\n- ex.autolinkLibrariesFromCommand()\n- }\n+extensions.configure(com.facebook.react.ReactSettingsExtension) { ex ->\n+ if (System.getenv('EXPO_USE_COMMUNITY_AUTOLINKING') == '1') {\n+ ex.autolinkLibrariesFromCommand()\n+ } else {\n+ ex.autolinkLibrariesFromCommand(expoAutolinking.rnConfigCommand)\n }\n }\n+expoAutolinking.useExpoModules()\n \n rootProject.name = 'HelloWorld'\n \n-dependencyResolutionManagement {\n- versionCatalogs {\n- reactAndroidLibs {\n- from(files(new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim(), \"../gradle/libs.versions.toml\")))\n- }\n- }\n-}\n-\n-apply from: new File([\"node\", \"--print\", \"require.resolve('expo/package.json')\"].execute(null, rootDir).text.trim(), \"../scripts/autolinking.gradle\");\n-useExpoModules()\n-\n-if (getRNMinorVersion() < 75) {\n- apply from: new File([\"node\", \"--print\", \"require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), \"../native_modules.gradle\");\n- applyNativeModulesSettingsGradle(settings)\n-}\n+expoAutolinking.useExpoVersionCatalog()\n \n include ':app'\n-includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile())\n+includeBuild(expoAutolinking.reactNativeGradlePlugin)\ndiff --git a/templates/expo-template-bare-minimum/gitignore b/templates/expo-template-bare-minimum/gitignore\nindex 05647d55c75..d16e1efbb3f 100644\n--- a/templates/expo-template-bare-minimum/gitignore\n+++ b/templates/expo-template-bare-minimum/gitignore\n@@ -7,6 +7,7 @@ node_modules/\n .expo/\n dist/\n web-build/\n+expo-env.d.ts\n \n # Native\n *.orig.*\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\nindex f945940c256..39fa5afe55b 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n@@ -3,33 +3,25 @@\n \tarchiveVersion = 1;\n \tclasses = {\n \t};\n-\tobjectVersion = 46;\n+\tobjectVersion = 54;\n \tobjects = {\n \n /* Begin PBXBuildFile section */\n-\t\t13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };\n \t\t13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };\n-\t\t13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };\n \t\t3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; };\n-\t\t96905EF65AED1B983A6B3ABC /* libPods-HelloWorld.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */; };\n-\t\tB18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; };\n \t\tBB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; };\n+\t\tF11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F11748412D0307B40044C1D9 /* AppDelegate.swift */; };\n /* End PBXBuildFile section */\n \n /* Begin PBXFileReference section */\n \t\t13B07F961A680F5B00A75B9A /* HelloWorld.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloWorld.app; sourceTree = BUILT_PRODUCTS_DIR; };\n-\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = HelloWorld/AppDelegate.h; sourceTree = \"\"; };\n-\t\t13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = HelloWorld/AppDelegate.mm; sourceTree = \"\"; };\n \t\t13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = HelloWorld/Images.xcassets; sourceTree = \"\"; };\n \t\t13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = HelloWorld/Info.plist; sourceTree = \"\"; };\n-\t\t13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = HelloWorld/main.m; sourceTree = \"\"; };\n-\t\t58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-HelloWorld.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n-\t\t6C2E3173556A471DD304B334 /* 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 = \"\"; };\n-\t\t7A4D352CD337FB3A3BF06240 /* 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 = \"\"; };\n \t\tAA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = HelloWorld/SplashScreen.storyboard; sourceTree = \"\"; };\n \t\tBB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = \"\"; };\n \t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };\n-\t\tFAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = \"Pods/Target Support Files/Pods-HelloWorld/ExpoModulesProvider.swift\"; sourceTree = \"\"; };\n+\t\tF11748412D0307B40044C1D9 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = HelloWorld/AppDelegate.swift; sourceTree = \"\"; };\n+\t\tF11748442D0722820044C1D9 /* HelloWorld-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = \"HelloWorld-Bridging-Header.h\"; path = \"HelloWorld/HelloWorld-Bridging-Header.h\"; sourceTree = \"\"; };\n /* End PBXFileReference section */\n \n /* Begin PBXFrameworksBuildPhase section */\n@@ -37,7 +29,6 @@\n \t\t\tisa = PBXFrameworksBuildPhase;\n \t\t\tbuildActionMask = 2147483647;\n \t\t\tfiles = (\n-\t\t\t\t96905EF65AED1B983A6B3ABC /* libPods-HelloWorld.a in Frameworks */,\n \t\t\t);\n \t\t\trunOnlyForDeploymentPostprocessing = 0;\n \t\t};\n@@ -47,12 +38,11 @@\n \t\t13B07FAE1A68108700A75B9A /* HelloWorld */ = {\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n+\t\t\t\tF11748412D0307B40044C1D9 /* AppDelegate.swift */,\n+\t\t\t\tF11748442D0722820044C1D9 /* HelloWorld-Bridging-Header.h */,\n \t\t\t\tBB2F792B24A3F905000567C9 /* Supporting */,\n-\t\t\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */,\n-\t\t\t\t13B07FB01A68108700A75B9A /* AppDelegate.mm */,\n \t\t\t\t13B07FB51A68108700A75B9A /* Images.xcassets */,\n \t\t\t\t13B07FB61A68108700A75B9A /* Info.plist */,\n-\t\t\t\t13B07FB71A68108700A75B9A /* main.m */,\n \t\t\t\tAA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */,\n \t\t\t);\n \t\t\tname = HelloWorld;\n@@ -62,7 +52,6 @@\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n \t\t\t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */,\n-\t\t\t\t58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */,\n \t\t\t);\n \t\t\tname = Frameworks;\n \t\t\tsourceTree = \"\";\n@@ -81,8 +70,6 @@\n \t\t\t\t832341AE1AAA6A7D00B99B32 /* Libraries */,\n \t\t\t\t83CBBA001A601CBA00E9B192 /* Products */,\n \t\t\t\t2D16E6871FA4F8E400B85C8A /* Frameworks */,\n-\t\t\t\tD65327D7A22EEC0BE12398D9 /* Pods */,\n-\t\t\t\tD7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */,\n \t\t\t);\n \t\t\tindentWidth = 2;\n \t\t\tsourceTree = \"\";\n@@ -97,14 +84,6 @@\n \t\t\tname = Products;\n \t\t\tsourceTree = \"\";\n \t\t};\n-\t\t92DBD88DE9BF7D494EA9DA96 /* HelloWorld */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\tFAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */,\n-\t\t\t);\n-\t\t\tname = HelloWorld;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n \t\tBB2F792B24A3F905000567C9 /* Supporting */ = {\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n@@ -114,23 +93,6 @@\n \t\t\tpath = HelloWorld/Supporting;\n \t\t\tsourceTree = \"\";\n \t\t};\n-\t\tD65327D7A22EEC0BE12398D9 /* Pods */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\t6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */,\n-\t\t\t\t7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */,\n-\t\t\t);\n-\t\t\tpath = Pods;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n-\t\tD7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\t92DBD88DE9BF7D494EA9DA96 /* HelloWorld */,\n-\t\t\t);\n-\t\t\tname = ExpoModulesProviders;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n /* End PBXGroup section */\n \n /* Begin PBXNativeTarget section */\n@@ -206,6 +168,8 @@\n \t\t\tfiles = (\n \t\t\t);\n \t\t\tinputPaths = (\n+\t\t\t\t\"$(SRCROOT)/.xcode.env\",\n+\t\t\t\t\"$(SRCROOT)/.xcode.env.local\",\n \t\t\t);\n \t\t\tname = \"Bundle React Native code and images\";\n \t\t\toutputPaths = (\n@@ -265,9 +229,7 @@\n \t\t\tisa = PBXSourcesBuildPhase;\n \t\t\tbuildActionMask = 2147483647;\n \t\t\tfiles = (\n-\t\t\t\t13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,\n-\t\t\t\t13B07FC11A68108700A75B9A /* main.m in Sources */,\n-\t\t\t\tB18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */,\n+\t\t\t\tF11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */,\n \t\t\t);\n \t\t\trunOnlyForDeploymentPostprocessing = 0;\n \t\t};\n@@ -276,7 +238,6 @@\n /* Begin XCBuildConfiguration section */\n \t\t13B07F941A680F5B00A75B9A /* Debug */ = {\n \t\t\tisa = XCBuildConfiguration;\n-\t\t\tbaseConfigurationReference = 6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */;\n \t\t\tbuildSettings = {\n \t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n@@ -287,8 +248,12 @@\n \t\t\t\t\t\"FB_SONARKIT_ENABLED=1\",\n \t\t\t\t);\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t\t\"@executable_path/Frameworks\",\n+\t\t\t\t);\n+\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.4;\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -297,6 +262,7 @@\n \t\t\t\t);\n \t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = org.name.HelloWorld;\n \t\t\t\tPRODUCT_NAME = HelloWorld;\n+\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"HelloWorld/HelloWorld-Bridging-Header.h\";\n \t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n \t\t\t\tSWIFT_VERSION = 5.0;\n \t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n@@ -305,14 +271,17 @@\n \t\t};\n \t\t13B07F951A680F5B00A75B9A /* Release */ = {\n \t\t\tisa = XCBuildConfiguration;\n-\t\t\tbaseConfigurationReference = 7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */;\n \t\t\tbuildSettings = {\n \t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n \t\t\t\tCURRENT_PROJECT_VERSION = 1;\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t\t\"@executable_path/Frameworks\",\n+\t\t\t\t);\n+\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.4;\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -321,6 +290,7 @@\n \t\t\t\t);\n \t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = org.name.HelloWorld;\n \t\t\t\tPRODUCT_NAME = HelloWorld;\n+\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"HelloWorld/HelloWorld-Bridging-Header.h\";\n \t\t\t\tSWIFT_VERSION = 5.0;\n \t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n \t\t\t};\n@@ -373,8 +343,11 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t/usr/lib/swift,\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t);\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n \t\t\t\tONLY_ACTIVE_ARCH = YES;\n@@ -422,8 +395,11 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t/usr/lib/swift,\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t);\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n \t\t\t\tSDKROOT = iphoneos;\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\nnew file mode 100644\nindex 00000000000..9670a1ff07e\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\n@@ -0,0 +1,69 @@\n+internal import Expo\n+import React\n+import ReactAppDependencyProvider\n+\n+@main\n+class AppDelegate: ExpoAppDelegate {\n+ var window: UIWindow?\n+\n+ var reactNativeDelegate: ExpoReactNativeFactoryDelegate?\n+ var reactNativeFactory: RCTReactNativeFactory?\n+\n+ public override func application(\n+ _ application: UIApplication,\n+ didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil\n+ ) -> Bool {\n+ let delegate = ReactNativeDelegate()\n+ let factory = ExpoReactNativeFactory(delegate: delegate)\n+ delegate.dependencyProvider = RCTAppDependencyProvider()\n+\n+ reactNativeDelegate = delegate\n+ reactNativeFactory = factory\n+\n+#if os(iOS) || os(tvOS)\n+ window = UIWindow(frame: UIScreen.main.bounds)\n+ factory.startReactNative(\n+ withModuleName: \"main\",\n+ in: window,\n+ launchOptions: launchOptions)\n+#endif\n+\n+ return super.application(application, didFinishLaunchingWithOptions: launchOptions)\n+ }\n+\n+ // Linking API\n+ public override func application(\n+ _ app: UIApplication,\n+ open url: URL,\n+ options: [UIApplication.OpenURLOptionsKey: Any] = [:]\n+ ) -> Bool {\n+ return super.application(app, open: url, options: options) || RCTLinkingManager.application(app, open: url, options: options)\n+ }\n+\n+ // Universal Links\n+ public override func application(\n+ _ application: UIApplication,\n+ continue userActivity: NSUserActivity,\n+ restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void\n+ ) -> Bool {\n+ let result = RCTLinkingManager.application(application, continue: userActivity, restorationHandler: restorationHandler)\n+ return super.application(application, continue: userActivity, restorationHandler: restorationHandler) || result\n+ }\n+}\n+\n+class ReactNativeDelegate: ExpoReactNativeFactoryDelegate {\n+ // Extension point for config-plugins\n+\n+ override func sourceURL(for bridge: RCTBridge) -> URL? {\n+ // needed to return the correct URL for expo-dev-client.\n+ bridge.bundleURL ?? bundleURL()\n+ }\n+\n+ override func bundleURL() -> URL? {\n+#if DEBUG\n+ return RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: \".expo/.virtual-metro-entry\")\n+#else\n+ return Bundle.main.url(forResource: \"main\", withExtension: \"jsbundle\")\n+#endif\n+ }\n+}\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h b/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h\nnew file mode 100644\nindex 00000000000..8361941afc2\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h\n@@ -0,0 +1,3 @@\n+//\n+// Use this file to import your target's public headers that you would like to expose to Swift.\n+//\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json\nnew file mode 100644\nindex 00000000000..255637e0fdb\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json\n@@ -0,0 +1,21 @@\n+{\n+ \"images\" : [\n+ {\n+ \"filename\" : \"SplashScreenLegacy.png\",\n+ \"idiom\" : \"universal\",\n+ \"scale\" : \"1x\"\n+ },\n+ {\n+ \"idiom\" : \"universal\",\n+ \"scale\" : \"2x\"\n+ },\n+ {\n+ \"idiom\" : \"universal\",\n+ \"scale\" : \"3x\"\n+ }\n+ ],\n+ \"info\" : {\n+ \"author\" : \"xcode\",\n+ \"version\" : 1\n+ }\n+}\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png\nnew file mode 100644\nindex 00000000000..bbf8e9e6016\nBinary files /dev/null and b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png differ\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist b/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist\nindex 53d78e89033..596dc7ce6b5 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist\n@@ -24,6 +24,8 @@\n \t1\n \tLSRequiresIPhoneOS\n \t\n+\tLSMinimumSystemVersion\n+\t12.0\n \tNSAppTransportSecurity\n \t\n \t\tNSAllowsArbitraryLoads\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\nindex 24eec3df5cb..58d21796e1d 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n@@ -1,91 +1,47 @@\n \n-\n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n+\n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n \ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex 57c1dd38343..a2af7b4a5de 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -4,39 +4,43 @@ require File.join(File.dirname(`node --print \"require.resolve('react-native/pack\n require 'json'\n podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}\n \n-ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0'\n-ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+def ccache_enabled?(podfile_properties)\n+ # Environment variable takes precedence\n+ return ENV['USE_CCACHE'] == '1' if ENV['USE_CCACHE']\n \n-use_autolinking_method_symbol = ('use' + '_native' + '_modules!').to_sym\n-origin_autolinking_method = self.method(use_autolinking_method_symbol)\n-self.define_singleton_method(use_autolinking_method_symbol) do |*args|\n- if ENV['EXPO_UNSTABLE_CORE_AUTOLINKING'] == '1'\n- Pod::UI.puts('Using expo-modules-autolinking as core autolinking source'.green)\n+ # Fall back to Podfile properties\n+ podfile_properties['apple.ccacheEnabled'] == 'true'\n+end\n+\n+ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+ENV['RCT_USE_RN_DEP'] ||= '0' if podfile_properties['ios.buildReactNativeFromSource'] == 'true'\n+ENV['RCT_USE_PREBUILT_RNCORE'] ||= '0' if podfile_properties['ios.buildReactNativeFromSource'] == 'true'\n+ENV['RCT_HERMES_V1_ENABLED'] ||= '1' if podfile_properties['expo.useHermesV1'] == 'true'\n+ENV['EXPO_USE_PRECOMPILED_MODULES'] ||= '1' if podfile_properties['EXPO_USE_PRECOMPILED_MODULES'] == '1'\n+platform :ios, podfile_properties['ios.deploymentTarget'] || '16.4'\n+\n+prepare_react_native_project!\n+\n+target 'HelloWorld' do\n+ use_expo_modules!\n+\n+ if ENV['EXPO_USE_COMMUNITY_AUTOLINKING'] == '1'\n+ config_command = ['node', '-e', \"process.argv=['', '', 'config'];require('@react-native-community/cli').run()\"];\n+ else\n config_command = [\n 'node',\n '--no-warnings',\n '--eval',\n- 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n+ 'require(\\'expo/bin/autolinking\\')',\n+ 'expo-modules-autolinking',\n 'react-native-config',\n '--json',\n '--platform',\n 'ios'\n ]\n- origin_autolinking_method.call(config_command)\n- else\n- origin_autolinking_method.call()\n end\n-end\n-\n-platform :ios, podfile_properties['ios.deploymentTarget'] || '13.4'\n-install! 'cocoapods',\n- :deterministic_uuids => false\n \n-prepare_react_native_project!\n-\n-target 'HelloWorld' do\n- use_expo_modules!\n- config = use_native_modules!\n+ config = use_native_modules!(config_command)\n \n use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks']\n use_frameworks! :linkage => ENV['USE_FRAMEWORKS'].to_sym if ENV['USE_FRAMEWORKS']\n@@ -54,26 +58,7 @@ target 'HelloWorld' do\n installer,\n config[:reactNativePath],\n :mac_catalyst_enabled => false,\n- :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true',\n+ :ccache_enabled => ccache_enabled?(podfile_properties),\n )\n-\n- # This is necessary for Xcode 14, because it signs resource bundles by default\n- # when building for devices.\n- installer.target_installation_results.pod_target_installation_results\n- .each do |pod_name, target_installation_result|\n- target_installation_result.resource_bundle_targets.each do |resource_bundle_target|\n- resource_bundle_target.build_configurations.each do |config|\n- config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'\n- end\n- end\n- end\n- end\n-\n- post_integrate do |installer|\n- begin\n- expo_patch_react_imports!(installer)\n- rescue => e\n- Pod::UI.warn e\n- end\n end\n end\ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex 563853071f0..e6346b6d456 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -1,7 +1,8 @@\n {\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n- \"version\": \"51.0.56\",\n+ \"license\": \"0BSD\",\n+ \"version\": \"55.0.14\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -10,12 +11,9 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~51.0.28\",\n- \"expo-status-bar\": \"~1.12.1\",\n- \"react\": \"18.2.0\",\n- \"react-native\": \"0.74.5\"\n- },\n- \"devDependencies\": {\n- \"@babel/core\": \"^7.20.0\"\n+ \"expo\": \"~55.0.2\",\n+ \"expo-status-bar\": \"~55.0.4\",\n+ \"react\": \"19.2.3\",\n+ \"react-native\": \"0.85.0\"\n }\n }\n","52..unversioned":"diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle\nindex 84879d83acd..fc185e53bc3 100644\n--- a/templates/expo-template-bare-minimum/android/app/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/app/build.gradle\n@@ -11,9 +11,10 @@ def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath()\n react {\n entryFile = file([\"node\", \"-e\", \"require('expo/scripts/resolveAppEntry')\", projectRoot, \"android\", \"absolute\"].execute(null, rootDir).text.trim())\n reactNativeDir = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n- hermesCommand = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/sdks/hermesc/%OS-BIN%/hermesc\"\n+ hermesCommand = new File([\"node\", \"--print\", \"require.resolve('hermes-compiler/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/hermesc/%OS-BIN%/hermesc\"\n codegenDir = new File([\"node\", \"--print\", \"require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n \n+ enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean()\n // Use Expo CLI to bundle the app, this ensures the Metro config\n // works correctly with Expo projects.\n cliFile = new File([\"node\", \"--print\", \"require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })\"].execute(null, rootDir).text.trim())\n@@ -63,9 +64,9 @@ react {\n }\n \n /**\n- * Set this to true to Run Proguard on Release builds to minify the Java bytecode.\n+ * Set this to true in release builds to optimize the app using [R8](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization).\n */\n-def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInReleaseBuilds') ?: false).toBoolean()\n+def enableMinifyInReleaseBuilds = (findProperty('android.enableMinifyInReleaseBuilds') ?: false).toBoolean()\n \n /**\n * The preferred build flavor of JavaScriptCore (JSC)\n@@ -78,7 +79,7 @@ def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInRelea\n * give correct results when using with locales other than en-US. Note that\n * this variant is about 6MiB larger per architecture than default.\n */\n-def jscFlavor = 'org.webkit:android-jsc:+'\n+def jscFlavor = 'io.github.react-native-community:jsc-android:2026004.+'\n \n android {\n ndkVersion rootProject.ext.ndkVersion\n@@ -93,6 +94,8 @@ android {\n targetSdkVersion rootProject.ext.targetSdkVersion\n versionCode 1\n versionName \"1.0\"\n+\n+ buildConfigField \"String\", \"REACT_NATIVE_RELEASE_LEVEL\", \"\\\"${findProperty('reactNativeReleaseLevel') ?: 'stable'}\\\"\"\n }\n signingConfigs {\n debug {\n@@ -110,15 +113,18 @@ android {\n // Caution! In production, you need to generate your own keystore file.\n // see https://reactnative.dev/docs/signed-apk-android.\n signingConfig signingConfigs.debug\n- shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false)\n- minifyEnabled enableProguardInReleaseBuilds\n+ def enableShrinkResources = findProperty('android.enableShrinkResourcesInReleaseBuilds') ?: 'false'\n+ shrinkResources enableShrinkResources.toBoolean()\n+ minifyEnabled enableMinifyInReleaseBuilds\n proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n- crunchPngs (findProperty('android.enablePngCrunchInReleaseBuilds')?.toBoolean() ?: true)\n+ def enablePngCrunchInRelease = findProperty('android.enablePngCrunchInReleaseBuilds') ?: 'true'\n+ crunchPngs enablePngCrunchInRelease.toBoolean()\n }\n }\n packagingOptions {\n jniLibs {\n- useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false)\n+ def enableLegacyPackaging = findProperty('expo.useLegacyPackaging') ?: 'false'\n+ useLegacyPackaging enableLegacyPackaging.toBoolean()\n }\n }\n androidResources {\n@@ -156,15 +162,15 @@ dependencies {\n \n if (isGifEnabled) {\n // For animated gif support\n- implementation(\"com.facebook.fresco:animated-gif:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-gif:${expoLibs.versions.fresco.get()}\")\n }\n \n if (isWebpEnabled) {\n // For webp support\n- implementation(\"com.facebook.fresco:webpsupport:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:webpsupport:${expoLibs.versions.fresco.get()}\")\n if (isWebpAnimatedEnabled) {\n // Animated webp support\n- implementation(\"com.facebook.fresco:animated-webp:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-webp:${expoLibs.versions.fresco.get()}\")\n }\n }\n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\nnew file mode 100644\nindex 00000000000..3ec2507bab7\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\n@@ -0,0 +1,7 @@\n+\n+\n+ \n+\n+ \n+\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\nindex 150248b6b3c..14bdba124ab 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n@@ -1,12 +1,13 @@\n-\n+\n \n \n \n \n \n \n- \n- \n+ \n+ \n \n \n \n@@ -19,7 +20,7 @@\n \n \n \n- \n+ \n \n \n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\nindex e61349d1301..cbb5ddb85d0 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n@@ -5,48 +5,36 @@ import android.content.res.Configuration\n \n import com.facebook.react.PackageList\n import com.facebook.react.ReactApplication\n-import com.facebook.react.ReactNativeHost\n+import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative\n import com.facebook.react.ReactPackage\n import com.facebook.react.ReactHost\n-import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load\n-import com.facebook.react.defaults.DefaultReactNativeHost\n-import com.facebook.react.soloader.OpenSourceMergedSoMapping\n-import com.facebook.soloader.SoLoader\n+import com.facebook.react.common.ReleaseLevel\n+import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint\n \n import expo.modules.ApplicationLifecycleDispatcher\n-import expo.modules.ReactNativeHostWrapper\n+import expo.modules.ExpoReactHostFactory\n \n class MainApplication : Application(), ReactApplication {\n \n- override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper(\n- this,\n- object : DefaultReactNativeHost(this) {\n- override fun getPackages(): List {\n- val packages = PackageList(this).packages\n- // Packages that cannot be autolinked yet can be added manually here, for example:\n- // packages.add(new MyReactNativePackage());\n- return packages\n- }\n-\n- override fun getJSMainModuleName(): String = \".expo/.virtual-metro-entry\"\n-\n- override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG\n-\n- override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED\n- override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED\n- }\n- )\n-\n- override val reactHost: ReactHost\n- get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost)\n+ override val reactHost: ReactHost by lazy {\n+ ExpoReactHostFactory.getDefaultReactHost(\n+ context = applicationContext,\n+ packageList =\n+ PackageList(this).packages.apply {\n+ // Packages that cannot be autolinked yet can be added manually here, for example:\n+ // add(MyReactNativePackage())\n+ }\n+ )\n+ }\n \n override fun onCreate() {\n super.onCreate()\n- SoLoader.init(this, OpenSourceMergedSoMapping)\n- if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {\n- // If you opted-in for the New Architecture, we load the native entry point for this app.\n- load()\n+ DefaultNewArchitectureEntryPoint.releaseLevel = try {\n+ ReleaseLevel.valueOf(BuildConfig.REACT_NATIVE_RELEASE_LEVEL.uppercase())\n+ } catch (e: IllegalArgumentException) {\n+ ReleaseLevel.STABLE\n }\n+ loadReactNative(this)\n ApplicationLifecycleDispatcher.onApplicationCreate(this)\n }\n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\nindex 51fbc1e5a72..26f3404be26 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n@@ -1,14 +1,7 @@\n \n- \n- \n \ndiff --git a/templates/expo-template-bare-minimum/android/build.gradle b/templates/expo-template-bare-minimum/android/build.gradle\nindex abbcb8ec8a1..0554dd156c1 100644\n--- a/templates/expo-template-bare-minimum/android/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/build.gradle\n@@ -1,41 +1,24 @@\n // Top-level build file where you can add configuration options common to all sub-projects/modules.\n \n buildscript {\n- ext {\n- buildToolsVersion = findProperty('android.buildToolsVersion') ?: '35.0.0'\n- minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '24')\n- compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '35')\n- targetSdkVersion = Integer.parseInt(findProperty('android.targetSdkVersion') ?: '34')\n- kotlinVersion = findProperty('android.kotlinVersion') ?: '1.9.25'\n-\n- ndkVersion = \"26.1.10909125\"\n- }\n- repositories {\n- google()\n- mavenCentral()\n- }\n- dependencies {\n- classpath('com.android.tools.build:gradle')\n- classpath('com.facebook.react:react-native-gradle-plugin')\n- classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')\n- }\n+ repositories {\n+ google()\n+ mavenCentral()\n+ }\n+ dependencies {\n+ classpath('com.android.tools.build:gradle')\n+ classpath('com.facebook.react:react-native-gradle-plugin')\n+ classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')\n+ }\n }\n \n-apply plugin: \"com.facebook.react.rootproject\"\n-\n allprojects {\n- repositories {\n- maven {\n- // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n- url(new File(['node', '--print', \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim(), '../android'))\n- }\n- maven {\n- // Android JSC is installed from npm\n- url(new File(['node', '--print', \"require.resolve('jsc-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), '../dist'))\n- }\n-\n- google()\n- mavenCentral()\n- maven { url 'https://www.jitpack.io' }\n- }\n+ repositories {\n+ google()\n+ mavenCentral()\n+ maven { url 'https://www.jitpack.io' }\n+ }\n }\n+\n+apply plugin: \"expo-root-project\"\n+apply plugin: \"com.facebook.react.rootproject\"\ndiff --git a/templates/expo-template-bare-minimum/android/gitignore b/templates/expo-template-bare-minimum/android/gitignore\nindex 8a6be077181..1ea9b6464ec 100644\n--- a/templates/expo-template-bare-minimum/android/gitignore\n+++ b/templates/expo-template-bare-minimum/android/gitignore\n@@ -12,5 +12,8 @@ local.properties\n *.hprof\n .cxx/\n \n+# generated inline modules\n+app/src/main/java/inline/\n+\n # Bundle artifacts\n *.jsbundle\ndiff --git a/templates/expo-template-bare-minimum/android/gradle.properties b/templates/expo-template-bare-minimum/android/gradle.properties\nindex de47429c64c..97271b9456f 100644\n--- a/templates/expo-template-bare-minimum/android/gradle.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle.properties\n@@ -15,7 +15,7 @@ org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m\n # When configured, Gradle will run in incubating parallel mode.\n # This option should only be used with decoupled projects. More details, visit\n # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n-# org.gradle.parallel=true\n+org.gradle.parallel=true\n \n # AndroidX package structure to make it clearer which packages are bundled with the\n # Android operating system, and which are packaged with your app's APK\n@@ -35,12 +35,17 @@ reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64\n # your application. You should enable this flag either if you want\n # to write custom TurboModules/Fabric components OR use libraries that\n # are providing them.\n-newArchEnabled=false\n+newArchEnabled=true\n \n # Use this property to enable or disable the Hermes JS engine.\n # If set to false, you will be using JSC instead.\n hermesEnabled=true\n \n+# Use this property to enable edge-to-edge display support.\n+# This allows your app to draw behind system bars for an immersive UI.\n+# Note: Only works with ReactActivity and should not be used with custom Activity.\n+edgeToEdgeEnabled=true\n+\n # Enable GIF support in React Native images (~200 B increase)\n expo.gif.enabled=true\n # Enable webp support in React Native images (~85 KB increase)\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar\nindex a4b76b9530d..61285a659d1 100644\nBinary files a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar and b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar differ\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\nindex 79eb9d003fe..37f78a6af83 100644\n--- a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n@@ -1,6 +1,6 @@\n distributionBase=GRADLE_USER_HOME\n distributionPath=wrapper/dists\n-distributionUrl=https\\://services.gradle.org/distributions/gradle-8.10.2-all.zip\n+distributionUrl=https\\://services.gradle.org/distributions/gradle-9.3.1-bin.zip\n networkTimeout=10000\n validateDistributionUrl=true\n zipStoreBase=GRADLE_USER_HOME\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew b/templates/expo-template-bare-minimum/android/gradlew\nindex f5feea6d6b1..adff685a034 100755\n--- a/templates/expo-template-bare-minimum/android/gradlew\n+++ b/templates/expo-template-bare-minimum/android/gradlew\n@@ -1,7 +1,7 @@\n #!/bin/sh\n \n #\n-# Copyright © 2015-2021 the original authors.\n+# Copyright © 2015 the original authors.\n #\n # Licensed under the Apache License, Version 2.0 (the \"License\");\n # you may not use this file except in compliance with the License.\n@@ -86,8 +86,7 @@ done\n # shellcheck disable=SC2034\n APP_BASE_NAME=${0##*/}\n # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)\n-APP_HOME=$( cd -P \"${APP_HOME:-./}\" > /dev/null && printf '%s\n-' \"$PWD\" ) || exit\n+APP_HOME=$( cd -P \"${APP_HOME:-./}\" > /dev/null && printf '%s\\n' \"$PWD\" ) || exit\n \n # Use the maximum available, or set MAX_FD != -1 to use that value.\n MAX_FD=maximum\n@@ -115,7 +114,6 @@ case \"$( uname )\" in #(\n NONSTOP* ) nonstop=true ;;\n esac\n \n-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n \n \n # Determine the Java command to use to start the JVM.\n@@ -173,7 +171,6 @@ fi\n # For Cygwin or MSYS, switch paths to Windows format before running java\n if \"$cygwin\" || \"$msys\" ; then\n APP_HOME=$( cygpath --path --mixed \"$APP_HOME\" )\n- CLASSPATH=$( cygpath --path --mixed \"$CLASSPATH\" )\n \n JAVACMD=$( cygpath --unix \"$JAVACMD\" )\n \n@@ -206,15 +203,14 @@ fi\n DEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n \n # Collect all arguments for the java command:\n-# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,\n+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,\n # and any embedded shellness will be escaped.\n # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be\n # treated as '${Hostname}' itself on the command line.\n \n set -- \\\n \"-Dorg.gradle.appname=$APP_BASE_NAME\" \\\n- -classpath \"$CLASSPATH\" \\\n- org.gradle.wrapper.GradleWrapperMain \\\n+ -jar \"$APP_HOME/gradle/wrapper/gradle-wrapper.jar\" \\\n \"$@\"\n \n # Stop when \"xargs\" is not available.\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew.bat b/templates/expo-template-bare-minimum/android/gradlew.bat\nindex 9b42019c791..39baf4d6846 100644\n--- a/templates/expo-template-bare-minimum/android/gradlew.bat\n+++ b/templates/expo-template-bare-minimum/android/gradlew.bat\n@@ -1,3 +1,8 @@\n+@REM Copyright (c) Meta Platforms, Inc. and affiliates.\r\n+@REM\r\n+@REM This source code is licensed under the MIT license found in the\r\n+@REM LICENSE file in the root directory of this source tree.\r\n+\r\n @rem\r\n @rem Copyright 2015 the original author or authors.\r\n @rem\r\n@@ -70,11 +75,10 @@ goto fail\n :execute\r\n @rem Setup the command line\r\n \r\n-set CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\r\n \r\n \r\n @rem Execute Gradle\r\n-\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\r\n+\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -jar \"%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\" %*\r\n \r\n :end\r\n @rem End local scope for the variables with windows NT shell\r\ndiff --git a/templates/expo-template-bare-minimum/android/settings.gradle b/templates/expo-template-bare-minimum/android/settings.gradle\nindex 39b188e065c..7fe91512213 100644\n--- a/templates/expo-template-bare-minimum/android/settings.gradle\n+++ b/templates/expo-template-bare-minimum/android/settings.gradle\n@@ -1,38 +1,39 @@\n pluginManagement {\n- includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().toString())\n+ def reactNativeGradlePlugin = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\")\n+ }.standardOutput.asText.get().trim()\n+ ).getParentFile().absolutePath\n+ includeBuild(reactNativeGradlePlugin)\n+ \n+ def expoPluginsPath = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('expo-modules-autolinking/package.json', { paths: [require.resolve('expo/package.json')] })\")\n+ }.standardOutput.asText.get().trim(),\n+ \"../android/expo-gradle-plugin\"\n+ ).absolutePath\n+ includeBuild(expoPluginsPath)\n+}\n+\n+plugins {\n+ id(\"com.facebook.react.settings\")\n+ id(\"expo-autolinking-settings\")\n }\n-plugins { id(\"com.facebook.react.settings\") }\n \n extensions.configure(com.facebook.react.ReactSettingsExtension) { ex ->\n if (System.getenv('EXPO_USE_COMMUNITY_AUTOLINKING') == '1') {\n ex.autolinkLibrariesFromCommand()\n } else {\n- def command = [\n- 'node',\n- '--no-warnings',\n- '--eval',\n- 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n- 'react-native-config',\n- '--json',\n- '--platform',\n- 'android'\n- ].toList()\n- ex.autolinkLibrariesFromCommand(command)\n+ ex.autolinkLibrariesFromCommand(expoAutolinking.rnConfigCommand)\n }\n }\n+expoAutolinking.useExpoModules()\n \n rootProject.name = 'HelloWorld'\n \n-dependencyResolutionManagement {\n- versionCatalogs {\n- reactAndroidLibs {\n- from(files(new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim(), \"../gradle/libs.versions.toml\")))\n- }\n- }\n-}\n-\n-apply from: new File([\"node\", \"--print\", \"require.resolve('expo/package.json')\"].execute(null, rootDir).text.trim(), \"../scripts/autolinking.gradle\");\n-useExpoModules()\n+expoAutolinking.useExpoVersionCatalog()\n \n include ':app'\n-includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile())\n+includeBuild(expoAutolinking.reactNativeGradlePlugin)\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\nindex 1ccb9b422d5..39fa5afe55b 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n@@ -3,33 +3,25 @@\n \tarchiveVersion = 1;\n \tclasses = {\n \t};\n-\tobjectVersion = 46;\n+\tobjectVersion = 54;\n \tobjects = {\n \n /* Begin PBXBuildFile section */\n-\t\t13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };\n \t\t13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };\n-\t\t13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };\n \t\t3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; };\n-\t\t96905EF65AED1B983A6B3ABC /* libPods-HelloWorld.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */; };\n-\t\tB18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; };\n \t\tBB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; };\n+\t\tF11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F11748412D0307B40044C1D9 /* AppDelegate.swift */; };\n /* End PBXBuildFile section */\n \n /* Begin PBXFileReference section */\n \t\t13B07F961A680F5B00A75B9A /* HelloWorld.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloWorld.app; sourceTree = BUILT_PRODUCTS_DIR; };\n-\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = HelloWorld/AppDelegate.h; sourceTree = \"\"; };\n-\t\t13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = HelloWorld/AppDelegate.mm; sourceTree = \"\"; };\n \t\t13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = HelloWorld/Images.xcassets; sourceTree = \"\"; };\n \t\t13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = HelloWorld/Info.plist; sourceTree = \"\"; };\n-\t\t13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = HelloWorld/main.m; sourceTree = \"\"; };\n-\t\t58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-HelloWorld.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n-\t\t6C2E3173556A471DD304B334 /* 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 = \"\"; };\n-\t\t7A4D352CD337FB3A3BF06240 /* 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 = \"\"; };\n \t\tAA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = HelloWorld/SplashScreen.storyboard; sourceTree = \"\"; };\n \t\tBB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = \"\"; };\n \t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };\n-\t\tFAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = \"Pods/Target Support Files/Pods-HelloWorld/ExpoModulesProvider.swift\"; sourceTree = \"\"; };\n+\t\tF11748412D0307B40044C1D9 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = HelloWorld/AppDelegate.swift; sourceTree = \"\"; };\n+\t\tF11748442D0722820044C1D9 /* HelloWorld-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = \"HelloWorld-Bridging-Header.h\"; path = \"HelloWorld/HelloWorld-Bridging-Header.h\"; sourceTree = \"\"; };\n /* End PBXFileReference section */\n \n /* Begin PBXFrameworksBuildPhase section */\n@@ -37,7 +29,6 @@\n \t\t\tisa = PBXFrameworksBuildPhase;\n \t\t\tbuildActionMask = 2147483647;\n \t\t\tfiles = (\n-\t\t\t\t96905EF65AED1B983A6B3ABC /* libPods-HelloWorld.a in Frameworks */,\n \t\t\t);\n \t\t\trunOnlyForDeploymentPostprocessing = 0;\n \t\t};\n@@ -47,12 +38,11 @@\n \t\t13B07FAE1A68108700A75B9A /* HelloWorld */ = {\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n+\t\t\t\tF11748412D0307B40044C1D9 /* AppDelegate.swift */,\n+\t\t\t\tF11748442D0722820044C1D9 /* HelloWorld-Bridging-Header.h */,\n \t\t\t\tBB2F792B24A3F905000567C9 /* Supporting */,\n-\t\t\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */,\n-\t\t\t\t13B07FB01A68108700A75B9A /* AppDelegate.mm */,\n \t\t\t\t13B07FB51A68108700A75B9A /* Images.xcassets */,\n \t\t\t\t13B07FB61A68108700A75B9A /* Info.plist */,\n-\t\t\t\t13B07FB71A68108700A75B9A /* main.m */,\n \t\t\t\tAA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */,\n \t\t\t);\n \t\t\tname = HelloWorld;\n@@ -62,7 +52,6 @@\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n \t\t\t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */,\n-\t\t\t\t58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */,\n \t\t\t);\n \t\t\tname = Frameworks;\n \t\t\tsourceTree = \"\";\n@@ -81,8 +70,6 @@\n \t\t\t\t832341AE1AAA6A7D00B99B32 /* Libraries */,\n \t\t\t\t83CBBA001A601CBA00E9B192 /* Products */,\n \t\t\t\t2D16E6871FA4F8E400B85C8A /* Frameworks */,\n-\t\t\t\tD65327D7A22EEC0BE12398D9 /* Pods */,\n-\t\t\t\tD7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */,\n \t\t\t);\n \t\t\tindentWidth = 2;\n \t\t\tsourceTree = \"\";\n@@ -97,14 +84,6 @@\n \t\t\tname = Products;\n \t\t\tsourceTree = \"\";\n \t\t};\n-\t\t92DBD88DE9BF7D494EA9DA96 /* HelloWorld */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\tFAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */,\n-\t\t\t);\n-\t\t\tname = HelloWorld;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n \t\tBB2F792B24A3F905000567C9 /* Supporting */ = {\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n@@ -114,23 +93,6 @@\n \t\t\tpath = HelloWorld/Supporting;\n \t\t\tsourceTree = \"\";\n \t\t};\n-\t\tD65327D7A22EEC0BE12398D9 /* Pods */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\t6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */,\n-\t\t\t\t7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */,\n-\t\t\t);\n-\t\t\tpath = Pods;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n-\t\tD7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\t92DBD88DE9BF7D494EA9DA96 /* HelloWorld */,\n-\t\t\t);\n-\t\t\tname = ExpoModulesProviders;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n /* End PBXGroup section */\n \n /* Begin PBXNativeTarget section */\n@@ -206,6 +168,8 @@\n \t\t\tfiles = (\n \t\t\t);\n \t\t\tinputPaths = (\n+\t\t\t\t\"$(SRCROOT)/.xcode.env\",\n+\t\t\t\t\"$(SRCROOT)/.xcode.env.local\",\n \t\t\t);\n \t\t\tname = \"Bundle React Native code and images\";\n \t\t\toutputPaths = (\n@@ -265,9 +229,7 @@\n \t\t\tisa = PBXSourcesBuildPhase;\n \t\t\tbuildActionMask = 2147483647;\n \t\t\tfiles = (\n-\t\t\t\t13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,\n-\t\t\t\t13B07FC11A68108700A75B9A /* main.m in Sources */,\n-\t\t\t\tB18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */,\n+\t\t\t\tF11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */,\n \t\t\t);\n \t\t\trunOnlyForDeploymentPostprocessing = 0;\n \t\t};\n@@ -276,7 +238,6 @@\n /* Begin XCBuildConfiguration section */\n \t\t13B07F941A680F5B00A75B9A /* Debug */ = {\n \t\t\tisa = XCBuildConfiguration;\n-\t\t\tbaseConfigurationReference = 6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */;\n \t\t\tbuildSettings = {\n \t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n@@ -287,8 +248,12 @@\n \t\t\t\t\t\"FB_SONARKIT_ENABLED=1\",\n \t\t\t\t);\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t\t\"@executable_path/Frameworks\",\n+\t\t\t\t);\n+\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.4;\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -297,6 +262,7 @@\n \t\t\t\t);\n \t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = org.name.HelloWorld;\n \t\t\t\tPRODUCT_NAME = HelloWorld;\n+\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"HelloWorld/HelloWorld-Bridging-Header.h\";\n \t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n \t\t\t\tSWIFT_VERSION = 5.0;\n \t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n@@ -305,14 +271,17 @@\n \t\t};\n \t\t13B07F951A680F5B00A75B9A /* Release */ = {\n \t\t\tisa = XCBuildConfiguration;\n-\t\t\tbaseConfigurationReference = 7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */;\n \t\t\tbuildSettings = {\n \t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n \t\t\t\tCURRENT_PROJECT_VERSION = 1;\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t\t\"@executable_path/Frameworks\",\n+\t\t\t\t);\n+\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.4;\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -321,6 +290,7 @@\n \t\t\t\t);\n \t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = org.name.HelloWorld;\n \t\t\t\tPRODUCT_NAME = HelloWorld;\n+\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"HelloWorld/HelloWorld-Bridging-Header.h\";\n \t\t\t\tSWIFT_VERSION = 5.0;\n \t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n \t\t\t};\n@@ -373,8 +343,11 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t/usr/lib/swift,\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t);\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n \t\t\t\tONLY_ACTIVE_ARCH = YES;\n@@ -422,8 +395,11 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t/usr/lib/swift,\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t);\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n \t\t\t\tSDKROOT = iphoneos;\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\nnew file mode 100644\nindex 00000000000..9670a1ff07e\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\n@@ -0,0 +1,69 @@\n+internal import Expo\n+import React\n+import ReactAppDependencyProvider\n+\n+@main\n+class AppDelegate: ExpoAppDelegate {\n+ var window: UIWindow?\n+\n+ var reactNativeDelegate: ExpoReactNativeFactoryDelegate?\n+ var reactNativeFactory: RCTReactNativeFactory?\n+\n+ public override func application(\n+ _ application: UIApplication,\n+ didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil\n+ ) -> Bool {\n+ let delegate = ReactNativeDelegate()\n+ let factory = ExpoReactNativeFactory(delegate: delegate)\n+ delegate.dependencyProvider = RCTAppDependencyProvider()\n+\n+ reactNativeDelegate = delegate\n+ reactNativeFactory = factory\n+\n+#if os(iOS) || os(tvOS)\n+ window = UIWindow(frame: UIScreen.main.bounds)\n+ factory.startReactNative(\n+ withModuleName: \"main\",\n+ in: window,\n+ launchOptions: launchOptions)\n+#endif\n+\n+ return super.application(application, didFinishLaunchingWithOptions: launchOptions)\n+ }\n+\n+ // Linking API\n+ public override func application(\n+ _ app: UIApplication,\n+ open url: URL,\n+ options: [UIApplication.OpenURLOptionsKey: Any] = [:]\n+ ) -> Bool {\n+ return super.application(app, open: url, options: options) || RCTLinkingManager.application(app, open: url, options: options)\n+ }\n+\n+ // Universal Links\n+ public override func application(\n+ _ application: UIApplication,\n+ continue userActivity: NSUserActivity,\n+ restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void\n+ ) -> Bool {\n+ let result = RCTLinkingManager.application(application, continue: userActivity, restorationHandler: restorationHandler)\n+ return super.application(application, continue: userActivity, restorationHandler: restorationHandler) || result\n+ }\n+}\n+\n+class ReactNativeDelegate: ExpoReactNativeFactoryDelegate {\n+ // Extension point for config-plugins\n+\n+ override func sourceURL(for bridge: RCTBridge) -> URL? {\n+ // needed to return the correct URL for expo-dev-client.\n+ bridge.bundleURL ?? bundleURL()\n+ }\n+\n+ override func bundleURL() -> URL? {\n+#if DEBUG\n+ return RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: \".expo/.virtual-metro-entry\")\n+#else\n+ return Bundle.main.url(forResource: \"main\", withExtension: \"jsbundle\")\n+#endif\n+ }\n+}\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h b/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h\nnew file mode 100644\nindex 00000000000..8361941afc2\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h\n@@ -0,0 +1,3 @@\n+//\n+// Use this file to import your target's public headers that you would like to expose to Swift.\n+//\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json\nnew file mode 100644\nindex 00000000000..255637e0fdb\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json\n@@ -0,0 +1,21 @@\n+{\n+ \"images\" : [\n+ {\n+ \"filename\" : \"SplashScreenLegacy.png\",\n+ \"idiom\" : \"universal\",\n+ \"scale\" : \"1x\"\n+ },\n+ {\n+ \"idiom\" : \"universal\",\n+ \"scale\" : \"2x\"\n+ },\n+ {\n+ \"idiom\" : \"universal\",\n+ \"scale\" : \"3x\"\n+ }\n+ ],\n+ \"info\" : {\n+ \"author\" : \"xcode\",\n+ \"version\" : 1\n+ }\n+}\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png\nnew file mode 100644\nindex 00000000000..bbf8e9e6016\nBinary files /dev/null and b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png differ\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\nindex 447b4188985..58d21796e1d 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n@@ -1,11 +1,12 @@\n \n-\n+\n \n \n \n- \n+ \n \n \n+ \n \n \n \n@@ -29,6 +30,7 @@\n \n \n \n+ \n \n \n \n@@ -38,5 +40,8 @@\n \n \n \n+ \n+ \n+ \n \n \ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex f740040e7be..a2af7b4a5de 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -4,12 +4,20 @@ require File.join(File.dirname(`node --print \"require.resolve('react-native/pack\n require 'json'\n podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}\n \n-ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0'\n-ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+def ccache_enabled?(podfile_properties)\n+ # Environment variable takes precedence\n+ return ENV['USE_CCACHE'] == '1' if ENV['USE_CCACHE']\n \n-platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'\n-install! 'cocoapods',\n- :deterministic_uuids => false\n+ # Fall back to Podfile properties\n+ podfile_properties['apple.ccacheEnabled'] == 'true'\n+end\n+\n+ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+ENV['RCT_USE_RN_DEP'] ||= '0' if podfile_properties['ios.buildReactNativeFromSource'] == 'true'\n+ENV['RCT_USE_PREBUILT_RNCORE'] ||= '0' if podfile_properties['ios.buildReactNativeFromSource'] == 'true'\n+ENV['RCT_HERMES_V1_ENABLED'] ||= '1' if podfile_properties['expo.useHermesV1'] == 'true'\n+ENV['EXPO_USE_PRECOMPILED_MODULES'] ||= '1' if podfile_properties['EXPO_USE_PRECOMPILED_MODULES'] == '1'\n+platform :ios, podfile_properties['ios.deploymentTarget'] || '16.4'\n \n prepare_react_native_project!\n \n@@ -23,7 +31,8 @@ target 'HelloWorld' do\n 'node',\n '--no-warnings',\n '--eval',\n- 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n+ 'require(\\'expo/bin/autolinking\\')',\n+ 'expo-modules-autolinking',\n 'react-native-config',\n '--json',\n '--platform',\n@@ -49,18 +58,7 @@ target 'HelloWorld' do\n installer,\n config[:reactNativePath],\n :mac_catalyst_enabled => false,\n- :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true',\n+ :ccache_enabled => ccache_enabled?(podfile_properties),\n )\n-\n- # This is necessary for Xcode 14, because it signs resource bundles by default\n- # when building for devices.\n- installer.target_installation_results.pod_target_installation_results\n- .each do |pod_name, target_installation_result|\n- target_installation_result.resource_bundle_targets.each do |resource_bundle_target|\n- resource_bundle_target.build_configurations.each do |config|\n- config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'\n- end\n- end\n- end\n end\n end\ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex b51159163bf..e6346b6d456 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -2,7 +2,7 @@\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n \"license\": \"0BSD\",\n- \"version\": \"52.0.79\",\n+ \"version\": \"55.0.14\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -11,12 +11,9 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~52.0.49\",\n- \"expo-status-bar\": \"~2.0.1\",\n- \"react\": \"18.3.1\",\n- \"react-native\": \"0.76.9\"\n- },\n- \"devDependencies\": {\n- \"@babel/core\": \"^7.20.0\"\n+ \"expo\": \"~55.0.2\",\n+ \"expo-status-bar\": \"~55.0.4\",\n+ \"react\": \"19.2.3\",\n+ \"react-native\": \"0.85.0\"\n }\n }\n","53..unversioned":"diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle\nindex 34b96c71c33..fc185e53bc3 100644\n--- a/templates/expo-template-bare-minimum/android/app/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/app/build.gradle\n@@ -11,7 +11,7 @@ def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath()\n react {\n entryFile = file([\"node\", \"-e\", \"require('expo/scripts/resolveAppEntry')\", projectRoot, \"android\", \"absolute\"].execute(null, rootDir).text.trim())\n reactNativeDir = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n- hermesCommand = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/sdks/hermesc/%OS-BIN%/hermesc\"\n+ hermesCommand = new File([\"node\", \"--print\", \"require.resolve('hermes-compiler/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/hermesc/%OS-BIN%/hermesc\"\n codegenDir = new File([\"node\", \"--print\", \"require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n \n enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean()\n@@ -64,9 +64,9 @@ react {\n }\n \n /**\n- * Set this to true to Run Proguard on Release builds to minify the Java bytecode.\n+ * Set this to true in release builds to optimize the app using [R8](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization).\n */\n-def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInReleaseBuilds') ?: false).toBoolean()\n+def enableMinifyInReleaseBuilds = (findProperty('android.enableMinifyInReleaseBuilds') ?: false).toBoolean()\n \n /**\n * The preferred build flavor of JavaScriptCore (JSC)\n@@ -94,6 +94,8 @@ android {\n targetSdkVersion rootProject.ext.targetSdkVersion\n versionCode 1\n versionName \"1.0\"\n+\n+ buildConfigField \"String\", \"REACT_NATIVE_RELEASE_LEVEL\", \"\\\"${findProperty('reactNativeReleaseLevel') ?: 'stable'}\\\"\"\n }\n signingConfigs {\n debug {\n@@ -111,15 +113,18 @@ android {\n // Caution! In production, you need to generate your own keystore file.\n // see https://reactnative.dev/docs/signed-apk-android.\n signingConfig signingConfigs.debug\n- shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false)\n- minifyEnabled enableProguardInReleaseBuilds\n+ def enableShrinkResources = findProperty('android.enableShrinkResourcesInReleaseBuilds') ?: 'false'\n+ shrinkResources enableShrinkResources.toBoolean()\n+ minifyEnabled enableMinifyInReleaseBuilds\n proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n- crunchPngs (findProperty('android.enablePngCrunchInReleaseBuilds')?.toBoolean() ?: true)\n+ def enablePngCrunchInRelease = findProperty('android.enablePngCrunchInReleaseBuilds') ?: 'true'\n+ crunchPngs enablePngCrunchInRelease.toBoolean()\n }\n }\n packagingOptions {\n jniLibs {\n- useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false)\n+ def enableLegacyPackaging = findProperty('expo.useLegacyPackaging') ?: 'false'\n+ useLegacyPackaging enableLegacyPackaging.toBoolean()\n }\n }\n androidResources {\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\nnew file mode 100644\nindex 00000000000..3ec2507bab7\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\n@@ -0,0 +1,7 @@\n+\n+\n+ \n+\n+ \n+\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\nindex 150248b6b3c..14bdba124ab 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n@@ -1,12 +1,13 @@\n-\n+\n \n \n \n \n \n \n- \n- \n+ \n+ \n \n \n \n@@ -19,7 +20,7 @@\n \n \n \n- \n+ \n \n \n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\nindex 267e20c30e5..cbb5ddb85d0 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n@@ -5,48 +5,36 @@ import android.content.res.Configuration\n \n import com.facebook.react.PackageList\n import com.facebook.react.ReactApplication\n-import com.facebook.react.ReactNativeHost\n+import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative\n import com.facebook.react.ReactPackage\n import com.facebook.react.ReactHost\n-import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load\n-import com.facebook.react.defaults.DefaultReactNativeHost\n-import com.facebook.react.soloader.OpenSourceMergedSoMapping\n-import com.facebook.soloader.SoLoader\n+import com.facebook.react.common.ReleaseLevel\n+import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint\n \n import expo.modules.ApplicationLifecycleDispatcher\n-import expo.modules.ReactNativeHostWrapper\n+import expo.modules.ExpoReactHostFactory\n \n class MainApplication : Application(), ReactApplication {\n \n- override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper(\n- this,\n- object : DefaultReactNativeHost(this) {\n- override fun getPackages(): List {\n- val packages = PackageList(this).packages\n- // Packages that cannot be autolinked yet can be added manually here, for example:\n- // packages.add(MyReactNativePackage())\n- return packages\n- }\n-\n- override fun getJSMainModuleName(): String = \".expo/.virtual-metro-entry\"\n-\n- override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG\n-\n- override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED\n- override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED\n- }\n- )\n-\n- override val reactHost: ReactHost\n- get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost)\n+ override val reactHost: ReactHost by lazy {\n+ ExpoReactHostFactory.getDefaultReactHost(\n+ context = applicationContext,\n+ packageList =\n+ PackageList(this).packages.apply {\n+ // Packages that cannot be autolinked yet can be added manually here, for example:\n+ // add(MyReactNativePackage())\n+ }\n+ )\n+ }\n \n override fun onCreate() {\n super.onCreate()\n- SoLoader.init(this, OpenSourceMergedSoMapping)\n- if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {\n- // If you opted-in for the New Architecture, we load the native entry point for this app.\n- load()\n+ DefaultNewArchitectureEntryPoint.releaseLevel = try {\n+ ReleaseLevel.valueOf(BuildConfig.REACT_NATIVE_RELEASE_LEVEL.uppercase())\n+ } catch (e: IllegalArgumentException) {\n+ ReleaseLevel.STABLE\n }\n+ loadReactNative(this)\n ApplicationLifecycleDispatcher.onApplicationCreate(this)\n }\n \ndiff --git a/templates/expo-template-bare-minimum/android/build.gradle b/templates/expo-template-bare-minimum/android/build.gradle\nindex fa7b11e23c1..0554dd156c1 100644\n--- a/templates/expo-template-bare-minimum/android/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/build.gradle\n@@ -12,21 +12,8 @@ buildscript {\n }\n }\n \n-def reactNativeAndroidDir = new File(\n- providers.exec {\n- workingDir(rootDir)\n- commandLine(\"node\", \"--print\", \"require.resolve('react-native/package.json')\")\n- }.standardOutput.asText.get().trim(),\n- \"../android\"\n-)\n-\n allprojects {\n repositories {\n- maven {\n- // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n- url(reactNativeAndroidDir)\n- }\n-\n google()\n mavenCentral()\n maven { url 'https://www.jitpack.io' }\ndiff --git a/templates/expo-template-bare-minimum/android/gitignore b/templates/expo-template-bare-minimum/android/gitignore\nindex 8a6be077181..1ea9b6464ec 100644\n--- a/templates/expo-template-bare-minimum/android/gitignore\n+++ b/templates/expo-template-bare-minimum/android/gitignore\n@@ -12,5 +12,8 @@ local.properties\n *.hprof\n .cxx/\n \n+# generated inline modules\n+app/src/main/java/inline/\n+\n # Bundle artifacts\n *.jsbundle\ndiff --git a/templates/expo-template-bare-minimum/android/gradle.properties b/templates/expo-template-bare-minimum/android/gradle.properties\nindex 7531e9eb23c..97271b9456f 100644\n--- a/templates/expo-template-bare-minimum/android/gradle.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle.properties\n@@ -15,7 +15,7 @@ org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m\n # When configured, Gradle will run in incubating parallel mode.\n # This option should only be used with decoupled projects. More details, visit\n # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n-# org.gradle.parallel=true\n+org.gradle.parallel=true\n \n # AndroidX package structure to make it clearer which packages are bundled with the\n # Android operating system, and which are packaged with your app's APK\n@@ -41,6 +41,11 @@ newArchEnabled=true\n # If set to false, you will be using JSC instead.\n hermesEnabled=true\n \n+# Use this property to enable edge-to-edge display support.\n+# This allows your app to draw behind system bars for an immersive UI.\n+# Note: Only works with ReactActivity and should not be used with custom Activity.\n+edgeToEdgeEnabled=true\n+\n # Enable GIF support in React Native images (~200 B increase)\n expo.gif.enabled=true\n # Enable webp support in React Native images (~85 KB increase)\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar\nindex a4b76b9530d..61285a659d1 100644\nBinary files a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar and b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar differ\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\nindex 37f853b1c84..37f78a6af83 100644\n--- a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n@@ -1,6 +1,6 @@\n distributionBase=GRADLE_USER_HOME\n distributionPath=wrapper/dists\n-distributionUrl=https\\://services.gradle.org/distributions/gradle-8.13-bin.zip\n+distributionUrl=https\\://services.gradle.org/distributions/gradle-9.3.1-bin.zip\n networkTimeout=10000\n validateDistributionUrl=true\n zipStoreBase=GRADLE_USER_HOME\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew b/templates/expo-template-bare-minimum/android/gradlew\nindex f3b75f3b0d4..adff685a034 100755\n--- a/templates/expo-template-bare-minimum/android/gradlew\n+++ b/templates/expo-template-bare-minimum/android/gradlew\n@@ -1,7 +1,7 @@\n #!/bin/sh\n \n #\n-# Copyright © 2015-2021 the original authors.\n+# Copyright © 2015 the original authors.\n #\n # Licensed under the Apache License, Version 2.0 (the \"License\");\n # you may not use this file except in compliance with the License.\n@@ -114,7 +114,6 @@ case \"$( uname )\" in #(\n NONSTOP* ) nonstop=true ;;\n esac\n \n-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n \n \n # Determine the Java command to use to start the JVM.\n@@ -172,7 +171,6 @@ fi\n # For Cygwin or MSYS, switch paths to Windows format before running java\n if \"$cygwin\" || \"$msys\" ; then\n APP_HOME=$( cygpath --path --mixed \"$APP_HOME\" )\n- CLASSPATH=$( cygpath --path --mixed \"$CLASSPATH\" )\n \n JAVACMD=$( cygpath --unix \"$JAVACMD\" )\n \n@@ -205,15 +203,14 @@ fi\n DEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n \n # Collect all arguments for the java command:\n-# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,\n+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,\n # and any embedded shellness will be escaped.\n # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be\n # treated as '${Hostname}' itself on the command line.\n \n set -- \\\n \"-Dorg.gradle.appname=$APP_BASE_NAME\" \\\n- -classpath \"$CLASSPATH\" \\\n- org.gradle.wrapper.GradleWrapperMain \\\n+ -jar \"$APP_HOME/gradle/wrapper/gradle-wrapper.jar\" \\\n \"$@\"\n \n # Stop when \"xargs\" is not available.\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew.bat b/templates/expo-template-bare-minimum/android/gradlew.bat\nindex 9b42019c791..39baf4d6846 100644\n--- a/templates/expo-template-bare-minimum/android/gradlew.bat\n+++ b/templates/expo-template-bare-minimum/android/gradlew.bat\n@@ -1,3 +1,8 @@\n+@REM Copyright (c) Meta Platforms, Inc. and affiliates.\r\n+@REM\r\n+@REM This source code is licensed under the MIT license found in the\r\n+@REM LICENSE file in the root directory of this source tree.\r\n+\r\n @rem\r\n @rem Copyright 2015 the original author or authors.\r\n @rem\r\n@@ -70,11 +75,10 @@ goto fail\n :execute\r\n @rem Setup the command line\r\n \r\n-set CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\r\n \r\n \r\n @rem Execute Gradle\r\n-\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\r\n+\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -jar \"%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\" %*\r\n \r\n :end\r\n @rem End local scope for the variables with windows NT shell\r\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\nindex 1b7513bd31b..39fa5afe55b 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n@@ -168,6 +168,8 @@\n \t\t\tfiles = (\n \t\t\t);\n \t\t\tinputPaths = (\n+\t\t\t\t\"$(SRCROOT)/.xcode.env\",\n+\t\t\t\t\"$(SRCROOT)/.xcode.env.local\",\n \t\t\t);\n \t\t\tname = \"Bundle React Native code and images\";\n \t\t\toutputPaths = (\n@@ -246,11 +248,12 @@\n \t\t\t\t\t\"FB_SONARKIT_ENABLED=1\",\n \t\t\t\t);\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n \t\t\t\t\t\"$(inherited)\",\n \t\t\t\t\t\"@executable_path/Frameworks\",\n \t\t\t\t);\n+\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.4;\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -273,11 +276,12 @@\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n \t\t\t\tCURRENT_PROJECT_VERSION = 1;\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n \t\t\t\t\t\"$(inherited)\",\n \t\t\t\t\t\"@executable_path/Frameworks\",\n \t\t\t\t);\n+\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.4;\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -339,7 +343,7 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n \t\t\t\t\t/usr/lib/swift,\n \t\t\t\t\t\"$(inherited)\",\n@@ -391,7 +395,7 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n \t\t\t\t\t/usr/lib/swift,\n \t\t\t\t\t\"$(inherited)\",\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\nindex a7887e1e5b1..9670a1ff07e 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\n@@ -1,9 +1,9 @@\n-import Expo\n+internal import Expo\n import React\n import ReactAppDependencyProvider\n \n-@UIApplicationMain\n-public class AppDelegate: ExpoAppDelegate {\n+@main\n+class AppDelegate: ExpoAppDelegate {\n var window: UIWindow?\n \n var reactNativeDelegate: ExpoReactNativeFactoryDelegate?\n@@ -19,7 +19,6 @@ public class AppDelegate: ExpoAppDelegate {\n \n reactNativeDelegate = delegate\n reactNativeFactory = factory\n- bindReactNativeFactory(factory)\n \n #if os(iOS) || os(tvOS)\n window = UIWindow(frame: UIScreen.main.bounds)\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json\nnew file mode 100644\nindex 00000000000..255637e0fdb\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json\n@@ -0,0 +1,21 @@\n+{\n+ \"images\" : [\n+ {\n+ \"filename\" : \"SplashScreenLegacy.png\",\n+ \"idiom\" : \"universal\",\n+ \"scale\" : \"1x\"\n+ },\n+ {\n+ \"idiom\" : \"universal\",\n+ \"scale\" : \"2x\"\n+ },\n+ {\n+ \"idiom\" : \"universal\",\n+ \"scale\" : \"3x\"\n+ }\n+ ],\n+ \"info\" : {\n+ \"author\" : \"xcode\",\n+ \"version\" : 1\n+ }\n+}\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png\nnew file mode 100644\nindex 00000000000..bbf8e9e6016\nBinary files /dev/null and b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png differ\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\nindex 447b4188985..58d21796e1d 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n@@ -1,11 +1,12 @@\n \n-\n+\n \n \n \n- \n+ \n \n \n+ \n \n \n \n@@ -29,6 +30,7 @@\n \n \n \n+ \n \n \n \n@@ -38,5 +40,8 @@\n \n \n \n+ \n+ \n+ \n \n \ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex 29503ff0cc1..a2af7b4a5de 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -4,12 +4,20 @@ require File.join(File.dirname(`node --print \"require.resolve('react-native/pack\n require 'json'\n podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}\n \n-ENV['RCT_NEW_ARCH_ENABLED'] = '0' if podfile_properties['newArchEnabled'] == 'false'\n-ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+def ccache_enabled?(podfile_properties)\n+ # Environment variable takes precedence\n+ return ENV['USE_CCACHE'] == '1' if ENV['USE_CCACHE']\n \n-platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'\n-install! 'cocoapods',\n- :deterministic_uuids => false\n+ # Fall back to Podfile properties\n+ podfile_properties['apple.ccacheEnabled'] == 'true'\n+end\n+\n+ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+ENV['RCT_USE_RN_DEP'] ||= '0' if podfile_properties['ios.buildReactNativeFromSource'] == 'true'\n+ENV['RCT_USE_PREBUILT_RNCORE'] ||= '0' if podfile_properties['ios.buildReactNativeFromSource'] == 'true'\n+ENV['RCT_HERMES_V1_ENABLED'] ||= '1' if podfile_properties['expo.useHermesV1'] == 'true'\n+ENV['EXPO_USE_PRECOMPILED_MODULES'] ||= '1' if podfile_properties['EXPO_USE_PRECOMPILED_MODULES'] == '1'\n+platform :ios, podfile_properties['ios.deploymentTarget'] || '16.4'\n \n prepare_react_native_project!\n \n@@ -20,7 +28,10 @@ target 'HelloWorld' do\n config_command = ['node', '-e', \"process.argv=['', '', 'config'];require('@react-native-community/cli').run()\"];\n else\n config_command = [\n- 'npx',\n+ 'node',\n+ '--no-warnings',\n+ '--eval',\n+ 'require(\\'expo/bin/autolinking\\')',\n 'expo-modules-autolinking',\n 'react-native-config',\n '--json',\n@@ -47,18 +58,7 @@ target 'HelloWorld' do\n installer,\n config[:reactNativePath],\n :mac_catalyst_enabled => false,\n- :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true',\n+ :ccache_enabled => ccache_enabled?(podfile_properties),\n )\n-\n- # This is necessary for Xcode 14, because it signs resource bundles by default\n- # when building for devices.\n- installer.target_installation_results.pod_target_installation_results\n- .each do |pod_name, target_installation_result|\n- target_installation_result.resource_bundle_targets.each do |resource_bundle_target|\n- resource_bundle_target.build_configurations.each do |config|\n- config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'\n- end\n- end\n- end\n end\n end\ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex 661f6b6addf..e6346b6d456 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -2,7 +2,7 @@\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n \"license\": \"0BSD\",\n- \"version\": \"53.0.42\",\n+ \"version\": \"55.0.14\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -11,12 +11,9 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~53.0.27\",\n- \"expo-status-bar\": \"~2.2.3\",\n- \"react\": \"19.0.0\",\n- \"react-native\": \"0.79.6\"\n- },\n- \"devDependencies\": {\n- \"@babel/core\": \"^7.20.0\"\n+ \"expo\": \"~55.0.2\",\n+ \"expo-status-bar\": \"~55.0.4\",\n+ \"react\": \"19.2.3\",\n+ \"react-native\": \"0.85.0\"\n }\n }\n","54..unversioned":"diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle\nindex 3f1c571b679..fc185e53bc3 100644\n--- a/templates/expo-template-bare-minimum/android/app/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/app/build.gradle\n@@ -11,7 +11,7 @@ def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath()\n react {\n entryFile = file([\"node\", \"-e\", \"require('expo/scripts/resolveAppEntry')\", projectRoot, \"android\", \"absolute\"].execute(null, rootDir).text.trim())\n reactNativeDir = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n- hermesCommand = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/sdks/hermesc/%OS-BIN%/hermesc\"\n+ hermesCommand = new File([\"node\", \"--print\", \"require.resolve('hermes-compiler/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/hermesc/%OS-BIN%/hermesc\"\n codegenDir = new File([\"node\", \"--print\", \"require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n \n enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean()\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\nindex 150248b6b3c..14bdba124ab 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n@@ -1,12 +1,13 @@\n-\n+\n \n \n \n \n \n \n- \n- \n+ \n+ \n \n \n \n@@ -19,7 +20,7 @@\n \n \n \n- \n+ \n \n \n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\nindex 5abad96fa00..cbb5ddb85d0 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n@@ -6,37 +6,26 @@ import android.content.res.Configuration\n import com.facebook.react.PackageList\n import com.facebook.react.ReactApplication\n import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative\n-import com.facebook.react.ReactNativeHost\n import com.facebook.react.ReactPackage\n import com.facebook.react.ReactHost\n import com.facebook.react.common.ReleaseLevel\n import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint\n-import com.facebook.react.defaults.DefaultReactNativeHost\n \n import expo.modules.ApplicationLifecycleDispatcher\n-import expo.modules.ReactNativeHostWrapper\n+import expo.modules.ExpoReactHostFactory\n \n class MainApplication : Application(), ReactApplication {\n \n- override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper(\n- this,\n- object : DefaultReactNativeHost(this) {\n- override fun getPackages(): List =\n- PackageList(this).packages.apply {\n- // Packages that cannot be autolinked yet can be added manually here, for example:\n- // add(MyReactNativePackage())\n- }\n-\n- override fun getJSMainModuleName(): String = \".expo/.virtual-metro-entry\"\n-\n- override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG\n-\n- override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED\n- }\n- )\n-\n- override val reactHost: ReactHost\n- get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost)\n+ override val reactHost: ReactHost by lazy {\n+ ExpoReactHostFactory.getDefaultReactHost(\n+ context = applicationContext,\n+ packageList =\n+ PackageList(this).packages.apply {\n+ // Packages that cannot be autolinked yet can be added manually here, for example:\n+ // add(MyReactNativePackage())\n+ }\n+ )\n+ }\n \n override fun onCreate() {\n super.onCreate()\ndiff --git a/templates/expo-template-bare-minimum/android/gitignore b/templates/expo-template-bare-minimum/android/gitignore\nindex 8a6be077181..1ea9b6464ec 100644\n--- a/templates/expo-template-bare-minimum/android/gitignore\n+++ b/templates/expo-template-bare-minimum/android/gitignore\n@@ -12,5 +12,8 @@ local.properties\n *.hprof\n .cxx/\n \n+# generated inline modules\n+app/src/main/java/inline/\n+\n # Bundle artifacts\n *.jsbundle\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar\nindex 1b33c55baab..61285a659d1 100644\nBinary files a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar and b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar differ\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\nindex d4081da476b..37f78a6af83 100644\n--- a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n@@ -1,6 +1,6 @@\n distributionBase=GRADLE_USER_HOME\n distributionPath=wrapper/dists\n-distributionUrl=https\\://services.gradle.org/distributions/gradle-8.14.3-bin.zip\n+distributionUrl=https\\://services.gradle.org/distributions/gradle-9.3.1-bin.zip\n networkTimeout=10000\n validateDistributionUrl=true\n zipStoreBase=GRADLE_USER_HOME\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew b/templates/expo-template-bare-minimum/android/gradlew\nindex 7f94d3d4777..adff685a034 100755\n--- a/templates/expo-template-bare-minimum/android/gradlew\n+++ b/templates/expo-template-bare-minimum/android/gradlew\n@@ -1,7 +1,7 @@\n #!/bin/sh\n \n #\n-# Copyright © 2015-2021 the original authors.\n+# Copyright © 2015 the original authors.\n #\n # Licensed under the Apache License, Version 2.0 (the \"License\");\n # you may not use this file except in compliance with the License.\n@@ -114,7 +114,6 @@ case \"$( uname )\" in #(\n NONSTOP* ) nonstop=true ;;\n esac\n \n-CLASSPATH=\"\\\\\\\"\\\\\\\"\"\n \n \n # Determine the Java command to use to start the JVM.\n@@ -172,7 +171,6 @@ fi\n # For Cygwin or MSYS, switch paths to Windows format before running java\n if \"$cygwin\" || \"$msys\" ; then\n APP_HOME=$( cygpath --path --mixed \"$APP_HOME\" )\n- CLASSPATH=$( cygpath --path --mixed \"$CLASSPATH\" )\n \n JAVACMD=$( cygpath --unix \"$JAVACMD\" )\n \n@@ -205,14 +203,13 @@ fi\n DEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n \n # Collect all arguments for the java command:\n-# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,\n+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,\n # and any embedded shellness will be escaped.\n # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be\n # treated as '${Hostname}' itself on the command line.\n \n set -- \\\n \"-Dorg.gradle.appname=$APP_BASE_NAME\" \\\n- -classpath \"$CLASSPATH\" \\\n -jar \"$APP_HOME/gradle/wrapper/gradle-wrapper.jar\" \\\n \"$@\"\n \ndiff --git a/templates/expo-template-bare-minimum/android/gradlew.bat b/templates/expo-template-bare-minimum/android/gradlew.bat\nindex 5eed7ee8452..39baf4d6846 100644\n--- a/templates/expo-template-bare-minimum/android/gradlew.bat\n+++ b/templates/expo-template-bare-minimum/android/gradlew.bat\n@@ -1,3 +1,8 @@\n+@REM Copyright (c) Meta Platforms, Inc. and affiliates.\r\n+@REM\r\n+@REM This source code is licensed under the MIT license found in the\r\n+@REM LICENSE file in the root directory of this source tree.\r\n+\r\n @rem\r\n @rem Copyright 2015 the original author or authors.\r\n @rem\r\n@@ -70,11 +75,10 @@ goto fail\n :execute\r\n @rem Setup the command line\r\n \r\n-set CLASSPATH=\r\n \r\n \r\n @rem Execute Gradle\r\n-\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" -jar \"%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\" %*\r\n+\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -jar \"%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\" %*\r\n \r\n :end\r\n @rem End local scope for the variables with windows NT shell\r\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\nindex 8a390c764af..39fa5afe55b 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n@@ -248,11 +248,12 @@\n \t\t\t\t\t\"FB_SONARKIT_ENABLED=1\",\n \t\t\t\t);\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n \t\t\t\t\t\"$(inherited)\",\n \t\t\t\t\t\"@executable_path/Frameworks\",\n \t\t\t\t);\n+\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.4;\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -275,11 +276,12 @@\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n \t\t\t\tCURRENT_PROJECT_VERSION = 1;\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n \t\t\t\t\t\"$(inherited)\",\n \t\t\t\t\t\"@executable_path/Frameworks\",\n \t\t\t\t);\n+\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.4;\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -341,7 +343,7 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n \t\t\t\t\t/usr/lib/swift,\n \t\t\t\t\t\"$(inherited)\",\n@@ -393,7 +395,7 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n \t\t\t\t\t/usr/lib/swift,\n \t\t\t\t\t\"$(inherited)\",\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\nindex a7887e1e5b1..9670a1ff07e 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\n@@ -1,9 +1,9 @@\n-import Expo\n+internal import Expo\n import React\n import ReactAppDependencyProvider\n \n-@UIApplicationMain\n-public class AppDelegate: ExpoAppDelegate {\n+@main\n+class AppDelegate: ExpoAppDelegate {\n var window: UIWindow?\n \n var reactNativeDelegate: ExpoReactNativeFactoryDelegate?\n@@ -19,7 +19,6 @@ public class AppDelegate: ExpoAppDelegate {\n \n reactNativeDelegate = delegate\n reactNativeFactory = factory\n- bindReactNativeFactory(factory)\n \n #if os(iOS) || os(tvOS)\n window = UIWindow(frame: UIScreen.main.bounds)\ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex 9743535e7ad..a2af7b4a5de 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -7,16 +7,17 @@ podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties\n def ccache_enabled?(podfile_properties)\n # Environment variable takes precedence\n return ENV['USE_CCACHE'] == '1' if ENV['USE_CCACHE']\n- \n+\n # Fall back to Podfile properties\n podfile_properties['apple.ccacheEnabled'] == 'true'\n end\n \n-ENV['RCT_NEW_ARCH_ENABLED'] ||= '0' if podfile_properties['newArchEnabled'] == 'false'\n ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n-ENV['RCT_USE_RN_DEP'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' && podfile_properties['newArchEnabled'] != 'false'\n-ENV['RCT_USE_PREBUILT_RNCORE'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' && podfile_properties['newArchEnabled'] != 'false'\n-platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'\n+ENV['RCT_USE_RN_DEP'] ||= '0' if podfile_properties['ios.buildReactNativeFromSource'] == 'true'\n+ENV['RCT_USE_PREBUILT_RNCORE'] ||= '0' if podfile_properties['ios.buildReactNativeFromSource'] == 'true'\n+ENV['RCT_HERMES_V1_ENABLED'] ||= '1' if podfile_properties['expo.useHermesV1'] == 'true'\n+ENV['EXPO_USE_PRECOMPILED_MODULES'] ||= '1' if podfile_properties['EXPO_USE_PRECOMPILED_MODULES'] == '1'\n+platform :ios, podfile_properties['ios.deploymentTarget'] || '16.4'\n \n prepare_react_native_project!\n \ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex 0d90c6e603d..e6346b6d456 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -2,7 +2,7 @@\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n \"license\": \"0BSD\",\n- \"version\": \"54.0.50\",\n+ \"version\": \"55.0.14\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -11,9 +11,9 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~54.0.33\",\n- \"expo-status-bar\": \"~3.0.9\",\n- \"react\": \"19.1.0\",\n- \"react-native\": \"0.81.5\"\n+ \"expo\": \"~55.0.2\",\n+ \"expo-status-bar\": \"~55.0.4\",\n+ \"react\": \"19.2.3\",\n+ \"react-native\": \"0.85.0\"\n }\n }\n","55..unversioned":"diff --git a/templates/expo-template-bare-minimum/android/gitignore b/templates/expo-template-bare-minimum/android/gitignore\nindex 8a6be077181..1ea9b6464ec 100644\n--- a/templates/expo-template-bare-minimum/android/gitignore\n+++ b/templates/expo-template-bare-minimum/android/gitignore\n@@ -12,5 +12,8 @@ local.properties\n *.hprof\n .cxx/\n \n+# generated inline modules\n+app/src/main/java/inline/\n+\n # Bundle artifacts\n *.jsbundle\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar\nindex 8bdaf60c75a..61285a659d1 100644\nBinary files a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar and b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar differ\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\nindex 2a84e188b85..37f78a6af83 100644\n--- a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n@@ -1,6 +1,6 @@\n distributionBase=GRADLE_USER_HOME\n distributionPath=wrapper/dists\n-distributionUrl=https\\://services.gradle.org/distributions/gradle-9.0.0-bin.zip\n+distributionUrl=https\\://services.gradle.org/distributions/gradle-9.3.1-bin.zip\n networkTimeout=10000\n validateDistributionUrl=true\n zipStoreBase=GRADLE_USER_HOME\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew b/templates/expo-template-bare-minimum/android/gradlew\nindex bbb00327904..adff685a034 100755\n--- a/templates/expo-template-bare-minimum/android/gradlew\n+++ b/templates/expo-template-bare-minimum/android/gradlew\n@@ -114,7 +114,6 @@ case \"$( uname )\" in #(\n NONSTOP* ) nonstop=true ;;\n esac\n \n-CLASSPATH=\"\\\\\\\"\\\\\\\"\"\n \n \n # Determine the Java command to use to start the JVM.\n@@ -172,7 +171,6 @@ fi\n # For Cygwin or MSYS, switch paths to Windows format before running java\n if \"$cygwin\" || \"$msys\" ; then\n APP_HOME=$( cygpath --path --mixed \"$APP_HOME\" )\n- CLASSPATH=$( cygpath --path --mixed \"$CLASSPATH\" )\n \n JAVACMD=$( cygpath --unix \"$JAVACMD\" )\n \n@@ -205,14 +203,13 @@ fi\n DEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n \n # Collect all arguments for the java command:\n-# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,\n+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,\n # and any embedded shellness will be escaped.\n # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be\n # treated as '${Hostname}' itself on the command line.\n \n set -- \\\n \"-Dorg.gradle.appname=$APP_BASE_NAME\" \\\n- -classpath \"$CLASSPATH\" \\\n -jar \"$APP_HOME/gradle/wrapper/gradle-wrapper.jar\" \\\n \"$@\"\n \ndiff --git a/templates/expo-template-bare-minimum/android/gradlew.bat b/templates/expo-template-bare-minimum/android/gradlew.bat\nindex 5eed7ee8452..39baf4d6846 100644\n--- a/templates/expo-template-bare-minimum/android/gradlew.bat\n+++ b/templates/expo-template-bare-minimum/android/gradlew.bat\n@@ -1,3 +1,8 @@\n+@REM Copyright (c) Meta Platforms, Inc. and affiliates.\r\n+@REM\r\n+@REM This source code is licensed under the MIT license found in the\r\n+@REM LICENSE file in the root directory of this source tree.\r\n+\r\n @rem\r\n @rem Copyright 2015 the original author or authors.\r\n @rem\r\n@@ -70,11 +75,10 @@ goto fail\n :execute\r\n @rem Setup the command line\r\n \r\n-set CLASSPATH=\r\n \r\n \r\n @rem Execute Gradle\r\n-\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" -jar \"%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\" %*\r\n+\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -jar \"%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\" %*\r\n \r\n :end\r\n @rem End local scope for the variables with windows NT shell\r\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\nindex 8a390c764af..39fa5afe55b 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n@@ -248,11 +248,12 @@\n \t\t\t\t\t\"FB_SONARKIT_ENABLED=1\",\n \t\t\t\t);\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n \t\t\t\t\t\"$(inherited)\",\n \t\t\t\t\t\"@executable_path/Frameworks\",\n \t\t\t\t);\n+\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.4;\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -275,11 +276,12 @@\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n \t\t\t\tCURRENT_PROJECT_VERSION = 1;\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n \t\t\t\t\t\"$(inherited)\",\n \t\t\t\t\t\"@executable_path/Frameworks\",\n \t\t\t\t);\n+\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.4;\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -341,7 +343,7 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n \t\t\t\t\t/usr/lib/swift,\n \t\t\t\t\t\"$(inherited)\",\n@@ -393,7 +395,7 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n \t\t\t\t\t/usr/lib/swift,\n \t\t\t\t\t\"$(inherited)\",\ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex 03484edf156..a2af7b4a5de 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -13,10 +13,11 @@ def ccache_enabled?(podfile_properties)\n end\n \n ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n-ENV['RCT_USE_RN_DEP'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true'\n-ENV['RCT_USE_PREBUILT_RNCORE'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true'\n+ENV['RCT_USE_RN_DEP'] ||= '0' if podfile_properties['ios.buildReactNativeFromSource'] == 'true'\n+ENV['RCT_USE_PREBUILT_RNCORE'] ||= '0' if podfile_properties['ios.buildReactNativeFromSource'] == 'true'\n ENV['RCT_HERMES_V1_ENABLED'] ||= '1' if podfile_properties['expo.useHermesV1'] == 'true'\n-platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'\n+ENV['EXPO_USE_PRECOMPILED_MODULES'] ||= '1' if podfile_properties['EXPO_USE_PRECOMPILED_MODULES'] == '1'\n+platform :ios, podfile_properties['ios.deploymentTarget'] || '16.4'\n \n prepare_react_native_project!\n \ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex 7d81baed15d..e6346b6d456 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -2,7 +2,7 @@\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n \"license\": \"0BSD\",\n- \"version\": \"55.0.26\",\n+ \"version\": \"55.0.14\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -11,9 +11,9 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~55.0.14\",\n- \"expo-status-bar\": \"~55.0.5\",\n- \"react\": \"19.2.0\",\n- \"react-native\": \"0.83.4\"\n+ \"expo\": \"~55.0.2\",\n+ \"expo-status-bar\": \"~55.0.4\",\n+ \"react\": \"19.2.3\",\n+ \"react-native\": \"0.85.0\"\n }\n }\n","unversioned..unversioned":""}} \ No newline at end of file +{"versions":["51","52","53","54","55","56","unversioned"],"diffs":{"51..51":"","51..52":"diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle\nindex a4b08330359..84879d83acd 100644\n--- a/templates/expo-template-bare-minimum/android/app/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/app/build.gradle\n@@ -4,27 +4,6 @@ apply plugin: \"com.facebook.react\"\n \n def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath()\n \n-static def versionToNumber(major, minor, patch) {\n- return patch * 100 + minor * 10000 + major * 1000000\n-}\n-\n-def getRNVersion() {\n- def version = providers.exec {\n- workingDir(projectDir)\n- commandLine(\"node\", \"-e\", \"console.log(require('react-native/package.json').version);\")\n- }.standardOutput.asText.get().trim()\n-\n- def coreVersion = version.split(\"-\")[0]\n- def (major, minor, patch) = coreVersion.tokenize('.').collect { it.toInteger() }\n-\n- return versionToNumber(\n- major,\n- minor,\n- patch\n- )\n-}\n-def rnVersion = getRNVersion()\n-\n /**\n * This is the configuration block to customize your React Native Android app.\n * By default you don't need to apply any configuration, just uncomment the lines you need.\n@@ -41,12 +20,12 @@ react {\n bundleCommand = \"export:embed\"\n \n /* Folders */\n- // The root of your project, i.e. where \"package.json\" lives. Default is '..'\n- // root = file(\"../\")\n- // The folder where the react-native NPM package is. Default is ../node_modules/react-native\n- // reactNativeDir = file(\"../node_modules/react-native\")\n- // The folder where the react-native Codegen package is. Default is ../node_modules/@react-native/codegen\n- // codegenDir = file(\"../node_modules/@react-native/codegen\")\n+ // The root of your project, i.e. where \"package.json\" lives. Default is '../..'\n+ // root = file(\"../../\")\n+ // The folder where the react-native NPM package is. Default is ../../node_modules/react-native\n+ // reactNativeDir = file(\"../../node_modules/react-native\")\n+ // The folder where the react-native Codegen package is. Default is ../../node_modules/@react-native/codegen\n+ // codegenDir = file(\"../../node_modules/@react-native/codegen\")\n \n /* Variants */\n // The list of variants to that are debuggable. For those we're going to\n@@ -79,10 +58,8 @@ react {\n // The list of flags to pass to the Hermes compiler. By default is \"-O\", \"-output-source-map\"\n // hermesFlags = [\"-O\", \"-output-source-map\"]\n \n- if (rnVersion >= versionToNumber(0, 75, 0)) {\n- /* Autolinking */\n- autolinkLibrariesWithApp()\n- }\n+ /* Autolinking */\n+ autolinkLibrariesWithApp()\n }\n \n /**\n@@ -144,6 +121,9 @@ android {\n useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false)\n }\n }\n+ androidResources {\n+ ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:!CVS:!thumbs.db:!picasa.ini:!*~'\n+ }\n }\n \n // Apply static values from `gradle.properties` to the `android.packagingOptions`\n@@ -194,8 +174,3 @@ dependencies {\n implementation jscFlavor\n }\n }\n-\n-if (rnVersion < versionToNumber(0, 75, 0)) {\n- apply from: new File([\"node\", \"--print\", \"require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), \"../native_modules.gradle\");\n- applyNativeModulesAppBuildGradle(project)\n-}\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\nindex 52175508263..150248b6b3c 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n@@ -18,13 +18,12 @@\n \n \n \n- \n+ \n \n \n \n \n \n \n- \n \n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\nindex 5f6e05ce071..e61349d1301 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n@@ -10,6 +10,7 @@ import com.facebook.react.ReactPackage\n import com.facebook.react.ReactHost\n import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load\n import com.facebook.react.defaults.DefaultReactNativeHost\n+import com.facebook.react.soloader.OpenSourceMergedSoMapping\n import com.facebook.soloader.SoLoader\n \n import expo.modules.ApplicationLifecycleDispatcher\n@@ -21,9 +22,10 @@ class MainApplication : Application(), ReactApplication {\n this,\n object : DefaultReactNativeHost(this) {\n override fun getPackages(): List {\n+ val packages = PackageList(this).packages\n // Packages that cannot be autolinked yet can be added manually here, for example:\n // packages.add(new MyReactNativePackage());\n- return PackageList(this).packages\n+ return packages\n }\n \n override fun getJSMainModuleName(): String = \".expo/.virtual-metro-entry\"\n@@ -40,7 +42,7 @@ class MainApplication : Application(), ReactApplication {\n \n override fun onCreate() {\n super.onCreate()\n- SoLoader.init(this, false)\n+ SoLoader.init(this, OpenSourceMergedSoMapping)\n if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {\n // If you opted-in for the New Architecture, we load the native entry point for this app.\n load()\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..31df827b18b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..ef243aab6c0\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..e9d5474519c\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..d61da15d241\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..4aeed11d00b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml\nnew file mode 100644\nindex 00000000000..883b2a080f3\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml\n@@ -0,0 +1,6 @@\n+\n+ \n+ \n+ \n+ \n+\n\\ No newline at end of file\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..a2f5908281d\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..1b523998081\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..ff10afd6e18\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..115a4c768a2\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..dcd3cd80833\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..459ca609d3a\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..8ca12fe024b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..8e19b410a1b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..b824ebdd48d\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..4c19a13c239\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\nindex 90bcc87b8e8..51fbc1e5a72 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n@@ -10,6 +10,6 @@\n @android:color/black\n \n \n \ndiff --git a/templates/expo-template-bare-minimum/android/build.gradle b/templates/expo-template-bare-minimum/android/build.gradle\nindex 932bf7b34ba..abbcb8ec8a1 100644\n--- a/templates/expo-template-bare-minimum/android/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/build.gradle\n@@ -2,11 +2,11 @@\n \n buildscript {\n ext {\n- buildToolsVersion = findProperty('android.buildToolsVersion') ?: '34.0.0'\n- minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '23')\n- compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '34')\n+ buildToolsVersion = findProperty('android.buildToolsVersion') ?: '35.0.0'\n+ minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '24')\n+ compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '35')\n targetSdkVersion = Integer.parseInt(findProperty('android.targetSdkVersion') ?: '34')\n- kotlinVersion = findProperty('android.kotlinVersion') ?: '1.9.23'\n+ kotlinVersion = findProperty('android.kotlinVersion') ?: '1.9.25'\n \n ndkVersion = \"26.1.10909125\"\n }\ndiff --git a/templates/expo-template-bare-minimum/android/gradle.properties b/templates/expo-template-bare-minimum/android/gradle.properties\nindex 40220def8da..de47429c64c 100644\n--- a/templates/expo-template-bare-minimum/android/gradle.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle.properties\n@@ -22,9 +22,6 @@ org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m\n # https://developer.android.com/topic/libraries/support-library/androidx-rn\n android.useAndroidX=true\n \n-# Automatically convert third-party libraries to use AndroidX\n-android.enableJetifier=true\n-\n # Enable AAPT2 PNG crunching\n android.enablePngCrunchInReleaseBuilds=true\n \ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar\nindex e6441136f3d..a4b76b9530d 100644\nBinary files a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar and b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar differ\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\nindex 6f7a6eb33e8..79eb9d003fe 100644\n--- a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n@@ -1,6 +1,6 @@\n distributionBase=GRADLE_USER_HOME\n distributionPath=wrapper/dists\n-distributionUrl=https\\://services.gradle.org/distributions/gradle-8.8-all.zip\n+distributionUrl=https\\://services.gradle.org/distributions/gradle-8.10.2-all.zip\n networkTimeout=10000\n validateDistributionUrl=true\n zipStoreBase=GRADLE_USER_HOME\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew b/templates/expo-template-bare-minimum/android/gradlew\nindex 1aa94a42690..f5feea6d6b1 100755\n--- a/templates/expo-template-bare-minimum/android/gradlew\n+++ b/templates/expo-template-bare-minimum/android/gradlew\n@@ -15,6 +15,8 @@\n # See the License for the specific language governing permissions and\n # limitations under the License.\n #\n+# SPDX-License-Identifier: Apache-2.0\n+#\n \n ##############################################################################\n #\n@@ -55,7 +57,7 @@\n # Darwin, MinGW, and NonStop.\n #\n # (3) This script is generated from the Groovy template\n-# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt\n+# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt\n # within the Gradle project.\n #\n # You can find Gradle at https://github.com/gradle/gradle/.\n@@ -84,7 +86,8 @@ done\n # shellcheck disable=SC2034\n APP_BASE_NAME=${0##*/}\n # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)\n-APP_HOME=$( cd \"${APP_HOME:-./}\" > /dev/null && pwd -P ) || exit\n+APP_HOME=$( cd -P \"${APP_HOME:-./}\" > /dev/null && printf '%s\n+' \"$PWD\" ) || exit\n \n # Use the maximum available, or set MAX_FD != -1 to use that value.\n MAX_FD=maximum\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew.bat b/templates/expo-template-bare-minimum/android/gradlew.bat\nindex 7101f8e4676..9b42019c791 100644\n--- a/templates/expo-template-bare-minimum/android/gradlew.bat\n+++ b/templates/expo-template-bare-minimum/android/gradlew.bat\n@@ -13,6 +13,8 @@\n @rem See the License for the specific language governing permissions and\r\n @rem limitations under the License.\r\n @rem\r\n+@rem SPDX-License-Identifier: Apache-2.0\r\n+@rem\r\n \r\n @if \"%DEBUG%\"==\"\" @echo off\r\n @rem ##########################################################################\r\ndiff --git a/templates/expo-template-bare-minimum/android/settings.gradle b/templates/expo-template-bare-minimum/android/settings.gradle\nindex 80b1bc3267b..39b188e065c 100644\n--- a/templates/expo-template-bare-minimum/android/settings.gradle\n+++ b/templates/expo-template-bare-minimum/android/settings.gradle\n@@ -1,46 +1,23 @@\n pluginManagement {\n- def version = providers.exec {\n- commandLine(\"node\", \"-e\", \"console.log(require('react-native/package.json').version);\")\n- }.standardOutput.asText.get().trim()\n- def (_, reactNativeMinor, reactNativePatch) = version.split(\"-\")[0].tokenize('.').collect { it.toInteger() }\n-\n- includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().toString())\n- if(reactNativeMinor == 74 && reactNativePatch <= 3){\n- includeBuild(\"react-settings-plugin\")\n- }\n+ includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().toString())\n }\n-\n plugins { id(\"com.facebook.react.settings\") }\n \n-def getRNMinorVersion() {\n- def version = providers.exec {\n- commandLine(\"node\", \"-e\", \"console.log(require('react-native/package.json').version);\")\n- }.standardOutput.asText.get().trim()\n-\n- def coreVersion = version.split(\"-\")[0]\n- def (major, minor, patch) = coreVersion.tokenize('.').collect { it.toInteger() }\n-\n- return minor\n-}\n-\n-if (getRNMinorVersion() >= 75) {\n- extensions.configure(com.facebook.react.ReactSettingsExtension) { ex ->\n- if (System.getenv('EXPO_UNSTABLE_CORE_AUTOLINKING') == '1') {\n- println('\\u001B[32mUsing expo-modules-autolinking as core autolinking source\\u001B[0m')\n- def command = [\n- 'node',\n- '--no-warnings',\n- '--eval',\n- 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n- 'react-native-config',\n- '--json',\n- '--platform',\n- 'android'\n- ].toList()\n- ex.autolinkLibrariesFromCommand(command)\n- } else {\n- ex.autolinkLibrariesFromCommand()\n- }\n+extensions.configure(com.facebook.react.ReactSettingsExtension) { ex ->\n+ if (System.getenv('EXPO_USE_COMMUNITY_AUTOLINKING') == '1') {\n+ ex.autolinkLibrariesFromCommand()\n+ } else {\n+ def command = [\n+ 'node',\n+ '--no-warnings',\n+ '--eval',\n+ 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n+ 'react-native-config',\n+ '--json',\n+ '--platform',\n+ 'android'\n+ ].toList()\n+ ex.autolinkLibrariesFromCommand(command)\n }\n }\n \n@@ -57,10 +34,5 @@ dependencyResolutionManagement {\n apply from: new File([\"node\", \"--print\", \"require.resolve('expo/package.json')\"].execute(null, rootDir).text.trim(), \"../scripts/autolinking.gradle\");\n useExpoModules()\n \n-if (getRNMinorVersion() < 75) {\n- apply from: new File([\"node\", \"--print\", \"require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), \"../native_modules.gradle\");\n- applyNativeModulesSettingsGradle(settings)\n-}\n-\n include ':app'\n includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile())\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\nindex f945940c256..1ccb9b422d5 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n@@ -287,7 +287,7 @@\n \t\t\t\t\t\"FB_SONARKIT_ENABLED=1\",\n \t\t\t\t);\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n@@ -311,7 +311,7 @@\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n \t\t\t\tCURRENT_PROJECT_VERSION = 1;\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n@@ -373,7 +373,7 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n@@ -422,7 +422,7 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist b/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist\nindex 53d78e89033..596dc7ce6b5 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist\n@@ -24,6 +24,8 @@\n \t1\n \tLSRequiresIPhoneOS\n \t\n+\tLSMinimumSystemVersion\n+\t12.0\n \tNSAppTransportSecurity\n \t\n \t\tNSAllowsArbitraryLoads\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\nindex 24eec3df5cb..447b4188985 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n@@ -1,91 +1,42 @@\n \n-\n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n+\n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n \ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex 57c1dd38343..f740040e7be 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -7,11 +7,18 @@ podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties\n ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0'\n ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n \n-use_autolinking_method_symbol = ('use' + '_native' + '_modules!').to_sym\n-origin_autolinking_method = self.method(use_autolinking_method_symbol)\n-self.define_singleton_method(use_autolinking_method_symbol) do |*args|\n- if ENV['EXPO_UNSTABLE_CORE_AUTOLINKING'] == '1'\n- Pod::UI.puts('Using expo-modules-autolinking as core autolinking source'.green)\n+platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'\n+install! 'cocoapods',\n+ :deterministic_uuids => false\n+\n+prepare_react_native_project!\n+\n+target 'HelloWorld' do\n+ use_expo_modules!\n+\n+ if ENV['EXPO_USE_COMMUNITY_AUTOLINKING'] == '1'\n+ config_command = ['node', '-e', \"process.argv=['', '', 'config'];require('@react-native-community/cli').run()\"];\n+ else\n config_command = [\n 'node',\n '--no-warnings',\n@@ -22,21 +29,9 @@ self.define_singleton_method(use_autolinking_method_symbol) do |*args|\n '--platform',\n 'ios'\n ]\n- origin_autolinking_method.call(config_command)\n- else\n- origin_autolinking_method.call()\n end\n-end\n \n-platform :ios, podfile_properties['ios.deploymentTarget'] || '13.4'\n-install! 'cocoapods',\n- :deterministic_uuids => false\n-\n-prepare_react_native_project!\n-\n-target 'HelloWorld' do\n- use_expo_modules!\n- config = use_native_modules!\n+ config = use_native_modules!(config_command)\n \n use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks']\n use_frameworks! :linkage => ENV['USE_FRAMEWORKS'].to_sym if ENV['USE_FRAMEWORKS']\n@@ -68,12 +63,4 @@ target 'HelloWorld' do\n end\n end\n end\n-\n- post_integrate do |installer|\n- begin\n- expo_patch_react_imports!(installer)\n- rescue => e\n- Pod::UI.warn e\n- end\n- end\n end\ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex 563853071f0..b51159163bf 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -1,7 +1,8 @@\n {\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n- \"version\": \"51.0.56\",\n+ \"license\": \"0BSD\",\n+ \"version\": \"52.0.79\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -10,10 +11,10 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~51.0.28\",\n- \"expo-status-bar\": \"~1.12.1\",\n- \"react\": \"18.2.0\",\n- \"react-native\": \"0.74.5\"\n+ \"expo\": \"~52.0.49\",\n+ \"expo-status-bar\": \"~2.0.1\",\n+ \"react\": \"18.3.1\",\n+ \"react-native\": \"0.76.9\"\n },\n \"devDependencies\": {\n \"@babel/core\": \"^7.20.0\"\n","52..52":"","51..53":"diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle\nindex a4b08330359..34b96c71c33 100644\n--- a/templates/expo-template-bare-minimum/android/app/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/app/build.gradle\n@@ -4,27 +4,6 @@ apply plugin: \"com.facebook.react\"\n \n def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath()\n \n-static def versionToNumber(major, minor, patch) {\n- return patch * 100 + minor * 10000 + major * 1000000\n-}\n-\n-def getRNVersion() {\n- def version = providers.exec {\n- workingDir(projectDir)\n- commandLine(\"node\", \"-e\", \"console.log(require('react-native/package.json').version);\")\n- }.standardOutput.asText.get().trim()\n-\n- def coreVersion = version.split(\"-\")[0]\n- def (major, minor, patch) = coreVersion.tokenize('.').collect { it.toInteger() }\n-\n- return versionToNumber(\n- major,\n- minor,\n- patch\n- )\n-}\n-def rnVersion = getRNVersion()\n-\n /**\n * This is the configuration block to customize your React Native Android app.\n * By default you don't need to apply any configuration, just uncomment the lines you need.\n@@ -35,18 +14,19 @@ react {\n hermesCommand = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/sdks/hermesc/%OS-BIN%/hermesc\"\n codegenDir = new File([\"node\", \"--print\", \"require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n \n+ enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean()\n // Use Expo CLI to bundle the app, this ensures the Metro config\n // works correctly with Expo projects.\n cliFile = new File([\"node\", \"--print\", \"require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })\"].execute(null, rootDir).text.trim())\n bundleCommand = \"export:embed\"\n \n /* Folders */\n- // The root of your project, i.e. where \"package.json\" lives. Default is '..'\n- // root = file(\"../\")\n- // The folder where the react-native NPM package is. Default is ../node_modules/react-native\n- // reactNativeDir = file(\"../node_modules/react-native\")\n- // The folder where the react-native Codegen package is. Default is ../node_modules/@react-native/codegen\n- // codegenDir = file(\"../node_modules/@react-native/codegen\")\n+ // The root of your project, i.e. where \"package.json\" lives. Default is '../..'\n+ // root = file(\"../../\")\n+ // The folder where the react-native NPM package is. Default is ../../node_modules/react-native\n+ // reactNativeDir = file(\"../../node_modules/react-native\")\n+ // The folder where the react-native Codegen package is. Default is ../../node_modules/@react-native/codegen\n+ // codegenDir = file(\"../../node_modules/@react-native/codegen\")\n \n /* Variants */\n // The list of variants to that are debuggable. For those we're going to\n@@ -79,10 +59,8 @@ react {\n // The list of flags to pass to the Hermes compiler. By default is \"-O\", \"-output-source-map\"\n // hermesFlags = [\"-O\", \"-output-source-map\"]\n \n- if (rnVersion >= versionToNumber(0, 75, 0)) {\n- /* Autolinking */\n- autolinkLibrariesWithApp()\n- }\n+ /* Autolinking */\n+ autolinkLibrariesWithApp()\n }\n \n /**\n@@ -101,7 +79,7 @@ def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInRelea\n * give correct results when using with locales other than en-US. Note that\n * this variant is about 6MiB larger per architecture than default.\n */\n-def jscFlavor = 'org.webkit:android-jsc:+'\n+def jscFlavor = 'io.github.react-native-community:jsc-android:2026004.+'\n \n android {\n ndkVersion rootProject.ext.ndkVersion\n@@ -144,6 +122,9 @@ android {\n useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false)\n }\n }\n+ androidResources {\n+ ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:!CVS:!thumbs.db:!picasa.ini:!*~'\n+ }\n }\n \n // Apply static values from `gradle.properties` to the `android.packagingOptions`\n@@ -176,15 +157,15 @@ dependencies {\n \n if (isGifEnabled) {\n // For animated gif support\n- implementation(\"com.facebook.fresco:animated-gif:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-gif:${expoLibs.versions.fresco.get()}\")\n }\n \n if (isWebpEnabled) {\n // For webp support\n- implementation(\"com.facebook.fresco:webpsupport:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:webpsupport:${expoLibs.versions.fresco.get()}\")\n if (isWebpAnimatedEnabled) {\n // Animated webp support\n- implementation(\"com.facebook.fresco:animated-webp:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-webp:${expoLibs.versions.fresco.get()}\")\n }\n }\n \n@@ -194,8 +175,3 @@ dependencies {\n implementation jscFlavor\n }\n }\n-\n-if (rnVersion < versionToNumber(0, 75, 0)) {\n- apply from: new File([\"node\", \"--print\", \"require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), \"../native_modules.gradle\");\n- applyNativeModulesAppBuildGradle(project)\n-}\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\nindex 52175508263..150248b6b3c 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n@@ -18,13 +18,12 @@\n \n \n \n- \n+ \n \n \n \n \n \n \n- \n \n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\nindex 5f6e05ce071..267e20c30e5 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n@@ -10,6 +10,7 @@ import com.facebook.react.ReactPackage\n import com.facebook.react.ReactHost\n import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load\n import com.facebook.react.defaults.DefaultReactNativeHost\n+import com.facebook.react.soloader.OpenSourceMergedSoMapping\n import com.facebook.soloader.SoLoader\n \n import expo.modules.ApplicationLifecycleDispatcher\n@@ -21,9 +22,10 @@ class MainApplication : Application(), ReactApplication {\n this,\n object : DefaultReactNativeHost(this) {\n override fun getPackages(): List {\n+ val packages = PackageList(this).packages\n // Packages that cannot be autolinked yet can be added manually here, for example:\n- // packages.add(new MyReactNativePackage());\n- return PackageList(this).packages\n+ // packages.add(MyReactNativePackage())\n+ return packages\n }\n \n override fun getJSMainModuleName(): String = \".expo/.virtual-metro-entry\"\n@@ -40,7 +42,7 @@ class MainApplication : Application(), ReactApplication {\n \n override fun onCreate() {\n super.onCreate()\n- SoLoader.init(this, false)\n+ SoLoader.init(this, OpenSourceMergedSoMapping)\n if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {\n // If you opted-in for the New Architecture, we load the native entry point for this app.\n load()\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..31df827b18b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..ef243aab6c0\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..e9d5474519c\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..d61da15d241\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..4aeed11d00b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml\nnew file mode 100644\nindex 00000000000..883b2a080f3\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml\n@@ -0,0 +1,6 @@\n+\n+ \n+ \n+ \n+ \n+\n\\ No newline at end of file\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..a2f5908281d\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..1b523998081\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..ff10afd6e18\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..115a4c768a2\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..dcd3cd80833\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..459ca609d3a\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..8ca12fe024b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..8e19b410a1b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..b824ebdd48d\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..4c19a13c239\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\nindex 90bcc87b8e8..26f3404be26 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n@@ -1,15 +1,8 @@\n \n- \n- \n \n \ndiff --git a/templates/expo-template-bare-minimum/android/build.gradle b/templates/expo-template-bare-minimum/android/build.gradle\nindex 932bf7b34ba..fa7b11e23c1 100644\n--- a/templates/expo-template-bare-minimum/android/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/build.gradle\n@@ -1,41 +1,37 @@\n // Top-level build file where you can add configuration options common to all sub-projects/modules.\n \n buildscript {\n- ext {\n- buildToolsVersion = findProperty('android.buildToolsVersion') ?: '34.0.0'\n- minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '23')\n- compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '34')\n- targetSdkVersion = Integer.parseInt(findProperty('android.targetSdkVersion') ?: '34')\n- kotlinVersion = findProperty('android.kotlinVersion') ?: '1.9.23'\n-\n- ndkVersion = \"26.1.10909125\"\n- }\n- repositories {\n- google()\n- mavenCentral()\n- }\n- dependencies {\n- classpath('com.android.tools.build:gradle')\n- classpath('com.facebook.react:react-native-gradle-plugin')\n- classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')\n- }\n+ repositories {\n+ google()\n+ mavenCentral()\n+ }\n+ dependencies {\n+ classpath('com.android.tools.build:gradle')\n+ classpath('com.facebook.react:react-native-gradle-plugin')\n+ classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')\n+ }\n }\n \n-apply plugin: \"com.facebook.react.rootproject\"\n+def reactNativeAndroidDir = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('react-native/package.json')\")\n+ }.standardOutput.asText.get().trim(),\n+ \"../android\"\n+)\n \n allprojects {\n- repositories {\n- maven {\n- // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n- url(new File(['node', '--print', \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim(), '../android'))\n- }\n- maven {\n- // Android JSC is installed from npm\n- url(new File(['node', '--print', \"require.resolve('jsc-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), '../dist'))\n- }\n-\n- google()\n- mavenCentral()\n- maven { url 'https://www.jitpack.io' }\n+ repositories {\n+ maven {\n+ // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n+ url(reactNativeAndroidDir)\n }\n+\n+ google()\n+ mavenCentral()\n+ maven { url 'https://www.jitpack.io' }\n+ }\n }\n+\n+apply plugin: \"expo-root-project\"\n+apply plugin: \"com.facebook.react.rootproject\"\ndiff --git a/templates/expo-template-bare-minimum/android/gradle.properties b/templates/expo-template-bare-minimum/android/gradle.properties\nindex 40220def8da..7531e9eb23c 100644\n--- a/templates/expo-template-bare-minimum/android/gradle.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle.properties\n@@ -22,9 +22,6 @@ org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m\n # https://developer.android.com/topic/libraries/support-library/androidx-rn\n android.useAndroidX=true\n \n-# Automatically convert third-party libraries to use AndroidX\n-android.enableJetifier=true\n-\n # Enable AAPT2 PNG crunching\n android.enablePngCrunchInReleaseBuilds=true\n \n@@ -38,7 +35,7 @@ reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64\n # your application. You should enable this flag either if you want\n # to write custom TurboModules/Fabric components OR use libraries that\n # are providing them.\n-newArchEnabled=false\n+newArchEnabled=true\n \n # Use this property to enable or disable the Hermes JS engine.\n # If set to false, you will be using JSC instead.\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar\nindex e6441136f3d..a4b76b9530d 100644\nBinary files a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar and b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar differ\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\nindex 6f7a6eb33e8..37f853b1c84 100644\n--- a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n@@ -1,6 +1,6 @@\n distributionBase=GRADLE_USER_HOME\n distributionPath=wrapper/dists\n-distributionUrl=https\\://services.gradle.org/distributions/gradle-8.8-all.zip\n+distributionUrl=https\\://services.gradle.org/distributions/gradle-8.13-bin.zip\n networkTimeout=10000\n validateDistributionUrl=true\n zipStoreBase=GRADLE_USER_HOME\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew b/templates/expo-template-bare-minimum/android/gradlew\nindex 1aa94a42690..f3b75f3b0d4 100755\n--- a/templates/expo-template-bare-minimum/android/gradlew\n+++ b/templates/expo-template-bare-minimum/android/gradlew\n@@ -15,6 +15,8 @@\n # See the License for the specific language governing permissions and\n # limitations under the License.\n #\n+# SPDX-License-Identifier: Apache-2.0\n+#\n \n ##############################################################################\n #\n@@ -55,7 +57,7 @@\n # Darwin, MinGW, and NonStop.\n #\n # (3) This script is generated from the Groovy template\n-# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt\n+# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt\n # within the Gradle project.\n #\n # You can find Gradle at https://github.com/gradle/gradle/.\n@@ -84,7 +86,7 @@ done\n # shellcheck disable=SC2034\n APP_BASE_NAME=${0##*/}\n # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)\n-APP_HOME=$( cd \"${APP_HOME:-./}\" > /dev/null && pwd -P ) || exit\n+APP_HOME=$( cd -P \"${APP_HOME:-./}\" > /dev/null && printf '%s\\n' \"$PWD\" ) || exit\n \n # Use the maximum available, or set MAX_FD != -1 to use that value.\n MAX_FD=maximum\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew.bat b/templates/expo-template-bare-minimum/android/gradlew.bat\nindex 7101f8e4676..9b42019c791 100644\n--- a/templates/expo-template-bare-minimum/android/gradlew.bat\n+++ b/templates/expo-template-bare-minimum/android/gradlew.bat\n@@ -13,6 +13,8 @@\n @rem See the License for the specific language governing permissions and\r\n @rem limitations under the License.\r\n @rem\r\n+@rem SPDX-License-Identifier: Apache-2.0\r\n+@rem\r\n \r\n @if \"%DEBUG%\"==\"\" @echo off\r\n @rem ##########################################################################\r\ndiff --git a/templates/expo-template-bare-minimum/android/settings.gradle b/templates/expo-template-bare-minimum/android/settings.gradle\nindex 80b1bc3267b..7fe91512213 100644\n--- a/templates/expo-template-bare-minimum/android/settings.gradle\n+++ b/templates/expo-template-bare-minimum/android/settings.gradle\n@@ -1,66 +1,39 @@\n pluginManagement {\n- def version = providers.exec {\n- commandLine(\"node\", \"-e\", \"console.log(require('react-native/package.json').version);\")\n- }.standardOutput.asText.get().trim()\n- def (_, reactNativeMinor, reactNativePatch) = version.split(\"-\")[0].tokenize('.').collect { it.toInteger() }\n-\n- includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().toString())\n- if(reactNativeMinor == 74 && reactNativePatch <= 3){\n- includeBuild(\"react-settings-plugin\")\n- }\n+ def reactNativeGradlePlugin = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\")\n+ }.standardOutput.asText.get().trim()\n+ ).getParentFile().absolutePath\n+ includeBuild(reactNativeGradlePlugin)\n+ \n+ def expoPluginsPath = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('expo-modules-autolinking/package.json', { paths: [require.resolve('expo/package.json')] })\")\n+ }.standardOutput.asText.get().trim(),\n+ \"../android/expo-gradle-plugin\"\n+ ).absolutePath\n+ includeBuild(expoPluginsPath)\n }\n \n-plugins { id(\"com.facebook.react.settings\") }\n-\n-def getRNMinorVersion() {\n- def version = providers.exec {\n- commandLine(\"node\", \"-e\", \"console.log(require('react-native/package.json').version);\")\n- }.standardOutput.asText.get().trim()\n-\n- def coreVersion = version.split(\"-\")[0]\n- def (major, minor, patch) = coreVersion.tokenize('.').collect { it.toInteger() }\n-\n- return minor\n+plugins {\n+ id(\"com.facebook.react.settings\")\n+ id(\"expo-autolinking-settings\")\n }\n \n-if (getRNMinorVersion() >= 75) {\n- extensions.configure(com.facebook.react.ReactSettingsExtension) { ex ->\n- if (System.getenv('EXPO_UNSTABLE_CORE_AUTOLINKING') == '1') {\n- println('\\u001B[32mUsing expo-modules-autolinking as core autolinking source\\u001B[0m')\n- def command = [\n- 'node',\n- '--no-warnings',\n- '--eval',\n- 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n- 'react-native-config',\n- '--json',\n- '--platform',\n- 'android'\n- ].toList()\n- ex.autolinkLibrariesFromCommand(command)\n- } else {\n- ex.autolinkLibrariesFromCommand()\n- }\n+extensions.configure(com.facebook.react.ReactSettingsExtension) { ex ->\n+ if (System.getenv('EXPO_USE_COMMUNITY_AUTOLINKING') == '1') {\n+ ex.autolinkLibrariesFromCommand()\n+ } else {\n+ ex.autolinkLibrariesFromCommand(expoAutolinking.rnConfigCommand)\n }\n }\n+expoAutolinking.useExpoModules()\n \n rootProject.name = 'HelloWorld'\n \n-dependencyResolutionManagement {\n- versionCatalogs {\n- reactAndroidLibs {\n- from(files(new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim(), \"../gradle/libs.versions.toml\")))\n- }\n- }\n-}\n-\n-apply from: new File([\"node\", \"--print\", \"require.resolve('expo/package.json')\"].execute(null, rootDir).text.trim(), \"../scripts/autolinking.gradle\");\n-useExpoModules()\n-\n-if (getRNMinorVersion() < 75) {\n- apply from: new File([\"node\", \"--print\", \"require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), \"../native_modules.gradle\");\n- applyNativeModulesSettingsGradle(settings)\n-}\n+expoAutolinking.useExpoVersionCatalog()\n \n include ':app'\n-includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile())\n+includeBuild(expoAutolinking.reactNativeGradlePlugin)\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\nindex f945940c256..1b7513bd31b 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n@@ -3,33 +3,25 @@\n \tarchiveVersion = 1;\n \tclasses = {\n \t};\n-\tobjectVersion = 46;\n+\tobjectVersion = 54;\n \tobjects = {\n \n /* Begin PBXBuildFile section */\n-\t\t13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };\n \t\t13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };\n-\t\t13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };\n \t\t3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; };\n-\t\t96905EF65AED1B983A6B3ABC /* libPods-HelloWorld.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */; };\n-\t\tB18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; };\n \t\tBB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; };\n+\t\tF11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F11748412D0307B40044C1D9 /* AppDelegate.swift */; };\n /* End PBXBuildFile section */\n \n /* Begin PBXFileReference section */\n \t\t13B07F961A680F5B00A75B9A /* HelloWorld.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloWorld.app; sourceTree = BUILT_PRODUCTS_DIR; };\n-\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = HelloWorld/AppDelegate.h; sourceTree = \"\"; };\n-\t\t13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = HelloWorld/AppDelegate.mm; sourceTree = \"\"; };\n \t\t13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = HelloWorld/Images.xcassets; sourceTree = \"\"; };\n \t\t13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = HelloWorld/Info.plist; sourceTree = \"\"; };\n-\t\t13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = HelloWorld/main.m; sourceTree = \"\"; };\n-\t\t58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-HelloWorld.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n-\t\t6C2E3173556A471DD304B334 /* 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 = \"\"; };\n-\t\t7A4D352CD337FB3A3BF06240 /* 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 = \"\"; };\n \t\tAA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = HelloWorld/SplashScreen.storyboard; sourceTree = \"\"; };\n \t\tBB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = \"\"; };\n \t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };\n-\t\tFAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = \"Pods/Target Support Files/Pods-HelloWorld/ExpoModulesProvider.swift\"; sourceTree = \"\"; };\n+\t\tF11748412D0307B40044C1D9 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = HelloWorld/AppDelegate.swift; sourceTree = \"\"; };\n+\t\tF11748442D0722820044C1D9 /* HelloWorld-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = \"HelloWorld-Bridging-Header.h\"; path = \"HelloWorld/HelloWorld-Bridging-Header.h\"; sourceTree = \"\"; };\n /* End PBXFileReference section */\n \n /* Begin PBXFrameworksBuildPhase section */\n@@ -37,7 +29,6 @@\n \t\t\tisa = PBXFrameworksBuildPhase;\n \t\t\tbuildActionMask = 2147483647;\n \t\t\tfiles = (\n-\t\t\t\t96905EF65AED1B983A6B3ABC /* libPods-HelloWorld.a in Frameworks */,\n \t\t\t);\n \t\t\trunOnlyForDeploymentPostprocessing = 0;\n \t\t};\n@@ -47,12 +38,11 @@\n \t\t13B07FAE1A68108700A75B9A /* HelloWorld */ = {\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n+\t\t\t\tF11748412D0307B40044C1D9 /* AppDelegate.swift */,\n+\t\t\t\tF11748442D0722820044C1D9 /* HelloWorld-Bridging-Header.h */,\n \t\t\t\tBB2F792B24A3F905000567C9 /* Supporting */,\n-\t\t\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */,\n-\t\t\t\t13B07FB01A68108700A75B9A /* AppDelegate.mm */,\n \t\t\t\t13B07FB51A68108700A75B9A /* Images.xcassets */,\n \t\t\t\t13B07FB61A68108700A75B9A /* Info.plist */,\n-\t\t\t\t13B07FB71A68108700A75B9A /* main.m */,\n \t\t\t\tAA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */,\n \t\t\t);\n \t\t\tname = HelloWorld;\n@@ -62,7 +52,6 @@\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n \t\t\t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */,\n-\t\t\t\t58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */,\n \t\t\t);\n \t\t\tname = Frameworks;\n \t\t\tsourceTree = \"\";\n@@ -81,8 +70,6 @@\n \t\t\t\t832341AE1AAA6A7D00B99B32 /* Libraries */,\n \t\t\t\t83CBBA001A601CBA00E9B192 /* Products */,\n \t\t\t\t2D16E6871FA4F8E400B85C8A /* Frameworks */,\n-\t\t\t\tD65327D7A22EEC0BE12398D9 /* Pods */,\n-\t\t\t\tD7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */,\n \t\t\t);\n \t\t\tindentWidth = 2;\n \t\t\tsourceTree = \"\";\n@@ -97,14 +84,6 @@\n \t\t\tname = Products;\n \t\t\tsourceTree = \"\";\n \t\t};\n-\t\t92DBD88DE9BF7D494EA9DA96 /* HelloWorld */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\tFAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */,\n-\t\t\t);\n-\t\t\tname = HelloWorld;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n \t\tBB2F792B24A3F905000567C9 /* Supporting */ = {\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n@@ -114,23 +93,6 @@\n \t\t\tpath = HelloWorld/Supporting;\n \t\t\tsourceTree = \"\";\n \t\t};\n-\t\tD65327D7A22EEC0BE12398D9 /* Pods */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\t6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */,\n-\t\t\t\t7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */,\n-\t\t\t);\n-\t\t\tpath = Pods;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n-\t\tD7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\t92DBD88DE9BF7D494EA9DA96 /* HelloWorld */,\n-\t\t\t);\n-\t\t\tname = ExpoModulesProviders;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n /* End PBXGroup section */\n \n /* Begin PBXNativeTarget section */\n@@ -265,9 +227,7 @@\n \t\t\tisa = PBXSourcesBuildPhase;\n \t\t\tbuildActionMask = 2147483647;\n \t\t\tfiles = (\n-\t\t\t\t13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,\n-\t\t\t\t13B07FC11A68108700A75B9A /* main.m in Sources */,\n-\t\t\t\tB18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */,\n+\t\t\t\tF11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */,\n \t\t\t);\n \t\t\trunOnlyForDeploymentPostprocessing = 0;\n \t\t};\n@@ -276,7 +236,6 @@\n /* Begin XCBuildConfiguration section */\n \t\t13B07F941A680F5B00A75B9A /* Debug */ = {\n \t\t\tisa = XCBuildConfiguration;\n-\t\t\tbaseConfigurationReference = 6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */;\n \t\t\tbuildSettings = {\n \t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n@@ -287,8 +246,11 @@\n \t\t\t\t\t\"FB_SONARKIT_ENABLED=1\",\n \t\t\t\t);\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t\t\"@executable_path/Frameworks\",\n+\t\t\t\t);\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -297,6 +259,7 @@\n \t\t\t\t);\n \t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = org.name.HelloWorld;\n \t\t\t\tPRODUCT_NAME = HelloWorld;\n+\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"HelloWorld/HelloWorld-Bridging-Header.h\";\n \t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n \t\t\t\tSWIFT_VERSION = 5.0;\n \t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n@@ -305,14 +268,16 @@\n \t\t};\n \t\t13B07F951A680F5B00A75B9A /* Release */ = {\n \t\t\tisa = XCBuildConfiguration;\n-\t\t\tbaseConfigurationReference = 7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */;\n \t\t\tbuildSettings = {\n \t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n \t\t\t\tCURRENT_PROJECT_VERSION = 1;\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t\t\"@executable_path/Frameworks\",\n+\t\t\t\t);\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -321,6 +286,7 @@\n \t\t\t\t);\n \t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = org.name.HelloWorld;\n \t\t\t\tPRODUCT_NAME = HelloWorld;\n+\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"HelloWorld/HelloWorld-Bridging-Header.h\";\n \t\t\t\tSWIFT_VERSION = 5.0;\n \t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n \t\t\t};\n@@ -373,8 +339,11 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t/usr/lib/swift,\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t);\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n \t\t\t\tONLY_ACTIVE_ARCH = YES;\n@@ -422,8 +391,11 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t/usr/lib/swift,\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t);\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n \t\t\t\tSDKROOT = iphoneos;\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\nnew file mode 100644\nindex 00000000000..a7887e1e5b1\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\n@@ -0,0 +1,70 @@\n+import Expo\n+import React\n+import ReactAppDependencyProvider\n+\n+@UIApplicationMain\n+public class AppDelegate: ExpoAppDelegate {\n+ var window: UIWindow?\n+\n+ var reactNativeDelegate: ExpoReactNativeFactoryDelegate?\n+ var reactNativeFactory: RCTReactNativeFactory?\n+\n+ public override func application(\n+ _ application: UIApplication,\n+ didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil\n+ ) -> Bool {\n+ let delegate = ReactNativeDelegate()\n+ let factory = ExpoReactNativeFactory(delegate: delegate)\n+ delegate.dependencyProvider = RCTAppDependencyProvider()\n+\n+ reactNativeDelegate = delegate\n+ reactNativeFactory = factory\n+ bindReactNativeFactory(factory)\n+\n+#if os(iOS) || os(tvOS)\n+ window = UIWindow(frame: UIScreen.main.bounds)\n+ factory.startReactNative(\n+ withModuleName: \"main\",\n+ in: window,\n+ launchOptions: launchOptions)\n+#endif\n+\n+ return super.application(application, didFinishLaunchingWithOptions: launchOptions)\n+ }\n+\n+ // Linking API\n+ public override func application(\n+ _ app: UIApplication,\n+ open url: URL,\n+ options: [UIApplication.OpenURLOptionsKey: Any] = [:]\n+ ) -> Bool {\n+ return super.application(app, open: url, options: options) || RCTLinkingManager.application(app, open: url, options: options)\n+ }\n+\n+ // Universal Links\n+ public override func application(\n+ _ application: UIApplication,\n+ continue userActivity: NSUserActivity,\n+ restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void\n+ ) -> Bool {\n+ let result = RCTLinkingManager.application(application, continue: userActivity, restorationHandler: restorationHandler)\n+ return super.application(application, continue: userActivity, restorationHandler: restorationHandler) || result\n+ }\n+}\n+\n+class ReactNativeDelegate: ExpoReactNativeFactoryDelegate {\n+ // Extension point for config-plugins\n+\n+ override func sourceURL(for bridge: RCTBridge) -> URL? {\n+ // needed to return the correct URL for expo-dev-client.\n+ bridge.bundleURL ?? bundleURL()\n+ }\n+\n+ override func bundleURL() -> URL? {\n+#if DEBUG\n+ return RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: \".expo/.virtual-metro-entry\")\n+#else\n+ return Bundle.main.url(forResource: \"main\", withExtension: \"jsbundle\")\n+#endif\n+ }\n+}\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h b/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h\nnew file mode 100644\nindex 00000000000..8361941afc2\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h\n@@ -0,0 +1,3 @@\n+//\n+// Use this file to import your target's public headers that you would like to expose to Swift.\n+//\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist b/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist\nindex 53d78e89033..596dc7ce6b5 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist\n@@ -24,6 +24,8 @@\n \t1\n \tLSRequiresIPhoneOS\n \t\n+\tLSMinimumSystemVersion\n+\t12.0\n \tNSAppTransportSecurity\n \t\n \t\tNSAllowsArbitraryLoads\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\nindex 24eec3df5cb..447b4188985 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n@@ -1,91 +1,42 @@\n \n-\n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n+\n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n \ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex 57c1dd38343..29503ff0cc1 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -4,39 +4,32 @@ require File.join(File.dirname(`node --print \"require.resolve('react-native/pack\n require 'json'\n podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}\n \n-ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0'\n+ENV['RCT_NEW_ARCH_ENABLED'] = '0' if podfile_properties['newArchEnabled'] == 'false'\n ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n \n-use_autolinking_method_symbol = ('use' + '_native' + '_modules!').to_sym\n-origin_autolinking_method = self.method(use_autolinking_method_symbol)\n-self.define_singleton_method(use_autolinking_method_symbol) do |*args|\n- if ENV['EXPO_UNSTABLE_CORE_AUTOLINKING'] == '1'\n- Pod::UI.puts('Using expo-modules-autolinking as core autolinking source'.green)\n+platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'\n+install! 'cocoapods',\n+ :deterministic_uuids => false\n+\n+prepare_react_native_project!\n+\n+target 'HelloWorld' do\n+ use_expo_modules!\n+\n+ if ENV['EXPO_USE_COMMUNITY_AUTOLINKING'] == '1'\n+ config_command = ['node', '-e', \"process.argv=['', '', 'config'];require('@react-native-community/cli').run()\"];\n+ else\n config_command = [\n- 'node',\n- '--no-warnings',\n- '--eval',\n- 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n+ 'npx',\n+ 'expo-modules-autolinking',\n 'react-native-config',\n '--json',\n '--platform',\n 'ios'\n ]\n- origin_autolinking_method.call(config_command)\n- else\n- origin_autolinking_method.call()\n end\n-end\n \n-platform :ios, podfile_properties['ios.deploymentTarget'] || '13.4'\n-install! 'cocoapods',\n- :deterministic_uuids => false\n-\n-prepare_react_native_project!\n-\n-target 'HelloWorld' do\n- use_expo_modules!\n- config = use_native_modules!\n+ config = use_native_modules!(config_command)\n \n use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks']\n use_frameworks! :linkage => ENV['USE_FRAMEWORKS'].to_sym if ENV['USE_FRAMEWORKS']\n@@ -68,12 +61,4 @@ target 'HelloWorld' do\n end\n end\n end\n-\n- post_integrate do |installer|\n- begin\n- expo_patch_react_imports!(installer)\n- rescue => e\n- Pod::UI.warn e\n- end\n- end\n end\ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex 563853071f0..661f6b6addf 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -1,7 +1,8 @@\n {\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n- \"version\": \"51.0.56\",\n+ \"license\": \"0BSD\",\n+ \"version\": \"53.0.42\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -10,10 +11,10 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~51.0.28\",\n- \"expo-status-bar\": \"~1.12.1\",\n- \"react\": \"18.2.0\",\n- \"react-native\": \"0.74.5\"\n+ \"expo\": \"~53.0.27\",\n+ \"expo-status-bar\": \"~2.2.3\",\n+ \"react\": \"19.0.0\",\n+ \"react-native\": \"0.79.6\"\n },\n \"devDependencies\": {\n \"@babel/core\": \"^7.20.0\"\n","52..53":"diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle\nindex 84879d83acd..34b96c71c33 100644\n--- a/templates/expo-template-bare-minimum/android/app/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/app/build.gradle\n@@ -14,6 +14,7 @@ react {\n hermesCommand = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/sdks/hermesc/%OS-BIN%/hermesc\"\n codegenDir = new File([\"node\", \"--print\", \"require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n \n+ enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean()\n // Use Expo CLI to bundle the app, this ensures the Metro config\n // works correctly with Expo projects.\n cliFile = new File([\"node\", \"--print\", \"require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })\"].execute(null, rootDir).text.trim())\n@@ -78,7 +79,7 @@ def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInRelea\n * give correct results when using with locales other than en-US. Note that\n * this variant is about 6MiB larger per architecture than default.\n */\n-def jscFlavor = 'org.webkit:android-jsc:+'\n+def jscFlavor = 'io.github.react-native-community:jsc-android:2026004.+'\n \n android {\n ndkVersion rootProject.ext.ndkVersion\n@@ -156,15 +157,15 @@ dependencies {\n \n if (isGifEnabled) {\n // For animated gif support\n- implementation(\"com.facebook.fresco:animated-gif:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-gif:${expoLibs.versions.fresco.get()}\")\n }\n \n if (isWebpEnabled) {\n // For webp support\n- implementation(\"com.facebook.fresco:webpsupport:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:webpsupport:${expoLibs.versions.fresco.get()}\")\n if (isWebpAnimatedEnabled) {\n // Animated webp support\n- implementation(\"com.facebook.fresco:animated-webp:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-webp:${expoLibs.versions.fresco.get()}\")\n }\n }\n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\nindex e61349d1301..267e20c30e5 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n@@ -24,7 +24,7 @@ class MainApplication : Application(), ReactApplication {\n override fun getPackages(): List {\n val packages = PackageList(this).packages\n // Packages that cannot be autolinked yet can be added manually here, for example:\n- // packages.add(new MyReactNativePackage());\n+ // packages.add(MyReactNativePackage())\n return packages\n }\n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\nindex 51fbc1e5a72..26f3404be26 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n@@ -1,14 +1,7 @@\n \n- \n- \n \ndiff --git a/templates/expo-template-bare-minimum/android/build.gradle b/templates/expo-template-bare-minimum/android/build.gradle\nindex abbcb8ec8a1..fa7b11e23c1 100644\n--- a/templates/expo-template-bare-minimum/android/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/build.gradle\n@@ -1,41 +1,37 @@\n // Top-level build file where you can add configuration options common to all sub-projects/modules.\n \n buildscript {\n- ext {\n- buildToolsVersion = findProperty('android.buildToolsVersion') ?: '35.0.0'\n- minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '24')\n- compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '35')\n- targetSdkVersion = Integer.parseInt(findProperty('android.targetSdkVersion') ?: '34')\n- kotlinVersion = findProperty('android.kotlinVersion') ?: '1.9.25'\n-\n- ndkVersion = \"26.1.10909125\"\n- }\n- repositories {\n- google()\n- mavenCentral()\n- }\n- dependencies {\n- classpath('com.android.tools.build:gradle')\n- classpath('com.facebook.react:react-native-gradle-plugin')\n- classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')\n- }\n+ repositories {\n+ google()\n+ mavenCentral()\n+ }\n+ dependencies {\n+ classpath('com.android.tools.build:gradle')\n+ classpath('com.facebook.react:react-native-gradle-plugin')\n+ classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')\n+ }\n }\n \n-apply plugin: \"com.facebook.react.rootproject\"\n+def reactNativeAndroidDir = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('react-native/package.json')\")\n+ }.standardOutput.asText.get().trim(),\n+ \"../android\"\n+)\n \n allprojects {\n- repositories {\n- maven {\n- // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n- url(new File(['node', '--print', \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim(), '../android'))\n- }\n- maven {\n- // Android JSC is installed from npm\n- url(new File(['node', '--print', \"require.resolve('jsc-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), '../dist'))\n- }\n-\n- google()\n- mavenCentral()\n- maven { url 'https://www.jitpack.io' }\n+ repositories {\n+ maven {\n+ // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n+ url(reactNativeAndroidDir)\n }\n+\n+ google()\n+ mavenCentral()\n+ maven { url 'https://www.jitpack.io' }\n+ }\n }\n+\n+apply plugin: \"expo-root-project\"\n+apply plugin: \"com.facebook.react.rootproject\"\ndiff --git a/templates/expo-template-bare-minimum/android/gradle.properties b/templates/expo-template-bare-minimum/android/gradle.properties\nindex de47429c64c..7531e9eb23c 100644\n--- a/templates/expo-template-bare-minimum/android/gradle.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle.properties\n@@ -35,7 +35,7 @@ reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64\n # your application. You should enable this flag either if you want\n # to write custom TurboModules/Fabric components OR use libraries that\n # are providing them.\n-newArchEnabled=false\n+newArchEnabled=true\n \n # Use this property to enable or disable the Hermes JS engine.\n # If set to false, you will be using JSC instead.\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\nindex 79eb9d003fe..37f853b1c84 100644\n--- a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n@@ -1,6 +1,6 @@\n distributionBase=GRADLE_USER_HOME\n distributionPath=wrapper/dists\n-distributionUrl=https\\://services.gradle.org/distributions/gradle-8.10.2-all.zip\n+distributionUrl=https\\://services.gradle.org/distributions/gradle-8.13-bin.zip\n networkTimeout=10000\n validateDistributionUrl=true\n zipStoreBase=GRADLE_USER_HOME\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew b/templates/expo-template-bare-minimum/android/gradlew\nindex f5feea6d6b1..f3b75f3b0d4 100755\n--- a/templates/expo-template-bare-minimum/android/gradlew\n+++ b/templates/expo-template-bare-minimum/android/gradlew\n@@ -86,8 +86,7 @@ done\n # shellcheck disable=SC2034\n APP_BASE_NAME=${0##*/}\n # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)\n-APP_HOME=$( cd -P \"${APP_HOME:-./}\" > /dev/null && printf '%s\n-' \"$PWD\" ) || exit\n+APP_HOME=$( cd -P \"${APP_HOME:-./}\" > /dev/null && printf '%s\\n' \"$PWD\" ) || exit\n \n # Use the maximum available, or set MAX_FD != -1 to use that value.\n MAX_FD=maximum\ndiff --git a/templates/expo-template-bare-minimum/android/settings.gradle b/templates/expo-template-bare-minimum/android/settings.gradle\nindex 39b188e065c..7fe91512213 100644\n--- a/templates/expo-template-bare-minimum/android/settings.gradle\n+++ b/templates/expo-template-bare-minimum/android/settings.gradle\n@@ -1,38 +1,39 @@\n pluginManagement {\n- includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().toString())\n+ def reactNativeGradlePlugin = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\")\n+ }.standardOutput.asText.get().trim()\n+ ).getParentFile().absolutePath\n+ includeBuild(reactNativeGradlePlugin)\n+ \n+ def expoPluginsPath = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('expo-modules-autolinking/package.json', { paths: [require.resolve('expo/package.json')] })\")\n+ }.standardOutput.asText.get().trim(),\n+ \"../android/expo-gradle-plugin\"\n+ ).absolutePath\n+ includeBuild(expoPluginsPath)\n+}\n+\n+plugins {\n+ id(\"com.facebook.react.settings\")\n+ id(\"expo-autolinking-settings\")\n }\n-plugins { id(\"com.facebook.react.settings\") }\n \n extensions.configure(com.facebook.react.ReactSettingsExtension) { ex ->\n if (System.getenv('EXPO_USE_COMMUNITY_AUTOLINKING') == '1') {\n ex.autolinkLibrariesFromCommand()\n } else {\n- def command = [\n- 'node',\n- '--no-warnings',\n- '--eval',\n- 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n- 'react-native-config',\n- '--json',\n- '--platform',\n- 'android'\n- ].toList()\n- ex.autolinkLibrariesFromCommand(command)\n+ ex.autolinkLibrariesFromCommand(expoAutolinking.rnConfigCommand)\n }\n }\n+expoAutolinking.useExpoModules()\n \n rootProject.name = 'HelloWorld'\n \n-dependencyResolutionManagement {\n- versionCatalogs {\n- reactAndroidLibs {\n- from(files(new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim(), \"../gradle/libs.versions.toml\")))\n- }\n- }\n-}\n-\n-apply from: new File([\"node\", \"--print\", \"require.resolve('expo/package.json')\"].execute(null, rootDir).text.trim(), \"../scripts/autolinking.gradle\");\n-useExpoModules()\n+expoAutolinking.useExpoVersionCatalog()\n \n include ':app'\n-includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile())\n+includeBuild(expoAutolinking.reactNativeGradlePlugin)\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\nindex 1ccb9b422d5..1b7513bd31b 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n@@ -3,33 +3,25 @@\n \tarchiveVersion = 1;\n \tclasses = {\n \t};\n-\tobjectVersion = 46;\n+\tobjectVersion = 54;\n \tobjects = {\n \n /* Begin PBXBuildFile section */\n-\t\t13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };\n \t\t13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };\n-\t\t13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };\n \t\t3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; };\n-\t\t96905EF65AED1B983A6B3ABC /* libPods-HelloWorld.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */; };\n-\t\tB18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; };\n \t\tBB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; };\n+\t\tF11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F11748412D0307B40044C1D9 /* AppDelegate.swift */; };\n /* End PBXBuildFile section */\n \n /* Begin PBXFileReference section */\n \t\t13B07F961A680F5B00A75B9A /* HelloWorld.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloWorld.app; sourceTree = BUILT_PRODUCTS_DIR; };\n-\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = HelloWorld/AppDelegate.h; sourceTree = \"\"; };\n-\t\t13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = HelloWorld/AppDelegate.mm; sourceTree = \"\"; };\n \t\t13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = HelloWorld/Images.xcassets; sourceTree = \"\"; };\n \t\t13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = HelloWorld/Info.plist; sourceTree = \"\"; };\n-\t\t13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = HelloWorld/main.m; sourceTree = \"\"; };\n-\t\t58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-HelloWorld.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n-\t\t6C2E3173556A471DD304B334 /* 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 = \"\"; };\n-\t\t7A4D352CD337FB3A3BF06240 /* 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 = \"\"; };\n \t\tAA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = HelloWorld/SplashScreen.storyboard; sourceTree = \"\"; };\n \t\tBB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = \"\"; };\n \t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };\n-\t\tFAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = \"Pods/Target Support Files/Pods-HelloWorld/ExpoModulesProvider.swift\"; sourceTree = \"\"; };\n+\t\tF11748412D0307B40044C1D9 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = HelloWorld/AppDelegate.swift; sourceTree = \"\"; };\n+\t\tF11748442D0722820044C1D9 /* HelloWorld-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = \"HelloWorld-Bridging-Header.h\"; path = \"HelloWorld/HelloWorld-Bridging-Header.h\"; sourceTree = \"\"; };\n /* End PBXFileReference section */\n \n /* Begin PBXFrameworksBuildPhase section */\n@@ -37,7 +29,6 @@\n \t\t\tisa = PBXFrameworksBuildPhase;\n \t\t\tbuildActionMask = 2147483647;\n \t\t\tfiles = (\n-\t\t\t\t96905EF65AED1B983A6B3ABC /* libPods-HelloWorld.a in Frameworks */,\n \t\t\t);\n \t\t\trunOnlyForDeploymentPostprocessing = 0;\n \t\t};\n@@ -47,12 +38,11 @@\n \t\t13B07FAE1A68108700A75B9A /* HelloWorld */ = {\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n+\t\t\t\tF11748412D0307B40044C1D9 /* AppDelegate.swift */,\n+\t\t\t\tF11748442D0722820044C1D9 /* HelloWorld-Bridging-Header.h */,\n \t\t\t\tBB2F792B24A3F905000567C9 /* Supporting */,\n-\t\t\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */,\n-\t\t\t\t13B07FB01A68108700A75B9A /* AppDelegate.mm */,\n \t\t\t\t13B07FB51A68108700A75B9A /* Images.xcassets */,\n \t\t\t\t13B07FB61A68108700A75B9A /* Info.plist */,\n-\t\t\t\t13B07FB71A68108700A75B9A /* main.m */,\n \t\t\t\tAA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */,\n \t\t\t);\n \t\t\tname = HelloWorld;\n@@ -62,7 +52,6 @@\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n \t\t\t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */,\n-\t\t\t\t58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */,\n \t\t\t);\n \t\t\tname = Frameworks;\n \t\t\tsourceTree = \"\";\n@@ -81,8 +70,6 @@\n \t\t\t\t832341AE1AAA6A7D00B99B32 /* Libraries */,\n \t\t\t\t83CBBA001A601CBA00E9B192 /* Products */,\n \t\t\t\t2D16E6871FA4F8E400B85C8A /* Frameworks */,\n-\t\t\t\tD65327D7A22EEC0BE12398D9 /* Pods */,\n-\t\t\t\tD7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */,\n \t\t\t);\n \t\t\tindentWidth = 2;\n \t\t\tsourceTree = \"\";\n@@ -97,14 +84,6 @@\n \t\t\tname = Products;\n \t\t\tsourceTree = \"\";\n \t\t};\n-\t\t92DBD88DE9BF7D494EA9DA96 /* HelloWorld */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\tFAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */,\n-\t\t\t);\n-\t\t\tname = HelloWorld;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n \t\tBB2F792B24A3F905000567C9 /* Supporting */ = {\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n@@ -114,23 +93,6 @@\n \t\t\tpath = HelloWorld/Supporting;\n \t\t\tsourceTree = \"\";\n \t\t};\n-\t\tD65327D7A22EEC0BE12398D9 /* Pods */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\t6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */,\n-\t\t\t\t7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */,\n-\t\t\t);\n-\t\t\tpath = Pods;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n-\t\tD7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\t92DBD88DE9BF7D494EA9DA96 /* HelloWorld */,\n-\t\t\t);\n-\t\t\tname = ExpoModulesProviders;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n /* End PBXGroup section */\n \n /* Begin PBXNativeTarget section */\n@@ -265,9 +227,7 @@\n \t\t\tisa = PBXSourcesBuildPhase;\n \t\t\tbuildActionMask = 2147483647;\n \t\t\tfiles = (\n-\t\t\t\t13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,\n-\t\t\t\t13B07FC11A68108700A75B9A /* main.m in Sources */,\n-\t\t\t\tB18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */,\n+\t\t\t\tF11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */,\n \t\t\t);\n \t\t\trunOnlyForDeploymentPostprocessing = 0;\n \t\t};\n@@ -276,7 +236,6 @@\n /* Begin XCBuildConfiguration section */\n \t\t13B07F941A680F5B00A75B9A /* Debug */ = {\n \t\t\tisa = XCBuildConfiguration;\n-\t\t\tbaseConfigurationReference = 6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */;\n \t\t\tbuildSettings = {\n \t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n@@ -288,7 +247,10 @@\n \t\t\t\t);\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n \t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t\t\"@executable_path/Frameworks\",\n+\t\t\t\t);\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -297,6 +259,7 @@\n \t\t\t\t);\n \t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = org.name.HelloWorld;\n \t\t\t\tPRODUCT_NAME = HelloWorld;\n+\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"HelloWorld/HelloWorld-Bridging-Header.h\";\n \t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n \t\t\t\tSWIFT_VERSION = 5.0;\n \t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n@@ -305,14 +268,16 @@\n \t\t};\n \t\t13B07F951A680F5B00A75B9A /* Release */ = {\n \t\t\tisa = XCBuildConfiguration;\n-\t\t\tbaseConfigurationReference = 7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */;\n \t\t\tbuildSettings = {\n \t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n \t\t\t\tCURRENT_PROJECT_VERSION = 1;\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n \t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t\t\"@executable_path/Frameworks\",\n+\t\t\t\t);\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -321,6 +286,7 @@\n \t\t\t\t);\n \t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = org.name.HelloWorld;\n \t\t\t\tPRODUCT_NAME = HelloWorld;\n+\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"HelloWorld/HelloWorld-Bridging-Header.h\";\n \t\t\t\tSWIFT_VERSION = 5.0;\n \t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n \t\t\t};\n@@ -374,7 +340,10 @@\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n \t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t/usr/lib/swift,\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t);\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n \t\t\t\tONLY_ACTIVE_ARCH = YES;\n@@ -423,7 +392,10 @@\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n \t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t/usr/lib/swift,\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t);\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n \t\t\t\tSDKROOT = iphoneos;\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\nnew file mode 100644\nindex 00000000000..a7887e1e5b1\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\n@@ -0,0 +1,70 @@\n+import Expo\n+import React\n+import ReactAppDependencyProvider\n+\n+@UIApplicationMain\n+public class AppDelegate: ExpoAppDelegate {\n+ var window: UIWindow?\n+\n+ var reactNativeDelegate: ExpoReactNativeFactoryDelegate?\n+ var reactNativeFactory: RCTReactNativeFactory?\n+\n+ public override func application(\n+ _ application: UIApplication,\n+ didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil\n+ ) -> Bool {\n+ let delegate = ReactNativeDelegate()\n+ let factory = ExpoReactNativeFactory(delegate: delegate)\n+ delegate.dependencyProvider = RCTAppDependencyProvider()\n+\n+ reactNativeDelegate = delegate\n+ reactNativeFactory = factory\n+ bindReactNativeFactory(factory)\n+\n+#if os(iOS) || os(tvOS)\n+ window = UIWindow(frame: UIScreen.main.bounds)\n+ factory.startReactNative(\n+ withModuleName: \"main\",\n+ in: window,\n+ launchOptions: launchOptions)\n+#endif\n+\n+ return super.application(application, didFinishLaunchingWithOptions: launchOptions)\n+ }\n+\n+ // Linking API\n+ public override func application(\n+ _ app: UIApplication,\n+ open url: URL,\n+ options: [UIApplication.OpenURLOptionsKey: Any] = [:]\n+ ) -> Bool {\n+ return super.application(app, open: url, options: options) || RCTLinkingManager.application(app, open: url, options: options)\n+ }\n+\n+ // Universal Links\n+ public override func application(\n+ _ application: UIApplication,\n+ continue userActivity: NSUserActivity,\n+ restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void\n+ ) -> Bool {\n+ let result = RCTLinkingManager.application(application, continue: userActivity, restorationHandler: restorationHandler)\n+ return super.application(application, continue: userActivity, restorationHandler: restorationHandler) || result\n+ }\n+}\n+\n+class ReactNativeDelegate: ExpoReactNativeFactoryDelegate {\n+ // Extension point for config-plugins\n+\n+ override func sourceURL(for bridge: RCTBridge) -> URL? {\n+ // needed to return the correct URL for expo-dev-client.\n+ bridge.bundleURL ?? bundleURL()\n+ }\n+\n+ override func bundleURL() -> URL? {\n+#if DEBUG\n+ return RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: \".expo/.virtual-metro-entry\")\n+#else\n+ return Bundle.main.url(forResource: \"main\", withExtension: \"jsbundle\")\n+#endif\n+ }\n+}\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h b/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h\nnew file mode 100644\nindex 00000000000..8361941afc2\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h\n@@ -0,0 +1,3 @@\n+//\n+// Use this file to import your target's public headers that you would like to expose to Swift.\n+//\ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex f740040e7be..29503ff0cc1 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -4,7 +4,7 @@ require File.join(File.dirname(`node --print \"require.resolve('react-native/pack\n require 'json'\n podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}\n \n-ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0'\n+ENV['RCT_NEW_ARCH_ENABLED'] = '0' if podfile_properties['newArchEnabled'] == 'false'\n ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n \n platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'\n@@ -20,10 +20,8 @@ target 'HelloWorld' do\n config_command = ['node', '-e', \"process.argv=['', '', 'config'];require('@react-native-community/cli').run()\"];\n else\n config_command = [\n- 'node',\n- '--no-warnings',\n- '--eval',\n- 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n+ 'npx',\n+ 'expo-modules-autolinking',\n 'react-native-config',\n '--json',\n '--platform',\ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex b51159163bf..661f6b6addf 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -2,7 +2,7 @@\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n \"license\": \"0BSD\",\n- \"version\": \"52.0.79\",\n+ \"version\": \"53.0.42\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -11,10 +11,10 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~52.0.49\",\n- \"expo-status-bar\": \"~2.0.1\",\n- \"react\": \"18.3.1\",\n- \"react-native\": \"0.76.9\"\n+ \"expo\": \"~53.0.27\",\n+ \"expo-status-bar\": \"~2.2.3\",\n+ \"react\": \"19.0.0\",\n+ \"react-native\": \"0.79.6\"\n },\n \"devDependencies\": {\n \"@babel/core\": \"^7.20.0\"\n","53..53":"","51..54":"diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle\nindex a4b08330359..3f1c571b679 100644\n--- a/templates/expo-template-bare-minimum/android/app/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/app/build.gradle\n@@ -4,27 +4,6 @@ apply plugin: \"com.facebook.react\"\n \n def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath()\n \n-static def versionToNumber(major, minor, patch) {\n- return patch * 100 + minor * 10000 + major * 1000000\n-}\n-\n-def getRNVersion() {\n- def version = providers.exec {\n- workingDir(projectDir)\n- commandLine(\"node\", \"-e\", \"console.log(require('react-native/package.json').version);\")\n- }.standardOutput.asText.get().trim()\n-\n- def coreVersion = version.split(\"-\")[0]\n- def (major, minor, patch) = coreVersion.tokenize('.').collect { it.toInteger() }\n-\n- return versionToNumber(\n- major,\n- minor,\n- patch\n- )\n-}\n-def rnVersion = getRNVersion()\n-\n /**\n * This is the configuration block to customize your React Native Android app.\n * By default you don't need to apply any configuration, just uncomment the lines you need.\n@@ -35,18 +14,19 @@ react {\n hermesCommand = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/sdks/hermesc/%OS-BIN%/hermesc\"\n codegenDir = new File([\"node\", \"--print\", \"require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n \n+ enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean()\n // Use Expo CLI to bundle the app, this ensures the Metro config\n // works correctly with Expo projects.\n cliFile = new File([\"node\", \"--print\", \"require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })\"].execute(null, rootDir).text.trim())\n bundleCommand = \"export:embed\"\n \n /* Folders */\n- // The root of your project, i.e. where \"package.json\" lives. Default is '..'\n- // root = file(\"../\")\n- // The folder where the react-native NPM package is. Default is ../node_modules/react-native\n- // reactNativeDir = file(\"../node_modules/react-native\")\n- // The folder where the react-native Codegen package is. Default is ../node_modules/@react-native/codegen\n- // codegenDir = file(\"../node_modules/@react-native/codegen\")\n+ // The root of your project, i.e. where \"package.json\" lives. Default is '../..'\n+ // root = file(\"../../\")\n+ // The folder where the react-native NPM package is. Default is ../../node_modules/react-native\n+ // reactNativeDir = file(\"../../node_modules/react-native\")\n+ // The folder where the react-native Codegen package is. Default is ../../node_modules/@react-native/codegen\n+ // codegenDir = file(\"../../node_modules/@react-native/codegen\")\n \n /* Variants */\n // The list of variants to that are debuggable. For those we're going to\n@@ -79,16 +59,14 @@ react {\n // The list of flags to pass to the Hermes compiler. By default is \"-O\", \"-output-source-map\"\n // hermesFlags = [\"-O\", \"-output-source-map\"]\n \n- if (rnVersion >= versionToNumber(0, 75, 0)) {\n- /* Autolinking */\n- autolinkLibrariesWithApp()\n- }\n+ /* Autolinking */\n+ autolinkLibrariesWithApp()\n }\n \n /**\n- * Set this to true to Run Proguard on Release builds to minify the Java bytecode.\n+ * Set this to true in release builds to optimize the app using [R8](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization).\n */\n-def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInReleaseBuilds') ?: false).toBoolean()\n+def enableMinifyInReleaseBuilds = (findProperty('android.enableMinifyInReleaseBuilds') ?: false).toBoolean()\n \n /**\n * The preferred build flavor of JavaScriptCore (JSC)\n@@ -101,7 +79,7 @@ def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInRelea\n * give correct results when using with locales other than en-US. Note that\n * this variant is about 6MiB larger per architecture than default.\n */\n-def jscFlavor = 'org.webkit:android-jsc:+'\n+def jscFlavor = 'io.github.react-native-community:jsc-android:2026004.+'\n \n android {\n ndkVersion rootProject.ext.ndkVersion\n@@ -116,6 +94,8 @@ android {\n targetSdkVersion rootProject.ext.targetSdkVersion\n versionCode 1\n versionName \"1.0\"\n+\n+ buildConfigField \"String\", \"REACT_NATIVE_RELEASE_LEVEL\", \"\\\"${findProperty('reactNativeReleaseLevel') ?: 'stable'}\\\"\"\n }\n signingConfigs {\n debug {\n@@ -133,17 +113,23 @@ android {\n // Caution! In production, you need to generate your own keystore file.\n // see https://reactnative.dev/docs/signed-apk-android.\n signingConfig signingConfigs.debug\n- shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false)\n- minifyEnabled enableProguardInReleaseBuilds\n+ def enableShrinkResources = findProperty('android.enableShrinkResourcesInReleaseBuilds') ?: 'false'\n+ shrinkResources enableShrinkResources.toBoolean()\n+ minifyEnabled enableMinifyInReleaseBuilds\n proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n- crunchPngs (findProperty('android.enablePngCrunchInReleaseBuilds')?.toBoolean() ?: true)\n+ def enablePngCrunchInRelease = findProperty('android.enablePngCrunchInReleaseBuilds') ?: 'true'\n+ crunchPngs enablePngCrunchInRelease.toBoolean()\n }\n }\n packagingOptions {\n jniLibs {\n- useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false)\n+ def enableLegacyPackaging = findProperty('expo.useLegacyPackaging') ?: 'false'\n+ useLegacyPackaging enableLegacyPackaging.toBoolean()\n }\n }\n+ androidResources {\n+ ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:!CVS:!thumbs.db:!picasa.ini:!*~'\n+ }\n }\n \n // Apply static values from `gradle.properties` to the `android.packagingOptions`\n@@ -176,15 +162,15 @@ dependencies {\n \n if (isGifEnabled) {\n // For animated gif support\n- implementation(\"com.facebook.fresco:animated-gif:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-gif:${expoLibs.versions.fresco.get()}\")\n }\n \n if (isWebpEnabled) {\n // For webp support\n- implementation(\"com.facebook.fresco:webpsupport:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:webpsupport:${expoLibs.versions.fresco.get()}\")\n if (isWebpAnimatedEnabled) {\n // Animated webp support\n- implementation(\"com.facebook.fresco:animated-webp:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-webp:${expoLibs.versions.fresco.get()}\")\n }\n }\n \n@@ -194,8 +180,3 @@ dependencies {\n implementation jscFlavor\n }\n }\n-\n-if (rnVersion < versionToNumber(0, 75, 0)) {\n- apply from: new File([\"node\", \"--print\", \"require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), \"../native_modules.gradle\");\n- applyNativeModulesAppBuildGradle(project)\n-}\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\nnew file mode 100644\nindex 00000000000..3ec2507bab7\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\n@@ -0,0 +1,7 @@\n+\n+\n+ \n+\n+ \n+\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\nindex 52175508263..150248b6b3c 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n@@ -18,13 +18,12 @@\n \n \n \n- \n+ \n \n \n \n \n \n \n- \n \n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\nindex 5f6e05ce071..5abad96fa00 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n@@ -5,12 +5,13 @@ import android.content.res.Configuration\n \n import com.facebook.react.PackageList\n import com.facebook.react.ReactApplication\n+import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative\n import com.facebook.react.ReactNativeHost\n import com.facebook.react.ReactPackage\n import com.facebook.react.ReactHost\n-import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load\n+import com.facebook.react.common.ReleaseLevel\n+import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint\n import com.facebook.react.defaults.DefaultReactNativeHost\n-import com.facebook.soloader.SoLoader\n \n import expo.modules.ApplicationLifecycleDispatcher\n import expo.modules.ReactNativeHostWrapper\n@@ -18,20 +19,19 @@ import expo.modules.ReactNativeHostWrapper\n class MainApplication : Application(), ReactApplication {\n \n override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper(\n- this,\n- object : DefaultReactNativeHost(this) {\n- override fun getPackages(): List {\n- // Packages that cannot be autolinked yet can be added manually here, for example:\n- // packages.add(new MyReactNativePackage());\n- return PackageList(this).packages\n- }\n+ this,\n+ object : DefaultReactNativeHost(this) {\n+ override fun getPackages(): List =\n+ PackageList(this).packages.apply {\n+ // Packages that cannot be autolinked yet can be added manually here, for example:\n+ // add(MyReactNativePackage())\n+ }\n \n override fun getJSMainModuleName(): String = \".expo/.virtual-metro-entry\"\n \n override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG\n \n override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED\n- override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED\n }\n )\n \n@@ -40,11 +40,12 @@ class MainApplication : Application(), ReactApplication {\n \n override fun onCreate() {\n super.onCreate()\n- SoLoader.init(this, false)\n- if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {\n- // If you opted-in for the New Architecture, we load the native entry point for this app.\n- load()\n+ DefaultNewArchitectureEntryPoint.releaseLevel = try {\n+ ReleaseLevel.valueOf(BuildConfig.REACT_NATIVE_RELEASE_LEVEL.uppercase())\n+ } catch (e: IllegalArgumentException) {\n+ ReleaseLevel.STABLE\n }\n+ loadReactNative(this)\n ApplicationLifecycleDispatcher.onApplicationCreate(this)\n }\n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..31df827b18b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..ef243aab6c0\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..e9d5474519c\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..d61da15d241\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..4aeed11d00b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml\nnew file mode 100644\nindex 00000000000..883b2a080f3\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml\n@@ -0,0 +1,6 @@\n+\n+ \n+ \n+ \n+ \n+\n\\ No newline at end of file\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..a2f5908281d\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..1b523998081\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..ff10afd6e18\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..115a4c768a2\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..dcd3cd80833\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..459ca609d3a\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..8ca12fe024b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..8e19b410a1b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..b824ebdd48d\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..4c19a13c239\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\nindex 90bcc87b8e8..26f3404be26 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n@@ -1,15 +1,8 @@\n \n- \n- \n \n \ndiff --git a/templates/expo-template-bare-minimum/android/build.gradle b/templates/expo-template-bare-minimum/android/build.gradle\nindex 932bf7b34ba..0554dd156c1 100644\n--- a/templates/expo-template-bare-minimum/android/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/build.gradle\n@@ -1,41 +1,24 @@\n // Top-level build file where you can add configuration options common to all sub-projects/modules.\n \n buildscript {\n- ext {\n- buildToolsVersion = findProperty('android.buildToolsVersion') ?: '34.0.0'\n- minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '23')\n- compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '34')\n- targetSdkVersion = Integer.parseInt(findProperty('android.targetSdkVersion') ?: '34')\n- kotlinVersion = findProperty('android.kotlinVersion') ?: '1.9.23'\n-\n- ndkVersion = \"26.1.10909125\"\n- }\n- repositories {\n- google()\n- mavenCentral()\n- }\n- dependencies {\n- classpath('com.android.tools.build:gradle')\n- classpath('com.facebook.react:react-native-gradle-plugin')\n- classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')\n- }\n+ repositories {\n+ google()\n+ mavenCentral()\n+ }\n+ dependencies {\n+ classpath('com.android.tools.build:gradle')\n+ classpath('com.facebook.react:react-native-gradle-plugin')\n+ classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')\n+ }\n }\n \n-apply plugin: \"com.facebook.react.rootproject\"\n-\n allprojects {\n- repositories {\n- maven {\n- // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n- url(new File(['node', '--print', \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim(), '../android'))\n- }\n- maven {\n- // Android JSC is installed from npm\n- url(new File(['node', '--print', \"require.resolve('jsc-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), '../dist'))\n- }\n-\n- google()\n- mavenCentral()\n- maven { url 'https://www.jitpack.io' }\n- }\n+ repositories {\n+ google()\n+ mavenCentral()\n+ maven { url 'https://www.jitpack.io' }\n+ }\n }\n+\n+apply plugin: \"expo-root-project\"\n+apply plugin: \"com.facebook.react.rootproject\"\ndiff --git a/templates/expo-template-bare-minimum/android/gradle.properties b/templates/expo-template-bare-minimum/android/gradle.properties\nindex 40220def8da..97271b9456f 100644\n--- a/templates/expo-template-bare-minimum/android/gradle.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle.properties\n@@ -15,16 +15,13 @@ org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m\n # When configured, Gradle will run in incubating parallel mode.\n # This option should only be used with decoupled projects. More details, visit\n # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n-# org.gradle.parallel=true\n+org.gradle.parallel=true\n \n # AndroidX package structure to make it clearer which packages are bundled with the\n # Android operating system, and which are packaged with your app's APK\n # https://developer.android.com/topic/libraries/support-library/androidx-rn\n android.useAndroidX=true\n \n-# Automatically convert third-party libraries to use AndroidX\n-android.enableJetifier=true\n-\n # Enable AAPT2 PNG crunching\n android.enablePngCrunchInReleaseBuilds=true\n \n@@ -38,12 +35,17 @@ reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64\n # your application. You should enable this flag either if you want\n # to write custom TurboModules/Fabric components OR use libraries that\n # are providing them.\n-newArchEnabled=false\n+newArchEnabled=true\n \n # Use this property to enable or disable the Hermes JS engine.\n # If set to false, you will be using JSC instead.\n hermesEnabled=true\n \n+# Use this property to enable edge-to-edge display support.\n+# This allows your app to draw behind system bars for an immersive UI.\n+# Note: Only works with ReactActivity and should not be used with custom Activity.\n+edgeToEdgeEnabled=true\n+\n # Enable GIF support in React Native images (~200 B increase)\n expo.gif.enabled=true\n # Enable webp support in React Native images (~85 KB increase)\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar\nindex e6441136f3d..1b33c55baab 100644\nBinary files a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar and b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar differ\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\nindex 6f7a6eb33e8..d4081da476b 100644\n--- a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n@@ -1,6 +1,6 @@\n distributionBase=GRADLE_USER_HOME\n distributionPath=wrapper/dists\n-distributionUrl=https\\://services.gradle.org/distributions/gradle-8.8-all.zip\n+distributionUrl=https\\://services.gradle.org/distributions/gradle-8.14.3-bin.zip\n networkTimeout=10000\n validateDistributionUrl=true\n zipStoreBase=GRADLE_USER_HOME\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew b/templates/expo-template-bare-minimum/android/gradlew\nindex 1aa94a42690..7f94d3d4777 100755\n--- a/templates/expo-template-bare-minimum/android/gradlew\n+++ b/templates/expo-template-bare-minimum/android/gradlew\n@@ -15,6 +15,8 @@\n # See the License for the specific language governing permissions and\n # limitations under the License.\n #\n+# SPDX-License-Identifier: Apache-2.0\n+#\n \n ##############################################################################\n #\n@@ -55,7 +57,7 @@\n # Darwin, MinGW, and NonStop.\n #\n # (3) This script is generated from the Groovy template\n-# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt\n+# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt\n # within the Gradle project.\n #\n # You can find Gradle at https://github.com/gradle/gradle/.\n@@ -84,7 +86,7 @@ done\n # shellcheck disable=SC2034\n APP_BASE_NAME=${0##*/}\n # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)\n-APP_HOME=$( cd \"${APP_HOME:-./}\" > /dev/null && pwd -P ) || exit\n+APP_HOME=$( cd -P \"${APP_HOME:-./}\" > /dev/null && printf '%s\\n' \"$PWD\" ) || exit\n \n # Use the maximum available, or set MAX_FD != -1 to use that value.\n MAX_FD=maximum\n@@ -112,7 +114,7 @@ case \"$( uname )\" in #(\n NONSTOP* ) nonstop=true ;;\n esac\n \n-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n+CLASSPATH=\"\\\\\\\"\\\\\\\"\"\n \n \n # Determine the Java command to use to start the JVM.\n@@ -211,7 +213,7 @@ DEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n set -- \\\n \"-Dorg.gradle.appname=$APP_BASE_NAME\" \\\n -classpath \"$CLASSPATH\" \\\n- org.gradle.wrapper.GradleWrapperMain \\\n+ -jar \"$APP_HOME/gradle/wrapper/gradle-wrapper.jar\" \\\n \"$@\"\n \n # Stop when \"xargs\" is not available.\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew.bat b/templates/expo-template-bare-minimum/android/gradlew.bat\nindex 7101f8e4676..5eed7ee8452 100644\n--- a/templates/expo-template-bare-minimum/android/gradlew.bat\n+++ b/templates/expo-template-bare-minimum/android/gradlew.bat\n@@ -13,6 +13,8 @@\n @rem See the License for the specific language governing permissions and\r\n @rem limitations under the License.\r\n @rem\r\n+@rem SPDX-License-Identifier: Apache-2.0\r\n+@rem\r\n \r\n @if \"%DEBUG%\"==\"\" @echo off\r\n @rem ##########################################################################\r\n@@ -68,11 +70,11 @@ goto fail\n :execute\r\n @rem Setup the command line\r\n \r\n-set CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\r\n+set CLASSPATH=\r\n \r\n \r\n @rem Execute Gradle\r\n-\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\r\n+\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" -jar \"%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\" %*\r\n \r\n :end\r\n @rem End local scope for the variables with windows NT shell\r\ndiff --git a/templates/expo-template-bare-minimum/android/settings.gradle b/templates/expo-template-bare-minimum/android/settings.gradle\nindex 80b1bc3267b..7fe91512213 100644\n--- a/templates/expo-template-bare-minimum/android/settings.gradle\n+++ b/templates/expo-template-bare-minimum/android/settings.gradle\n@@ -1,66 +1,39 @@\n pluginManagement {\n- def version = providers.exec {\n- commandLine(\"node\", \"-e\", \"console.log(require('react-native/package.json').version);\")\n- }.standardOutput.asText.get().trim()\n- def (_, reactNativeMinor, reactNativePatch) = version.split(\"-\")[0].tokenize('.').collect { it.toInteger() }\n-\n- includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().toString())\n- if(reactNativeMinor == 74 && reactNativePatch <= 3){\n- includeBuild(\"react-settings-plugin\")\n- }\n+ def reactNativeGradlePlugin = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\")\n+ }.standardOutput.asText.get().trim()\n+ ).getParentFile().absolutePath\n+ includeBuild(reactNativeGradlePlugin)\n+ \n+ def expoPluginsPath = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('expo-modules-autolinking/package.json', { paths: [require.resolve('expo/package.json')] })\")\n+ }.standardOutput.asText.get().trim(),\n+ \"../android/expo-gradle-plugin\"\n+ ).absolutePath\n+ includeBuild(expoPluginsPath)\n }\n \n-plugins { id(\"com.facebook.react.settings\") }\n-\n-def getRNMinorVersion() {\n- def version = providers.exec {\n- commandLine(\"node\", \"-e\", \"console.log(require('react-native/package.json').version);\")\n- }.standardOutput.asText.get().trim()\n-\n- def coreVersion = version.split(\"-\")[0]\n- def (major, minor, patch) = coreVersion.tokenize('.').collect { it.toInteger() }\n-\n- return minor\n+plugins {\n+ id(\"com.facebook.react.settings\")\n+ id(\"expo-autolinking-settings\")\n }\n \n-if (getRNMinorVersion() >= 75) {\n- extensions.configure(com.facebook.react.ReactSettingsExtension) { ex ->\n- if (System.getenv('EXPO_UNSTABLE_CORE_AUTOLINKING') == '1') {\n- println('\\u001B[32mUsing expo-modules-autolinking as core autolinking source\\u001B[0m')\n- def command = [\n- 'node',\n- '--no-warnings',\n- '--eval',\n- 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n- 'react-native-config',\n- '--json',\n- '--platform',\n- 'android'\n- ].toList()\n- ex.autolinkLibrariesFromCommand(command)\n- } else {\n- ex.autolinkLibrariesFromCommand()\n- }\n+extensions.configure(com.facebook.react.ReactSettingsExtension) { ex ->\n+ if (System.getenv('EXPO_USE_COMMUNITY_AUTOLINKING') == '1') {\n+ ex.autolinkLibrariesFromCommand()\n+ } else {\n+ ex.autolinkLibrariesFromCommand(expoAutolinking.rnConfigCommand)\n }\n }\n+expoAutolinking.useExpoModules()\n \n rootProject.name = 'HelloWorld'\n \n-dependencyResolutionManagement {\n- versionCatalogs {\n- reactAndroidLibs {\n- from(files(new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim(), \"../gradle/libs.versions.toml\")))\n- }\n- }\n-}\n-\n-apply from: new File([\"node\", \"--print\", \"require.resolve('expo/package.json')\"].execute(null, rootDir).text.trim(), \"../scripts/autolinking.gradle\");\n-useExpoModules()\n-\n-if (getRNMinorVersion() < 75) {\n- apply from: new File([\"node\", \"--print\", \"require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), \"../native_modules.gradle\");\n- applyNativeModulesSettingsGradle(settings)\n-}\n+expoAutolinking.useExpoVersionCatalog()\n \n include ':app'\n-includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile())\n+includeBuild(expoAutolinking.reactNativeGradlePlugin)\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\nindex f945940c256..8a390c764af 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n@@ -3,33 +3,25 @@\n \tarchiveVersion = 1;\n \tclasses = {\n \t};\n-\tobjectVersion = 46;\n+\tobjectVersion = 54;\n \tobjects = {\n \n /* Begin PBXBuildFile section */\n-\t\t13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };\n \t\t13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };\n-\t\t13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };\n \t\t3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; };\n-\t\t96905EF65AED1B983A6B3ABC /* libPods-HelloWorld.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */; };\n-\t\tB18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; };\n \t\tBB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; };\n+\t\tF11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F11748412D0307B40044C1D9 /* AppDelegate.swift */; };\n /* End PBXBuildFile section */\n \n /* Begin PBXFileReference section */\n \t\t13B07F961A680F5B00A75B9A /* HelloWorld.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloWorld.app; sourceTree = BUILT_PRODUCTS_DIR; };\n-\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = HelloWorld/AppDelegate.h; sourceTree = \"\"; };\n-\t\t13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = HelloWorld/AppDelegate.mm; sourceTree = \"\"; };\n \t\t13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = HelloWorld/Images.xcassets; sourceTree = \"\"; };\n \t\t13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = HelloWorld/Info.plist; sourceTree = \"\"; };\n-\t\t13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = HelloWorld/main.m; sourceTree = \"\"; };\n-\t\t58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-HelloWorld.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n-\t\t6C2E3173556A471DD304B334 /* 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 = \"\"; };\n-\t\t7A4D352CD337FB3A3BF06240 /* 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 = \"\"; };\n \t\tAA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = HelloWorld/SplashScreen.storyboard; sourceTree = \"\"; };\n \t\tBB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = \"\"; };\n \t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };\n-\t\tFAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = \"Pods/Target Support Files/Pods-HelloWorld/ExpoModulesProvider.swift\"; sourceTree = \"\"; };\n+\t\tF11748412D0307B40044C1D9 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = HelloWorld/AppDelegate.swift; sourceTree = \"\"; };\n+\t\tF11748442D0722820044C1D9 /* HelloWorld-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = \"HelloWorld-Bridging-Header.h\"; path = \"HelloWorld/HelloWorld-Bridging-Header.h\"; sourceTree = \"\"; };\n /* End PBXFileReference section */\n \n /* Begin PBXFrameworksBuildPhase section */\n@@ -37,7 +29,6 @@\n \t\t\tisa = PBXFrameworksBuildPhase;\n \t\t\tbuildActionMask = 2147483647;\n \t\t\tfiles = (\n-\t\t\t\t96905EF65AED1B983A6B3ABC /* libPods-HelloWorld.a in Frameworks */,\n \t\t\t);\n \t\t\trunOnlyForDeploymentPostprocessing = 0;\n \t\t};\n@@ -47,12 +38,11 @@\n \t\t13B07FAE1A68108700A75B9A /* HelloWorld */ = {\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n+\t\t\t\tF11748412D0307B40044C1D9 /* AppDelegate.swift */,\n+\t\t\t\tF11748442D0722820044C1D9 /* HelloWorld-Bridging-Header.h */,\n \t\t\t\tBB2F792B24A3F905000567C9 /* Supporting */,\n-\t\t\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */,\n-\t\t\t\t13B07FB01A68108700A75B9A /* AppDelegate.mm */,\n \t\t\t\t13B07FB51A68108700A75B9A /* Images.xcassets */,\n \t\t\t\t13B07FB61A68108700A75B9A /* Info.plist */,\n-\t\t\t\t13B07FB71A68108700A75B9A /* main.m */,\n \t\t\t\tAA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */,\n \t\t\t);\n \t\t\tname = HelloWorld;\n@@ -62,7 +52,6 @@\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n \t\t\t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */,\n-\t\t\t\t58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */,\n \t\t\t);\n \t\t\tname = Frameworks;\n \t\t\tsourceTree = \"\";\n@@ -81,8 +70,6 @@\n \t\t\t\t832341AE1AAA6A7D00B99B32 /* Libraries */,\n \t\t\t\t83CBBA001A601CBA00E9B192 /* Products */,\n \t\t\t\t2D16E6871FA4F8E400B85C8A /* Frameworks */,\n-\t\t\t\tD65327D7A22EEC0BE12398D9 /* Pods */,\n-\t\t\t\tD7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */,\n \t\t\t);\n \t\t\tindentWidth = 2;\n \t\t\tsourceTree = \"\";\n@@ -97,14 +84,6 @@\n \t\t\tname = Products;\n \t\t\tsourceTree = \"\";\n \t\t};\n-\t\t92DBD88DE9BF7D494EA9DA96 /* HelloWorld */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\tFAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */,\n-\t\t\t);\n-\t\t\tname = HelloWorld;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n \t\tBB2F792B24A3F905000567C9 /* Supporting */ = {\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n@@ -114,23 +93,6 @@\n \t\t\tpath = HelloWorld/Supporting;\n \t\t\tsourceTree = \"\";\n \t\t};\n-\t\tD65327D7A22EEC0BE12398D9 /* Pods */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\t6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */,\n-\t\t\t\t7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */,\n-\t\t\t);\n-\t\t\tpath = Pods;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n-\t\tD7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\t92DBD88DE9BF7D494EA9DA96 /* HelloWorld */,\n-\t\t\t);\n-\t\t\tname = ExpoModulesProviders;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n /* End PBXGroup section */\n \n /* Begin PBXNativeTarget section */\n@@ -206,6 +168,8 @@\n \t\t\tfiles = (\n \t\t\t);\n \t\t\tinputPaths = (\n+\t\t\t\t\"$(SRCROOT)/.xcode.env\",\n+\t\t\t\t\"$(SRCROOT)/.xcode.env.local\",\n \t\t\t);\n \t\t\tname = \"Bundle React Native code and images\";\n \t\t\toutputPaths = (\n@@ -265,9 +229,7 @@\n \t\t\tisa = PBXSourcesBuildPhase;\n \t\t\tbuildActionMask = 2147483647;\n \t\t\tfiles = (\n-\t\t\t\t13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,\n-\t\t\t\t13B07FC11A68108700A75B9A /* main.m in Sources */,\n-\t\t\t\tB18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */,\n+\t\t\t\tF11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */,\n \t\t\t);\n \t\t\trunOnlyForDeploymentPostprocessing = 0;\n \t\t};\n@@ -276,7 +238,6 @@\n /* Begin XCBuildConfiguration section */\n \t\t13B07F941A680F5B00A75B9A /* Debug */ = {\n \t\t\tisa = XCBuildConfiguration;\n-\t\t\tbaseConfigurationReference = 6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */;\n \t\t\tbuildSettings = {\n \t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n@@ -287,8 +248,11 @@\n \t\t\t\t\t\"FB_SONARKIT_ENABLED=1\",\n \t\t\t\t);\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t\t\"@executable_path/Frameworks\",\n+\t\t\t\t);\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -297,6 +261,7 @@\n \t\t\t\t);\n \t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = org.name.HelloWorld;\n \t\t\t\tPRODUCT_NAME = HelloWorld;\n+\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"HelloWorld/HelloWorld-Bridging-Header.h\";\n \t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n \t\t\t\tSWIFT_VERSION = 5.0;\n \t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n@@ -305,14 +270,16 @@\n \t\t};\n \t\t13B07F951A680F5B00A75B9A /* Release */ = {\n \t\t\tisa = XCBuildConfiguration;\n-\t\t\tbaseConfigurationReference = 7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */;\n \t\t\tbuildSettings = {\n \t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n \t\t\t\tCURRENT_PROJECT_VERSION = 1;\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t\t\"@executable_path/Frameworks\",\n+\t\t\t\t);\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -321,6 +288,7 @@\n \t\t\t\t);\n \t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = org.name.HelloWorld;\n \t\t\t\tPRODUCT_NAME = HelloWorld;\n+\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"HelloWorld/HelloWorld-Bridging-Header.h\";\n \t\t\t\tSWIFT_VERSION = 5.0;\n \t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n \t\t\t};\n@@ -373,8 +341,11 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t/usr/lib/swift,\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t);\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n \t\t\t\tONLY_ACTIVE_ARCH = YES;\n@@ -422,8 +393,11 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t/usr/lib/swift,\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t);\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n \t\t\t\tSDKROOT = iphoneos;\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\nnew file mode 100644\nindex 00000000000..a7887e1e5b1\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\n@@ -0,0 +1,70 @@\n+import Expo\n+import React\n+import ReactAppDependencyProvider\n+\n+@UIApplicationMain\n+public class AppDelegate: ExpoAppDelegate {\n+ var window: UIWindow?\n+\n+ var reactNativeDelegate: ExpoReactNativeFactoryDelegate?\n+ var reactNativeFactory: RCTReactNativeFactory?\n+\n+ public override func application(\n+ _ application: UIApplication,\n+ didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil\n+ ) -> Bool {\n+ let delegate = ReactNativeDelegate()\n+ let factory = ExpoReactNativeFactory(delegate: delegate)\n+ delegate.dependencyProvider = RCTAppDependencyProvider()\n+\n+ reactNativeDelegate = delegate\n+ reactNativeFactory = factory\n+ bindReactNativeFactory(factory)\n+\n+#if os(iOS) || os(tvOS)\n+ window = UIWindow(frame: UIScreen.main.bounds)\n+ factory.startReactNative(\n+ withModuleName: \"main\",\n+ in: window,\n+ launchOptions: launchOptions)\n+#endif\n+\n+ return super.application(application, didFinishLaunchingWithOptions: launchOptions)\n+ }\n+\n+ // Linking API\n+ public override func application(\n+ _ app: UIApplication,\n+ open url: URL,\n+ options: [UIApplication.OpenURLOptionsKey: Any] = [:]\n+ ) -> Bool {\n+ return super.application(app, open: url, options: options) || RCTLinkingManager.application(app, open: url, options: options)\n+ }\n+\n+ // Universal Links\n+ public override func application(\n+ _ application: UIApplication,\n+ continue userActivity: NSUserActivity,\n+ restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void\n+ ) -> Bool {\n+ let result = RCTLinkingManager.application(application, continue: userActivity, restorationHandler: restorationHandler)\n+ return super.application(application, continue: userActivity, restorationHandler: restorationHandler) || result\n+ }\n+}\n+\n+class ReactNativeDelegate: ExpoReactNativeFactoryDelegate {\n+ // Extension point for config-plugins\n+\n+ override func sourceURL(for bridge: RCTBridge) -> URL? {\n+ // needed to return the correct URL for expo-dev-client.\n+ bridge.bundleURL ?? bundleURL()\n+ }\n+\n+ override func bundleURL() -> URL? {\n+#if DEBUG\n+ return RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: \".expo/.virtual-metro-entry\")\n+#else\n+ return Bundle.main.url(forResource: \"main\", withExtension: \"jsbundle\")\n+#endif\n+ }\n+}\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h b/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h\nnew file mode 100644\nindex 00000000000..8361941afc2\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h\n@@ -0,0 +1,3 @@\n+//\n+// Use this file to import your target's public headers that you would like to expose to Swift.\n+//\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist b/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist\nindex 53d78e89033..596dc7ce6b5 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist\n@@ -24,6 +24,8 @@\n \t1\n \tLSRequiresIPhoneOS\n \t\n+\tLSMinimumSystemVersion\n+\t12.0\n \tNSAppTransportSecurity\n \t\n \t\tNSAllowsArbitraryLoads\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\nindex 24eec3df5cb..58d21796e1d 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n@@ -1,91 +1,47 @@\n \n-\n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n+\n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n \ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex 57c1dd38343..9743535e7ad 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -4,39 +4,42 @@ require File.join(File.dirname(`node --print \"require.resolve('react-native/pack\n require 'json'\n podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}\n \n-ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0'\n-ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+def ccache_enabled?(podfile_properties)\n+ # Environment variable takes precedence\n+ return ENV['USE_CCACHE'] == '1' if ENV['USE_CCACHE']\n+ \n+ # Fall back to Podfile properties\n+ podfile_properties['apple.ccacheEnabled'] == 'true'\n+end\n+\n+ENV['RCT_NEW_ARCH_ENABLED'] ||= '0' if podfile_properties['newArchEnabled'] == 'false'\n+ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+ENV['RCT_USE_RN_DEP'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' && podfile_properties['newArchEnabled'] != 'false'\n+ENV['RCT_USE_PREBUILT_RNCORE'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' && podfile_properties['newArchEnabled'] != 'false'\n+platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'\n \n-use_autolinking_method_symbol = ('use' + '_native' + '_modules!').to_sym\n-origin_autolinking_method = self.method(use_autolinking_method_symbol)\n-self.define_singleton_method(use_autolinking_method_symbol) do |*args|\n- if ENV['EXPO_UNSTABLE_CORE_AUTOLINKING'] == '1'\n- Pod::UI.puts('Using expo-modules-autolinking as core autolinking source'.green)\n+prepare_react_native_project!\n+\n+target 'HelloWorld' do\n+ use_expo_modules!\n+\n+ if ENV['EXPO_USE_COMMUNITY_AUTOLINKING'] == '1'\n+ config_command = ['node', '-e', \"process.argv=['', '', 'config'];require('@react-native-community/cli').run()\"];\n+ else\n config_command = [\n 'node',\n '--no-warnings',\n '--eval',\n- 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n+ 'require(\\'expo/bin/autolinking\\')',\n+ 'expo-modules-autolinking',\n 'react-native-config',\n '--json',\n '--platform',\n 'ios'\n ]\n- origin_autolinking_method.call(config_command)\n- else\n- origin_autolinking_method.call()\n end\n-end\n-\n-platform :ios, podfile_properties['ios.deploymentTarget'] || '13.4'\n-install! 'cocoapods',\n- :deterministic_uuids => false\n \n-prepare_react_native_project!\n-\n-target 'HelloWorld' do\n- use_expo_modules!\n- config = use_native_modules!\n+ config = use_native_modules!(config_command)\n \n use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks']\n use_frameworks! :linkage => ENV['USE_FRAMEWORKS'].to_sym if ENV['USE_FRAMEWORKS']\n@@ -54,26 +57,7 @@ target 'HelloWorld' do\n installer,\n config[:reactNativePath],\n :mac_catalyst_enabled => false,\n- :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true',\n+ :ccache_enabled => ccache_enabled?(podfile_properties),\n )\n-\n- # This is necessary for Xcode 14, because it signs resource bundles by default\n- # when building for devices.\n- installer.target_installation_results.pod_target_installation_results\n- .each do |pod_name, target_installation_result|\n- target_installation_result.resource_bundle_targets.each do |resource_bundle_target|\n- resource_bundle_target.build_configurations.each do |config|\n- config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'\n- end\n- end\n- end\n- end\n-\n- post_integrate do |installer|\n- begin\n- expo_patch_react_imports!(installer)\n- rescue => e\n- Pod::UI.warn e\n- end\n end\n end\ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex 563853071f0..a1a026a23e1 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -1,7 +1,8 @@\n {\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n- \"version\": \"51.0.56\",\n+ \"license\": \"0BSD\",\n+ \"version\": \"54.0.51\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -10,12 +11,9 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~51.0.28\",\n- \"expo-status-bar\": \"~1.12.1\",\n- \"react\": \"18.2.0\",\n- \"react-native\": \"0.74.5\"\n- },\n- \"devDependencies\": {\n- \"@babel/core\": \"^7.20.0\"\n+ \"expo\": \"~54.0.34\",\n+ \"expo-status-bar\": \"~3.0.9\",\n+ \"react\": \"19.1.0\",\n+ \"react-native\": \"0.81.5\"\n }\n }\n","52..54":"diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle\nindex 84879d83acd..3f1c571b679 100644\n--- a/templates/expo-template-bare-minimum/android/app/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/app/build.gradle\n@@ -14,6 +14,7 @@ react {\n hermesCommand = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/sdks/hermesc/%OS-BIN%/hermesc\"\n codegenDir = new File([\"node\", \"--print\", \"require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n \n+ enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean()\n // Use Expo CLI to bundle the app, this ensures the Metro config\n // works correctly with Expo projects.\n cliFile = new File([\"node\", \"--print\", \"require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })\"].execute(null, rootDir).text.trim())\n@@ -63,9 +64,9 @@ react {\n }\n \n /**\n- * Set this to true to Run Proguard on Release builds to minify the Java bytecode.\n+ * Set this to true in release builds to optimize the app using [R8](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization).\n */\n-def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInReleaseBuilds') ?: false).toBoolean()\n+def enableMinifyInReleaseBuilds = (findProperty('android.enableMinifyInReleaseBuilds') ?: false).toBoolean()\n \n /**\n * The preferred build flavor of JavaScriptCore (JSC)\n@@ -78,7 +79,7 @@ def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInRelea\n * give correct results when using with locales other than en-US. Note that\n * this variant is about 6MiB larger per architecture than default.\n */\n-def jscFlavor = 'org.webkit:android-jsc:+'\n+def jscFlavor = 'io.github.react-native-community:jsc-android:2026004.+'\n \n android {\n ndkVersion rootProject.ext.ndkVersion\n@@ -93,6 +94,8 @@ android {\n targetSdkVersion rootProject.ext.targetSdkVersion\n versionCode 1\n versionName \"1.0\"\n+\n+ buildConfigField \"String\", \"REACT_NATIVE_RELEASE_LEVEL\", \"\\\"${findProperty('reactNativeReleaseLevel') ?: 'stable'}\\\"\"\n }\n signingConfigs {\n debug {\n@@ -110,15 +113,18 @@ android {\n // Caution! In production, you need to generate your own keystore file.\n // see https://reactnative.dev/docs/signed-apk-android.\n signingConfig signingConfigs.debug\n- shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false)\n- minifyEnabled enableProguardInReleaseBuilds\n+ def enableShrinkResources = findProperty('android.enableShrinkResourcesInReleaseBuilds') ?: 'false'\n+ shrinkResources enableShrinkResources.toBoolean()\n+ minifyEnabled enableMinifyInReleaseBuilds\n proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n- crunchPngs (findProperty('android.enablePngCrunchInReleaseBuilds')?.toBoolean() ?: true)\n+ def enablePngCrunchInRelease = findProperty('android.enablePngCrunchInReleaseBuilds') ?: 'true'\n+ crunchPngs enablePngCrunchInRelease.toBoolean()\n }\n }\n packagingOptions {\n jniLibs {\n- useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false)\n+ def enableLegacyPackaging = findProperty('expo.useLegacyPackaging') ?: 'false'\n+ useLegacyPackaging enableLegacyPackaging.toBoolean()\n }\n }\n androidResources {\n@@ -156,15 +162,15 @@ dependencies {\n \n if (isGifEnabled) {\n // For animated gif support\n- implementation(\"com.facebook.fresco:animated-gif:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-gif:${expoLibs.versions.fresco.get()}\")\n }\n \n if (isWebpEnabled) {\n // For webp support\n- implementation(\"com.facebook.fresco:webpsupport:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:webpsupport:${expoLibs.versions.fresco.get()}\")\n if (isWebpAnimatedEnabled) {\n // Animated webp support\n- implementation(\"com.facebook.fresco:animated-webp:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-webp:${expoLibs.versions.fresco.get()}\")\n }\n }\n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\nnew file mode 100644\nindex 00000000000..3ec2507bab7\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\n@@ -0,0 +1,7 @@\n+\n+\n+ \n+\n+ \n+\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\nindex e61349d1301..5abad96fa00 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n@@ -5,13 +5,13 @@ import android.content.res.Configuration\n \n import com.facebook.react.PackageList\n import com.facebook.react.ReactApplication\n+import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative\n import com.facebook.react.ReactNativeHost\n import com.facebook.react.ReactPackage\n import com.facebook.react.ReactHost\n-import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load\n+import com.facebook.react.common.ReleaseLevel\n+import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint\n import com.facebook.react.defaults.DefaultReactNativeHost\n-import com.facebook.react.soloader.OpenSourceMergedSoMapping\n-import com.facebook.soloader.SoLoader\n \n import expo.modules.ApplicationLifecycleDispatcher\n import expo.modules.ReactNativeHostWrapper\n@@ -19,21 +19,19 @@ import expo.modules.ReactNativeHostWrapper\n class MainApplication : Application(), ReactApplication {\n \n override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper(\n- this,\n- object : DefaultReactNativeHost(this) {\n- override fun getPackages(): List {\n- val packages = PackageList(this).packages\n- // Packages that cannot be autolinked yet can be added manually here, for example:\n- // packages.add(new MyReactNativePackage());\n- return packages\n- }\n+ this,\n+ object : DefaultReactNativeHost(this) {\n+ override fun getPackages(): List =\n+ PackageList(this).packages.apply {\n+ // Packages that cannot be autolinked yet can be added manually here, for example:\n+ // add(MyReactNativePackage())\n+ }\n \n override fun getJSMainModuleName(): String = \".expo/.virtual-metro-entry\"\n \n override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG\n \n override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED\n- override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED\n }\n )\n \n@@ -42,11 +40,12 @@ class MainApplication : Application(), ReactApplication {\n \n override fun onCreate() {\n super.onCreate()\n- SoLoader.init(this, OpenSourceMergedSoMapping)\n- if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {\n- // If you opted-in for the New Architecture, we load the native entry point for this app.\n- load()\n+ DefaultNewArchitectureEntryPoint.releaseLevel = try {\n+ ReleaseLevel.valueOf(BuildConfig.REACT_NATIVE_RELEASE_LEVEL.uppercase())\n+ } catch (e: IllegalArgumentException) {\n+ ReleaseLevel.STABLE\n }\n+ loadReactNative(this)\n ApplicationLifecycleDispatcher.onApplicationCreate(this)\n }\n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\nindex 51fbc1e5a72..26f3404be26 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n@@ -1,14 +1,7 @@\n \n- \n- \n \ndiff --git a/templates/expo-template-bare-minimum/android/build.gradle b/templates/expo-template-bare-minimum/android/build.gradle\nindex abbcb8ec8a1..0554dd156c1 100644\n--- a/templates/expo-template-bare-minimum/android/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/build.gradle\n@@ -1,41 +1,24 @@\n // Top-level build file where you can add configuration options common to all sub-projects/modules.\n \n buildscript {\n- ext {\n- buildToolsVersion = findProperty('android.buildToolsVersion') ?: '35.0.0'\n- minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '24')\n- compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '35')\n- targetSdkVersion = Integer.parseInt(findProperty('android.targetSdkVersion') ?: '34')\n- kotlinVersion = findProperty('android.kotlinVersion') ?: '1.9.25'\n-\n- ndkVersion = \"26.1.10909125\"\n- }\n- repositories {\n- google()\n- mavenCentral()\n- }\n- dependencies {\n- classpath('com.android.tools.build:gradle')\n- classpath('com.facebook.react:react-native-gradle-plugin')\n- classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')\n- }\n+ repositories {\n+ google()\n+ mavenCentral()\n+ }\n+ dependencies {\n+ classpath('com.android.tools.build:gradle')\n+ classpath('com.facebook.react:react-native-gradle-plugin')\n+ classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')\n+ }\n }\n \n-apply plugin: \"com.facebook.react.rootproject\"\n-\n allprojects {\n- repositories {\n- maven {\n- // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n- url(new File(['node', '--print', \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim(), '../android'))\n- }\n- maven {\n- // Android JSC is installed from npm\n- url(new File(['node', '--print', \"require.resolve('jsc-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), '../dist'))\n- }\n-\n- google()\n- mavenCentral()\n- maven { url 'https://www.jitpack.io' }\n- }\n+ repositories {\n+ google()\n+ mavenCentral()\n+ maven { url 'https://www.jitpack.io' }\n+ }\n }\n+\n+apply plugin: \"expo-root-project\"\n+apply plugin: \"com.facebook.react.rootproject\"\ndiff --git a/templates/expo-template-bare-minimum/android/gradle.properties b/templates/expo-template-bare-minimum/android/gradle.properties\nindex de47429c64c..97271b9456f 100644\n--- a/templates/expo-template-bare-minimum/android/gradle.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle.properties\n@@ -15,7 +15,7 @@ org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m\n # When configured, Gradle will run in incubating parallel mode.\n # This option should only be used with decoupled projects. More details, visit\n # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n-# org.gradle.parallel=true\n+org.gradle.parallel=true\n \n # AndroidX package structure to make it clearer which packages are bundled with the\n # Android operating system, and which are packaged with your app's APK\n@@ -35,12 +35,17 @@ reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64\n # your application. You should enable this flag either if you want\n # to write custom TurboModules/Fabric components OR use libraries that\n # are providing them.\n-newArchEnabled=false\n+newArchEnabled=true\n \n # Use this property to enable or disable the Hermes JS engine.\n # If set to false, you will be using JSC instead.\n hermesEnabled=true\n \n+# Use this property to enable edge-to-edge display support.\n+# This allows your app to draw behind system bars for an immersive UI.\n+# Note: Only works with ReactActivity and should not be used with custom Activity.\n+edgeToEdgeEnabled=true\n+\n # Enable GIF support in React Native images (~200 B increase)\n expo.gif.enabled=true\n # Enable webp support in React Native images (~85 KB increase)\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar\nindex a4b76b9530d..1b33c55baab 100644\nBinary files a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar and b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar differ\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\nindex 79eb9d003fe..d4081da476b 100644\n--- a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n@@ -1,6 +1,6 @@\n distributionBase=GRADLE_USER_HOME\n distributionPath=wrapper/dists\n-distributionUrl=https\\://services.gradle.org/distributions/gradle-8.10.2-all.zip\n+distributionUrl=https\\://services.gradle.org/distributions/gradle-8.14.3-bin.zip\n networkTimeout=10000\n validateDistributionUrl=true\n zipStoreBase=GRADLE_USER_HOME\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew b/templates/expo-template-bare-minimum/android/gradlew\nindex f5feea6d6b1..7f94d3d4777 100755\n--- a/templates/expo-template-bare-minimum/android/gradlew\n+++ b/templates/expo-template-bare-minimum/android/gradlew\n@@ -86,8 +86,7 @@ done\n # shellcheck disable=SC2034\n APP_BASE_NAME=${0##*/}\n # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)\n-APP_HOME=$( cd -P \"${APP_HOME:-./}\" > /dev/null && printf '%s\n-' \"$PWD\" ) || exit\n+APP_HOME=$( cd -P \"${APP_HOME:-./}\" > /dev/null && printf '%s\\n' \"$PWD\" ) || exit\n \n # Use the maximum available, or set MAX_FD != -1 to use that value.\n MAX_FD=maximum\n@@ -115,7 +114,7 @@ case \"$( uname )\" in #(\n NONSTOP* ) nonstop=true ;;\n esac\n \n-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n+CLASSPATH=\"\\\\\\\"\\\\\\\"\"\n \n \n # Determine the Java command to use to start the JVM.\n@@ -214,7 +213,7 @@ DEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n set -- \\\n \"-Dorg.gradle.appname=$APP_BASE_NAME\" \\\n -classpath \"$CLASSPATH\" \\\n- org.gradle.wrapper.GradleWrapperMain \\\n+ -jar \"$APP_HOME/gradle/wrapper/gradle-wrapper.jar\" \\\n \"$@\"\n \n # Stop when \"xargs\" is not available.\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew.bat b/templates/expo-template-bare-minimum/android/gradlew.bat\nindex 9b42019c791..5eed7ee8452 100644\n--- a/templates/expo-template-bare-minimum/android/gradlew.bat\n+++ b/templates/expo-template-bare-minimum/android/gradlew.bat\n@@ -70,11 +70,11 @@ goto fail\n :execute\r\n @rem Setup the command line\r\n \r\n-set CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\r\n+set CLASSPATH=\r\n \r\n \r\n @rem Execute Gradle\r\n-\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\r\n+\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" -jar \"%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\" %*\r\n \r\n :end\r\n @rem End local scope for the variables with windows NT shell\r\ndiff --git a/templates/expo-template-bare-minimum/android/settings.gradle b/templates/expo-template-bare-minimum/android/settings.gradle\nindex 39b188e065c..7fe91512213 100644\n--- a/templates/expo-template-bare-minimum/android/settings.gradle\n+++ b/templates/expo-template-bare-minimum/android/settings.gradle\n@@ -1,38 +1,39 @@\n pluginManagement {\n- includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().toString())\n+ def reactNativeGradlePlugin = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\")\n+ }.standardOutput.asText.get().trim()\n+ ).getParentFile().absolutePath\n+ includeBuild(reactNativeGradlePlugin)\n+ \n+ def expoPluginsPath = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('expo-modules-autolinking/package.json', { paths: [require.resolve('expo/package.json')] })\")\n+ }.standardOutput.asText.get().trim(),\n+ \"../android/expo-gradle-plugin\"\n+ ).absolutePath\n+ includeBuild(expoPluginsPath)\n+}\n+\n+plugins {\n+ id(\"com.facebook.react.settings\")\n+ id(\"expo-autolinking-settings\")\n }\n-plugins { id(\"com.facebook.react.settings\") }\n \n extensions.configure(com.facebook.react.ReactSettingsExtension) { ex ->\n if (System.getenv('EXPO_USE_COMMUNITY_AUTOLINKING') == '1') {\n ex.autolinkLibrariesFromCommand()\n } else {\n- def command = [\n- 'node',\n- '--no-warnings',\n- '--eval',\n- 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n- 'react-native-config',\n- '--json',\n- '--platform',\n- 'android'\n- ].toList()\n- ex.autolinkLibrariesFromCommand(command)\n+ ex.autolinkLibrariesFromCommand(expoAutolinking.rnConfigCommand)\n }\n }\n+expoAutolinking.useExpoModules()\n \n rootProject.name = 'HelloWorld'\n \n-dependencyResolutionManagement {\n- versionCatalogs {\n- reactAndroidLibs {\n- from(files(new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim(), \"../gradle/libs.versions.toml\")))\n- }\n- }\n-}\n-\n-apply from: new File([\"node\", \"--print\", \"require.resolve('expo/package.json')\"].execute(null, rootDir).text.trim(), \"../scripts/autolinking.gradle\");\n-useExpoModules()\n+expoAutolinking.useExpoVersionCatalog()\n \n include ':app'\n-includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile())\n+includeBuild(expoAutolinking.reactNativeGradlePlugin)\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\nindex 1ccb9b422d5..8a390c764af 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n@@ -3,33 +3,25 @@\n \tarchiveVersion = 1;\n \tclasses = {\n \t};\n-\tobjectVersion = 46;\n+\tobjectVersion = 54;\n \tobjects = {\n \n /* Begin PBXBuildFile section */\n-\t\t13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };\n \t\t13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };\n-\t\t13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };\n \t\t3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; };\n-\t\t96905EF65AED1B983A6B3ABC /* libPods-HelloWorld.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */; };\n-\t\tB18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; };\n \t\tBB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; };\n+\t\tF11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F11748412D0307B40044C1D9 /* AppDelegate.swift */; };\n /* End PBXBuildFile section */\n \n /* Begin PBXFileReference section */\n \t\t13B07F961A680F5B00A75B9A /* HelloWorld.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloWorld.app; sourceTree = BUILT_PRODUCTS_DIR; };\n-\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = HelloWorld/AppDelegate.h; sourceTree = \"\"; };\n-\t\t13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = HelloWorld/AppDelegate.mm; sourceTree = \"\"; };\n \t\t13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = HelloWorld/Images.xcassets; sourceTree = \"\"; };\n \t\t13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = HelloWorld/Info.plist; sourceTree = \"\"; };\n-\t\t13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = HelloWorld/main.m; sourceTree = \"\"; };\n-\t\t58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-HelloWorld.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n-\t\t6C2E3173556A471DD304B334 /* 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 = \"\"; };\n-\t\t7A4D352CD337FB3A3BF06240 /* 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 = \"\"; };\n \t\tAA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = HelloWorld/SplashScreen.storyboard; sourceTree = \"\"; };\n \t\tBB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = \"\"; };\n \t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };\n-\t\tFAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = \"Pods/Target Support Files/Pods-HelloWorld/ExpoModulesProvider.swift\"; sourceTree = \"\"; };\n+\t\tF11748412D0307B40044C1D9 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = HelloWorld/AppDelegate.swift; sourceTree = \"\"; };\n+\t\tF11748442D0722820044C1D9 /* HelloWorld-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = \"HelloWorld-Bridging-Header.h\"; path = \"HelloWorld/HelloWorld-Bridging-Header.h\"; sourceTree = \"\"; };\n /* End PBXFileReference section */\n \n /* Begin PBXFrameworksBuildPhase section */\n@@ -37,7 +29,6 @@\n \t\t\tisa = PBXFrameworksBuildPhase;\n \t\t\tbuildActionMask = 2147483647;\n \t\t\tfiles = (\n-\t\t\t\t96905EF65AED1B983A6B3ABC /* libPods-HelloWorld.a in Frameworks */,\n \t\t\t);\n \t\t\trunOnlyForDeploymentPostprocessing = 0;\n \t\t};\n@@ -47,12 +38,11 @@\n \t\t13B07FAE1A68108700A75B9A /* HelloWorld */ = {\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n+\t\t\t\tF11748412D0307B40044C1D9 /* AppDelegate.swift */,\n+\t\t\t\tF11748442D0722820044C1D9 /* HelloWorld-Bridging-Header.h */,\n \t\t\t\tBB2F792B24A3F905000567C9 /* Supporting */,\n-\t\t\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */,\n-\t\t\t\t13B07FB01A68108700A75B9A /* AppDelegate.mm */,\n \t\t\t\t13B07FB51A68108700A75B9A /* Images.xcassets */,\n \t\t\t\t13B07FB61A68108700A75B9A /* Info.plist */,\n-\t\t\t\t13B07FB71A68108700A75B9A /* main.m */,\n \t\t\t\tAA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */,\n \t\t\t);\n \t\t\tname = HelloWorld;\n@@ -62,7 +52,6 @@\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n \t\t\t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */,\n-\t\t\t\t58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */,\n \t\t\t);\n \t\t\tname = Frameworks;\n \t\t\tsourceTree = \"\";\n@@ -81,8 +70,6 @@\n \t\t\t\t832341AE1AAA6A7D00B99B32 /* Libraries */,\n \t\t\t\t83CBBA001A601CBA00E9B192 /* Products */,\n \t\t\t\t2D16E6871FA4F8E400B85C8A /* Frameworks */,\n-\t\t\t\tD65327D7A22EEC0BE12398D9 /* Pods */,\n-\t\t\t\tD7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */,\n \t\t\t);\n \t\t\tindentWidth = 2;\n \t\t\tsourceTree = \"\";\n@@ -97,14 +84,6 @@\n \t\t\tname = Products;\n \t\t\tsourceTree = \"\";\n \t\t};\n-\t\t92DBD88DE9BF7D494EA9DA96 /* HelloWorld */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\tFAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */,\n-\t\t\t);\n-\t\t\tname = HelloWorld;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n \t\tBB2F792B24A3F905000567C9 /* Supporting */ = {\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n@@ -114,23 +93,6 @@\n \t\t\tpath = HelloWorld/Supporting;\n \t\t\tsourceTree = \"\";\n \t\t};\n-\t\tD65327D7A22EEC0BE12398D9 /* Pods */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\t6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */,\n-\t\t\t\t7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */,\n-\t\t\t);\n-\t\t\tpath = Pods;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n-\t\tD7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\t92DBD88DE9BF7D494EA9DA96 /* HelloWorld */,\n-\t\t\t);\n-\t\t\tname = ExpoModulesProviders;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n /* End PBXGroup section */\n \n /* Begin PBXNativeTarget section */\n@@ -206,6 +168,8 @@\n \t\t\tfiles = (\n \t\t\t);\n \t\t\tinputPaths = (\n+\t\t\t\t\"$(SRCROOT)/.xcode.env\",\n+\t\t\t\t\"$(SRCROOT)/.xcode.env.local\",\n \t\t\t);\n \t\t\tname = \"Bundle React Native code and images\";\n \t\t\toutputPaths = (\n@@ -265,9 +229,7 @@\n \t\t\tisa = PBXSourcesBuildPhase;\n \t\t\tbuildActionMask = 2147483647;\n \t\t\tfiles = (\n-\t\t\t\t13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,\n-\t\t\t\t13B07FC11A68108700A75B9A /* main.m in Sources */,\n-\t\t\t\tB18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */,\n+\t\t\t\tF11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */,\n \t\t\t);\n \t\t\trunOnlyForDeploymentPostprocessing = 0;\n \t\t};\n@@ -276,7 +238,6 @@\n /* Begin XCBuildConfiguration section */\n \t\t13B07F941A680F5B00A75B9A /* Debug */ = {\n \t\t\tisa = XCBuildConfiguration;\n-\t\t\tbaseConfigurationReference = 6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */;\n \t\t\tbuildSettings = {\n \t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n@@ -288,7 +249,10 @@\n \t\t\t\t);\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n \t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t\t\"@executable_path/Frameworks\",\n+\t\t\t\t);\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -297,6 +261,7 @@\n \t\t\t\t);\n \t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = org.name.HelloWorld;\n \t\t\t\tPRODUCT_NAME = HelloWorld;\n+\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"HelloWorld/HelloWorld-Bridging-Header.h\";\n \t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n \t\t\t\tSWIFT_VERSION = 5.0;\n \t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n@@ -305,14 +270,16 @@\n \t\t};\n \t\t13B07F951A680F5B00A75B9A /* Release */ = {\n \t\t\tisa = XCBuildConfiguration;\n-\t\t\tbaseConfigurationReference = 7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */;\n \t\t\tbuildSettings = {\n \t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n \t\t\t\tCURRENT_PROJECT_VERSION = 1;\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n \t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t\t\"@executable_path/Frameworks\",\n+\t\t\t\t);\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -321,6 +288,7 @@\n \t\t\t\t);\n \t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = org.name.HelloWorld;\n \t\t\t\tPRODUCT_NAME = HelloWorld;\n+\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"HelloWorld/HelloWorld-Bridging-Header.h\";\n \t\t\t\tSWIFT_VERSION = 5.0;\n \t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n \t\t\t};\n@@ -374,7 +342,10 @@\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n \t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t/usr/lib/swift,\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t);\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n \t\t\t\tONLY_ACTIVE_ARCH = YES;\n@@ -423,7 +394,10 @@\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n \t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t/usr/lib/swift,\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t);\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n \t\t\t\tSDKROOT = iphoneos;\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\nnew file mode 100644\nindex 00000000000..a7887e1e5b1\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\n@@ -0,0 +1,70 @@\n+import Expo\n+import React\n+import ReactAppDependencyProvider\n+\n+@UIApplicationMain\n+public class AppDelegate: ExpoAppDelegate {\n+ var window: UIWindow?\n+\n+ var reactNativeDelegate: ExpoReactNativeFactoryDelegate?\n+ var reactNativeFactory: RCTReactNativeFactory?\n+\n+ public override func application(\n+ _ application: UIApplication,\n+ didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil\n+ ) -> Bool {\n+ let delegate = ReactNativeDelegate()\n+ let factory = ExpoReactNativeFactory(delegate: delegate)\n+ delegate.dependencyProvider = RCTAppDependencyProvider()\n+\n+ reactNativeDelegate = delegate\n+ reactNativeFactory = factory\n+ bindReactNativeFactory(factory)\n+\n+#if os(iOS) || os(tvOS)\n+ window = UIWindow(frame: UIScreen.main.bounds)\n+ factory.startReactNative(\n+ withModuleName: \"main\",\n+ in: window,\n+ launchOptions: launchOptions)\n+#endif\n+\n+ return super.application(application, didFinishLaunchingWithOptions: launchOptions)\n+ }\n+\n+ // Linking API\n+ public override func application(\n+ _ app: UIApplication,\n+ open url: URL,\n+ options: [UIApplication.OpenURLOptionsKey: Any] = [:]\n+ ) -> Bool {\n+ return super.application(app, open: url, options: options) || RCTLinkingManager.application(app, open: url, options: options)\n+ }\n+\n+ // Universal Links\n+ public override func application(\n+ _ application: UIApplication,\n+ continue userActivity: NSUserActivity,\n+ restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void\n+ ) -> Bool {\n+ let result = RCTLinkingManager.application(application, continue: userActivity, restorationHandler: restorationHandler)\n+ return super.application(application, continue: userActivity, restorationHandler: restorationHandler) || result\n+ }\n+}\n+\n+class ReactNativeDelegate: ExpoReactNativeFactoryDelegate {\n+ // Extension point for config-plugins\n+\n+ override func sourceURL(for bridge: RCTBridge) -> URL? {\n+ // needed to return the correct URL for expo-dev-client.\n+ bridge.bundleURL ?? bundleURL()\n+ }\n+\n+ override func bundleURL() -> URL? {\n+#if DEBUG\n+ return RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: \".expo/.virtual-metro-entry\")\n+#else\n+ return Bundle.main.url(forResource: \"main\", withExtension: \"jsbundle\")\n+#endif\n+ }\n+}\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h b/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h\nnew file mode 100644\nindex 00000000000..8361941afc2\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h\n@@ -0,0 +1,3 @@\n+//\n+// Use this file to import your target's public headers that you would like to expose to Swift.\n+//\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\nindex 447b4188985..58d21796e1d 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n@@ -1,11 +1,12 @@\n \n-\n+\n \n \n \n- \n+ \n \n \n+ \n \n \n \n@@ -29,6 +30,7 @@\n \n \n \n+ \n \n \n \n@@ -38,5 +40,8 @@\n \n \n \n+ \n+ \n+ \n \n \ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex f740040e7be..9743535e7ad 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -4,12 +4,19 @@ require File.join(File.dirname(`node --print \"require.resolve('react-native/pack\n require 'json'\n podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}\n \n-ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0'\n-ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+def ccache_enabled?(podfile_properties)\n+ # Environment variable takes precedence\n+ return ENV['USE_CCACHE'] == '1' if ENV['USE_CCACHE']\n+ \n+ # Fall back to Podfile properties\n+ podfile_properties['apple.ccacheEnabled'] == 'true'\n+end\n \n+ENV['RCT_NEW_ARCH_ENABLED'] ||= '0' if podfile_properties['newArchEnabled'] == 'false'\n+ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+ENV['RCT_USE_RN_DEP'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' && podfile_properties['newArchEnabled'] != 'false'\n+ENV['RCT_USE_PREBUILT_RNCORE'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' && podfile_properties['newArchEnabled'] != 'false'\n platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'\n-install! 'cocoapods',\n- :deterministic_uuids => false\n \n prepare_react_native_project!\n \n@@ -23,7 +30,8 @@ target 'HelloWorld' do\n 'node',\n '--no-warnings',\n '--eval',\n- 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n+ 'require(\\'expo/bin/autolinking\\')',\n+ 'expo-modules-autolinking',\n 'react-native-config',\n '--json',\n '--platform',\n@@ -49,18 +57,7 @@ target 'HelloWorld' do\n installer,\n config[:reactNativePath],\n :mac_catalyst_enabled => false,\n- :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true',\n+ :ccache_enabled => ccache_enabled?(podfile_properties),\n )\n-\n- # This is necessary for Xcode 14, because it signs resource bundles by default\n- # when building for devices.\n- installer.target_installation_results.pod_target_installation_results\n- .each do |pod_name, target_installation_result|\n- target_installation_result.resource_bundle_targets.each do |resource_bundle_target|\n- resource_bundle_target.build_configurations.each do |config|\n- config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'\n- end\n- end\n- end\n end\n end\ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex b51159163bf..a1a026a23e1 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -2,7 +2,7 @@\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n \"license\": \"0BSD\",\n- \"version\": \"52.0.79\",\n+ \"version\": \"54.0.51\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -11,12 +11,9 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~52.0.49\",\n- \"expo-status-bar\": \"~2.0.1\",\n- \"react\": \"18.3.1\",\n- \"react-native\": \"0.76.9\"\n- },\n- \"devDependencies\": {\n- \"@babel/core\": \"^7.20.0\"\n+ \"expo\": \"~54.0.34\",\n+ \"expo-status-bar\": \"~3.0.9\",\n+ \"react\": \"19.1.0\",\n+ \"react-native\": \"0.81.5\"\n }\n }\n","53..54":"diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle\nindex 34b96c71c33..3f1c571b679 100644\n--- a/templates/expo-template-bare-minimum/android/app/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/app/build.gradle\n@@ -64,9 +64,9 @@ react {\n }\n \n /**\n- * Set this to true to Run Proguard on Release builds to minify the Java bytecode.\n+ * Set this to true in release builds to optimize the app using [R8](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization).\n */\n-def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInReleaseBuilds') ?: false).toBoolean()\n+def enableMinifyInReleaseBuilds = (findProperty('android.enableMinifyInReleaseBuilds') ?: false).toBoolean()\n \n /**\n * The preferred build flavor of JavaScriptCore (JSC)\n@@ -94,6 +94,8 @@ android {\n targetSdkVersion rootProject.ext.targetSdkVersion\n versionCode 1\n versionName \"1.0\"\n+\n+ buildConfigField \"String\", \"REACT_NATIVE_RELEASE_LEVEL\", \"\\\"${findProperty('reactNativeReleaseLevel') ?: 'stable'}\\\"\"\n }\n signingConfigs {\n debug {\n@@ -111,15 +113,18 @@ android {\n // Caution! In production, you need to generate your own keystore file.\n // see https://reactnative.dev/docs/signed-apk-android.\n signingConfig signingConfigs.debug\n- shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false)\n- minifyEnabled enableProguardInReleaseBuilds\n+ def enableShrinkResources = findProperty('android.enableShrinkResourcesInReleaseBuilds') ?: 'false'\n+ shrinkResources enableShrinkResources.toBoolean()\n+ minifyEnabled enableMinifyInReleaseBuilds\n proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n- crunchPngs (findProperty('android.enablePngCrunchInReleaseBuilds')?.toBoolean() ?: true)\n+ def enablePngCrunchInRelease = findProperty('android.enablePngCrunchInReleaseBuilds') ?: 'true'\n+ crunchPngs enablePngCrunchInRelease.toBoolean()\n }\n }\n packagingOptions {\n jniLibs {\n- useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false)\n+ def enableLegacyPackaging = findProperty('expo.useLegacyPackaging') ?: 'false'\n+ useLegacyPackaging enableLegacyPackaging.toBoolean()\n }\n }\n androidResources {\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\nnew file mode 100644\nindex 00000000000..3ec2507bab7\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\n@@ -0,0 +1,7 @@\n+\n+\n+ \n+\n+ \n+\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\nindex 267e20c30e5..5abad96fa00 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n@@ -5,13 +5,13 @@ import android.content.res.Configuration\n \n import com.facebook.react.PackageList\n import com.facebook.react.ReactApplication\n+import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative\n import com.facebook.react.ReactNativeHost\n import com.facebook.react.ReactPackage\n import com.facebook.react.ReactHost\n-import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load\n+import com.facebook.react.common.ReleaseLevel\n+import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint\n import com.facebook.react.defaults.DefaultReactNativeHost\n-import com.facebook.react.soloader.OpenSourceMergedSoMapping\n-import com.facebook.soloader.SoLoader\n \n import expo.modules.ApplicationLifecycleDispatcher\n import expo.modules.ReactNativeHostWrapper\n@@ -19,21 +19,19 @@ import expo.modules.ReactNativeHostWrapper\n class MainApplication : Application(), ReactApplication {\n \n override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper(\n- this,\n- object : DefaultReactNativeHost(this) {\n- override fun getPackages(): List {\n- val packages = PackageList(this).packages\n- // Packages that cannot be autolinked yet can be added manually here, for example:\n- // packages.add(MyReactNativePackage())\n- return packages\n- }\n+ this,\n+ object : DefaultReactNativeHost(this) {\n+ override fun getPackages(): List =\n+ PackageList(this).packages.apply {\n+ // Packages that cannot be autolinked yet can be added manually here, for example:\n+ // add(MyReactNativePackage())\n+ }\n \n override fun getJSMainModuleName(): String = \".expo/.virtual-metro-entry\"\n \n override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG\n \n override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED\n- override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED\n }\n )\n \n@@ -42,11 +40,12 @@ class MainApplication : Application(), ReactApplication {\n \n override fun onCreate() {\n super.onCreate()\n- SoLoader.init(this, OpenSourceMergedSoMapping)\n- if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {\n- // If you opted-in for the New Architecture, we load the native entry point for this app.\n- load()\n+ DefaultNewArchitectureEntryPoint.releaseLevel = try {\n+ ReleaseLevel.valueOf(BuildConfig.REACT_NATIVE_RELEASE_LEVEL.uppercase())\n+ } catch (e: IllegalArgumentException) {\n+ ReleaseLevel.STABLE\n }\n+ loadReactNative(this)\n ApplicationLifecycleDispatcher.onApplicationCreate(this)\n }\n \ndiff --git a/templates/expo-template-bare-minimum/android/build.gradle b/templates/expo-template-bare-minimum/android/build.gradle\nindex fa7b11e23c1..0554dd156c1 100644\n--- a/templates/expo-template-bare-minimum/android/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/build.gradle\n@@ -12,21 +12,8 @@ buildscript {\n }\n }\n \n-def reactNativeAndroidDir = new File(\n- providers.exec {\n- workingDir(rootDir)\n- commandLine(\"node\", \"--print\", \"require.resolve('react-native/package.json')\")\n- }.standardOutput.asText.get().trim(),\n- \"../android\"\n-)\n-\n allprojects {\n repositories {\n- maven {\n- // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n- url(reactNativeAndroidDir)\n- }\n-\n google()\n mavenCentral()\n maven { url 'https://www.jitpack.io' }\ndiff --git a/templates/expo-template-bare-minimum/android/gradle.properties b/templates/expo-template-bare-minimum/android/gradle.properties\nindex 7531e9eb23c..97271b9456f 100644\n--- a/templates/expo-template-bare-minimum/android/gradle.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle.properties\n@@ -15,7 +15,7 @@ org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m\n # When configured, Gradle will run in incubating parallel mode.\n # This option should only be used with decoupled projects. More details, visit\n # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n-# org.gradle.parallel=true\n+org.gradle.parallel=true\n \n # AndroidX package structure to make it clearer which packages are bundled with the\n # Android operating system, and which are packaged with your app's APK\n@@ -41,6 +41,11 @@ newArchEnabled=true\n # If set to false, you will be using JSC instead.\n hermesEnabled=true\n \n+# Use this property to enable edge-to-edge display support.\n+# This allows your app to draw behind system bars for an immersive UI.\n+# Note: Only works with ReactActivity and should not be used with custom Activity.\n+edgeToEdgeEnabled=true\n+\n # Enable GIF support in React Native images (~200 B increase)\n expo.gif.enabled=true\n # Enable webp support in React Native images (~85 KB increase)\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar\nindex a4b76b9530d..1b33c55baab 100644\nBinary files a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar and b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar differ\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\nindex 37f853b1c84..d4081da476b 100644\n--- a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n@@ -1,6 +1,6 @@\n distributionBase=GRADLE_USER_HOME\n distributionPath=wrapper/dists\n-distributionUrl=https\\://services.gradle.org/distributions/gradle-8.13-bin.zip\n+distributionUrl=https\\://services.gradle.org/distributions/gradle-8.14.3-bin.zip\n networkTimeout=10000\n validateDistributionUrl=true\n zipStoreBase=GRADLE_USER_HOME\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew b/templates/expo-template-bare-minimum/android/gradlew\nindex f3b75f3b0d4..7f94d3d4777 100755\n--- a/templates/expo-template-bare-minimum/android/gradlew\n+++ b/templates/expo-template-bare-minimum/android/gradlew\n@@ -114,7 +114,7 @@ case \"$( uname )\" in #(\n NONSTOP* ) nonstop=true ;;\n esac\n \n-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n+CLASSPATH=\"\\\\\\\"\\\\\\\"\"\n \n \n # Determine the Java command to use to start the JVM.\n@@ -213,7 +213,7 @@ DEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n set -- \\\n \"-Dorg.gradle.appname=$APP_BASE_NAME\" \\\n -classpath \"$CLASSPATH\" \\\n- org.gradle.wrapper.GradleWrapperMain \\\n+ -jar \"$APP_HOME/gradle/wrapper/gradle-wrapper.jar\" \\\n \"$@\"\n \n # Stop when \"xargs\" is not available.\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew.bat b/templates/expo-template-bare-minimum/android/gradlew.bat\nindex 9b42019c791..5eed7ee8452 100644\n--- a/templates/expo-template-bare-minimum/android/gradlew.bat\n+++ b/templates/expo-template-bare-minimum/android/gradlew.bat\n@@ -70,11 +70,11 @@ goto fail\n :execute\r\n @rem Setup the command line\r\n \r\n-set CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\r\n+set CLASSPATH=\r\n \r\n \r\n @rem Execute Gradle\r\n-\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\r\n+\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" -jar \"%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\" %*\r\n \r\n :end\r\n @rem End local scope for the variables with windows NT shell\r\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\nindex 1b7513bd31b..8a390c764af 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n@@ -168,6 +168,8 @@\n \t\t\tfiles = (\n \t\t\t);\n \t\t\tinputPaths = (\n+\t\t\t\t\"$(SRCROOT)/.xcode.env\",\n+\t\t\t\t\"$(SRCROOT)/.xcode.env.local\",\n \t\t\t);\n \t\t\tname = \"Bundle React Native code and images\";\n \t\t\toutputPaths = (\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\nindex 447b4188985..58d21796e1d 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n@@ -1,11 +1,12 @@\n \n-\n+\n \n \n \n- \n+ \n \n \n+ \n \n \n \n@@ -29,6 +30,7 @@\n \n \n \n+ \n \n \n \n@@ -38,5 +40,8 @@\n \n \n \n+ \n+ \n+ \n \n \ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex 29503ff0cc1..9743535e7ad 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -4,12 +4,19 @@ require File.join(File.dirname(`node --print \"require.resolve('react-native/pack\n require 'json'\n podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}\n \n-ENV['RCT_NEW_ARCH_ENABLED'] = '0' if podfile_properties['newArchEnabled'] == 'false'\n-ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+def ccache_enabled?(podfile_properties)\n+ # Environment variable takes precedence\n+ return ENV['USE_CCACHE'] == '1' if ENV['USE_CCACHE']\n+ \n+ # Fall back to Podfile properties\n+ podfile_properties['apple.ccacheEnabled'] == 'true'\n+end\n \n+ENV['RCT_NEW_ARCH_ENABLED'] ||= '0' if podfile_properties['newArchEnabled'] == 'false'\n+ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+ENV['RCT_USE_RN_DEP'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' && podfile_properties['newArchEnabled'] != 'false'\n+ENV['RCT_USE_PREBUILT_RNCORE'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' && podfile_properties['newArchEnabled'] != 'false'\n platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'\n-install! 'cocoapods',\n- :deterministic_uuids => false\n \n prepare_react_native_project!\n \n@@ -20,7 +27,10 @@ target 'HelloWorld' do\n config_command = ['node', '-e', \"process.argv=['', '', 'config'];require('@react-native-community/cli').run()\"];\n else\n config_command = [\n- 'npx',\n+ 'node',\n+ '--no-warnings',\n+ '--eval',\n+ 'require(\\'expo/bin/autolinking\\')',\n 'expo-modules-autolinking',\n 'react-native-config',\n '--json',\n@@ -47,18 +57,7 @@ target 'HelloWorld' do\n installer,\n config[:reactNativePath],\n :mac_catalyst_enabled => false,\n- :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true',\n+ :ccache_enabled => ccache_enabled?(podfile_properties),\n )\n-\n- # This is necessary for Xcode 14, because it signs resource bundles by default\n- # when building for devices.\n- installer.target_installation_results.pod_target_installation_results\n- .each do |pod_name, target_installation_result|\n- target_installation_result.resource_bundle_targets.each do |resource_bundle_target|\n- resource_bundle_target.build_configurations.each do |config|\n- config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'\n- end\n- end\n- end\n end\n end\ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex 661f6b6addf..a1a026a23e1 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -2,7 +2,7 @@\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n \"license\": \"0BSD\",\n- \"version\": \"53.0.42\",\n+ \"version\": \"54.0.51\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -11,12 +11,9 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~53.0.27\",\n- \"expo-status-bar\": \"~2.2.3\",\n- \"react\": \"19.0.0\",\n- \"react-native\": \"0.79.6\"\n- },\n- \"devDependencies\": {\n- \"@babel/core\": \"^7.20.0\"\n+ \"expo\": \"~54.0.34\",\n+ \"expo-status-bar\": \"~3.0.9\",\n+ \"react\": \"19.1.0\",\n+ \"react-native\": \"0.81.5\"\n }\n }\n","54..54":"","51..55":"diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle\nindex a4b08330359..fc185e53bc3 100644\n--- a/templates/expo-template-bare-minimum/android/app/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/app/build.gradle\n@@ -4,27 +4,6 @@ apply plugin: \"com.facebook.react\"\n \n def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath()\n \n-static def versionToNumber(major, minor, patch) {\n- return patch * 100 + minor * 10000 + major * 1000000\n-}\n-\n-def getRNVersion() {\n- def version = providers.exec {\n- workingDir(projectDir)\n- commandLine(\"node\", \"-e\", \"console.log(require('react-native/package.json').version);\")\n- }.standardOutput.asText.get().trim()\n-\n- def coreVersion = version.split(\"-\")[0]\n- def (major, minor, patch) = coreVersion.tokenize('.').collect { it.toInteger() }\n-\n- return versionToNumber(\n- major,\n- minor,\n- patch\n- )\n-}\n-def rnVersion = getRNVersion()\n-\n /**\n * This is the configuration block to customize your React Native Android app.\n * By default you don't need to apply any configuration, just uncomment the lines you need.\n@@ -32,21 +11,22 @@ def rnVersion = getRNVersion()\n react {\n entryFile = file([\"node\", \"-e\", \"require('expo/scripts/resolveAppEntry')\", projectRoot, \"android\", \"absolute\"].execute(null, rootDir).text.trim())\n reactNativeDir = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n- hermesCommand = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/sdks/hermesc/%OS-BIN%/hermesc\"\n+ hermesCommand = new File([\"node\", \"--print\", \"require.resolve('hermes-compiler/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/hermesc/%OS-BIN%/hermesc\"\n codegenDir = new File([\"node\", \"--print\", \"require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n \n+ enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean()\n // Use Expo CLI to bundle the app, this ensures the Metro config\n // works correctly with Expo projects.\n cliFile = new File([\"node\", \"--print\", \"require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })\"].execute(null, rootDir).text.trim())\n bundleCommand = \"export:embed\"\n \n /* Folders */\n- // The root of your project, i.e. where \"package.json\" lives. Default is '..'\n- // root = file(\"../\")\n- // The folder where the react-native NPM package is. Default is ../node_modules/react-native\n- // reactNativeDir = file(\"../node_modules/react-native\")\n- // The folder where the react-native Codegen package is. Default is ../node_modules/@react-native/codegen\n- // codegenDir = file(\"../node_modules/@react-native/codegen\")\n+ // The root of your project, i.e. where \"package.json\" lives. Default is '../..'\n+ // root = file(\"../../\")\n+ // The folder where the react-native NPM package is. Default is ../../node_modules/react-native\n+ // reactNativeDir = file(\"../../node_modules/react-native\")\n+ // The folder where the react-native Codegen package is. Default is ../../node_modules/@react-native/codegen\n+ // codegenDir = file(\"../../node_modules/@react-native/codegen\")\n \n /* Variants */\n // The list of variants to that are debuggable. For those we're going to\n@@ -79,16 +59,14 @@ react {\n // The list of flags to pass to the Hermes compiler. By default is \"-O\", \"-output-source-map\"\n // hermesFlags = [\"-O\", \"-output-source-map\"]\n \n- if (rnVersion >= versionToNumber(0, 75, 0)) {\n- /* Autolinking */\n- autolinkLibrariesWithApp()\n- }\n+ /* Autolinking */\n+ autolinkLibrariesWithApp()\n }\n \n /**\n- * Set this to true to Run Proguard on Release builds to minify the Java bytecode.\n+ * Set this to true in release builds to optimize the app using [R8](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization).\n */\n-def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInReleaseBuilds') ?: false).toBoolean()\n+def enableMinifyInReleaseBuilds = (findProperty('android.enableMinifyInReleaseBuilds') ?: false).toBoolean()\n \n /**\n * The preferred build flavor of JavaScriptCore (JSC)\n@@ -101,7 +79,7 @@ def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInRelea\n * give correct results when using with locales other than en-US. Note that\n * this variant is about 6MiB larger per architecture than default.\n */\n-def jscFlavor = 'org.webkit:android-jsc:+'\n+def jscFlavor = 'io.github.react-native-community:jsc-android:2026004.+'\n \n android {\n ndkVersion rootProject.ext.ndkVersion\n@@ -116,6 +94,8 @@ android {\n targetSdkVersion rootProject.ext.targetSdkVersion\n versionCode 1\n versionName \"1.0\"\n+\n+ buildConfigField \"String\", \"REACT_NATIVE_RELEASE_LEVEL\", \"\\\"${findProperty('reactNativeReleaseLevel') ?: 'stable'}\\\"\"\n }\n signingConfigs {\n debug {\n@@ -133,17 +113,23 @@ android {\n // Caution! In production, you need to generate your own keystore file.\n // see https://reactnative.dev/docs/signed-apk-android.\n signingConfig signingConfigs.debug\n- shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false)\n- minifyEnabled enableProguardInReleaseBuilds\n+ def enableShrinkResources = findProperty('android.enableShrinkResourcesInReleaseBuilds') ?: 'false'\n+ shrinkResources enableShrinkResources.toBoolean()\n+ minifyEnabled enableMinifyInReleaseBuilds\n proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n- crunchPngs (findProperty('android.enablePngCrunchInReleaseBuilds')?.toBoolean() ?: true)\n+ def enablePngCrunchInRelease = findProperty('android.enablePngCrunchInReleaseBuilds') ?: 'true'\n+ crunchPngs enablePngCrunchInRelease.toBoolean()\n }\n }\n packagingOptions {\n jniLibs {\n- useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false)\n+ def enableLegacyPackaging = findProperty('expo.useLegacyPackaging') ?: 'false'\n+ useLegacyPackaging enableLegacyPackaging.toBoolean()\n }\n }\n+ androidResources {\n+ ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:!CVS:!thumbs.db:!picasa.ini:!*~'\n+ }\n }\n \n // Apply static values from `gradle.properties` to the `android.packagingOptions`\n@@ -176,15 +162,15 @@ dependencies {\n \n if (isGifEnabled) {\n // For animated gif support\n- implementation(\"com.facebook.fresco:animated-gif:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-gif:${expoLibs.versions.fresco.get()}\")\n }\n \n if (isWebpEnabled) {\n // For webp support\n- implementation(\"com.facebook.fresco:webpsupport:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:webpsupport:${expoLibs.versions.fresco.get()}\")\n if (isWebpAnimatedEnabled) {\n // Animated webp support\n- implementation(\"com.facebook.fresco:animated-webp:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-webp:${expoLibs.versions.fresco.get()}\")\n }\n }\n \n@@ -194,8 +180,3 @@ dependencies {\n implementation jscFlavor\n }\n }\n-\n-if (rnVersion < versionToNumber(0, 75, 0)) {\n- apply from: new File([\"node\", \"--print\", \"require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), \"../native_modules.gradle\");\n- applyNativeModulesAppBuildGradle(project)\n-}\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\nnew file mode 100644\nindex 00000000000..3ec2507bab7\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\n@@ -0,0 +1,7 @@\n+\n+\n+ \n+\n+ \n+\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\nindex 52175508263..14bdba124ab 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n@@ -1,12 +1,13 @@\n-\n+\n \n \n \n \n \n \n- \n- \n+ \n+ \n \n \n \n@@ -18,13 +19,12 @@\n \n \n \n- \n- \n+ \n+ \n \n \n \n \n \n- \n \n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\nindex 5f6e05ce071..cbb5ddb85d0 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n@@ -5,46 +5,36 @@ import android.content.res.Configuration\n \n import com.facebook.react.PackageList\n import com.facebook.react.ReactApplication\n-import com.facebook.react.ReactNativeHost\n+import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative\n import com.facebook.react.ReactPackage\n import com.facebook.react.ReactHost\n-import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load\n-import com.facebook.react.defaults.DefaultReactNativeHost\n-import com.facebook.soloader.SoLoader\n+import com.facebook.react.common.ReleaseLevel\n+import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint\n \n import expo.modules.ApplicationLifecycleDispatcher\n-import expo.modules.ReactNativeHostWrapper\n+import expo.modules.ExpoReactHostFactory\n \n class MainApplication : Application(), ReactApplication {\n \n- override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper(\n- this,\n- object : DefaultReactNativeHost(this) {\n- override fun getPackages(): List {\n- // Packages that cannot be autolinked yet can be added manually here, for example:\n- // packages.add(new MyReactNativePackage());\n- return PackageList(this).packages\n- }\n-\n- override fun getJSMainModuleName(): String = \".expo/.virtual-metro-entry\"\n-\n- override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG\n-\n- override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED\n- override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED\n- }\n- )\n-\n- override val reactHost: ReactHost\n- get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost)\n+ override val reactHost: ReactHost by lazy {\n+ ExpoReactHostFactory.getDefaultReactHost(\n+ context = applicationContext,\n+ packageList =\n+ PackageList(this).packages.apply {\n+ // Packages that cannot be autolinked yet can be added manually here, for example:\n+ // add(MyReactNativePackage())\n+ }\n+ )\n+ }\n \n override fun onCreate() {\n super.onCreate()\n- SoLoader.init(this, false)\n- if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {\n- // If you opted-in for the New Architecture, we load the native entry point for this app.\n- load()\n+ DefaultNewArchitectureEntryPoint.releaseLevel = try {\n+ ReleaseLevel.valueOf(BuildConfig.REACT_NATIVE_RELEASE_LEVEL.uppercase())\n+ } catch (e: IllegalArgumentException) {\n+ ReleaseLevel.STABLE\n }\n+ loadReactNative(this)\n ApplicationLifecycleDispatcher.onApplicationCreate(this)\n }\n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..31df827b18b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..ef243aab6c0\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..e9d5474519c\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..d61da15d241\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..4aeed11d00b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml\nnew file mode 100644\nindex 00000000000..883b2a080f3\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml\n@@ -0,0 +1,6 @@\n+\n+ \n+ \n+ \n+ \n+\n\\ No newline at end of file\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..a2f5908281d\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..1b523998081\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..ff10afd6e18\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..115a4c768a2\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..dcd3cd80833\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..459ca609d3a\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..8ca12fe024b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..8e19b410a1b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..b824ebdd48d\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..4c19a13c239\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\nindex 90bcc87b8e8..26f3404be26 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n@@ -1,15 +1,8 @@\n \n- \n- \n \n \ndiff --git a/templates/expo-template-bare-minimum/android/build.gradle b/templates/expo-template-bare-minimum/android/build.gradle\nindex 932bf7b34ba..0554dd156c1 100644\n--- a/templates/expo-template-bare-minimum/android/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/build.gradle\n@@ -1,41 +1,24 @@\n // Top-level build file where you can add configuration options common to all sub-projects/modules.\n \n buildscript {\n- ext {\n- buildToolsVersion = findProperty('android.buildToolsVersion') ?: '34.0.0'\n- minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '23')\n- compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '34')\n- targetSdkVersion = Integer.parseInt(findProperty('android.targetSdkVersion') ?: '34')\n- kotlinVersion = findProperty('android.kotlinVersion') ?: '1.9.23'\n-\n- ndkVersion = \"26.1.10909125\"\n- }\n- repositories {\n- google()\n- mavenCentral()\n- }\n- dependencies {\n- classpath('com.android.tools.build:gradle')\n- classpath('com.facebook.react:react-native-gradle-plugin')\n- classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')\n- }\n+ repositories {\n+ google()\n+ mavenCentral()\n+ }\n+ dependencies {\n+ classpath('com.android.tools.build:gradle')\n+ classpath('com.facebook.react:react-native-gradle-plugin')\n+ classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')\n+ }\n }\n \n-apply plugin: \"com.facebook.react.rootproject\"\n-\n allprojects {\n- repositories {\n- maven {\n- // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n- url(new File(['node', '--print', \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim(), '../android'))\n- }\n- maven {\n- // Android JSC is installed from npm\n- url(new File(['node', '--print', \"require.resolve('jsc-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), '../dist'))\n- }\n-\n- google()\n- mavenCentral()\n- maven { url 'https://www.jitpack.io' }\n- }\n+ repositories {\n+ google()\n+ mavenCentral()\n+ maven { url 'https://www.jitpack.io' }\n+ }\n }\n+\n+apply plugin: \"expo-root-project\"\n+apply plugin: \"com.facebook.react.rootproject\"\ndiff --git a/templates/expo-template-bare-minimum/android/gradle.properties b/templates/expo-template-bare-minimum/android/gradle.properties\nindex 40220def8da..97271b9456f 100644\n--- a/templates/expo-template-bare-minimum/android/gradle.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle.properties\n@@ -15,16 +15,13 @@ org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m\n # When configured, Gradle will run in incubating parallel mode.\n # This option should only be used with decoupled projects. More details, visit\n # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n-# org.gradle.parallel=true\n+org.gradle.parallel=true\n \n # AndroidX package structure to make it clearer which packages are bundled with the\n # Android operating system, and which are packaged with your app's APK\n # https://developer.android.com/topic/libraries/support-library/androidx-rn\n android.useAndroidX=true\n \n-# Automatically convert third-party libraries to use AndroidX\n-android.enableJetifier=true\n-\n # Enable AAPT2 PNG crunching\n android.enablePngCrunchInReleaseBuilds=true\n \n@@ -38,12 +35,17 @@ reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64\n # your application. You should enable this flag either if you want\n # to write custom TurboModules/Fabric components OR use libraries that\n # are providing them.\n-newArchEnabled=false\n+newArchEnabled=true\n \n # Use this property to enable or disable the Hermes JS engine.\n # If set to false, you will be using JSC instead.\n hermesEnabled=true\n \n+# Use this property to enable edge-to-edge display support.\n+# This allows your app to draw behind system bars for an immersive UI.\n+# Note: Only works with ReactActivity and should not be used with custom Activity.\n+edgeToEdgeEnabled=true\n+\n # Enable GIF support in React Native images (~200 B increase)\n expo.gif.enabled=true\n # Enable webp support in React Native images (~85 KB increase)\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar\nindex e6441136f3d..8bdaf60c75a 100644\nBinary files a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar and b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar differ\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\nindex 6f7a6eb33e8..2a84e188b85 100644\n--- a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n@@ -1,6 +1,6 @@\n distributionBase=GRADLE_USER_HOME\n distributionPath=wrapper/dists\n-distributionUrl=https\\://services.gradle.org/distributions/gradle-8.8-all.zip\n+distributionUrl=https\\://services.gradle.org/distributions/gradle-9.0.0-bin.zip\n networkTimeout=10000\n validateDistributionUrl=true\n zipStoreBase=GRADLE_USER_HOME\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew b/templates/expo-template-bare-minimum/android/gradlew\nindex 1aa94a42690..bbb00327904 100755\n--- a/templates/expo-template-bare-minimum/android/gradlew\n+++ b/templates/expo-template-bare-minimum/android/gradlew\n@@ -1,7 +1,7 @@\n #!/bin/sh\n \n #\n-# Copyright © 2015-2021 the original authors.\n+# Copyright © 2015 the original authors.\n #\n # Licensed under the Apache License, Version 2.0 (the \"License\");\n # you may not use this file except in compliance with the License.\n@@ -15,6 +15,8 @@\n # See the License for the specific language governing permissions and\n # limitations under the License.\n #\n+# SPDX-License-Identifier: Apache-2.0\n+#\n \n ##############################################################################\n #\n@@ -55,7 +57,7 @@\n # Darwin, MinGW, and NonStop.\n #\n # (3) This script is generated from the Groovy template\n-# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt\n+# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt\n # within the Gradle project.\n #\n # You can find Gradle at https://github.com/gradle/gradle/.\n@@ -84,7 +86,7 @@ done\n # shellcheck disable=SC2034\n APP_BASE_NAME=${0##*/}\n # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)\n-APP_HOME=$( cd \"${APP_HOME:-./}\" > /dev/null && pwd -P ) || exit\n+APP_HOME=$( cd -P \"${APP_HOME:-./}\" > /dev/null && printf '%s\\n' \"$PWD\" ) || exit\n \n # Use the maximum available, or set MAX_FD != -1 to use that value.\n MAX_FD=maximum\n@@ -112,7 +114,7 @@ case \"$( uname )\" in #(\n NONSTOP* ) nonstop=true ;;\n esac\n \n-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n+CLASSPATH=\"\\\\\\\"\\\\\\\"\"\n \n \n # Determine the Java command to use to start the JVM.\n@@ -211,7 +213,7 @@ DEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n set -- \\\n \"-Dorg.gradle.appname=$APP_BASE_NAME\" \\\n -classpath \"$CLASSPATH\" \\\n- org.gradle.wrapper.GradleWrapperMain \\\n+ -jar \"$APP_HOME/gradle/wrapper/gradle-wrapper.jar\" \\\n \"$@\"\n \n # Stop when \"xargs\" is not available.\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew.bat b/templates/expo-template-bare-minimum/android/gradlew.bat\nindex 7101f8e4676..5eed7ee8452 100644\n--- a/templates/expo-template-bare-minimum/android/gradlew.bat\n+++ b/templates/expo-template-bare-minimum/android/gradlew.bat\n@@ -13,6 +13,8 @@\n @rem See the License for the specific language governing permissions and\r\n @rem limitations under the License.\r\n @rem\r\n+@rem SPDX-License-Identifier: Apache-2.0\r\n+@rem\r\n \r\n @if \"%DEBUG%\"==\"\" @echo off\r\n @rem ##########################################################################\r\n@@ -68,11 +70,11 @@ goto fail\n :execute\r\n @rem Setup the command line\r\n \r\n-set CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\r\n+set CLASSPATH=\r\n \r\n \r\n @rem Execute Gradle\r\n-\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\r\n+\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" -jar \"%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\" %*\r\n \r\n :end\r\n @rem End local scope for the variables with windows NT shell\r\ndiff --git a/templates/expo-template-bare-minimum/android/settings.gradle b/templates/expo-template-bare-minimum/android/settings.gradle\nindex 80b1bc3267b..7fe91512213 100644\n--- a/templates/expo-template-bare-minimum/android/settings.gradle\n+++ b/templates/expo-template-bare-minimum/android/settings.gradle\n@@ -1,66 +1,39 @@\n pluginManagement {\n- def version = providers.exec {\n- commandLine(\"node\", \"-e\", \"console.log(require('react-native/package.json').version);\")\n- }.standardOutput.asText.get().trim()\n- def (_, reactNativeMinor, reactNativePatch) = version.split(\"-\")[0].tokenize('.').collect { it.toInteger() }\n-\n- includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().toString())\n- if(reactNativeMinor == 74 && reactNativePatch <= 3){\n- includeBuild(\"react-settings-plugin\")\n- }\n+ def reactNativeGradlePlugin = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\")\n+ }.standardOutput.asText.get().trim()\n+ ).getParentFile().absolutePath\n+ includeBuild(reactNativeGradlePlugin)\n+ \n+ def expoPluginsPath = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('expo-modules-autolinking/package.json', { paths: [require.resolve('expo/package.json')] })\")\n+ }.standardOutput.asText.get().trim(),\n+ \"../android/expo-gradle-plugin\"\n+ ).absolutePath\n+ includeBuild(expoPluginsPath)\n }\n \n-plugins { id(\"com.facebook.react.settings\") }\n-\n-def getRNMinorVersion() {\n- def version = providers.exec {\n- commandLine(\"node\", \"-e\", \"console.log(require('react-native/package.json').version);\")\n- }.standardOutput.asText.get().trim()\n-\n- def coreVersion = version.split(\"-\")[0]\n- def (major, minor, patch) = coreVersion.tokenize('.').collect { it.toInteger() }\n-\n- return minor\n+plugins {\n+ id(\"com.facebook.react.settings\")\n+ id(\"expo-autolinking-settings\")\n }\n \n-if (getRNMinorVersion() >= 75) {\n- extensions.configure(com.facebook.react.ReactSettingsExtension) { ex ->\n- if (System.getenv('EXPO_UNSTABLE_CORE_AUTOLINKING') == '1') {\n- println('\\u001B[32mUsing expo-modules-autolinking as core autolinking source\\u001B[0m')\n- def command = [\n- 'node',\n- '--no-warnings',\n- '--eval',\n- 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n- 'react-native-config',\n- '--json',\n- '--platform',\n- 'android'\n- ].toList()\n- ex.autolinkLibrariesFromCommand(command)\n- } else {\n- ex.autolinkLibrariesFromCommand()\n- }\n+extensions.configure(com.facebook.react.ReactSettingsExtension) { ex ->\n+ if (System.getenv('EXPO_USE_COMMUNITY_AUTOLINKING') == '1') {\n+ ex.autolinkLibrariesFromCommand()\n+ } else {\n+ ex.autolinkLibrariesFromCommand(expoAutolinking.rnConfigCommand)\n }\n }\n+expoAutolinking.useExpoModules()\n \n rootProject.name = 'HelloWorld'\n \n-dependencyResolutionManagement {\n- versionCatalogs {\n- reactAndroidLibs {\n- from(files(new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim(), \"../gradle/libs.versions.toml\")))\n- }\n- }\n-}\n-\n-apply from: new File([\"node\", \"--print\", \"require.resolve('expo/package.json')\"].execute(null, rootDir).text.trim(), \"../scripts/autolinking.gradle\");\n-useExpoModules()\n-\n-if (getRNMinorVersion() < 75) {\n- apply from: new File([\"node\", \"--print\", \"require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), \"../native_modules.gradle\");\n- applyNativeModulesSettingsGradle(settings)\n-}\n+expoAutolinking.useExpoVersionCatalog()\n \n include ':app'\n-includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile())\n+includeBuild(expoAutolinking.reactNativeGradlePlugin)\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\nindex f945940c256..8a390c764af 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n@@ -3,33 +3,25 @@\n \tarchiveVersion = 1;\n \tclasses = {\n \t};\n-\tobjectVersion = 46;\n+\tobjectVersion = 54;\n \tobjects = {\n \n /* Begin PBXBuildFile section */\n-\t\t13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };\n \t\t13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };\n-\t\t13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };\n \t\t3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; };\n-\t\t96905EF65AED1B983A6B3ABC /* libPods-HelloWorld.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */; };\n-\t\tB18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; };\n \t\tBB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; };\n+\t\tF11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F11748412D0307B40044C1D9 /* AppDelegate.swift */; };\n /* End PBXBuildFile section */\n \n /* Begin PBXFileReference section */\n \t\t13B07F961A680F5B00A75B9A /* HelloWorld.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloWorld.app; sourceTree = BUILT_PRODUCTS_DIR; };\n-\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = HelloWorld/AppDelegate.h; sourceTree = \"\"; };\n-\t\t13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = HelloWorld/AppDelegate.mm; sourceTree = \"\"; };\n \t\t13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = HelloWorld/Images.xcassets; sourceTree = \"\"; };\n \t\t13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = HelloWorld/Info.plist; sourceTree = \"\"; };\n-\t\t13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = HelloWorld/main.m; sourceTree = \"\"; };\n-\t\t58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-HelloWorld.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n-\t\t6C2E3173556A471DD304B334 /* 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 = \"\"; };\n-\t\t7A4D352CD337FB3A3BF06240 /* 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 = \"\"; };\n \t\tAA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = HelloWorld/SplashScreen.storyboard; sourceTree = \"\"; };\n \t\tBB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = \"\"; };\n \t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };\n-\t\tFAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = \"Pods/Target Support Files/Pods-HelloWorld/ExpoModulesProvider.swift\"; sourceTree = \"\"; };\n+\t\tF11748412D0307B40044C1D9 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = HelloWorld/AppDelegate.swift; sourceTree = \"\"; };\n+\t\tF11748442D0722820044C1D9 /* HelloWorld-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = \"HelloWorld-Bridging-Header.h\"; path = \"HelloWorld/HelloWorld-Bridging-Header.h\"; sourceTree = \"\"; };\n /* End PBXFileReference section */\n \n /* Begin PBXFrameworksBuildPhase section */\n@@ -37,7 +29,6 @@\n \t\t\tisa = PBXFrameworksBuildPhase;\n \t\t\tbuildActionMask = 2147483647;\n \t\t\tfiles = (\n-\t\t\t\t96905EF65AED1B983A6B3ABC /* libPods-HelloWorld.a in Frameworks */,\n \t\t\t);\n \t\t\trunOnlyForDeploymentPostprocessing = 0;\n \t\t};\n@@ -47,12 +38,11 @@\n \t\t13B07FAE1A68108700A75B9A /* HelloWorld */ = {\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n+\t\t\t\tF11748412D0307B40044C1D9 /* AppDelegate.swift */,\n+\t\t\t\tF11748442D0722820044C1D9 /* HelloWorld-Bridging-Header.h */,\n \t\t\t\tBB2F792B24A3F905000567C9 /* Supporting */,\n-\t\t\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */,\n-\t\t\t\t13B07FB01A68108700A75B9A /* AppDelegate.mm */,\n \t\t\t\t13B07FB51A68108700A75B9A /* Images.xcassets */,\n \t\t\t\t13B07FB61A68108700A75B9A /* Info.plist */,\n-\t\t\t\t13B07FB71A68108700A75B9A /* main.m */,\n \t\t\t\tAA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */,\n \t\t\t);\n \t\t\tname = HelloWorld;\n@@ -62,7 +52,6 @@\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n \t\t\t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */,\n-\t\t\t\t58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */,\n \t\t\t);\n \t\t\tname = Frameworks;\n \t\t\tsourceTree = \"\";\n@@ -81,8 +70,6 @@\n \t\t\t\t832341AE1AAA6A7D00B99B32 /* Libraries */,\n \t\t\t\t83CBBA001A601CBA00E9B192 /* Products */,\n \t\t\t\t2D16E6871FA4F8E400B85C8A /* Frameworks */,\n-\t\t\t\tD65327D7A22EEC0BE12398D9 /* Pods */,\n-\t\t\t\tD7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */,\n \t\t\t);\n \t\t\tindentWidth = 2;\n \t\t\tsourceTree = \"\";\n@@ -97,14 +84,6 @@\n \t\t\tname = Products;\n \t\t\tsourceTree = \"\";\n \t\t};\n-\t\t92DBD88DE9BF7D494EA9DA96 /* HelloWorld */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\tFAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */,\n-\t\t\t);\n-\t\t\tname = HelloWorld;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n \t\tBB2F792B24A3F905000567C9 /* Supporting */ = {\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n@@ -114,23 +93,6 @@\n \t\t\tpath = HelloWorld/Supporting;\n \t\t\tsourceTree = \"\";\n \t\t};\n-\t\tD65327D7A22EEC0BE12398D9 /* Pods */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\t6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */,\n-\t\t\t\t7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */,\n-\t\t\t);\n-\t\t\tpath = Pods;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n-\t\tD7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\t92DBD88DE9BF7D494EA9DA96 /* HelloWorld */,\n-\t\t\t);\n-\t\t\tname = ExpoModulesProviders;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n /* End PBXGroup section */\n \n /* Begin PBXNativeTarget section */\n@@ -206,6 +168,8 @@\n \t\t\tfiles = (\n \t\t\t);\n \t\t\tinputPaths = (\n+\t\t\t\t\"$(SRCROOT)/.xcode.env\",\n+\t\t\t\t\"$(SRCROOT)/.xcode.env.local\",\n \t\t\t);\n \t\t\tname = \"Bundle React Native code and images\";\n \t\t\toutputPaths = (\n@@ -265,9 +229,7 @@\n \t\t\tisa = PBXSourcesBuildPhase;\n \t\t\tbuildActionMask = 2147483647;\n \t\t\tfiles = (\n-\t\t\t\t13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,\n-\t\t\t\t13B07FC11A68108700A75B9A /* main.m in Sources */,\n-\t\t\t\tB18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */,\n+\t\t\t\tF11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */,\n \t\t\t);\n \t\t\trunOnlyForDeploymentPostprocessing = 0;\n \t\t};\n@@ -276,7 +238,6 @@\n /* Begin XCBuildConfiguration section */\n \t\t13B07F941A680F5B00A75B9A /* Debug */ = {\n \t\t\tisa = XCBuildConfiguration;\n-\t\t\tbaseConfigurationReference = 6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */;\n \t\t\tbuildSettings = {\n \t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n@@ -287,8 +248,11 @@\n \t\t\t\t\t\"FB_SONARKIT_ENABLED=1\",\n \t\t\t\t);\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t\t\"@executable_path/Frameworks\",\n+\t\t\t\t);\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -297,6 +261,7 @@\n \t\t\t\t);\n \t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = org.name.HelloWorld;\n \t\t\t\tPRODUCT_NAME = HelloWorld;\n+\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"HelloWorld/HelloWorld-Bridging-Header.h\";\n \t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n \t\t\t\tSWIFT_VERSION = 5.0;\n \t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n@@ -305,14 +270,16 @@\n \t\t};\n \t\t13B07F951A680F5B00A75B9A /* Release */ = {\n \t\t\tisa = XCBuildConfiguration;\n-\t\t\tbaseConfigurationReference = 7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */;\n \t\t\tbuildSettings = {\n \t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n \t\t\t\tCURRENT_PROJECT_VERSION = 1;\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t\t\"@executable_path/Frameworks\",\n+\t\t\t\t);\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -321,6 +288,7 @@\n \t\t\t\t);\n \t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = org.name.HelloWorld;\n \t\t\t\tPRODUCT_NAME = HelloWorld;\n+\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"HelloWorld/HelloWorld-Bridging-Header.h\";\n \t\t\t\tSWIFT_VERSION = 5.0;\n \t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n \t\t\t};\n@@ -373,8 +341,11 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t/usr/lib/swift,\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t);\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n \t\t\t\tONLY_ACTIVE_ARCH = YES;\n@@ -422,8 +393,11 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t/usr/lib/swift,\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t);\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n \t\t\t\tSDKROOT = iphoneos;\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\nnew file mode 100644\nindex 00000000000..9670a1ff07e\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\n@@ -0,0 +1,69 @@\n+internal import Expo\n+import React\n+import ReactAppDependencyProvider\n+\n+@main\n+class AppDelegate: ExpoAppDelegate {\n+ var window: UIWindow?\n+\n+ var reactNativeDelegate: ExpoReactNativeFactoryDelegate?\n+ var reactNativeFactory: RCTReactNativeFactory?\n+\n+ public override func application(\n+ _ application: UIApplication,\n+ didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil\n+ ) -> Bool {\n+ let delegate = ReactNativeDelegate()\n+ let factory = ExpoReactNativeFactory(delegate: delegate)\n+ delegate.dependencyProvider = RCTAppDependencyProvider()\n+\n+ reactNativeDelegate = delegate\n+ reactNativeFactory = factory\n+\n+#if os(iOS) || os(tvOS)\n+ window = UIWindow(frame: UIScreen.main.bounds)\n+ factory.startReactNative(\n+ withModuleName: \"main\",\n+ in: window,\n+ launchOptions: launchOptions)\n+#endif\n+\n+ return super.application(application, didFinishLaunchingWithOptions: launchOptions)\n+ }\n+\n+ // Linking API\n+ public override func application(\n+ _ app: UIApplication,\n+ open url: URL,\n+ options: [UIApplication.OpenURLOptionsKey: Any] = [:]\n+ ) -> Bool {\n+ return super.application(app, open: url, options: options) || RCTLinkingManager.application(app, open: url, options: options)\n+ }\n+\n+ // Universal Links\n+ public override func application(\n+ _ application: UIApplication,\n+ continue userActivity: NSUserActivity,\n+ restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void\n+ ) -> Bool {\n+ let result = RCTLinkingManager.application(application, continue: userActivity, restorationHandler: restorationHandler)\n+ return super.application(application, continue: userActivity, restorationHandler: restorationHandler) || result\n+ }\n+}\n+\n+class ReactNativeDelegate: ExpoReactNativeFactoryDelegate {\n+ // Extension point for config-plugins\n+\n+ override func sourceURL(for bridge: RCTBridge) -> URL? {\n+ // needed to return the correct URL for expo-dev-client.\n+ bridge.bundleURL ?? bundleURL()\n+ }\n+\n+ override func bundleURL() -> URL? {\n+#if DEBUG\n+ return RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: \".expo/.virtual-metro-entry\")\n+#else\n+ return Bundle.main.url(forResource: \"main\", withExtension: \"jsbundle\")\n+#endif\n+ }\n+}\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h b/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h\nnew file mode 100644\nindex 00000000000..8361941afc2\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h\n@@ -0,0 +1,3 @@\n+//\n+// Use this file to import your target's public headers that you would like to expose to Swift.\n+//\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist b/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist\nindex 53d78e89033..596dc7ce6b5 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist\n@@ -24,6 +24,8 @@\n \t1\n \tLSRequiresIPhoneOS\n \t\n+\tLSMinimumSystemVersion\n+\t12.0\n \tNSAppTransportSecurity\n \t\n \t\tNSAllowsArbitraryLoads\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\nindex 24eec3df5cb..58d21796e1d 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n@@ -1,91 +1,47 @@\n \n-\n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n+\n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n \ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex 57c1dd38343..03484edf156 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -4,39 +4,42 @@ require File.join(File.dirname(`node --print \"require.resolve('react-native/pack\n require 'json'\n podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}\n \n-ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0'\n-ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+def ccache_enabled?(podfile_properties)\n+ # Environment variable takes precedence\n+ return ENV['USE_CCACHE'] == '1' if ENV['USE_CCACHE']\n \n-use_autolinking_method_symbol = ('use' + '_native' + '_modules!').to_sym\n-origin_autolinking_method = self.method(use_autolinking_method_symbol)\n-self.define_singleton_method(use_autolinking_method_symbol) do |*args|\n- if ENV['EXPO_UNSTABLE_CORE_AUTOLINKING'] == '1'\n- Pod::UI.puts('Using expo-modules-autolinking as core autolinking source'.green)\n+ # Fall back to Podfile properties\n+ podfile_properties['apple.ccacheEnabled'] == 'true'\n+end\n+\n+ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+ENV['RCT_USE_RN_DEP'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true'\n+ENV['RCT_USE_PREBUILT_RNCORE'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true'\n+ENV['RCT_HERMES_V1_ENABLED'] ||= '1' if podfile_properties['expo.useHermesV1'] == 'true'\n+platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'\n+\n+prepare_react_native_project!\n+\n+target 'HelloWorld' do\n+ use_expo_modules!\n+\n+ if ENV['EXPO_USE_COMMUNITY_AUTOLINKING'] == '1'\n+ config_command = ['node', '-e', \"process.argv=['', '', 'config'];require('@react-native-community/cli').run()\"];\n+ else\n config_command = [\n 'node',\n '--no-warnings',\n '--eval',\n- 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n+ 'require(\\'expo/bin/autolinking\\')',\n+ 'expo-modules-autolinking',\n 'react-native-config',\n '--json',\n '--platform',\n 'ios'\n ]\n- origin_autolinking_method.call(config_command)\n- else\n- origin_autolinking_method.call()\n end\n-end\n-\n-platform :ios, podfile_properties['ios.deploymentTarget'] || '13.4'\n-install! 'cocoapods',\n- :deterministic_uuids => false\n \n-prepare_react_native_project!\n-\n-target 'HelloWorld' do\n- use_expo_modules!\n- config = use_native_modules!\n+ config = use_native_modules!(config_command)\n \n use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks']\n use_frameworks! :linkage => ENV['USE_FRAMEWORKS'].to_sym if ENV['USE_FRAMEWORKS']\n@@ -54,26 +57,7 @@ target 'HelloWorld' do\n installer,\n config[:reactNativePath],\n :mac_catalyst_enabled => false,\n- :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true',\n+ :ccache_enabled => ccache_enabled?(podfile_properties),\n )\n-\n- # This is necessary for Xcode 14, because it signs resource bundles by default\n- # when building for devices.\n- installer.target_installation_results.pod_target_installation_results\n- .each do |pod_name, target_installation_result|\n- target_installation_result.resource_bundle_targets.each do |resource_bundle_target|\n- resource_bundle_target.build_configurations.each do |config|\n- config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'\n- end\n- end\n- end\n- end\n-\n- post_integrate do |installer|\n- begin\n- expo_patch_react_imports!(installer)\n- rescue => e\n- Pod::UI.warn e\n- end\n end\n end\ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex 563853071f0..253f825cea9 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -1,7 +1,8 @@\n {\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n- \"version\": \"51.0.56\",\n+ \"license\": \"0BSD\",\n+ \"version\": \"55.0.37\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -10,12 +11,9 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~51.0.28\",\n- \"expo-status-bar\": \"~1.12.1\",\n- \"react\": \"18.2.0\",\n- \"react-native\": \"0.74.5\"\n- },\n- \"devDependencies\": {\n- \"@babel/core\": \"^7.20.0\"\n+ \"expo\": \"~55.0.25\",\n+ \"expo-status-bar\": \"~55.0.6\",\n+ \"react\": \"19.2.0\",\n+ \"react-native\": \"0.83.6\"\n }\n }\n","52..55":"diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle\nindex 84879d83acd..fc185e53bc3 100644\n--- a/templates/expo-template-bare-minimum/android/app/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/app/build.gradle\n@@ -11,9 +11,10 @@ def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath()\n react {\n entryFile = file([\"node\", \"-e\", \"require('expo/scripts/resolveAppEntry')\", projectRoot, \"android\", \"absolute\"].execute(null, rootDir).text.trim())\n reactNativeDir = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n- hermesCommand = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/sdks/hermesc/%OS-BIN%/hermesc\"\n+ hermesCommand = new File([\"node\", \"--print\", \"require.resolve('hermes-compiler/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/hermesc/%OS-BIN%/hermesc\"\n codegenDir = new File([\"node\", \"--print\", \"require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n \n+ enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean()\n // Use Expo CLI to bundle the app, this ensures the Metro config\n // works correctly with Expo projects.\n cliFile = new File([\"node\", \"--print\", \"require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })\"].execute(null, rootDir).text.trim())\n@@ -63,9 +64,9 @@ react {\n }\n \n /**\n- * Set this to true to Run Proguard on Release builds to minify the Java bytecode.\n+ * Set this to true in release builds to optimize the app using [R8](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization).\n */\n-def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInReleaseBuilds') ?: false).toBoolean()\n+def enableMinifyInReleaseBuilds = (findProperty('android.enableMinifyInReleaseBuilds') ?: false).toBoolean()\n \n /**\n * The preferred build flavor of JavaScriptCore (JSC)\n@@ -78,7 +79,7 @@ def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInRelea\n * give correct results when using with locales other than en-US. Note that\n * this variant is about 6MiB larger per architecture than default.\n */\n-def jscFlavor = 'org.webkit:android-jsc:+'\n+def jscFlavor = 'io.github.react-native-community:jsc-android:2026004.+'\n \n android {\n ndkVersion rootProject.ext.ndkVersion\n@@ -93,6 +94,8 @@ android {\n targetSdkVersion rootProject.ext.targetSdkVersion\n versionCode 1\n versionName \"1.0\"\n+\n+ buildConfigField \"String\", \"REACT_NATIVE_RELEASE_LEVEL\", \"\\\"${findProperty('reactNativeReleaseLevel') ?: 'stable'}\\\"\"\n }\n signingConfigs {\n debug {\n@@ -110,15 +113,18 @@ android {\n // Caution! In production, you need to generate your own keystore file.\n // see https://reactnative.dev/docs/signed-apk-android.\n signingConfig signingConfigs.debug\n- shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false)\n- minifyEnabled enableProguardInReleaseBuilds\n+ def enableShrinkResources = findProperty('android.enableShrinkResourcesInReleaseBuilds') ?: 'false'\n+ shrinkResources enableShrinkResources.toBoolean()\n+ minifyEnabled enableMinifyInReleaseBuilds\n proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n- crunchPngs (findProperty('android.enablePngCrunchInReleaseBuilds')?.toBoolean() ?: true)\n+ def enablePngCrunchInRelease = findProperty('android.enablePngCrunchInReleaseBuilds') ?: 'true'\n+ crunchPngs enablePngCrunchInRelease.toBoolean()\n }\n }\n packagingOptions {\n jniLibs {\n- useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false)\n+ def enableLegacyPackaging = findProperty('expo.useLegacyPackaging') ?: 'false'\n+ useLegacyPackaging enableLegacyPackaging.toBoolean()\n }\n }\n androidResources {\n@@ -156,15 +162,15 @@ dependencies {\n \n if (isGifEnabled) {\n // For animated gif support\n- implementation(\"com.facebook.fresco:animated-gif:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-gif:${expoLibs.versions.fresco.get()}\")\n }\n \n if (isWebpEnabled) {\n // For webp support\n- implementation(\"com.facebook.fresco:webpsupport:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:webpsupport:${expoLibs.versions.fresco.get()}\")\n if (isWebpAnimatedEnabled) {\n // Animated webp support\n- implementation(\"com.facebook.fresco:animated-webp:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-webp:${expoLibs.versions.fresco.get()}\")\n }\n }\n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\nnew file mode 100644\nindex 00000000000..3ec2507bab7\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\n@@ -0,0 +1,7 @@\n+\n+\n+ \n+\n+ \n+\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\nindex 150248b6b3c..14bdba124ab 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n@@ -1,12 +1,13 @@\n-\n+\n \n \n \n \n \n \n- \n- \n+ \n+ \n \n \n \n@@ -19,7 +20,7 @@\n \n \n \n- \n+ \n \n \n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\nindex e61349d1301..cbb5ddb85d0 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n@@ -5,48 +5,36 @@ import android.content.res.Configuration\n \n import com.facebook.react.PackageList\n import com.facebook.react.ReactApplication\n-import com.facebook.react.ReactNativeHost\n+import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative\n import com.facebook.react.ReactPackage\n import com.facebook.react.ReactHost\n-import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load\n-import com.facebook.react.defaults.DefaultReactNativeHost\n-import com.facebook.react.soloader.OpenSourceMergedSoMapping\n-import com.facebook.soloader.SoLoader\n+import com.facebook.react.common.ReleaseLevel\n+import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint\n \n import expo.modules.ApplicationLifecycleDispatcher\n-import expo.modules.ReactNativeHostWrapper\n+import expo.modules.ExpoReactHostFactory\n \n class MainApplication : Application(), ReactApplication {\n \n- override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper(\n- this,\n- object : DefaultReactNativeHost(this) {\n- override fun getPackages(): List {\n- val packages = PackageList(this).packages\n- // Packages that cannot be autolinked yet can be added manually here, for example:\n- // packages.add(new MyReactNativePackage());\n- return packages\n- }\n-\n- override fun getJSMainModuleName(): String = \".expo/.virtual-metro-entry\"\n-\n- override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG\n-\n- override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED\n- override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED\n- }\n- )\n-\n- override val reactHost: ReactHost\n- get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost)\n+ override val reactHost: ReactHost by lazy {\n+ ExpoReactHostFactory.getDefaultReactHost(\n+ context = applicationContext,\n+ packageList =\n+ PackageList(this).packages.apply {\n+ // Packages that cannot be autolinked yet can be added manually here, for example:\n+ // add(MyReactNativePackage())\n+ }\n+ )\n+ }\n \n override fun onCreate() {\n super.onCreate()\n- SoLoader.init(this, OpenSourceMergedSoMapping)\n- if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {\n- // If you opted-in for the New Architecture, we load the native entry point for this app.\n- load()\n+ DefaultNewArchitectureEntryPoint.releaseLevel = try {\n+ ReleaseLevel.valueOf(BuildConfig.REACT_NATIVE_RELEASE_LEVEL.uppercase())\n+ } catch (e: IllegalArgumentException) {\n+ ReleaseLevel.STABLE\n }\n+ loadReactNative(this)\n ApplicationLifecycleDispatcher.onApplicationCreate(this)\n }\n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\nindex 51fbc1e5a72..26f3404be26 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n@@ -1,14 +1,7 @@\n \n- \n- \n \ndiff --git a/templates/expo-template-bare-minimum/android/build.gradle b/templates/expo-template-bare-minimum/android/build.gradle\nindex abbcb8ec8a1..0554dd156c1 100644\n--- a/templates/expo-template-bare-minimum/android/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/build.gradle\n@@ -1,41 +1,24 @@\n // Top-level build file where you can add configuration options common to all sub-projects/modules.\n \n buildscript {\n- ext {\n- buildToolsVersion = findProperty('android.buildToolsVersion') ?: '35.0.0'\n- minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '24')\n- compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '35')\n- targetSdkVersion = Integer.parseInt(findProperty('android.targetSdkVersion') ?: '34')\n- kotlinVersion = findProperty('android.kotlinVersion') ?: '1.9.25'\n-\n- ndkVersion = \"26.1.10909125\"\n- }\n- repositories {\n- google()\n- mavenCentral()\n- }\n- dependencies {\n- classpath('com.android.tools.build:gradle')\n- classpath('com.facebook.react:react-native-gradle-plugin')\n- classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')\n- }\n+ repositories {\n+ google()\n+ mavenCentral()\n+ }\n+ dependencies {\n+ classpath('com.android.tools.build:gradle')\n+ classpath('com.facebook.react:react-native-gradle-plugin')\n+ classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')\n+ }\n }\n \n-apply plugin: \"com.facebook.react.rootproject\"\n-\n allprojects {\n- repositories {\n- maven {\n- // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n- url(new File(['node', '--print', \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim(), '../android'))\n- }\n- maven {\n- // Android JSC is installed from npm\n- url(new File(['node', '--print', \"require.resolve('jsc-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), '../dist'))\n- }\n-\n- google()\n- mavenCentral()\n- maven { url 'https://www.jitpack.io' }\n- }\n+ repositories {\n+ google()\n+ mavenCentral()\n+ maven { url 'https://www.jitpack.io' }\n+ }\n }\n+\n+apply plugin: \"expo-root-project\"\n+apply plugin: \"com.facebook.react.rootproject\"\ndiff --git a/templates/expo-template-bare-minimum/android/gradle.properties b/templates/expo-template-bare-minimum/android/gradle.properties\nindex de47429c64c..97271b9456f 100644\n--- a/templates/expo-template-bare-minimum/android/gradle.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle.properties\n@@ -15,7 +15,7 @@ org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m\n # When configured, Gradle will run in incubating parallel mode.\n # This option should only be used with decoupled projects. More details, visit\n # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n-# org.gradle.parallel=true\n+org.gradle.parallel=true\n \n # AndroidX package structure to make it clearer which packages are bundled with the\n # Android operating system, and which are packaged with your app's APK\n@@ -35,12 +35,17 @@ reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64\n # your application. You should enable this flag either if you want\n # to write custom TurboModules/Fabric components OR use libraries that\n # are providing them.\n-newArchEnabled=false\n+newArchEnabled=true\n \n # Use this property to enable or disable the Hermes JS engine.\n # If set to false, you will be using JSC instead.\n hermesEnabled=true\n \n+# Use this property to enable edge-to-edge display support.\n+# This allows your app to draw behind system bars for an immersive UI.\n+# Note: Only works with ReactActivity and should not be used with custom Activity.\n+edgeToEdgeEnabled=true\n+\n # Enable GIF support in React Native images (~200 B increase)\n expo.gif.enabled=true\n # Enable webp support in React Native images (~85 KB increase)\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar\nindex a4b76b9530d..8bdaf60c75a 100644\nBinary files a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar and b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar differ\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\nindex 79eb9d003fe..2a84e188b85 100644\n--- a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n@@ -1,6 +1,6 @@\n distributionBase=GRADLE_USER_HOME\n distributionPath=wrapper/dists\n-distributionUrl=https\\://services.gradle.org/distributions/gradle-8.10.2-all.zip\n+distributionUrl=https\\://services.gradle.org/distributions/gradle-9.0.0-bin.zip\n networkTimeout=10000\n validateDistributionUrl=true\n zipStoreBase=GRADLE_USER_HOME\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew b/templates/expo-template-bare-minimum/android/gradlew\nindex f5feea6d6b1..bbb00327904 100755\n--- a/templates/expo-template-bare-minimum/android/gradlew\n+++ b/templates/expo-template-bare-minimum/android/gradlew\n@@ -1,7 +1,7 @@\n #!/bin/sh\n \n #\n-# Copyright © 2015-2021 the original authors.\n+# Copyright © 2015 the original authors.\n #\n # Licensed under the Apache License, Version 2.0 (the \"License\");\n # you may not use this file except in compliance with the License.\n@@ -86,8 +86,7 @@ done\n # shellcheck disable=SC2034\n APP_BASE_NAME=${0##*/}\n # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)\n-APP_HOME=$( cd -P \"${APP_HOME:-./}\" > /dev/null && printf '%s\n-' \"$PWD\" ) || exit\n+APP_HOME=$( cd -P \"${APP_HOME:-./}\" > /dev/null && printf '%s\\n' \"$PWD\" ) || exit\n \n # Use the maximum available, or set MAX_FD != -1 to use that value.\n MAX_FD=maximum\n@@ -115,7 +114,7 @@ case \"$( uname )\" in #(\n NONSTOP* ) nonstop=true ;;\n esac\n \n-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n+CLASSPATH=\"\\\\\\\"\\\\\\\"\"\n \n \n # Determine the Java command to use to start the JVM.\n@@ -214,7 +213,7 @@ DEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n set -- \\\n \"-Dorg.gradle.appname=$APP_BASE_NAME\" \\\n -classpath \"$CLASSPATH\" \\\n- org.gradle.wrapper.GradleWrapperMain \\\n+ -jar \"$APP_HOME/gradle/wrapper/gradle-wrapper.jar\" \\\n \"$@\"\n \n # Stop when \"xargs\" is not available.\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew.bat b/templates/expo-template-bare-minimum/android/gradlew.bat\nindex 9b42019c791..5eed7ee8452 100644\n--- a/templates/expo-template-bare-minimum/android/gradlew.bat\n+++ b/templates/expo-template-bare-minimum/android/gradlew.bat\n@@ -70,11 +70,11 @@ goto fail\n :execute\r\n @rem Setup the command line\r\n \r\n-set CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\r\n+set CLASSPATH=\r\n \r\n \r\n @rem Execute Gradle\r\n-\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\r\n+\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" -jar \"%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\" %*\r\n \r\n :end\r\n @rem End local scope for the variables with windows NT shell\r\ndiff --git a/templates/expo-template-bare-minimum/android/settings.gradle b/templates/expo-template-bare-minimum/android/settings.gradle\nindex 39b188e065c..7fe91512213 100644\n--- a/templates/expo-template-bare-minimum/android/settings.gradle\n+++ b/templates/expo-template-bare-minimum/android/settings.gradle\n@@ -1,38 +1,39 @@\n pluginManagement {\n- includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().toString())\n+ def reactNativeGradlePlugin = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\")\n+ }.standardOutput.asText.get().trim()\n+ ).getParentFile().absolutePath\n+ includeBuild(reactNativeGradlePlugin)\n+ \n+ def expoPluginsPath = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('expo-modules-autolinking/package.json', { paths: [require.resolve('expo/package.json')] })\")\n+ }.standardOutput.asText.get().trim(),\n+ \"../android/expo-gradle-plugin\"\n+ ).absolutePath\n+ includeBuild(expoPluginsPath)\n+}\n+\n+plugins {\n+ id(\"com.facebook.react.settings\")\n+ id(\"expo-autolinking-settings\")\n }\n-plugins { id(\"com.facebook.react.settings\") }\n \n extensions.configure(com.facebook.react.ReactSettingsExtension) { ex ->\n if (System.getenv('EXPO_USE_COMMUNITY_AUTOLINKING') == '1') {\n ex.autolinkLibrariesFromCommand()\n } else {\n- def command = [\n- 'node',\n- '--no-warnings',\n- '--eval',\n- 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n- 'react-native-config',\n- '--json',\n- '--platform',\n- 'android'\n- ].toList()\n- ex.autolinkLibrariesFromCommand(command)\n+ ex.autolinkLibrariesFromCommand(expoAutolinking.rnConfigCommand)\n }\n }\n+expoAutolinking.useExpoModules()\n \n rootProject.name = 'HelloWorld'\n \n-dependencyResolutionManagement {\n- versionCatalogs {\n- reactAndroidLibs {\n- from(files(new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim(), \"../gradle/libs.versions.toml\")))\n- }\n- }\n-}\n-\n-apply from: new File([\"node\", \"--print\", \"require.resolve('expo/package.json')\"].execute(null, rootDir).text.trim(), \"../scripts/autolinking.gradle\");\n-useExpoModules()\n+expoAutolinking.useExpoVersionCatalog()\n \n include ':app'\n-includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile())\n+includeBuild(expoAutolinking.reactNativeGradlePlugin)\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\nindex 1ccb9b422d5..8a390c764af 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n@@ -3,33 +3,25 @@\n \tarchiveVersion = 1;\n \tclasses = {\n \t};\n-\tobjectVersion = 46;\n+\tobjectVersion = 54;\n \tobjects = {\n \n /* Begin PBXBuildFile section */\n-\t\t13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };\n \t\t13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };\n-\t\t13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };\n \t\t3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; };\n-\t\t96905EF65AED1B983A6B3ABC /* libPods-HelloWorld.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */; };\n-\t\tB18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; };\n \t\tBB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; };\n+\t\tF11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F11748412D0307B40044C1D9 /* AppDelegate.swift */; };\n /* End PBXBuildFile section */\n \n /* Begin PBXFileReference section */\n \t\t13B07F961A680F5B00A75B9A /* HelloWorld.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloWorld.app; sourceTree = BUILT_PRODUCTS_DIR; };\n-\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = HelloWorld/AppDelegate.h; sourceTree = \"\"; };\n-\t\t13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = HelloWorld/AppDelegate.mm; sourceTree = \"\"; };\n \t\t13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = HelloWorld/Images.xcassets; sourceTree = \"\"; };\n \t\t13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = HelloWorld/Info.plist; sourceTree = \"\"; };\n-\t\t13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = HelloWorld/main.m; sourceTree = \"\"; };\n-\t\t58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-HelloWorld.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n-\t\t6C2E3173556A471DD304B334 /* 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 = \"\"; };\n-\t\t7A4D352CD337FB3A3BF06240 /* 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 = \"\"; };\n \t\tAA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = HelloWorld/SplashScreen.storyboard; sourceTree = \"\"; };\n \t\tBB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = \"\"; };\n \t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };\n-\t\tFAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = \"Pods/Target Support Files/Pods-HelloWorld/ExpoModulesProvider.swift\"; sourceTree = \"\"; };\n+\t\tF11748412D0307B40044C1D9 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = HelloWorld/AppDelegate.swift; sourceTree = \"\"; };\n+\t\tF11748442D0722820044C1D9 /* HelloWorld-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = \"HelloWorld-Bridging-Header.h\"; path = \"HelloWorld/HelloWorld-Bridging-Header.h\"; sourceTree = \"\"; };\n /* End PBXFileReference section */\n \n /* Begin PBXFrameworksBuildPhase section */\n@@ -37,7 +29,6 @@\n \t\t\tisa = PBXFrameworksBuildPhase;\n \t\t\tbuildActionMask = 2147483647;\n \t\t\tfiles = (\n-\t\t\t\t96905EF65AED1B983A6B3ABC /* libPods-HelloWorld.a in Frameworks */,\n \t\t\t);\n \t\t\trunOnlyForDeploymentPostprocessing = 0;\n \t\t};\n@@ -47,12 +38,11 @@\n \t\t13B07FAE1A68108700A75B9A /* HelloWorld */ = {\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n+\t\t\t\tF11748412D0307B40044C1D9 /* AppDelegate.swift */,\n+\t\t\t\tF11748442D0722820044C1D9 /* HelloWorld-Bridging-Header.h */,\n \t\t\t\tBB2F792B24A3F905000567C9 /* Supporting */,\n-\t\t\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */,\n-\t\t\t\t13B07FB01A68108700A75B9A /* AppDelegate.mm */,\n \t\t\t\t13B07FB51A68108700A75B9A /* Images.xcassets */,\n \t\t\t\t13B07FB61A68108700A75B9A /* Info.plist */,\n-\t\t\t\t13B07FB71A68108700A75B9A /* main.m */,\n \t\t\t\tAA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */,\n \t\t\t);\n \t\t\tname = HelloWorld;\n@@ -62,7 +52,6 @@\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n \t\t\t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */,\n-\t\t\t\t58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */,\n \t\t\t);\n \t\t\tname = Frameworks;\n \t\t\tsourceTree = \"\";\n@@ -81,8 +70,6 @@\n \t\t\t\t832341AE1AAA6A7D00B99B32 /* Libraries */,\n \t\t\t\t83CBBA001A601CBA00E9B192 /* Products */,\n \t\t\t\t2D16E6871FA4F8E400B85C8A /* Frameworks */,\n-\t\t\t\tD65327D7A22EEC0BE12398D9 /* Pods */,\n-\t\t\t\tD7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */,\n \t\t\t);\n \t\t\tindentWidth = 2;\n \t\t\tsourceTree = \"\";\n@@ -97,14 +84,6 @@\n \t\t\tname = Products;\n \t\t\tsourceTree = \"\";\n \t\t};\n-\t\t92DBD88DE9BF7D494EA9DA96 /* HelloWorld */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\tFAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */,\n-\t\t\t);\n-\t\t\tname = HelloWorld;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n \t\tBB2F792B24A3F905000567C9 /* Supporting */ = {\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n@@ -114,23 +93,6 @@\n \t\t\tpath = HelloWorld/Supporting;\n \t\t\tsourceTree = \"\";\n \t\t};\n-\t\tD65327D7A22EEC0BE12398D9 /* Pods */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\t6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */,\n-\t\t\t\t7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */,\n-\t\t\t);\n-\t\t\tpath = Pods;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n-\t\tD7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\t92DBD88DE9BF7D494EA9DA96 /* HelloWorld */,\n-\t\t\t);\n-\t\t\tname = ExpoModulesProviders;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n /* End PBXGroup section */\n \n /* Begin PBXNativeTarget section */\n@@ -206,6 +168,8 @@\n \t\t\tfiles = (\n \t\t\t);\n \t\t\tinputPaths = (\n+\t\t\t\t\"$(SRCROOT)/.xcode.env\",\n+\t\t\t\t\"$(SRCROOT)/.xcode.env.local\",\n \t\t\t);\n \t\t\tname = \"Bundle React Native code and images\";\n \t\t\toutputPaths = (\n@@ -265,9 +229,7 @@\n \t\t\tisa = PBXSourcesBuildPhase;\n \t\t\tbuildActionMask = 2147483647;\n \t\t\tfiles = (\n-\t\t\t\t13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,\n-\t\t\t\t13B07FC11A68108700A75B9A /* main.m in Sources */,\n-\t\t\t\tB18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */,\n+\t\t\t\tF11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */,\n \t\t\t);\n \t\t\trunOnlyForDeploymentPostprocessing = 0;\n \t\t};\n@@ -276,7 +238,6 @@\n /* Begin XCBuildConfiguration section */\n \t\t13B07F941A680F5B00A75B9A /* Debug */ = {\n \t\t\tisa = XCBuildConfiguration;\n-\t\t\tbaseConfigurationReference = 6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */;\n \t\t\tbuildSettings = {\n \t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n@@ -288,7 +249,10 @@\n \t\t\t\t);\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n \t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t\t\"@executable_path/Frameworks\",\n+\t\t\t\t);\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -297,6 +261,7 @@\n \t\t\t\t);\n \t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = org.name.HelloWorld;\n \t\t\t\tPRODUCT_NAME = HelloWorld;\n+\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"HelloWorld/HelloWorld-Bridging-Header.h\";\n \t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n \t\t\t\tSWIFT_VERSION = 5.0;\n \t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n@@ -305,14 +270,16 @@\n \t\t};\n \t\t13B07F951A680F5B00A75B9A /* Release */ = {\n \t\t\tisa = XCBuildConfiguration;\n-\t\t\tbaseConfigurationReference = 7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */;\n \t\t\tbuildSettings = {\n \t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n \t\t\t\tCURRENT_PROJECT_VERSION = 1;\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n \t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t\t\"@executable_path/Frameworks\",\n+\t\t\t\t);\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -321,6 +288,7 @@\n \t\t\t\t);\n \t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = org.name.HelloWorld;\n \t\t\t\tPRODUCT_NAME = HelloWorld;\n+\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"HelloWorld/HelloWorld-Bridging-Header.h\";\n \t\t\t\tSWIFT_VERSION = 5.0;\n \t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n \t\t\t};\n@@ -374,7 +342,10 @@\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n \t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t/usr/lib/swift,\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t);\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n \t\t\t\tONLY_ACTIVE_ARCH = YES;\n@@ -423,7 +394,10 @@\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n \t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t/usr/lib/swift,\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t);\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n \t\t\t\tSDKROOT = iphoneos;\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\nnew file mode 100644\nindex 00000000000..9670a1ff07e\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\n@@ -0,0 +1,69 @@\n+internal import Expo\n+import React\n+import ReactAppDependencyProvider\n+\n+@main\n+class AppDelegate: ExpoAppDelegate {\n+ var window: UIWindow?\n+\n+ var reactNativeDelegate: ExpoReactNativeFactoryDelegate?\n+ var reactNativeFactory: RCTReactNativeFactory?\n+\n+ public override func application(\n+ _ application: UIApplication,\n+ didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil\n+ ) -> Bool {\n+ let delegate = ReactNativeDelegate()\n+ let factory = ExpoReactNativeFactory(delegate: delegate)\n+ delegate.dependencyProvider = RCTAppDependencyProvider()\n+\n+ reactNativeDelegate = delegate\n+ reactNativeFactory = factory\n+\n+#if os(iOS) || os(tvOS)\n+ window = UIWindow(frame: UIScreen.main.bounds)\n+ factory.startReactNative(\n+ withModuleName: \"main\",\n+ in: window,\n+ launchOptions: launchOptions)\n+#endif\n+\n+ return super.application(application, didFinishLaunchingWithOptions: launchOptions)\n+ }\n+\n+ // Linking API\n+ public override func application(\n+ _ app: UIApplication,\n+ open url: URL,\n+ options: [UIApplication.OpenURLOptionsKey: Any] = [:]\n+ ) -> Bool {\n+ return super.application(app, open: url, options: options) || RCTLinkingManager.application(app, open: url, options: options)\n+ }\n+\n+ // Universal Links\n+ public override func application(\n+ _ application: UIApplication,\n+ continue userActivity: NSUserActivity,\n+ restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void\n+ ) -> Bool {\n+ let result = RCTLinkingManager.application(application, continue: userActivity, restorationHandler: restorationHandler)\n+ return super.application(application, continue: userActivity, restorationHandler: restorationHandler) || result\n+ }\n+}\n+\n+class ReactNativeDelegate: ExpoReactNativeFactoryDelegate {\n+ // Extension point for config-plugins\n+\n+ override func sourceURL(for bridge: RCTBridge) -> URL? {\n+ // needed to return the correct URL for expo-dev-client.\n+ bridge.bundleURL ?? bundleURL()\n+ }\n+\n+ override func bundleURL() -> URL? {\n+#if DEBUG\n+ return RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: \".expo/.virtual-metro-entry\")\n+#else\n+ return Bundle.main.url(forResource: \"main\", withExtension: \"jsbundle\")\n+#endif\n+ }\n+}\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h b/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h\nnew file mode 100644\nindex 00000000000..8361941afc2\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h\n@@ -0,0 +1,3 @@\n+//\n+// Use this file to import your target's public headers that you would like to expose to Swift.\n+//\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\nindex 447b4188985..58d21796e1d 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n@@ -1,11 +1,12 @@\n \n-\n+\n \n \n \n- \n+ \n \n \n+ \n \n \n \n@@ -29,6 +30,7 @@\n \n \n \n+ \n \n \n \n@@ -38,5 +40,8 @@\n \n \n \n+ \n+ \n+ \n \n \ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex f740040e7be..03484edf156 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -4,12 +4,19 @@ require File.join(File.dirname(`node --print \"require.resolve('react-native/pack\n require 'json'\n podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}\n \n-ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0'\n-ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+def ccache_enabled?(podfile_properties)\n+ # Environment variable takes precedence\n+ return ENV['USE_CCACHE'] == '1' if ENV['USE_CCACHE']\n \n+ # Fall back to Podfile properties\n+ podfile_properties['apple.ccacheEnabled'] == 'true'\n+end\n+\n+ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+ENV['RCT_USE_RN_DEP'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true'\n+ENV['RCT_USE_PREBUILT_RNCORE'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true'\n+ENV['RCT_HERMES_V1_ENABLED'] ||= '1' if podfile_properties['expo.useHermesV1'] == 'true'\n platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'\n-install! 'cocoapods',\n- :deterministic_uuids => false\n \n prepare_react_native_project!\n \n@@ -23,7 +30,8 @@ target 'HelloWorld' do\n 'node',\n '--no-warnings',\n '--eval',\n- 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n+ 'require(\\'expo/bin/autolinking\\')',\n+ 'expo-modules-autolinking',\n 'react-native-config',\n '--json',\n '--platform',\n@@ -49,18 +57,7 @@ target 'HelloWorld' do\n installer,\n config[:reactNativePath],\n :mac_catalyst_enabled => false,\n- :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true',\n+ :ccache_enabled => ccache_enabled?(podfile_properties),\n )\n-\n- # This is necessary for Xcode 14, because it signs resource bundles by default\n- # when building for devices.\n- installer.target_installation_results.pod_target_installation_results\n- .each do |pod_name, target_installation_result|\n- target_installation_result.resource_bundle_targets.each do |resource_bundle_target|\n- resource_bundle_target.build_configurations.each do |config|\n- config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'\n- end\n- end\n- end\n end\n end\ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex b51159163bf..253f825cea9 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -2,7 +2,7 @@\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n \"license\": \"0BSD\",\n- \"version\": \"52.0.79\",\n+ \"version\": \"55.0.37\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -11,12 +11,9 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~52.0.49\",\n- \"expo-status-bar\": \"~2.0.1\",\n- \"react\": \"18.3.1\",\n- \"react-native\": \"0.76.9\"\n- },\n- \"devDependencies\": {\n- \"@babel/core\": \"^7.20.0\"\n+ \"expo\": \"~55.0.25\",\n+ \"expo-status-bar\": \"~55.0.6\",\n+ \"react\": \"19.2.0\",\n+ \"react-native\": \"0.83.6\"\n }\n }\n","53..55":"diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle\nindex 34b96c71c33..fc185e53bc3 100644\n--- a/templates/expo-template-bare-minimum/android/app/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/app/build.gradle\n@@ -11,7 +11,7 @@ def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath()\n react {\n entryFile = file([\"node\", \"-e\", \"require('expo/scripts/resolveAppEntry')\", projectRoot, \"android\", \"absolute\"].execute(null, rootDir).text.trim())\n reactNativeDir = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n- hermesCommand = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/sdks/hermesc/%OS-BIN%/hermesc\"\n+ hermesCommand = new File([\"node\", \"--print\", \"require.resolve('hermes-compiler/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/hermesc/%OS-BIN%/hermesc\"\n codegenDir = new File([\"node\", \"--print\", \"require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n \n enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean()\n@@ -64,9 +64,9 @@ react {\n }\n \n /**\n- * Set this to true to Run Proguard on Release builds to minify the Java bytecode.\n+ * Set this to true in release builds to optimize the app using [R8](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization).\n */\n-def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInReleaseBuilds') ?: false).toBoolean()\n+def enableMinifyInReleaseBuilds = (findProperty('android.enableMinifyInReleaseBuilds') ?: false).toBoolean()\n \n /**\n * The preferred build flavor of JavaScriptCore (JSC)\n@@ -94,6 +94,8 @@ android {\n targetSdkVersion rootProject.ext.targetSdkVersion\n versionCode 1\n versionName \"1.0\"\n+\n+ buildConfigField \"String\", \"REACT_NATIVE_RELEASE_LEVEL\", \"\\\"${findProperty('reactNativeReleaseLevel') ?: 'stable'}\\\"\"\n }\n signingConfigs {\n debug {\n@@ -111,15 +113,18 @@ android {\n // Caution! In production, you need to generate your own keystore file.\n // see https://reactnative.dev/docs/signed-apk-android.\n signingConfig signingConfigs.debug\n- shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false)\n- minifyEnabled enableProguardInReleaseBuilds\n+ def enableShrinkResources = findProperty('android.enableShrinkResourcesInReleaseBuilds') ?: 'false'\n+ shrinkResources enableShrinkResources.toBoolean()\n+ minifyEnabled enableMinifyInReleaseBuilds\n proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n- crunchPngs (findProperty('android.enablePngCrunchInReleaseBuilds')?.toBoolean() ?: true)\n+ def enablePngCrunchInRelease = findProperty('android.enablePngCrunchInReleaseBuilds') ?: 'true'\n+ crunchPngs enablePngCrunchInRelease.toBoolean()\n }\n }\n packagingOptions {\n jniLibs {\n- useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false)\n+ def enableLegacyPackaging = findProperty('expo.useLegacyPackaging') ?: 'false'\n+ useLegacyPackaging enableLegacyPackaging.toBoolean()\n }\n }\n androidResources {\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\nnew file mode 100644\nindex 00000000000..3ec2507bab7\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\n@@ -0,0 +1,7 @@\n+\n+\n+ \n+\n+ \n+\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\nindex 150248b6b3c..14bdba124ab 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n@@ -1,12 +1,13 @@\n-\n+\n \n \n \n \n \n \n- \n- \n+ \n+ \n \n \n \n@@ -19,7 +20,7 @@\n \n \n \n- \n+ \n \n \n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\nindex 267e20c30e5..cbb5ddb85d0 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n@@ -5,48 +5,36 @@ import android.content.res.Configuration\n \n import com.facebook.react.PackageList\n import com.facebook.react.ReactApplication\n-import com.facebook.react.ReactNativeHost\n+import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative\n import com.facebook.react.ReactPackage\n import com.facebook.react.ReactHost\n-import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load\n-import com.facebook.react.defaults.DefaultReactNativeHost\n-import com.facebook.react.soloader.OpenSourceMergedSoMapping\n-import com.facebook.soloader.SoLoader\n+import com.facebook.react.common.ReleaseLevel\n+import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint\n \n import expo.modules.ApplicationLifecycleDispatcher\n-import expo.modules.ReactNativeHostWrapper\n+import expo.modules.ExpoReactHostFactory\n \n class MainApplication : Application(), ReactApplication {\n \n- override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper(\n- this,\n- object : DefaultReactNativeHost(this) {\n- override fun getPackages(): List {\n- val packages = PackageList(this).packages\n- // Packages that cannot be autolinked yet can be added manually here, for example:\n- // packages.add(MyReactNativePackage())\n- return packages\n- }\n-\n- override fun getJSMainModuleName(): String = \".expo/.virtual-metro-entry\"\n-\n- override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG\n-\n- override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED\n- override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED\n- }\n- )\n-\n- override val reactHost: ReactHost\n- get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost)\n+ override val reactHost: ReactHost by lazy {\n+ ExpoReactHostFactory.getDefaultReactHost(\n+ context = applicationContext,\n+ packageList =\n+ PackageList(this).packages.apply {\n+ // Packages that cannot be autolinked yet can be added manually here, for example:\n+ // add(MyReactNativePackage())\n+ }\n+ )\n+ }\n \n override fun onCreate() {\n super.onCreate()\n- SoLoader.init(this, OpenSourceMergedSoMapping)\n- if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {\n- // If you opted-in for the New Architecture, we load the native entry point for this app.\n- load()\n+ DefaultNewArchitectureEntryPoint.releaseLevel = try {\n+ ReleaseLevel.valueOf(BuildConfig.REACT_NATIVE_RELEASE_LEVEL.uppercase())\n+ } catch (e: IllegalArgumentException) {\n+ ReleaseLevel.STABLE\n }\n+ loadReactNative(this)\n ApplicationLifecycleDispatcher.onApplicationCreate(this)\n }\n \ndiff --git a/templates/expo-template-bare-minimum/android/build.gradle b/templates/expo-template-bare-minimum/android/build.gradle\nindex fa7b11e23c1..0554dd156c1 100644\n--- a/templates/expo-template-bare-minimum/android/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/build.gradle\n@@ -12,21 +12,8 @@ buildscript {\n }\n }\n \n-def reactNativeAndroidDir = new File(\n- providers.exec {\n- workingDir(rootDir)\n- commandLine(\"node\", \"--print\", \"require.resolve('react-native/package.json')\")\n- }.standardOutput.asText.get().trim(),\n- \"../android\"\n-)\n-\n allprojects {\n repositories {\n- maven {\n- // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n- url(reactNativeAndroidDir)\n- }\n-\n google()\n mavenCentral()\n maven { url 'https://www.jitpack.io' }\ndiff --git a/templates/expo-template-bare-minimum/android/gradle.properties b/templates/expo-template-bare-minimum/android/gradle.properties\nindex 7531e9eb23c..97271b9456f 100644\n--- a/templates/expo-template-bare-minimum/android/gradle.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle.properties\n@@ -15,7 +15,7 @@ org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m\n # When configured, Gradle will run in incubating parallel mode.\n # This option should only be used with decoupled projects. More details, visit\n # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n-# org.gradle.parallel=true\n+org.gradle.parallel=true\n \n # AndroidX package structure to make it clearer which packages are bundled with the\n # Android operating system, and which are packaged with your app's APK\n@@ -41,6 +41,11 @@ newArchEnabled=true\n # If set to false, you will be using JSC instead.\n hermesEnabled=true\n \n+# Use this property to enable edge-to-edge display support.\n+# This allows your app to draw behind system bars for an immersive UI.\n+# Note: Only works with ReactActivity and should not be used with custom Activity.\n+edgeToEdgeEnabled=true\n+\n # Enable GIF support in React Native images (~200 B increase)\n expo.gif.enabled=true\n # Enable webp support in React Native images (~85 KB increase)\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar\nindex a4b76b9530d..8bdaf60c75a 100644\nBinary files a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar and b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar differ\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\nindex 37f853b1c84..2a84e188b85 100644\n--- a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n@@ -1,6 +1,6 @@\n distributionBase=GRADLE_USER_HOME\n distributionPath=wrapper/dists\n-distributionUrl=https\\://services.gradle.org/distributions/gradle-8.13-bin.zip\n+distributionUrl=https\\://services.gradle.org/distributions/gradle-9.0.0-bin.zip\n networkTimeout=10000\n validateDistributionUrl=true\n zipStoreBase=GRADLE_USER_HOME\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew b/templates/expo-template-bare-minimum/android/gradlew\nindex f3b75f3b0d4..bbb00327904 100755\n--- a/templates/expo-template-bare-minimum/android/gradlew\n+++ b/templates/expo-template-bare-minimum/android/gradlew\n@@ -1,7 +1,7 @@\n #!/bin/sh\n \n #\n-# Copyright © 2015-2021 the original authors.\n+# Copyright © 2015 the original authors.\n #\n # Licensed under the Apache License, Version 2.0 (the \"License\");\n # you may not use this file except in compliance with the License.\n@@ -114,7 +114,7 @@ case \"$( uname )\" in #(\n NONSTOP* ) nonstop=true ;;\n esac\n \n-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n+CLASSPATH=\"\\\\\\\"\\\\\\\"\"\n \n \n # Determine the Java command to use to start the JVM.\n@@ -213,7 +213,7 @@ DEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n set -- \\\n \"-Dorg.gradle.appname=$APP_BASE_NAME\" \\\n -classpath \"$CLASSPATH\" \\\n- org.gradle.wrapper.GradleWrapperMain \\\n+ -jar \"$APP_HOME/gradle/wrapper/gradle-wrapper.jar\" \\\n \"$@\"\n \n # Stop when \"xargs\" is not available.\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew.bat b/templates/expo-template-bare-minimum/android/gradlew.bat\nindex 9b42019c791..5eed7ee8452 100644\n--- a/templates/expo-template-bare-minimum/android/gradlew.bat\n+++ b/templates/expo-template-bare-minimum/android/gradlew.bat\n@@ -70,11 +70,11 @@ goto fail\n :execute\r\n @rem Setup the command line\r\n \r\n-set CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\r\n+set CLASSPATH=\r\n \r\n \r\n @rem Execute Gradle\r\n-\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\r\n+\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" -jar \"%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\" %*\r\n \r\n :end\r\n @rem End local scope for the variables with windows NT shell\r\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\nindex 1b7513bd31b..8a390c764af 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n@@ -168,6 +168,8 @@\n \t\t\tfiles = (\n \t\t\t);\n \t\t\tinputPaths = (\n+\t\t\t\t\"$(SRCROOT)/.xcode.env\",\n+\t\t\t\t\"$(SRCROOT)/.xcode.env.local\",\n \t\t\t);\n \t\t\tname = \"Bundle React Native code and images\";\n \t\t\toutputPaths = (\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\nindex a7887e1e5b1..9670a1ff07e 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\n@@ -1,9 +1,9 @@\n-import Expo\n+internal import Expo\n import React\n import ReactAppDependencyProvider\n \n-@UIApplicationMain\n-public class AppDelegate: ExpoAppDelegate {\n+@main\n+class AppDelegate: ExpoAppDelegate {\n var window: UIWindow?\n \n var reactNativeDelegate: ExpoReactNativeFactoryDelegate?\n@@ -19,7 +19,6 @@ public class AppDelegate: ExpoAppDelegate {\n \n reactNativeDelegate = delegate\n reactNativeFactory = factory\n- bindReactNativeFactory(factory)\n \n #if os(iOS) || os(tvOS)\n window = UIWindow(frame: UIScreen.main.bounds)\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\nindex 447b4188985..58d21796e1d 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n@@ -1,11 +1,12 @@\n \n-\n+\n \n \n \n- \n+ \n \n \n+ \n \n \n \n@@ -29,6 +30,7 @@\n \n \n \n+ \n \n \n \n@@ -38,5 +40,8 @@\n \n \n \n+ \n+ \n+ \n \n \ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex 29503ff0cc1..03484edf156 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -4,12 +4,19 @@ require File.join(File.dirname(`node --print \"require.resolve('react-native/pack\n require 'json'\n podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}\n \n-ENV['RCT_NEW_ARCH_ENABLED'] = '0' if podfile_properties['newArchEnabled'] == 'false'\n-ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+def ccache_enabled?(podfile_properties)\n+ # Environment variable takes precedence\n+ return ENV['USE_CCACHE'] == '1' if ENV['USE_CCACHE']\n \n+ # Fall back to Podfile properties\n+ podfile_properties['apple.ccacheEnabled'] == 'true'\n+end\n+\n+ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+ENV['RCT_USE_RN_DEP'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true'\n+ENV['RCT_USE_PREBUILT_RNCORE'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true'\n+ENV['RCT_HERMES_V1_ENABLED'] ||= '1' if podfile_properties['expo.useHermesV1'] == 'true'\n platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'\n-install! 'cocoapods',\n- :deterministic_uuids => false\n \n prepare_react_native_project!\n \n@@ -20,7 +27,10 @@ target 'HelloWorld' do\n config_command = ['node', '-e', \"process.argv=['', '', 'config'];require('@react-native-community/cli').run()\"];\n else\n config_command = [\n- 'npx',\n+ 'node',\n+ '--no-warnings',\n+ '--eval',\n+ 'require(\\'expo/bin/autolinking\\')',\n 'expo-modules-autolinking',\n 'react-native-config',\n '--json',\n@@ -47,18 +57,7 @@ target 'HelloWorld' do\n installer,\n config[:reactNativePath],\n :mac_catalyst_enabled => false,\n- :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true',\n+ :ccache_enabled => ccache_enabled?(podfile_properties),\n )\n-\n- # This is necessary for Xcode 14, because it signs resource bundles by default\n- # when building for devices.\n- installer.target_installation_results.pod_target_installation_results\n- .each do |pod_name, target_installation_result|\n- target_installation_result.resource_bundle_targets.each do |resource_bundle_target|\n- resource_bundle_target.build_configurations.each do |config|\n- config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'\n- end\n- end\n- end\n end\n end\ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex 661f6b6addf..253f825cea9 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -2,7 +2,7 @@\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n \"license\": \"0BSD\",\n- \"version\": \"53.0.42\",\n+ \"version\": \"55.0.37\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -11,12 +11,9 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~53.0.27\",\n- \"expo-status-bar\": \"~2.2.3\",\n- \"react\": \"19.0.0\",\n- \"react-native\": \"0.79.6\"\n- },\n- \"devDependencies\": {\n- \"@babel/core\": \"^7.20.0\"\n+ \"expo\": \"~55.0.25\",\n+ \"expo-status-bar\": \"~55.0.6\",\n+ \"react\": \"19.2.0\",\n+ \"react-native\": \"0.83.6\"\n }\n }\n","54..55":"diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle\nindex 3f1c571b679..fc185e53bc3 100644\n--- a/templates/expo-template-bare-minimum/android/app/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/app/build.gradle\n@@ -11,7 +11,7 @@ def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath()\n react {\n entryFile = file([\"node\", \"-e\", \"require('expo/scripts/resolveAppEntry')\", projectRoot, \"android\", \"absolute\"].execute(null, rootDir).text.trim())\n reactNativeDir = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n- hermesCommand = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/sdks/hermesc/%OS-BIN%/hermesc\"\n+ hermesCommand = new File([\"node\", \"--print\", \"require.resolve('hermes-compiler/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/hermesc/%OS-BIN%/hermesc\"\n codegenDir = new File([\"node\", \"--print\", \"require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n \n enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean()\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\nindex 150248b6b3c..14bdba124ab 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n@@ -1,12 +1,13 @@\n-\n+\n \n \n \n \n \n \n- \n- \n+ \n+ \n \n \n \n@@ -19,7 +20,7 @@\n \n \n \n- \n+ \n \n \n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\nindex 5abad96fa00..cbb5ddb85d0 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n@@ -6,37 +6,26 @@ import android.content.res.Configuration\n import com.facebook.react.PackageList\n import com.facebook.react.ReactApplication\n import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative\n-import com.facebook.react.ReactNativeHost\n import com.facebook.react.ReactPackage\n import com.facebook.react.ReactHost\n import com.facebook.react.common.ReleaseLevel\n import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint\n-import com.facebook.react.defaults.DefaultReactNativeHost\n \n import expo.modules.ApplicationLifecycleDispatcher\n-import expo.modules.ReactNativeHostWrapper\n+import expo.modules.ExpoReactHostFactory\n \n class MainApplication : Application(), ReactApplication {\n \n- override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper(\n- this,\n- object : DefaultReactNativeHost(this) {\n- override fun getPackages(): List =\n- PackageList(this).packages.apply {\n- // Packages that cannot be autolinked yet can be added manually here, for example:\n- // add(MyReactNativePackage())\n- }\n-\n- override fun getJSMainModuleName(): String = \".expo/.virtual-metro-entry\"\n-\n- override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG\n-\n- override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED\n- }\n- )\n-\n- override val reactHost: ReactHost\n- get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost)\n+ override val reactHost: ReactHost by lazy {\n+ ExpoReactHostFactory.getDefaultReactHost(\n+ context = applicationContext,\n+ packageList =\n+ PackageList(this).packages.apply {\n+ // Packages that cannot be autolinked yet can be added manually here, for example:\n+ // add(MyReactNativePackage())\n+ }\n+ )\n+ }\n \n override fun onCreate() {\n super.onCreate()\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar\nindex 1b33c55baab..8bdaf60c75a 100644\nBinary files a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar and b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar differ\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\nindex d4081da476b..2a84e188b85 100644\n--- a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n@@ -1,6 +1,6 @@\n distributionBase=GRADLE_USER_HOME\n distributionPath=wrapper/dists\n-distributionUrl=https\\://services.gradle.org/distributions/gradle-8.14.3-bin.zip\n+distributionUrl=https\\://services.gradle.org/distributions/gradle-9.0.0-bin.zip\n networkTimeout=10000\n validateDistributionUrl=true\n zipStoreBase=GRADLE_USER_HOME\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew b/templates/expo-template-bare-minimum/android/gradlew\nindex 7f94d3d4777..bbb00327904 100755\n--- a/templates/expo-template-bare-minimum/android/gradlew\n+++ b/templates/expo-template-bare-minimum/android/gradlew\n@@ -1,7 +1,7 @@\n #!/bin/sh\n \n #\n-# Copyright © 2015-2021 the original authors.\n+# Copyright © 2015 the original authors.\n #\n # Licensed under the Apache License, Version 2.0 (the \"License\");\n # you may not use this file except in compliance with the License.\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\nindex a7887e1e5b1..9670a1ff07e 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\n@@ -1,9 +1,9 @@\n-import Expo\n+internal import Expo\n import React\n import ReactAppDependencyProvider\n \n-@UIApplicationMain\n-public class AppDelegate: ExpoAppDelegate {\n+@main\n+class AppDelegate: ExpoAppDelegate {\n var window: UIWindow?\n \n var reactNativeDelegate: ExpoReactNativeFactoryDelegate?\n@@ -19,7 +19,6 @@ public class AppDelegate: ExpoAppDelegate {\n \n reactNativeDelegate = delegate\n reactNativeFactory = factory\n- bindReactNativeFactory(factory)\n \n #if os(iOS) || os(tvOS)\n window = UIWindow(frame: UIScreen.main.bounds)\ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex 9743535e7ad..03484edf156 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -7,15 +7,15 @@ podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties\n def ccache_enabled?(podfile_properties)\n # Environment variable takes precedence\n return ENV['USE_CCACHE'] == '1' if ENV['USE_CCACHE']\n- \n+\n # Fall back to Podfile properties\n podfile_properties['apple.ccacheEnabled'] == 'true'\n end\n \n-ENV['RCT_NEW_ARCH_ENABLED'] ||= '0' if podfile_properties['newArchEnabled'] == 'false'\n ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n-ENV['RCT_USE_RN_DEP'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' && podfile_properties['newArchEnabled'] != 'false'\n-ENV['RCT_USE_PREBUILT_RNCORE'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' && podfile_properties['newArchEnabled'] != 'false'\n+ENV['RCT_USE_RN_DEP'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true'\n+ENV['RCT_USE_PREBUILT_RNCORE'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true'\n+ENV['RCT_HERMES_V1_ENABLED'] ||= '1' if podfile_properties['expo.useHermesV1'] == 'true'\n platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'\n \n prepare_react_native_project!\ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex a1a026a23e1..253f825cea9 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -2,7 +2,7 @@\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n \"license\": \"0BSD\",\n- \"version\": \"54.0.51\",\n+ \"version\": \"55.0.37\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -11,9 +11,9 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~54.0.34\",\n- \"expo-status-bar\": \"~3.0.9\",\n- \"react\": \"19.1.0\",\n- \"react-native\": \"0.81.5\"\n+ \"expo\": \"~55.0.25\",\n+ \"expo-status-bar\": \"~55.0.6\",\n+ \"react\": \"19.2.0\",\n+ \"react-native\": \"0.83.6\"\n }\n }\n","55..55":"","51..56":"diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle\nindex a4b08330359..fc185e53bc3 100644\n--- a/templates/expo-template-bare-minimum/android/app/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/app/build.gradle\n@@ -4,27 +4,6 @@ apply plugin: \"com.facebook.react\"\n \n def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath()\n \n-static def versionToNumber(major, minor, patch) {\n- return patch * 100 + minor * 10000 + major * 1000000\n-}\n-\n-def getRNVersion() {\n- def version = providers.exec {\n- workingDir(projectDir)\n- commandLine(\"node\", \"-e\", \"console.log(require('react-native/package.json').version);\")\n- }.standardOutput.asText.get().trim()\n-\n- def coreVersion = version.split(\"-\")[0]\n- def (major, minor, patch) = coreVersion.tokenize('.').collect { it.toInteger() }\n-\n- return versionToNumber(\n- major,\n- minor,\n- patch\n- )\n-}\n-def rnVersion = getRNVersion()\n-\n /**\n * This is the configuration block to customize your React Native Android app.\n * By default you don't need to apply any configuration, just uncomment the lines you need.\n@@ -32,21 +11,22 @@ def rnVersion = getRNVersion()\n react {\n entryFile = file([\"node\", \"-e\", \"require('expo/scripts/resolveAppEntry')\", projectRoot, \"android\", \"absolute\"].execute(null, rootDir).text.trim())\n reactNativeDir = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n- hermesCommand = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/sdks/hermesc/%OS-BIN%/hermesc\"\n+ hermesCommand = new File([\"node\", \"--print\", \"require.resolve('hermes-compiler/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/hermesc/%OS-BIN%/hermesc\"\n codegenDir = new File([\"node\", \"--print\", \"require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n \n+ enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean()\n // Use Expo CLI to bundle the app, this ensures the Metro config\n // works correctly with Expo projects.\n cliFile = new File([\"node\", \"--print\", \"require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })\"].execute(null, rootDir).text.trim())\n bundleCommand = \"export:embed\"\n \n /* Folders */\n- // The root of your project, i.e. where \"package.json\" lives. Default is '..'\n- // root = file(\"../\")\n- // The folder where the react-native NPM package is. Default is ../node_modules/react-native\n- // reactNativeDir = file(\"../node_modules/react-native\")\n- // The folder where the react-native Codegen package is. Default is ../node_modules/@react-native/codegen\n- // codegenDir = file(\"../node_modules/@react-native/codegen\")\n+ // The root of your project, i.e. where \"package.json\" lives. Default is '../..'\n+ // root = file(\"../../\")\n+ // The folder where the react-native NPM package is. Default is ../../node_modules/react-native\n+ // reactNativeDir = file(\"../../node_modules/react-native\")\n+ // The folder where the react-native Codegen package is. Default is ../../node_modules/@react-native/codegen\n+ // codegenDir = file(\"../../node_modules/@react-native/codegen\")\n \n /* Variants */\n // The list of variants to that are debuggable. For those we're going to\n@@ -79,16 +59,14 @@ react {\n // The list of flags to pass to the Hermes compiler. By default is \"-O\", \"-output-source-map\"\n // hermesFlags = [\"-O\", \"-output-source-map\"]\n \n- if (rnVersion >= versionToNumber(0, 75, 0)) {\n- /* Autolinking */\n- autolinkLibrariesWithApp()\n- }\n+ /* Autolinking */\n+ autolinkLibrariesWithApp()\n }\n \n /**\n- * Set this to true to Run Proguard on Release builds to minify the Java bytecode.\n+ * Set this to true in release builds to optimize the app using [R8](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization).\n */\n-def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInReleaseBuilds') ?: false).toBoolean()\n+def enableMinifyInReleaseBuilds = (findProperty('android.enableMinifyInReleaseBuilds') ?: false).toBoolean()\n \n /**\n * The preferred build flavor of JavaScriptCore (JSC)\n@@ -101,7 +79,7 @@ def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInRelea\n * give correct results when using with locales other than en-US. Note that\n * this variant is about 6MiB larger per architecture than default.\n */\n-def jscFlavor = 'org.webkit:android-jsc:+'\n+def jscFlavor = 'io.github.react-native-community:jsc-android:2026004.+'\n \n android {\n ndkVersion rootProject.ext.ndkVersion\n@@ -116,6 +94,8 @@ android {\n targetSdkVersion rootProject.ext.targetSdkVersion\n versionCode 1\n versionName \"1.0\"\n+\n+ buildConfigField \"String\", \"REACT_NATIVE_RELEASE_LEVEL\", \"\\\"${findProperty('reactNativeReleaseLevel') ?: 'stable'}\\\"\"\n }\n signingConfigs {\n debug {\n@@ -133,17 +113,23 @@ android {\n // Caution! In production, you need to generate your own keystore file.\n // see https://reactnative.dev/docs/signed-apk-android.\n signingConfig signingConfigs.debug\n- shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false)\n- minifyEnabled enableProguardInReleaseBuilds\n+ def enableShrinkResources = findProperty('android.enableShrinkResourcesInReleaseBuilds') ?: 'false'\n+ shrinkResources enableShrinkResources.toBoolean()\n+ minifyEnabled enableMinifyInReleaseBuilds\n proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n- crunchPngs (findProperty('android.enablePngCrunchInReleaseBuilds')?.toBoolean() ?: true)\n+ def enablePngCrunchInRelease = findProperty('android.enablePngCrunchInReleaseBuilds') ?: 'true'\n+ crunchPngs enablePngCrunchInRelease.toBoolean()\n }\n }\n packagingOptions {\n jniLibs {\n- useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false)\n+ def enableLegacyPackaging = findProperty('expo.useLegacyPackaging') ?: 'false'\n+ useLegacyPackaging enableLegacyPackaging.toBoolean()\n }\n }\n+ androidResources {\n+ ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:!CVS:!thumbs.db:!picasa.ini:!*~'\n+ }\n }\n \n // Apply static values from `gradle.properties` to the `android.packagingOptions`\n@@ -176,15 +162,15 @@ dependencies {\n \n if (isGifEnabled) {\n // For animated gif support\n- implementation(\"com.facebook.fresco:animated-gif:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-gif:${expoLibs.versions.fresco.get()}\")\n }\n \n if (isWebpEnabled) {\n // For webp support\n- implementation(\"com.facebook.fresco:webpsupport:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:webpsupport:${expoLibs.versions.fresco.get()}\")\n if (isWebpAnimatedEnabled) {\n // Animated webp support\n- implementation(\"com.facebook.fresco:animated-webp:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-webp:${expoLibs.versions.fresco.get()}\")\n }\n }\n \n@@ -194,8 +180,3 @@ dependencies {\n implementation jscFlavor\n }\n }\n-\n-if (rnVersion < versionToNumber(0, 75, 0)) {\n- apply from: new File([\"node\", \"--print\", \"require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), \"../native_modules.gradle\");\n- applyNativeModulesAppBuildGradle(project)\n-}\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\nnew file mode 100644\nindex 00000000000..3ec2507bab7\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\n@@ -0,0 +1,7 @@\n+\n+\n+ \n+\n+ \n+\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\nindex 52175508263..14bdba124ab 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n@@ -1,12 +1,13 @@\n-\n+\n \n \n \n \n \n \n- \n- \n+ \n+ \n \n \n \n@@ -18,13 +19,12 @@\n \n \n \n- \n- \n+ \n+ \n \n \n \n \n \n- \n \n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\nindex 5f6e05ce071..cbb5ddb85d0 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n@@ -5,46 +5,36 @@ import android.content.res.Configuration\n \n import com.facebook.react.PackageList\n import com.facebook.react.ReactApplication\n-import com.facebook.react.ReactNativeHost\n+import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative\n import com.facebook.react.ReactPackage\n import com.facebook.react.ReactHost\n-import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load\n-import com.facebook.react.defaults.DefaultReactNativeHost\n-import com.facebook.soloader.SoLoader\n+import com.facebook.react.common.ReleaseLevel\n+import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint\n \n import expo.modules.ApplicationLifecycleDispatcher\n-import expo.modules.ReactNativeHostWrapper\n+import expo.modules.ExpoReactHostFactory\n \n class MainApplication : Application(), ReactApplication {\n \n- override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper(\n- this,\n- object : DefaultReactNativeHost(this) {\n- override fun getPackages(): List {\n- // Packages that cannot be autolinked yet can be added manually here, for example:\n- // packages.add(new MyReactNativePackage());\n- return PackageList(this).packages\n- }\n-\n- override fun getJSMainModuleName(): String = \".expo/.virtual-metro-entry\"\n-\n- override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG\n-\n- override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED\n- override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED\n- }\n- )\n-\n- override val reactHost: ReactHost\n- get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost)\n+ override val reactHost: ReactHost by lazy {\n+ ExpoReactHostFactory.getDefaultReactHost(\n+ context = applicationContext,\n+ packageList =\n+ PackageList(this).packages.apply {\n+ // Packages that cannot be autolinked yet can be added manually here, for example:\n+ // add(MyReactNativePackage())\n+ }\n+ )\n+ }\n \n override fun onCreate() {\n super.onCreate()\n- SoLoader.init(this, false)\n- if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {\n- // If you opted-in for the New Architecture, we load the native entry point for this app.\n- load()\n+ DefaultNewArchitectureEntryPoint.releaseLevel = try {\n+ ReleaseLevel.valueOf(BuildConfig.REACT_NATIVE_RELEASE_LEVEL.uppercase())\n+ } catch (e: IllegalArgumentException) {\n+ ReleaseLevel.STABLE\n }\n+ loadReactNative(this)\n ApplicationLifecycleDispatcher.onApplicationCreate(this)\n }\n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..31df827b18b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..ef243aab6c0\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..e9d5474519c\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..d61da15d241\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..4aeed11d00b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml\nnew file mode 100644\nindex 00000000000..883b2a080f3\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml\n@@ -0,0 +1,6 @@\n+\n+ \n+ \n+ \n+ \n+\n\\ No newline at end of file\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..a2f5908281d\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..1b523998081\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..ff10afd6e18\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..115a4c768a2\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..dcd3cd80833\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..459ca609d3a\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..8ca12fe024b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..8e19b410a1b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..b824ebdd48d\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..4c19a13c239\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\nindex 90bcc87b8e8..26f3404be26 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n@@ -1,15 +1,8 @@\n \n- \n- \n \n \ndiff --git a/templates/expo-template-bare-minimum/android/build.gradle b/templates/expo-template-bare-minimum/android/build.gradle\nindex 932bf7b34ba..0554dd156c1 100644\n--- a/templates/expo-template-bare-minimum/android/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/build.gradle\n@@ -1,41 +1,24 @@\n // Top-level build file where you can add configuration options common to all sub-projects/modules.\n \n buildscript {\n- ext {\n- buildToolsVersion = findProperty('android.buildToolsVersion') ?: '34.0.0'\n- minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '23')\n- compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '34')\n- targetSdkVersion = Integer.parseInt(findProperty('android.targetSdkVersion') ?: '34')\n- kotlinVersion = findProperty('android.kotlinVersion') ?: '1.9.23'\n-\n- ndkVersion = \"26.1.10909125\"\n- }\n- repositories {\n- google()\n- mavenCentral()\n- }\n- dependencies {\n- classpath('com.android.tools.build:gradle')\n- classpath('com.facebook.react:react-native-gradle-plugin')\n- classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')\n- }\n+ repositories {\n+ google()\n+ mavenCentral()\n+ }\n+ dependencies {\n+ classpath('com.android.tools.build:gradle')\n+ classpath('com.facebook.react:react-native-gradle-plugin')\n+ classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')\n+ }\n }\n \n-apply plugin: \"com.facebook.react.rootproject\"\n-\n allprojects {\n- repositories {\n- maven {\n- // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n- url(new File(['node', '--print', \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim(), '../android'))\n- }\n- maven {\n- // Android JSC is installed from npm\n- url(new File(['node', '--print', \"require.resolve('jsc-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), '../dist'))\n- }\n-\n- google()\n- mavenCentral()\n- maven { url 'https://www.jitpack.io' }\n- }\n+ repositories {\n+ google()\n+ mavenCentral()\n+ maven { url 'https://www.jitpack.io' }\n+ }\n }\n+\n+apply plugin: \"expo-root-project\"\n+apply plugin: \"com.facebook.react.rootproject\"\ndiff --git a/templates/expo-template-bare-minimum/android/gitignore b/templates/expo-template-bare-minimum/android/gitignore\nindex 8a6be077181..1ea9b6464ec 100644\n--- a/templates/expo-template-bare-minimum/android/gitignore\n+++ b/templates/expo-template-bare-minimum/android/gitignore\n@@ -12,5 +12,8 @@ local.properties\n *.hprof\n .cxx/\n \n+# generated inline modules\n+app/src/main/java/inline/\n+\n # Bundle artifacts\n *.jsbundle\ndiff --git a/templates/expo-template-bare-minimum/android/gradle.properties b/templates/expo-template-bare-minimum/android/gradle.properties\nindex 40220def8da..97271b9456f 100644\n--- a/templates/expo-template-bare-minimum/android/gradle.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle.properties\n@@ -15,16 +15,13 @@ org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m\n # When configured, Gradle will run in incubating parallel mode.\n # This option should only be used with decoupled projects. More details, visit\n # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n-# org.gradle.parallel=true\n+org.gradle.parallel=true\n \n # AndroidX package structure to make it clearer which packages are bundled with the\n # Android operating system, and which are packaged with your app's APK\n # https://developer.android.com/topic/libraries/support-library/androidx-rn\n android.useAndroidX=true\n \n-# Automatically convert third-party libraries to use AndroidX\n-android.enableJetifier=true\n-\n # Enable AAPT2 PNG crunching\n android.enablePngCrunchInReleaseBuilds=true\n \n@@ -38,12 +35,17 @@ reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64\n # your application. You should enable this flag either if you want\n # to write custom TurboModules/Fabric components OR use libraries that\n # are providing them.\n-newArchEnabled=false\n+newArchEnabled=true\n \n # Use this property to enable or disable the Hermes JS engine.\n # If set to false, you will be using JSC instead.\n hermesEnabled=true\n \n+# Use this property to enable edge-to-edge display support.\n+# This allows your app to draw behind system bars for an immersive UI.\n+# Note: Only works with ReactActivity and should not be used with custom Activity.\n+edgeToEdgeEnabled=true\n+\n # Enable GIF support in React Native images (~200 B increase)\n expo.gif.enabled=true\n # Enable webp support in React Native images (~85 KB increase)\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar\nindex e6441136f3d..61285a659d1 100644\nBinary files a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar and b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar differ\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\nindex 6f7a6eb33e8..37f78a6af83 100644\n--- a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n@@ -1,6 +1,6 @@\n distributionBase=GRADLE_USER_HOME\n distributionPath=wrapper/dists\n-distributionUrl=https\\://services.gradle.org/distributions/gradle-8.8-all.zip\n+distributionUrl=https\\://services.gradle.org/distributions/gradle-9.3.1-bin.zip\n networkTimeout=10000\n validateDistributionUrl=true\n zipStoreBase=GRADLE_USER_HOME\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew b/templates/expo-template-bare-minimum/android/gradlew\nindex 1aa94a42690..adff685a034 100755\n--- a/templates/expo-template-bare-minimum/android/gradlew\n+++ b/templates/expo-template-bare-minimum/android/gradlew\n@@ -1,7 +1,7 @@\n #!/bin/sh\n \n #\n-# Copyright © 2015-2021 the original authors.\n+# Copyright © 2015 the original authors.\n #\n # Licensed under the Apache License, Version 2.0 (the \"License\");\n # you may not use this file except in compliance with the License.\n@@ -15,6 +15,8 @@\n # See the License for the specific language governing permissions and\n # limitations under the License.\n #\n+# SPDX-License-Identifier: Apache-2.0\n+#\n \n ##############################################################################\n #\n@@ -55,7 +57,7 @@\n # Darwin, MinGW, and NonStop.\n #\n # (3) This script is generated from the Groovy template\n-# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt\n+# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt\n # within the Gradle project.\n #\n # You can find Gradle at https://github.com/gradle/gradle/.\n@@ -84,7 +86,7 @@ done\n # shellcheck disable=SC2034\n APP_BASE_NAME=${0##*/}\n # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)\n-APP_HOME=$( cd \"${APP_HOME:-./}\" > /dev/null && pwd -P ) || exit\n+APP_HOME=$( cd -P \"${APP_HOME:-./}\" > /dev/null && printf '%s\\n' \"$PWD\" ) || exit\n \n # Use the maximum available, or set MAX_FD != -1 to use that value.\n MAX_FD=maximum\n@@ -112,7 +114,6 @@ case \"$( uname )\" in #(\n NONSTOP* ) nonstop=true ;;\n esac\n \n-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n \n \n # Determine the Java command to use to start the JVM.\n@@ -170,7 +171,6 @@ fi\n # For Cygwin or MSYS, switch paths to Windows format before running java\n if \"$cygwin\" || \"$msys\" ; then\n APP_HOME=$( cygpath --path --mixed \"$APP_HOME\" )\n- CLASSPATH=$( cygpath --path --mixed \"$CLASSPATH\" )\n \n JAVACMD=$( cygpath --unix \"$JAVACMD\" )\n \n@@ -203,15 +203,14 @@ fi\n DEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n \n # Collect all arguments for the java command:\n-# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,\n+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,\n # and any embedded shellness will be escaped.\n # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be\n # treated as '${Hostname}' itself on the command line.\n \n set -- \\\n \"-Dorg.gradle.appname=$APP_BASE_NAME\" \\\n- -classpath \"$CLASSPATH\" \\\n- org.gradle.wrapper.GradleWrapperMain \\\n+ -jar \"$APP_HOME/gradle/wrapper/gradle-wrapper.jar\" \\\n \"$@\"\n \n # Stop when \"xargs\" is not available.\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew.bat b/templates/expo-template-bare-minimum/android/gradlew.bat\nindex 7101f8e4676..39baf4d6846 100644\n--- a/templates/expo-template-bare-minimum/android/gradlew.bat\n+++ b/templates/expo-template-bare-minimum/android/gradlew.bat\n@@ -1,3 +1,8 @@\n+@REM Copyright (c) Meta Platforms, Inc. and affiliates.\r\n+@REM\r\n+@REM This source code is licensed under the MIT license found in the\r\n+@REM LICENSE file in the root directory of this source tree.\r\n+\r\n @rem\r\n @rem Copyright 2015 the original author or authors.\r\n @rem\r\n@@ -13,6 +18,8 @@\n @rem See the License for the specific language governing permissions and\r\n @rem limitations under the License.\r\n @rem\r\n+@rem SPDX-License-Identifier: Apache-2.0\r\n+@rem\r\n \r\n @if \"%DEBUG%\"==\"\" @echo off\r\n @rem ##########################################################################\r\n@@ -68,11 +75,10 @@ goto fail\n :execute\r\n @rem Setup the command line\r\n \r\n-set CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\r\n \r\n \r\n @rem Execute Gradle\r\n-\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\r\n+\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -jar \"%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\" %*\r\n \r\n :end\r\n @rem End local scope for the variables with windows NT shell\r\ndiff --git a/templates/expo-template-bare-minimum/android/settings.gradle b/templates/expo-template-bare-minimum/android/settings.gradle\nindex 80b1bc3267b..7fe91512213 100644\n--- a/templates/expo-template-bare-minimum/android/settings.gradle\n+++ b/templates/expo-template-bare-minimum/android/settings.gradle\n@@ -1,66 +1,39 @@\n pluginManagement {\n- def version = providers.exec {\n- commandLine(\"node\", \"-e\", \"console.log(require('react-native/package.json').version);\")\n- }.standardOutput.asText.get().trim()\n- def (_, reactNativeMinor, reactNativePatch) = version.split(\"-\")[0].tokenize('.').collect { it.toInteger() }\n-\n- includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().toString())\n- if(reactNativeMinor == 74 && reactNativePatch <= 3){\n- includeBuild(\"react-settings-plugin\")\n- }\n+ def reactNativeGradlePlugin = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\")\n+ }.standardOutput.asText.get().trim()\n+ ).getParentFile().absolutePath\n+ includeBuild(reactNativeGradlePlugin)\n+ \n+ def expoPluginsPath = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('expo-modules-autolinking/package.json', { paths: [require.resolve('expo/package.json')] })\")\n+ }.standardOutput.asText.get().trim(),\n+ \"../android/expo-gradle-plugin\"\n+ ).absolutePath\n+ includeBuild(expoPluginsPath)\n }\n \n-plugins { id(\"com.facebook.react.settings\") }\n-\n-def getRNMinorVersion() {\n- def version = providers.exec {\n- commandLine(\"node\", \"-e\", \"console.log(require('react-native/package.json').version);\")\n- }.standardOutput.asText.get().trim()\n-\n- def coreVersion = version.split(\"-\")[0]\n- def (major, minor, patch) = coreVersion.tokenize('.').collect { it.toInteger() }\n-\n- return minor\n+plugins {\n+ id(\"com.facebook.react.settings\")\n+ id(\"expo-autolinking-settings\")\n }\n \n-if (getRNMinorVersion() >= 75) {\n- extensions.configure(com.facebook.react.ReactSettingsExtension) { ex ->\n- if (System.getenv('EXPO_UNSTABLE_CORE_AUTOLINKING') == '1') {\n- println('\\u001B[32mUsing expo-modules-autolinking as core autolinking source\\u001B[0m')\n- def command = [\n- 'node',\n- '--no-warnings',\n- '--eval',\n- 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n- 'react-native-config',\n- '--json',\n- '--platform',\n- 'android'\n- ].toList()\n- ex.autolinkLibrariesFromCommand(command)\n- } else {\n- ex.autolinkLibrariesFromCommand()\n- }\n+extensions.configure(com.facebook.react.ReactSettingsExtension) { ex ->\n+ if (System.getenv('EXPO_USE_COMMUNITY_AUTOLINKING') == '1') {\n+ ex.autolinkLibrariesFromCommand()\n+ } else {\n+ ex.autolinkLibrariesFromCommand(expoAutolinking.rnConfigCommand)\n }\n }\n+expoAutolinking.useExpoModules()\n \n rootProject.name = 'HelloWorld'\n \n-dependencyResolutionManagement {\n- versionCatalogs {\n- reactAndroidLibs {\n- from(files(new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim(), \"../gradle/libs.versions.toml\")))\n- }\n- }\n-}\n-\n-apply from: new File([\"node\", \"--print\", \"require.resolve('expo/package.json')\"].execute(null, rootDir).text.trim(), \"../scripts/autolinking.gradle\");\n-useExpoModules()\n-\n-if (getRNMinorVersion() < 75) {\n- apply from: new File([\"node\", \"--print\", \"require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), \"../native_modules.gradle\");\n- applyNativeModulesSettingsGradle(settings)\n-}\n+expoAutolinking.useExpoVersionCatalog()\n \n include ':app'\n-includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile())\n+includeBuild(expoAutolinking.reactNativeGradlePlugin)\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\nindex f945940c256..39fa5afe55b 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n@@ -3,33 +3,25 @@\n \tarchiveVersion = 1;\n \tclasses = {\n \t};\n-\tobjectVersion = 46;\n+\tobjectVersion = 54;\n \tobjects = {\n \n /* Begin PBXBuildFile section */\n-\t\t13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };\n \t\t13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };\n-\t\t13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };\n \t\t3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; };\n-\t\t96905EF65AED1B983A6B3ABC /* libPods-HelloWorld.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */; };\n-\t\tB18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; };\n \t\tBB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; };\n+\t\tF11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F11748412D0307B40044C1D9 /* AppDelegate.swift */; };\n /* End PBXBuildFile section */\n \n /* Begin PBXFileReference section */\n \t\t13B07F961A680F5B00A75B9A /* HelloWorld.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloWorld.app; sourceTree = BUILT_PRODUCTS_DIR; };\n-\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = HelloWorld/AppDelegate.h; sourceTree = \"\"; };\n-\t\t13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = HelloWorld/AppDelegate.mm; sourceTree = \"\"; };\n \t\t13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = HelloWorld/Images.xcassets; sourceTree = \"\"; };\n \t\t13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = HelloWorld/Info.plist; sourceTree = \"\"; };\n-\t\t13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = HelloWorld/main.m; sourceTree = \"\"; };\n-\t\t58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-HelloWorld.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n-\t\t6C2E3173556A471DD304B334 /* 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 = \"\"; };\n-\t\t7A4D352CD337FB3A3BF06240 /* 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 = \"\"; };\n \t\tAA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = HelloWorld/SplashScreen.storyboard; sourceTree = \"\"; };\n \t\tBB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = \"\"; };\n \t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };\n-\t\tFAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = \"Pods/Target Support Files/Pods-HelloWorld/ExpoModulesProvider.swift\"; sourceTree = \"\"; };\n+\t\tF11748412D0307B40044C1D9 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = HelloWorld/AppDelegate.swift; sourceTree = \"\"; };\n+\t\tF11748442D0722820044C1D9 /* HelloWorld-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = \"HelloWorld-Bridging-Header.h\"; path = \"HelloWorld/HelloWorld-Bridging-Header.h\"; sourceTree = \"\"; };\n /* End PBXFileReference section */\n \n /* Begin PBXFrameworksBuildPhase section */\n@@ -37,7 +29,6 @@\n \t\t\tisa = PBXFrameworksBuildPhase;\n \t\t\tbuildActionMask = 2147483647;\n \t\t\tfiles = (\n-\t\t\t\t96905EF65AED1B983A6B3ABC /* libPods-HelloWorld.a in Frameworks */,\n \t\t\t);\n \t\t\trunOnlyForDeploymentPostprocessing = 0;\n \t\t};\n@@ -47,12 +38,11 @@\n \t\t13B07FAE1A68108700A75B9A /* HelloWorld */ = {\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n+\t\t\t\tF11748412D0307B40044C1D9 /* AppDelegate.swift */,\n+\t\t\t\tF11748442D0722820044C1D9 /* HelloWorld-Bridging-Header.h */,\n \t\t\t\tBB2F792B24A3F905000567C9 /* Supporting */,\n-\t\t\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */,\n-\t\t\t\t13B07FB01A68108700A75B9A /* AppDelegate.mm */,\n \t\t\t\t13B07FB51A68108700A75B9A /* Images.xcassets */,\n \t\t\t\t13B07FB61A68108700A75B9A /* Info.plist */,\n-\t\t\t\t13B07FB71A68108700A75B9A /* main.m */,\n \t\t\t\tAA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */,\n \t\t\t);\n \t\t\tname = HelloWorld;\n@@ -62,7 +52,6 @@\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n \t\t\t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */,\n-\t\t\t\t58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */,\n \t\t\t);\n \t\t\tname = Frameworks;\n \t\t\tsourceTree = \"\";\n@@ -81,8 +70,6 @@\n \t\t\t\t832341AE1AAA6A7D00B99B32 /* Libraries */,\n \t\t\t\t83CBBA001A601CBA00E9B192 /* Products */,\n \t\t\t\t2D16E6871FA4F8E400B85C8A /* Frameworks */,\n-\t\t\t\tD65327D7A22EEC0BE12398D9 /* Pods */,\n-\t\t\t\tD7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */,\n \t\t\t);\n \t\t\tindentWidth = 2;\n \t\t\tsourceTree = \"\";\n@@ -97,14 +84,6 @@\n \t\t\tname = Products;\n \t\t\tsourceTree = \"\";\n \t\t};\n-\t\t92DBD88DE9BF7D494EA9DA96 /* HelloWorld */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\tFAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */,\n-\t\t\t);\n-\t\t\tname = HelloWorld;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n \t\tBB2F792B24A3F905000567C9 /* Supporting */ = {\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n@@ -114,23 +93,6 @@\n \t\t\tpath = HelloWorld/Supporting;\n \t\t\tsourceTree = \"\";\n \t\t};\n-\t\tD65327D7A22EEC0BE12398D9 /* Pods */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\t6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */,\n-\t\t\t\t7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */,\n-\t\t\t);\n-\t\t\tpath = Pods;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n-\t\tD7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\t92DBD88DE9BF7D494EA9DA96 /* HelloWorld */,\n-\t\t\t);\n-\t\t\tname = ExpoModulesProviders;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n /* End PBXGroup section */\n \n /* Begin PBXNativeTarget section */\n@@ -206,6 +168,8 @@\n \t\t\tfiles = (\n \t\t\t);\n \t\t\tinputPaths = (\n+\t\t\t\t\"$(SRCROOT)/.xcode.env\",\n+\t\t\t\t\"$(SRCROOT)/.xcode.env.local\",\n \t\t\t);\n \t\t\tname = \"Bundle React Native code and images\";\n \t\t\toutputPaths = (\n@@ -265,9 +229,7 @@\n \t\t\tisa = PBXSourcesBuildPhase;\n \t\t\tbuildActionMask = 2147483647;\n \t\t\tfiles = (\n-\t\t\t\t13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,\n-\t\t\t\t13B07FC11A68108700A75B9A /* main.m in Sources */,\n-\t\t\t\tB18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */,\n+\t\t\t\tF11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */,\n \t\t\t);\n \t\t\trunOnlyForDeploymentPostprocessing = 0;\n \t\t};\n@@ -276,7 +238,6 @@\n /* Begin XCBuildConfiguration section */\n \t\t13B07F941A680F5B00A75B9A /* Debug */ = {\n \t\t\tisa = XCBuildConfiguration;\n-\t\t\tbaseConfigurationReference = 6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */;\n \t\t\tbuildSettings = {\n \t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n@@ -287,8 +248,12 @@\n \t\t\t\t\t\"FB_SONARKIT_ENABLED=1\",\n \t\t\t\t);\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t\t\"@executable_path/Frameworks\",\n+\t\t\t\t);\n+\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.4;\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -297,6 +262,7 @@\n \t\t\t\t);\n \t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = org.name.HelloWorld;\n \t\t\t\tPRODUCT_NAME = HelloWorld;\n+\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"HelloWorld/HelloWorld-Bridging-Header.h\";\n \t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n \t\t\t\tSWIFT_VERSION = 5.0;\n \t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n@@ -305,14 +271,17 @@\n \t\t};\n \t\t13B07F951A680F5B00A75B9A /* Release */ = {\n \t\t\tisa = XCBuildConfiguration;\n-\t\t\tbaseConfigurationReference = 7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */;\n \t\t\tbuildSettings = {\n \t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n \t\t\t\tCURRENT_PROJECT_VERSION = 1;\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t\t\"@executable_path/Frameworks\",\n+\t\t\t\t);\n+\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.4;\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -321,6 +290,7 @@\n \t\t\t\t);\n \t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = org.name.HelloWorld;\n \t\t\t\tPRODUCT_NAME = HelloWorld;\n+\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"HelloWorld/HelloWorld-Bridging-Header.h\";\n \t\t\t\tSWIFT_VERSION = 5.0;\n \t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n \t\t\t};\n@@ -373,8 +343,11 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t/usr/lib/swift,\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t);\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n \t\t\t\tONLY_ACTIVE_ARCH = YES;\n@@ -422,8 +395,11 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t/usr/lib/swift,\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t);\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n \t\t\t\tSDKROOT = iphoneos;\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\nnew file mode 100644\nindex 00000000000..9670a1ff07e\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\n@@ -0,0 +1,69 @@\n+internal import Expo\n+import React\n+import ReactAppDependencyProvider\n+\n+@main\n+class AppDelegate: ExpoAppDelegate {\n+ var window: UIWindow?\n+\n+ var reactNativeDelegate: ExpoReactNativeFactoryDelegate?\n+ var reactNativeFactory: RCTReactNativeFactory?\n+\n+ public override func application(\n+ _ application: UIApplication,\n+ didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil\n+ ) -> Bool {\n+ let delegate = ReactNativeDelegate()\n+ let factory = ExpoReactNativeFactory(delegate: delegate)\n+ delegate.dependencyProvider = RCTAppDependencyProvider()\n+\n+ reactNativeDelegate = delegate\n+ reactNativeFactory = factory\n+\n+#if os(iOS) || os(tvOS)\n+ window = UIWindow(frame: UIScreen.main.bounds)\n+ factory.startReactNative(\n+ withModuleName: \"main\",\n+ in: window,\n+ launchOptions: launchOptions)\n+#endif\n+\n+ return super.application(application, didFinishLaunchingWithOptions: launchOptions)\n+ }\n+\n+ // Linking API\n+ public override func application(\n+ _ app: UIApplication,\n+ open url: URL,\n+ options: [UIApplication.OpenURLOptionsKey: Any] = [:]\n+ ) -> Bool {\n+ return super.application(app, open: url, options: options) || RCTLinkingManager.application(app, open: url, options: options)\n+ }\n+\n+ // Universal Links\n+ public override func application(\n+ _ application: UIApplication,\n+ continue userActivity: NSUserActivity,\n+ restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void\n+ ) -> Bool {\n+ let result = RCTLinkingManager.application(application, continue: userActivity, restorationHandler: restorationHandler)\n+ return super.application(application, continue: userActivity, restorationHandler: restorationHandler) || result\n+ }\n+}\n+\n+class ReactNativeDelegate: ExpoReactNativeFactoryDelegate {\n+ // Extension point for config-plugins\n+\n+ override func sourceURL(for bridge: RCTBridge) -> URL? {\n+ // needed to return the correct URL for expo-dev-client.\n+ bridge.bundleURL ?? bundleURL()\n+ }\n+\n+ override func bundleURL() -> URL? {\n+#if DEBUG\n+ return RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: \".expo/.virtual-metro-entry\")\n+#else\n+ return Bundle.main.url(forResource: \"main\", withExtension: \"jsbundle\")\n+#endif\n+ }\n+}\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h b/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h\nnew file mode 100644\nindex 00000000000..8361941afc2\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h\n@@ -0,0 +1,3 @@\n+//\n+// Use this file to import your target's public headers that you would like to expose to Swift.\n+//\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist b/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist\nindex 53d78e89033..596dc7ce6b5 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist\n@@ -24,6 +24,8 @@\n \t1\n \tLSRequiresIPhoneOS\n \t\n+\tLSMinimumSystemVersion\n+\t12.0\n \tNSAppTransportSecurity\n \t\n \t\tNSAllowsArbitraryLoads\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\nindex 24eec3df5cb..58d21796e1d 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n@@ -1,91 +1,47 @@\n \n-\n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n+\n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n \ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex 57c1dd38343..c3158e3fb9b 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -4,39 +4,43 @@ require File.join(File.dirname(`node --print \"require.resolve('react-native/pack\n require 'json'\n podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}\n \n-ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0'\n-ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+def ccache_enabled?(podfile_properties)\n+ # Environment variable takes precedence\n+ return ENV['USE_CCACHE'] == '1' if ENV['USE_CCACHE']\n \n-use_autolinking_method_symbol = ('use' + '_native' + '_modules!').to_sym\n-origin_autolinking_method = self.method(use_autolinking_method_symbol)\n-self.define_singleton_method(use_autolinking_method_symbol) do |*args|\n- if ENV['EXPO_UNSTABLE_CORE_AUTOLINKING'] == '1'\n- Pod::UI.puts('Using expo-modules-autolinking as core autolinking source'.green)\n+ # Fall back to Podfile properties\n+ podfile_properties['apple.ccacheEnabled'] == 'true'\n+end\n+\n+ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+ENV['RCT_USE_RN_DEP'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1'\n+ENV['RCT_USE_PREBUILT_RNCORE'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1'\n+ENV['RCT_HERMES_V1_ENABLED'] ||= '1' if podfile_properties['expo.useHermesV1'] == 'true'\n+ENV['EXPO_USE_PRECOMPILED_MODULES'] ||= '1' if podfile_properties['EXPO_USE_PRECOMPILED_MODULES'] != 'false'\n+platform :ios, podfile_properties['ios.deploymentTarget'] || '16.4'\n+\n+prepare_react_native_project!\n+\n+target 'HelloWorld' do\n+ use_expo_modules!\n+\n+ if ENV['EXPO_USE_COMMUNITY_AUTOLINKING'] == '1'\n+ config_command = ['node', '-e', \"process.argv=['', '', 'config'];require('@react-native-community/cli').run()\"];\n+ else\n config_command = [\n 'node',\n '--no-warnings',\n '--eval',\n- 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n+ 'require(\\'expo/bin/autolinking\\')',\n+ 'expo-modules-autolinking',\n 'react-native-config',\n '--json',\n '--platform',\n 'ios'\n ]\n- origin_autolinking_method.call(config_command)\n- else\n- origin_autolinking_method.call()\n end\n-end\n-\n-platform :ios, podfile_properties['ios.deploymentTarget'] || '13.4'\n-install! 'cocoapods',\n- :deterministic_uuids => false\n \n-prepare_react_native_project!\n-\n-target 'HelloWorld' do\n- use_expo_modules!\n- config = use_native_modules!\n+ config = use_native_modules!(config_command)\n \n use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks']\n use_frameworks! :linkage => ENV['USE_FRAMEWORKS'].to_sym if ENV['USE_FRAMEWORKS']\n@@ -54,26 +58,7 @@ target 'HelloWorld' do\n installer,\n config[:reactNativePath],\n :mac_catalyst_enabled => false,\n- :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true',\n+ :ccache_enabled => ccache_enabled?(podfile_properties),\n )\n-\n- # This is necessary for Xcode 14, because it signs resource bundles by default\n- # when building for devices.\n- installer.target_installation_results.pod_target_installation_results\n- .each do |pod_name, target_installation_result|\n- target_installation_result.resource_bundle_targets.each do |resource_bundle_target|\n- resource_bundle_target.build_configurations.each do |config|\n- config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'\n- end\n- end\n- end\n- end\n-\n- post_integrate do |installer|\n- begin\n- expo_patch_react_imports!(installer)\n- rescue => e\n- Pod::UI.warn e\n- end\n end\n end\ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex 563853071f0..3e151175775 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -1,7 +1,8 @@\n {\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n- \"version\": \"51.0.56\",\n+ \"license\": \"0BSD\",\n+ \"version\": \"56.0.13\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -10,12 +11,14 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~51.0.28\",\n- \"expo-status-bar\": \"~1.12.1\",\n- \"react\": \"18.2.0\",\n- \"react-native\": \"0.74.5\"\n+ \"expo\": \"~56.0.0-preview.13\",\n+ \"expo-status-bar\": \"~56.0.4\",\n+ \"react\": \"19.2.3\",\n+ \"react-native\": \"0.85.3\"\n },\n- \"devDependencies\": {\n- \"@babel/core\": \"^7.20.0\"\n+ \"publishConfig\": {\n+ \"executableFiles\": [\n+ \"./android/gradlew\"\n+ ]\n }\n }\n","52..56":"diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle\nindex 84879d83acd..fc185e53bc3 100644\n--- a/templates/expo-template-bare-minimum/android/app/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/app/build.gradle\n@@ -11,9 +11,10 @@ def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath()\n react {\n entryFile = file([\"node\", \"-e\", \"require('expo/scripts/resolveAppEntry')\", projectRoot, \"android\", \"absolute\"].execute(null, rootDir).text.trim())\n reactNativeDir = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n- hermesCommand = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/sdks/hermesc/%OS-BIN%/hermesc\"\n+ hermesCommand = new File([\"node\", \"--print\", \"require.resolve('hermes-compiler/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/hermesc/%OS-BIN%/hermesc\"\n codegenDir = new File([\"node\", \"--print\", \"require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n \n+ enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean()\n // Use Expo CLI to bundle the app, this ensures the Metro config\n // works correctly with Expo projects.\n cliFile = new File([\"node\", \"--print\", \"require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })\"].execute(null, rootDir).text.trim())\n@@ -63,9 +64,9 @@ react {\n }\n \n /**\n- * Set this to true to Run Proguard on Release builds to minify the Java bytecode.\n+ * Set this to true in release builds to optimize the app using [R8](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization).\n */\n-def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInReleaseBuilds') ?: false).toBoolean()\n+def enableMinifyInReleaseBuilds = (findProperty('android.enableMinifyInReleaseBuilds') ?: false).toBoolean()\n \n /**\n * The preferred build flavor of JavaScriptCore (JSC)\n@@ -78,7 +79,7 @@ def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInRelea\n * give correct results when using with locales other than en-US. Note that\n * this variant is about 6MiB larger per architecture than default.\n */\n-def jscFlavor = 'org.webkit:android-jsc:+'\n+def jscFlavor = 'io.github.react-native-community:jsc-android:2026004.+'\n \n android {\n ndkVersion rootProject.ext.ndkVersion\n@@ -93,6 +94,8 @@ android {\n targetSdkVersion rootProject.ext.targetSdkVersion\n versionCode 1\n versionName \"1.0\"\n+\n+ buildConfigField \"String\", \"REACT_NATIVE_RELEASE_LEVEL\", \"\\\"${findProperty('reactNativeReleaseLevel') ?: 'stable'}\\\"\"\n }\n signingConfigs {\n debug {\n@@ -110,15 +113,18 @@ android {\n // Caution! In production, you need to generate your own keystore file.\n // see https://reactnative.dev/docs/signed-apk-android.\n signingConfig signingConfigs.debug\n- shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false)\n- minifyEnabled enableProguardInReleaseBuilds\n+ def enableShrinkResources = findProperty('android.enableShrinkResourcesInReleaseBuilds') ?: 'false'\n+ shrinkResources enableShrinkResources.toBoolean()\n+ minifyEnabled enableMinifyInReleaseBuilds\n proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n- crunchPngs (findProperty('android.enablePngCrunchInReleaseBuilds')?.toBoolean() ?: true)\n+ def enablePngCrunchInRelease = findProperty('android.enablePngCrunchInReleaseBuilds') ?: 'true'\n+ crunchPngs enablePngCrunchInRelease.toBoolean()\n }\n }\n packagingOptions {\n jniLibs {\n- useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false)\n+ def enableLegacyPackaging = findProperty('expo.useLegacyPackaging') ?: 'false'\n+ useLegacyPackaging enableLegacyPackaging.toBoolean()\n }\n }\n androidResources {\n@@ -156,15 +162,15 @@ dependencies {\n \n if (isGifEnabled) {\n // For animated gif support\n- implementation(\"com.facebook.fresco:animated-gif:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-gif:${expoLibs.versions.fresco.get()}\")\n }\n \n if (isWebpEnabled) {\n // For webp support\n- implementation(\"com.facebook.fresco:webpsupport:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:webpsupport:${expoLibs.versions.fresco.get()}\")\n if (isWebpAnimatedEnabled) {\n // Animated webp support\n- implementation(\"com.facebook.fresco:animated-webp:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-webp:${expoLibs.versions.fresco.get()}\")\n }\n }\n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\nnew file mode 100644\nindex 00000000000..3ec2507bab7\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\n@@ -0,0 +1,7 @@\n+\n+\n+ \n+\n+ \n+\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\nindex 150248b6b3c..14bdba124ab 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n@@ -1,12 +1,13 @@\n-\n+\n \n \n \n \n \n \n- \n- \n+ \n+ \n \n \n \n@@ -19,7 +20,7 @@\n \n \n \n- \n+ \n \n \n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\nindex e61349d1301..cbb5ddb85d0 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n@@ -5,48 +5,36 @@ import android.content.res.Configuration\n \n import com.facebook.react.PackageList\n import com.facebook.react.ReactApplication\n-import com.facebook.react.ReactNativeHost\n+import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative\n import com.facebook.react.ReactPackage\n import com.facebook.react.ReactHost\n-import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load\n-import com.facebook.react.defaults.DefaultReactNativeHost\n-import com.facebook.react.soloader.OpenSourceMergedSoMapping\n-import com.facebook.soloader.SoLoader\n+import com.facebook.react.common.ReleaseLevel\n+import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint\n \n import expo.modules.ApplicationLifecycleDispatcher\n-import expo.modules.ReactNativeHostWrapper\n+import expo.modules.ExpoReactHostFactory\n \n class MainApplication : Application(), ReactApplication {\n \n- override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper(\n- this,\n- object : DefaultReactNativeHost(this) {\n- override fun getPackages(): List {\n- val packages = PackageList(this).packages\n- // Packages that cannot be autolinked yet can be added manually here, for example:\n- // packages.add(new MyReactNativePackage());\n- return packages\n- }\n-\n- override fun getJSMainModuleName(): String = \".expo/.virtual-metro-entry\"\n-\n- override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG\n-\n- override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED\n- override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED\n- }\n- )\n-\n- override val reactHost: ReactHost\n- get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost)\n+ override val reactHost: ReactHost by lazy {\n+ ExpoReactHostFactory.getDefaultReactHost(\n+ context = applicationContext,\n+ packageList =\n+ PackageList(this).packages.apply {\n+ // Packages that cannot be autolinked yet can be added manually here, for example:\n+ // add(MyReactNativePackage())\n+ }\n+ )\n+ }\n \n override fun onCreate() {\n super.onCreate()\n- SoLoader.init(this, OpenSourceMergedSoMapping)\n- if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {\n- // If you opted-in for the New Architecture, we load the native entry point for this app.\n- load()\n+ DefaultNewArchitectureEntryPoint.releaseLevel = try {\n+ ReleaseLevel.valueOf(BuildConfig.REACT_NATIVE_RELEASE_LEVEL.uppercase())\n+ } catch (e: IllegalArgumentException) {\n+ ReleaseLevel.STABLE\n }\n+ loadReactNative(this)\n ApplicationLifecycleDispatcher.onApplicationCreate(this)\n }\n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\nindex 51fbc1e5a72..26f3404be26 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n@@ -1,14 +1,7 @@\n \n- \n- \n \ndiff --git a/templates/expo-template-bare-minimum/android/build.gradle b/templates/expo-template-bare-minimum/android/build.gradle\nindex abbcb8ec8a1..0554dd156c1 100644\n--- a/templates/expo-template-bare-minimum/android/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/build.gradle\n@@ -1,41 +1,24 @@\n // Top-level build file where you can add configuration options common to all sub-projects/modules.\n \n buildscript {\n- ext {\n- buildToolsVersion = findProperty('android.buildToolsVersion') ?: '35.0.0'\n- minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '24')\n- compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '35')\n- targetSdkVersion = Integer.parseInt(findProperty('android.targetSdkVersion') ?: '34')\n- kotlinVersion = findProperty('android.kotlinVersion') ?: '1.9.25'\n-\n- ndkVersion = \"26.1.10909125\"\n- }\n- repositories {\n- google()\n- mavenCentral()\n- }\n- dependencies {\n- classpath('com.android.tools.build:gradle')\n- classpath('com.facebook.react:react-native-gradle-plugin')\n- classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')\n- }\n+ repositories {\n+ google()\n+ mavenCentral()\n+ }\n+ dependencies {\n+ classpath('com.android.tools.build:gradle')\n+ classpath('com.facebook.react:react-native-gradle-plugin')\n+ classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')\n+ }\n }\n \n-apply plugin: \"com.facebook.react.rootproject\"\n-\n allprojects {\n- repositories {\n- maven {\n- // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n- url(new File(['node', '--print', \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim(), '../android'))\n- }\n- maven {\n- // Android JSC is installed from npm\n- url(new File(['node', '--print', \"require.resolve('jsc-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), '../dist'))\n- }\n-\n- google()\n- mavenCentral()\n- maven { url 'https://www.jitpack.io' }\n- }\n+ repositories {\n+ google()\n+ mavenCentral()\n+ maven { url 'https://www.jitpack.io' }\n+ }\n }\n+\n+apply plugin: \"expo-root-project\"\n+apply plugin: \"com.facebook.react.rootproject\"\ndiff --git a/templates/expo-template-bare-minimum/android/gitignore b/templates/expo-template-bare-minimum/android/gitignore\nindex 8a6be077181..1ea9b6464ec 100644\n--- a/templates/expo-template-bare-minimum/android/gitignore\n+++ b/templates/expo-template-bare-minimum/android/gitignore\n@@ -12,5 +12,8 @@ local.properties\n *.hprof\n .cxx/\n \n+# generated inline modules\n+app/src/main/java/inline/\n+\n # Bundle artifacts\n *.jsbundle\ndiff --git a/templates/expo-template-bare-minimum/android/gradle.properties b/templates/expo-template-bare-minimum/android/gradle.properties\nindex de47429c64c..97271b9456f 100644\n--- a/templates/expo-template-bare-minimum/android/gradle.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle.properties\n@@ -15,7 +15,7 @@ org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m\n # When configured, Gradle will run in incubating parallel mode.\n # This option should only be used with decoupled projects. More details, visit\n # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n-# org.gradle.parallel=true\n+org.gradle.parallel=true\n \n # AndroidX package structure to make it clearer which packages are bundled with the\n # Android operating system, and which are packaged with your app's APK\n@@ -35,12 +35,17 @@ reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64\n # your application. You should enable this flag either if you want\n # to write custom TurboModules/Fabric components OR use libraries that\n # are providing them.\n-newArchEnabled=false\n+newArchEnabled=true\n \n # Use this property to enable or disable the Hermes JS engine.\n # If set to false, you will be using JSC instead.\n hermesEnabled=true\n \n+# Use this property to enable edge-to-edge display support.\n+# This allows your app to draw behind system bars for an immersive UI.\n+# Note: Only works with ReactActivity and should not be used with custom Activity.\n+edgeToEdgeEnabled=true\n+\n # Enable GIF support in React Native images (~200 B increase)\n expo.gif.enabled=true\n # Enable webp support in React Native images (~85 KB increase)\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar\nindex a4b76b9530d..61285a659d1 100644\nBinary files a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar and b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar differ\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\nindex 79eb9d003fe..37f78a6af83 100644\n--- a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n@@ -1,6 +1,6 @@\n distributionBase=GRADLE_USER_HOME\n distributionPath=wrapper/dists\n-distributionUrl=https\\://services.gradle.org/distributions/gradle-8.10.2-all.zip\n+distributionUrl=https\\://services.gradle.org/distributions/gradle-9.3.1-bin.zip\n networkTimeout=10000\n validateDistributionUrl=true\n zipStoreBase=GRADLE_USER_HOME\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew b/templates/expo-template-bare-minimum/android/gradlew\nindex f5feea6d6b1..adff685a034 100755\n--- a/templates/expo-template-bare-minimum/android/gradlew\n+++ b/templates/expo-template-bare-minimum/android/gradlew\n@@ -1,7 +1,7 @@\n #!/bin/sh\n \n #\n-# Copyright © 2015-2021 the original authors.\n+# Copyright © 2015 the original authors.\n #\n # Licensed under the Apache License, Version 2.0 (the \"License\");\n # you may not use this file except in compliance with the License.\n@@ -86,8 +86,7 @@ done\n # shellcheck disable=SC2034\n APP_BASE_NAME=${0##*/}\n # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)\n-APP_HOME=$( cd -P \"${APP_HOME:-./}\" > /dev/null && printf '%s\n-' \"$PWD\" ) || exit\n+APP_HOME=$( cd -P \"${APP_HOME:-./}\" > /dev/null && printf '%s\\n' \"$PWD\" ) || exit\n \n # Use the maximum available, or set MAX_FD != -1 to use that value.\n MAX_FD=maximum\n@@ -115,7 +114,6 @@ case \"$( uname )\" in #(\n NONSTOP* ) nonstop=true ;;\n esac\n \n-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n \n \n # Determine the Java command to use to start the JVM.\n@@ -173,7 +171,6 @@ fi\n # For Cygwin or MSYS, switch paths to Windows format before running java\n if \"$cygwin\" || \"$msys\" ; then\n APP_HOME=$( cygpath --path --mixed \"$APP_HOME\" )\n- CLASSPATH=$( cygpath --path --mixed \"$CLASSPATH\" )\n \n JAVACMD=$( cygpath --unix \"$JAVACMD\" )\n \n@@ -206,15 +203,14 @@ fi\n DEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n \n # Collect all arguments for the java command:\n-# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,\n+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,\n # and any embedded shellness will be escaped.\n # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be\n # treated as '${Hostname}' itself on the command line.\n \n set -- \\\n \"-Dorg.gradle.appname=$APP_BASE_NAME\" \\\n- -classpath \"$CLASSPATH\" \\\n- org.gradle.wrapper.GradleWrapperMain \\\n+ -jar \"$APP_HOME/gradle/wrapper/gradle-wrapper.jar\" \\\n \"$@\"\n \n # Stop when \"xargs\" is not available.\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew.bat b/templates/expo-template-bare-minimum/android/gradlew.bat\nindex 9b42019c791..39baf4d6846 100644\n--- a/templates/expo-template-bare-minimum/android/gradlew.bat\n+++ b/templates/expo-template-bare-minimum/android/gradlew.bat\n@@ -1,3 +1,8 @@\n+@REM Copyright (c) Meta Platforms, Inc. and affiliates.\r\n+@REM\r\n+@REM This source code is licensed under the MIT license found in the\r\n+@REM LICENSE file in the root directory of this source tree.\r\n+\r\n @rem\r\n @rem Copyright 2015 the original author or authors.\r\n @rem\r\n@@ -70,11 +75,10 @@ goto fail\n :execute\r\n @rem Setup the command line\r\n \r\n-set CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\r\n \r\n \r\n @rem Execute Gradle\r\n-\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\r\n+\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -jar \"%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\" %*\r\n \r\n :end\r\n @rem End local scope for the variables with windows NT shell\r\ndiff --git a/templates/expo-template-bare-minimum/android/settings.gradle b/templates/expo-template-bare-minimum/android/settings.gradle\nindex 39b188e065c..7fe91512213 100644\n--- a/templates/expo-template-bare-minimum/android/settings.gradle\n+++ b/templates/expo-template-bare-minimum/android/settings.gradle\n@@ -1,38 +1,39 @@\n pluginManagement {\n- includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().toString())\n+ def reactNativeGradlePlugin = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\")\n+ }.standardOutput.asText.get().trim()\n+ ).getParentFile().absolutePath\n+ includeBuild(reactNativeGradlePlugin)\n+ \n+ def expoPluginsPath = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('expo-modules-autolinking/package.json', { paths: [require.resolve('expo/package.json')] })\")\n+ }.standardOutput.asText.get().trim(),\n+ \"../android/expo-gradle-plugin\"\n+ ).absolutePath\n+ includeBuild(expoPluginsPath)\n+}\n+\n+plugins {\n+ id(\"com.facebook.react.settings\")\n+ id(\"expo-autolinking-settings\")\n }\n-plugins { id(\"com.facebook.react.settings\") }\n \n extensions.configure(com.facebook.react.ReactSettingsExtension) { ex ->\n if (System.getenv('EXPO_USE_COMMUNITY_AUTOLINKING') == '1') {\n ex.autolinkLibrariesFromCommand()\n } else {\n- def command = [\n- 'node',\n- '--no-warnings',\n- '--eval',\n- 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n- 'react-native-config',\n- '--json',\n- '--platform',\n- 'android'\n- ].toList()\n- ex.autolinkLibrariesFromCommand(command)\n+ ex.autolinkLibrariesFromCommand(expoAutolinking.rnConfigCommand)\n }\n }\n+expoAutolinking.useExpoModules()\n \n rootProject.name = 'HelloWorld'\n \n-dependencyResolutionManagement {\n- versionCatalogs {\n- reactAndroidLibs {\n- from(files(new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim(), \"../gradle/libs.versions.toml\")))\n- }\n- }\n-}\n-\n-apply from: new File([\"node\", \"--print\", \"require.resolve('expo/package.json')\"].execute(null, rootDir).text.trim(), \"../scripts/autolinking.gradle\");\n-useExpoModules()\n+expoAutolinking.useExpoVersionCatalog()\n \n include ':app'\n-includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile())\n+includeBuild(expoAutolinking.reactNativeGradlePlugin)\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\nindex 1ccb9b422d5..39fa5afe55b 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n@@ -3,33 +3,25 @@\n \tarchiveVersion = 1;\n \tclasses = {\n \t};\n-\tobjectVersion = 46;\n+\tobjectVersion = 54;\n \tobjects = {\n \n /* Begin PBXBuildFile section */\n-\t\t13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };\n \t\t13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };\n-\t\t13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };\n \t\t3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; };\n-\t\t96905EF65AED1B983A6B3ABC /* libPods-HelloWorld.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */; };\n-\t\tB18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; };\n \t\tBB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; };\n+\t\tF11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F11748412D0307B40044C1D9 /* AppDelegate.swift */; };\n /* End PBXBuildFile section */\n \n /* Begin PBXFileReference section */\n \t\t13B07F961A680F5B00A75B9A /* HelloWorld.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloWorld.app; sourceTree = BUILT_PRODUCTS_DIR; };\n-\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = HelloWorld/AppDelegate.h; sourceTree = \"\"; };\n-\t\t13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = HelloWorld/AppDelegate.mm; sourceTree = \"\"; };\n \t\t13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = HelloWorld/Images.xcassets; sourceTree = \"\"; };\n \t\t13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = HelloWorld/Info.plist; sourceTree = \"\"; };\n-\t\t13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = HelloWorld/main.m; sourceTree = \"\"; };\n-\t\t58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-HelloWorld.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n-\t\t6C2E3173556A471DD304B334 /* 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 = \"\"; };\n-\t\t7A4D352CD337FB3A3BF06240 /* 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 = \"\"; };\n \t\tAA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = HelloWorld/SplashScreen.storyboard; sourceTree = \"\"; };\n \t\tBB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = \"\"; };\n \t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };\n-\t\tFAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = \"Pods/Target Support Files/Pods-HelloWorld/ExpoModulesProvider.swift\"; sourceTree = \"\"; };\n+\t\tF11748412D0307B40044C1D9 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = HelloWorld/AppDelegate.swift; sourceTree = \"\"; };\n+\t\tF11748442D0722820044C1D9 /* HelloWorld-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = \"HelloWorld-Bridging-Header.h\"; path = \"HelloWorld/HelloWorld-Bridging-Header.h\"; sourceTree = \"\"; };\n /* End PBXFileReference section */\n \n /* Begin PBXFrameworksBuildPhase section */\n@@ -37,7 +29,6 @@\n \t\t\tisa = PBXFrameworksBuildPhase;\n \t\t\tbuildActionMask = 2147483647;\n \t\t\tfiles = (\n-\t\t\t\t96905EF65AED1B983A6B3ABC /* libPods-HelloWorld.a in Frameworks */,\n \t\t\t);\n \t\t\trunOnlyForDeploymentPostprocessing = 0;\n \t\t};\n@@ -47,12 +38,11 @@\n \t\t13B07FAE1A68108700A75B9A /* HelloWorld */ = {\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n+\t\t\t\tF11748412D0307B40044C1D9 /* AppDelegate.swift */,\n+\t\t\t\tF11748442D0722820044C1D9 /* HelloWorld-Bridging-Header.h */,\n \t\t\t\tBB2F792B24A3F905000567C9 /* Supporting */,\n-\t\t\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */,\n-\t\t\t\t13B07FB01A68108700A75B9A /* AppDelegate.mm */,\n \t\t\t\t13B07FB51A68108700A75B9A /* Images.xcassets */,\n \t\t\t\t13B07FB61A68108700A75B9A /* Info.plist */,\n-\t\t\t\t13B07FB71A68108700A75B9A /* main.m */,\n \t\t\t\tAA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */,\n \t\t\t);\n \t\t\tname = HelloWorld;\n@@ -62,7 +52,6 @@\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n \t\t\t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */,\n-\t\t\t\t58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */,\n \t\t\t);\n \t\t\tname = Frameworks;\n \t\t\tsourceTree = \"\";\n@@ -81,8 +70,6 @@\n \t\t\t\t832341AE1AAA6A7D00B99B32 /* Libraries */,\n \t\t\t\t83CBBA001A601CBA00E9B192 /* Products */,\n \t\t\t\t2D16E6871FA4F8E400B85C8A /* Frameworks */,\n-\t\t\t\tD65327D7A22EEC0BE12398D9 /* Pods */,\n-\t\t\t\tD7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */,\n \t\t\t);\n \t\t\tindentWidth = 2;\n \t\t\tsourceTree = \"\";\n@@ -97,14 +84,6 @@\n \t\t\tname = Products;\n \t\t\tsourceTree = \"\";\n \t\t};\n-\t\t92DBD88DE9BF7D494EA9DA96 /* HelloWorld */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\tFAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */,\n-\t\t\t);\n-\t\t\tname = HelloWorld;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n \t\tBB2F792B24A3F905000567C9 /* Supporting */ = {\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n@@ -114,23 +93,6 @@\n \t\t\tpath = HelloWorld/Supporting;\n \t\t\tsourceTree = \"\";\n \t\t};\n-\t\tD65327D7A22EEC0BE12398D9 /* Pods */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\t6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */,\n-\t\t\t\t7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */,\n-\t\t\t);\n-\t\t\tpath = Pods;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n-\t\tD7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\t92DBD88DE9BF7D494EA9DA96 /* HelloWorld */,\n-\t\t\t);\n-\t\t\tname = ExpoModulesProviders;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n /* End PBXGroup section */\n \n /* Begin PBXNativeTarget section */\n@@ -206,6 +168,8 @@\n \t\t\tfiles = (\n \t\t\t);\n \t\t\tinputPaths = (\n+\t\t\t\t\"$(SRCROOT)/.xcode.env\",\n+\t\t\t\t\"$(SRCROOT)/.xcode.env.local\",\n \t\t\t);\n \t\t\tname = \"Bundle React Native code and images\";\n \t\t\toutputPaths = (\n@@ -265,9 +229,7 @@\n \t\t\tisa = PBXSourcesBuildPhase;\n \t\t\tbuildActionMask = 2147483647;\n \t\t\tfiles = (\n-\t\t\t\t13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,\n-\t\t\t\t13B07FC11A68108700A75B9A /* main.m in Sources */,\n-\t\t\t\tB18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */,\n+\t\t\t\tF11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */,\n \t\t\t);\n \t\t\trunOnlyForDeploymentPostprocessing = 0;\n \t\t};\n@@ -276,7 +238,6 @@\n /* Begin XCBuildConfiguration section */\n \t\t13B07F941A680F5B00A75B9A /* Debug */ = {\n \t\t\tisa = XCBuildConfiguration;\n-\t\t\tbaseConfigurationReference = 6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */;\n \t\t\tbuildSettings = {\n \t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n@@ -287,8 +248,12 @@\n \t\t\t\t\t\"FB_SONARKIT_ENABLED=1\",\n \t\t\t\t);\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t\t\"@executable_path/Frameworks\",\n+\t\t\t\t);\n+\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.4;\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -297,6 +262,7 @@\n \t\t\t\t);\n \t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = org.name.HelloWorld;\n \t\t\t\tPRODUCT_NAME = HelloWorld;\n+\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"HelloWorld/HelloWorld-Bridging-Header.h\";\n \t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n \t\t\t\tSWIFT_VERSION = 5.0;\n \t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n@@ -305,14 +271,17 @@\n \t\t};\n \t\t13B07F951A680F5B00A75B9A /* Release */ = {\n \t\t\tisa = XCBuildConfiguration;\n-\t\t\tbaseConfigurationReference = 7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */;\n \t\t\tbuildSettings = {\n \t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n \t\t\t\tCURRENT_PROJECT_VERSION = 1;\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t\t\"@executable_path/Frameworks\",\n+\t\t\t\t);\n+\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.4;\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -321,6 +290,7 @@\n \t\t\t\t);\n \t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = org.name.HelloWorld;\n \t\t\t\tPRODUCT_NAME = HelloWorld;\n+\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"HelloWorld/HelloWorld-Bridging-Header.h\";\n \t\t\t\tSWIFT_VERSION = 5.0;\n \t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n \t\t\t};\n@@ -373,8 +343,11 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t/usr/lib/swift,\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t);\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n \t\t\t\tONLY_ACTIVE_ARCH = YES;\n@@ -422,8 +395,11 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t/usr/lib/swift,\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t);\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n \t\t\t\tSDKROOT = iphoneos;\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\nnew file mode 100644\nindex 00000000000..9670a1ff07e\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\n@@ -0,0 +1,69 @@\n+internal import Expo\n+import React\n+import ReactAppDependencyProvider\n+\n+@main\n+class AppDelegate: ExpoAppDelegate {\n+ var window: UIWindow?\n+\n+ var reactNativeDelegate: ExpoReactNativeFactoryDelegate?\n+ var reactNativeFactory: RCTReactNativeFactory?\n+\n+ public override func application(\n+ _ application: UIApplication,\n+ didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil\n+ ) -> Bool {\n+ let delegate = ReactNativeDelegate()\n+ let factory = ExpoReactNativeFactory(delegate: delegate)\n+ delegate.dependencyProvider = RCTAppDependencyProvider()\n+\n+ reactNativeDelegate = delegate\n+ reactNativeFactory = factory\n+\n+#if os(iOS) || os(tvOS)\n+ window = UIWindow(frame: UIScreen.main.bounds)\n+ factory.startReactNative(\n+ withModuleName: \"main\",\n+ in: window,\n+ launchOptions: launchOptions)\n+#endif\n+\n+ return super.application(application, didFinishLaunchingWithOptions: launchOptions)\n+ }\n+\n+ // Linking API\n+ public override func application(\n+ _ app: UIApplication,\n+ open url: URL,\n+ options: [UIApplication.OpenURLOptionsKey: Any] = [:]\n+ ) -> Bool {\n+ return super.application(app, open: url, options: options) || RCTLinkingManager.application(app, open: url, options: options)\n+ }\n+\n+ // Universal Links\n+ public override func application(\n+ _ application: UIApplication,\n+ continue userActivity: NSUserActivity,\n+ restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void\n+ ) -> Bool {\n+ let result = RCTLinkingManager.application(application, continue: userActivity, restorationHandler: restorationHandler)\n+ return super.application(application, continue: userActivity, restorationHandler: restorationHandler) || result\n+ }\n+}\n+\n+class ReactNativeDelegate: ExpoReactNativeFactoryDelegate {\n+ // Extension point for config-plugins\n+\n+ override func sourceURL(for bridge: RCTBridge) -> URL? {\n+ // needed to return the correct URL for expo-dev-client.\n+ bridge.bundleURL ?? bundleURL()\n+ }\n+\n+ override func bundleURL() -> URL? {\n+#if DEBUG\n+ return RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: \".expo/.virtual-metro-entry\")\n+#else\n+ return Bundle.main.url(forResource: \"main\", withExtension: \"jsbundle\")\n+#endif\n+ }\n+}\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h b/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h\nnew file mode 100644\nindex 00000000000..8361941afc2\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h\n@@ -0,0 +1,3 @@\n+//\n+// Use this file to import your target's public headers that you would like to expose to Swift.\n+//\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\nindex 447b4188985..58d21796e1d 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n@@ -1,11 +1,12 @@\n \n-\n+\n \n \n \n- \n+ \n \n \n+ \n \n \n \n@@ -29,6 +30,7 @@\n \n \n \n+ \n \n \n \n@@ -38,5 +40,8 @@\n \n \n \n+ \n+ \n+ \n \n \ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex f740040e7be..c3158e3fb9b 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -4,12 +4,20 @@ require File.join(File.dirname(`node --print \"require.resolve('react-native/pack\n require 'json'\n podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}\n \n-ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0'\n-ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+def ccache_enabled?(podfile_properties)\n+ # Environment variable takes precedence\n+ return ENV['USE_CCACHE'] == '1' if ENV['USE_CCACHE']\n \n-platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'\n-install! 'cocoapods',\n- :deterministic_uuids => false\n+ # Fall back to Podfile properties\n+ podfile_properties['apple.ccacheEnabled'] == 'true'\n+end\n+\n+ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+ENV['RCT_USE_RN_DEP'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1'\n+ENV['RCT_USE_PREBUILT_RNCORE'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1'\n+ENV['RCT_HERMES_V1_ENABLED'] ||= '1' if podfile_properties['expo.useHermesV1'] == 'true'\n+ENV['EXPO_USE_PRECOMPILED_MODULES'] ||= '1' if podfile_properties['EXPO_USE_PRECOMPILED_MODULES'] != 'false'\n+platform :ios, podfile_properties['ios.deploymentTarget'] || '16.4'\n \n prepare_react_native_project!\n \n@@ -23,7 +31,8 @@ target 'HelloWorld' do\n 'node',\n '--no-warnings',\n '--eval',\n- 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n+ 'require(\\'expo/bin/autolinking\\')',\n+ 'expo-modules-autolinking',\n 'react-native-config',\n '--json',\n '--platform',\n@@ -49,18 +58,7 @@ target 'HelloWorld' do\n installer,\n config[:reactNativePath],\n :mac_catalyst_enabled => false,\n- :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true',\n+ :ccache_enabled => ccache_enabled?(podfile_properties),\n )\n-\n- # This is necessary for Xcode 14, because it signs resource bundles by default\n- # when building for devices.\n- installer.target_installation_results.pod_target_installation_results\n- .each do |pod_name, target_installation_result|\n- target_installation_result.resource_bundle_targets.each do |resource_bundle_target|\n- resource_bundle_target.build_configurations.each do |config|\n- config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'\n- end\n- end\n- end\n end\n end\ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex b51159163bf..3e151175775 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -2,7 +2,7 @@\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n \"license\": \"0BSD\",\n- \"version\": \"52.0.79\",\n+ \"version\": \"56.0.13\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -11,12 +11,14 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~52.0.49\",\n- \"expo-status-bar\": \"~2.0.1\",\n- \"react\": \"18.3.1\",\n- \"react-native\": \"0.76.9\"\n+ \"expo\": \"~56.0.0-preview.13\",\n+ \"expo-status-bar\": \"~56.0.4\",\n+ \"react\": \"19.2.3\",\n+ \"react-native\": \"0.85.3\"\n },\n- \"devDependencies\": {\n- \"@babel/core\": \"^7.20.0\"\n+ \"publishConfig\": {\n+ \"executableFiles\": [\n+ \"./android/gradlew\"\n+ ]\n }\n }\n","53..56":"diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle\nindex 34b96c71c33..fc185e53bc3 100644\n--- a/templates/expo-template-bare-minimum/android/app/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/app/build.gradle\n@@ -11,7 +11,7 @@ def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath()\n react {\n entryFile = file([\"node\", \"-e\", \"require('expo/scripts/resolveAppEntry')\", projectRoot, \"android\", \"absolute\"].execute(null, rootDir).text.trim())\n reactNativeDir = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n- hermesCommand = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/sdks/hermesc/%OS-BIN%/hermesc\"\n+ hermesCommand = new File([\"node\", \"--print\", \"require.resolve('hermes-compiler/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/hermesc/%OS-BIN%/hermesc\"\n codegenDir = new File([\"node\", \"--print\", \"require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n \n enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean()\n@@ -64,9 +64,9 @@ react {\n }\n \n /**\n- * Set this to true to Run Proguard on Release builds to minify the Java bytecode.\n+ * Set this to true in release builds to optimize the app using [R8](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization).\n */\n-def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInReleaseBuilds') ?: false).toBoolean()\n+def enableMinifyInReleaseBuilds = (findProperty('android.enableMinifyInReleaseBuilds') ?: false).toBoolean()\n \n /**\n * The preferred build flavor of JavaScriptCore (JSC)\n@@ -94,6 +94,8 @@ android {\n targetSdkVersion rootProject.ext.targetSdkVersion\n versionCode 1\n versionName \"1.0\"\n+\n+ buildConfigField \"String\", \"REACT_NATIVE_RELEASE_LEVEL\", \"\\\"${findProperty('reactNativeReleaseLevel') ?: 'stable'}\\\"\"\n }\n signingConfigs {\n debug {\n@@ -111,15 +113,18 @@ android {\n // Caution! In production, you need to generate your own keystore file.\n // see https://reactnative.dev/docs/signed-apk-android.\n signingConfig signingConfigs.debug\n- shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false)\n- minifyEnabled enableProguardInReleaseBuilds\n+ def enableShrinkResources = findProperty('android.enableShrinkResourcesInReleaseBuilds') ?: 'false'\n+ shrinkResources enableShrinkResources.toBoolean()\n+ minifyEnabled enableMinifyInReleaseBuilds\n proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n- crunchPngs (findProperty('android.enablePngCrunchInReleaseBuilds')?.toBoolean() ?: true)\n+ def enablePngCrunchInRelease = findProperty('android.enablePngCrunchInReleaseBuilds') ?: 'true'\n+ crunchPngs enablePngCrunchInRelease.toBoolean()\n }\n }\n packagingOptions {\n jniLibs {\n- useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false)\n+ def enableLegacyPackaging = findProperty('expo.useLegacyPackaging') ?: 'false'\n+ useLegacyPackaging enableLegacyPackaging.toBoolean()\n }\n }\n androidResources {\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\nnew file mode 100644\nindex 00000000000..3ec2507bab7\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\n@@ -0,0 +1,7 @@\n+\n+\n+ \n+\n+ \n+\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\nindex 150248b6b3c..14bdba124ab 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n@@ -1,12 +1,13 @@\n-\n+\n \n \n \n \n \n \n- \n- \n+ \n+ \n \n \n \n@@ -19,7 +20,7 @@\n \n \n \n- \n+ \n \n \n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\nindex 267e20c30e5..cbb5ddb85d0 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n@@ -5,48 +5,36 @@ import android.content.res.Configuration\n \n import com.facebook.react.PackageList\n import com.facebook.react.ReactApplication\n-import com.facebook.react.ReactNativeHost\n+import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative\n import com.facebook.react.ReactPackage\n import com.facebook.react.ReactHost\n-import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load\n-import com.facebook.react.defaults.DefaultReactNativeHost\n-import com.facebook.react.soloader.OpenSourceMergedSoMapping\n-import com.facebook.soloader.SoLoader\n+import com.facebook.react.common.ReleaseLevel\n+import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint\n \n import expo.modules.ApplicationLifecycleDispatcher\n-import expo.modules.ReactNativeHostWrapper\n+import expo.modules.ExpoReactHostFactory\n \n class MainApplication : Application(), ReactApplication {\n \n- override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper(\n- this,\n- object : DefaultReactNativeHost(this) {\n- override fun getPackages(): List {\n- val packages = PackageList(this).packages\n- // Packages that cannot be autolinked yet can be added manually here, for example:\n- // packages.add(MyReactNativePackage())\n- return packages\n- }\n-\n- override fun getJSMainModuleName(): String = \".expo/.virtual-metro-entry\"\n-\n- override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG\n-\n- override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED\n- override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED\n- }\n- )\n-\n- override val reactHost: ReactHost\n- get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost)\n+ override val reactHost: ReactHost by lazy {\n+ ExpoReactHostFactory.getDefaultReactHost(\n+ context = applicationContext,\n+ packageList =\n+ PackageList(this).packages.apply {\n+ // Packages that cannot be autolinked yet can be added manually here, for example:\n+ // add(MyReactNativePackage())\n+ }\n+ )\n+ }\n \n override fun onCreate() {\n super.onCreate()\n- SoLoader.init(this, OpenSourceMergedSoMapping)\n- if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {\n- // If you opted-in for the New Architecture, we load the native entry point for this app.\n- load()\n+ DefaultNewArchitectureEntryPoint.releaseLevel = try {\n+ ReleaseLevel.valueOf(BuildConfig.REACT_NATIVE_RELEASE_LEVEL.uppercase())\n+ } catch (e: IllegalArgumentException) {\n+ ReleaseLevel.STABLE\n }\n+ loadReactNative(this)\n ApplicationLifecycleDispatcher.onApplicationCreate(this)\n }\n \ndiff --git a/templates/expo-template-bare-minimum/android/build.gradle b/templates/expo-template-bare-minimum/android/build.gradle\nindex fa7b11e23c1..0554dd156c1 100644\n--- a/templates/expo-template-bare-minimum/android/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/build.gradle\n@@ -12,21 +12,8 @@ buildscript {\n }\n }\n \n-def reactNativeAndroidDir = new File(\n- providers.exec {\n- workingDir(rootDir)\n- commandLine(\"node\", \"--print\", \"require.resolve('react-native/package.json')\")\n- }.standardOutput.asText.get().trim(),\n- \"../android\"\n-)\n-\n allprojects {\n repositories {\n- maven {\n- // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n- url(reactNativeAndroidDir)\n- }\n-\n google()\n mavenCentral()\n maven { url 'https://www.jitpack.io' }\ndiff --git a/templates/expo-template-bare-minimum/android/gitignore b/templates/expo-template-bare-minimum/android/gitignore\nindex 8a6be077181..1ea9b6464ec 100644\n--- a/templates/expo-template-bare-minimum/android/gitignore\n+++ b/templates/expo-template-bare-minimum/android/gitignore\n@@ -12,5 +12,8 @@ local.properties\n *.hprof\n .cxx/\n \n+# generated inline modules\n+app/src/main/java/inline/\n+\n # Bundle artifacts\n *.jsbundle\ndiff --git a/templates/expo-template-bare-minimum/android/gradle.properties b/templates/expo-template-bare-minimum/android/gradle.properties\nindex 7531e9eb23c..97271b9456f 100644\n--- a/templates/expo-template-bare-minimum/android/gradle.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle.properties\n@@ -15,7 +15,7 @@ org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m\n # When configured, Gradle will run in incubating parallel mode.\n # This option should only be used with decoupled projects. More details, visit\n # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n-# org.gradle.parallel=true\n+org.gradle.parallel=true\n \n # AndroidX package structure to make it clearer which packages are bundled with the\n # Android operating system, and which are packaged with your app's APK\n@@ -41,6 +41,11 @@ newArchEnabled=true\n # If set to false, you will be using JSC instead.\n hermesEnabled=true\n \n+# Use this property to enable edge-to-edge display support.\n+# This allows your app to draw behind system bars for an immersive UI.\n+# Note: Only works with ReactActivity and should not be used with custom Activity.\n+edgeToEdgeEnabled=true\n+\n # Enable GIF support in React Native images (~200 B increase)\n expo.gif.enabled=true\n # Enable webp support in React Native images (~85 KB increase)\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar\nindex a4b76b9530d..61285a659d1 100644\nBinary files a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar and b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar differ\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\nindex 37f853b1c84..37f78a6af83 100644\n--- a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n@@ -1,6 +1,6 @@\n distributionBase=GRADLE_USER_HOME\n distributionPath=wrapper/dists\n-distributionUrl=https\\://services.gradle.org/distributions/gradle-8.13-bin.zip\n+distributionUrl=https\\://services.gradle.org/distributions/gradle-9.3.1-bin.zip\n networkTimeout=10000\n validateDistributionUrl=true\n zipStoreBase=GRADLE_USER_HOME\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew b/templates/expo-template-bare-minimum/android/gradlew\nindex f3b75f3b0d4..adff685a034 100755\n--- a/templates/expo-template-bare-minimum/android/gradlew\n+++ b/templates/expo-template-bare-minimum/android/gradlew\n@@ -1,7 +1,7 @@\n #!/bin/sh\n \n #\n-# Copyright © 2015-2021 the original authors.\n+# Copyright © 2015 the original authors.\n #\n # Licensed under the Apache License, Version 2.0 (the \"License\");\n # you may not use this file except in compliance with the License.\n@@ -114,7 +114,6 @@ case \"$( uname )\" in #(\n NONSTOP* ) nonstop=true ;;\n esac\n \n-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n \n \n # Determine the Java command to use to start the JVM.\n@@ -172,7 +171,6 @@ fi\n # For Cygwin or MSYS, switch paths to Windows format before running java\n if \"$cygwin\" || \"$msys\" ; then\n APP_HOME=$( cygpath --path --mixed \"$APP_HOME\" )\n- CLASSPATH=$( cygpath --path --mixed \"$CLASSPATH\" )\n \n JAVACMD=$( cygpath --unix \"$JAVACMD\" )\n \n@@ -205,15 +203,14 @@ fi\n DEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n \n # Collect all arguments for the java command:\n-# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,\n+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,\n # and any embedded shellness will be escaped.\n # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be\n # treated as '${Hostname}' itself on the command line.\n \n set -- \\\n \"-Dorg.gradle.appname=$APP_BASE_NAME\" \\\n- -classpath \"$CLASSPATH\" \\\n- org.gradle.wrapper.GradleWrapperMain \\\n+ -jar \"$APP_HOME/gradle/wrapper/gradle-wrapper.jar\" \\\n \"$@\"\n \n # Stop when \"xargs\" is not available.\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew.bat b/templates/expo-template-bare-minimum/android/gradlew.bat\nindex 9b42019c791..39baf4d6846 100644\n--- a/templates/expo-template-bare-minimum/android/gradlew.bat\n+++ b/templates/expo-template-bare-minimum/android/gradlew.bat\n@@ -1,3 +1,8 @@\n+@REM Copyright (c) Meta Platforms, Inc. and affiliates.\r\n+@REM\r\n+@REM This source code is licensed under the MIT license found in the\r\n+@REM LICENSE file in the root directory of this source tree.\r\n+\r\n @rem\r\n @rem Copyright 2015 the original author or authors.\r\n @rem\r\n@@ -70,11 +75,10 @@ goto fail\n :execute\r\n @rem Setup the command line\r\n \r\n-set CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\r\n \r\n \r\n @rem Execute Gradle\r\n-\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\r\n+\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -jar \"%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\" %*\r\n \r\n :end\r\n @rem End local scope for the variables with windows NT shell\r\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\nindex 1b7513bd31b..39fa5afe55b 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n@@ -168,6 +168,8 @@\n \t\t\tfiles = (\n \t\t\t);\n \t\t\tinputPaths = (\n+\t\t\t\t\"$(SRCROOT)/.xcode.env\",\n+\t\t\t\t\"$(SRCROOT)/.xcode.env.local\",\n \t\t\t);\n \t\t\tname = \"Bundle React Native code and images\";\n \t\t\toutputPaths = (\n@@ -246,11 +248,12 @@\n \t\t\t\t\t\"FB_SONARKIT_ENABLED=1\",\n \t\t\t\t);\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n \t\t\t\t\t\"$(inherited)\",\n \t\t\t\t\t\"@executable_path/Frameworks\",\n \t\t\t\t);\n+\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.4;\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -273,11 +276,12 @@\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n \t\t\t\tCURRENT_PROJECT_VERSION = 1;\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n \t\t\t\t\t\"$(inherited)\",\n \t\t\t\t\t\"@executable_path/Frameworks\",\n \t\t\t\t);\n+\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.4;\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -339,7 +343,7 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n \t\t\t\t\t/usr/lib/swift,\n \t\t\t\t\t\"$(inherited)\",\n@@ -391,7 +395,7 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n \t\t\t\t\t/usr/lib/swift,\n \t\t\t\t\t\"$(inherited)\",\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\nindex a7887e1e5b1..9670a1ff07e 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\n@@ -1,9 +1,9 @@\n-import Expo\n+internal import Expo\n import React\n import ReactAppDependencyProvider\n \n-@UIApplicationMain\n-public class AppDelegate: ExpoAppDelegate {\n+@main\n+class AppDelegate: ExpoAppDelegate {\n var window: UIWindow?\n \n var reactNativeDelegate: ExpoReactNativeFactoryDelegate?\n@@ -19,7 +19,6 @@ public class AppDelegate: ExpoAppDelegate {\n \n reactNativeDelegate = delegate\n reactNativeFactory = factory\n- bindReactNativeFactory(factory)\n \n #if os(iOS) || os(tvOS)\n window = UIWindow(frame: UIScreen.main.bounds)\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\nindex 447b4188985..58d21796e1d 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n@@ -1,11 +1,12 @@\n \n-\n+\n \n \n \n- \n+ \n \n \n+ \n \n \n \n@@ -29,6 +30,7 @@\n \n \n \n+ \n \n \n \n@@ -38,5 +40,8 @@\n \n \n \n+ \n+ \n+ \n \n \ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex 29503ff0cc1..c3158e3fb9b 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -4,12 +4,20 @@ require File.join(File.dirname(`node --print \"require.resolve('react-native/pack\n require 'json'\n podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}\n \n-ENV['RCT_NEW_ARCH_ENABLED'] = '0' if podfile_properties['newArchEnabled'] == 'false'\n-ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+def ccache_enabled?(podfile_properties)\n+ # Environment variable takes precedence\n+ return ENV['USE_CCACHE'] == '1' if ENV['USE_CCACHE']\n \n-platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'\n-install! 'cocoapods',\n- :deterministic_uuids => false\n+ # Fall back to Podfile properties\n+ podfile_properties['apple.ccacheEnabled'] == 'true'\n+end\n+\n+ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+ENV['RCT_USE_RN_DEP'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1'\n+ENV['RCT_USE_PREBUILT_RNCORE'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1'\n+ENV['RCT_HERMES_V1_ENABLED'] ||= '1' if podfile_properties['expo.useHermesV1'] == 'true'\n+ENV['EXPO_USE_PRECOMPILED_MODULES'] ||= '1' if podfile_properties['EXPO_USE_PRECOMPILED_MODULES'] != 'false'\n+platform :ios, podfile_properties['ios.deploymentTarget'] || '16.4'\n \n prepare_react_native_project!\n \n@@ -20,7 +28,10 @@ target 'HelloWorld' do\n config_command = ['node', '-e', \"process.argv=['', '', 'config'];require('@react-native-community/cli').run()\"];\n else\n config_command = [\n- 'npx',\n+ 'node',\n+ '--no-warnings',\n+ '--eval',\n+ 'require(\\'expo/bin/autolinking\\')',\n 'expo-modules-autolinking',\n 'react-native-config',\n '--json',\n@@ -47,18 +58,7 @@ target 'HelloWorld' do\n installer,\n config[:reactNativePath],\n :mac_catalyst_enabled => false,\n- :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true',\n+ :ccache_enabled => ccache_enabled?(podfile_properties),\n )\n-\n- # This is necessary for Xcode 14, because it signs resource bundles by default\n- # when building for devices.\n- installer.target_installation_results.pod_target_installation_results\n- .each do |pod_name, target_installation_result|\n- target_installation_result.resource_bundle_targets.each do |resource_bundle_target|\n- resource_bundle_target.build_configurations.each do |config|\n- config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'\n- end\n- end\n- end\n end\n end\ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex 661f6b6addf..3e151175775 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -2,7 +2,7 @@\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n \"license\": \"0BSD\",\n- \"version\": \"53.0.42\",\n+ \"version\": \"56.0.13\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -11,12 +11,14 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~53.0.27\",\n- \"expo-status-bar\": \"~2.2.3\",\n- \"react\": \"19.0.0\",\n- \"react-native\": \"0.79.6\"\n+ \"expo\": \"~56.0.0-preview.13\",\n+ \"expo-status-bar\": \"~56.0.4\",\n+ \"react\": \"19.2.3\",\n+ \"react-native\": \"0.85.3\"\n },\n- \"devDependencies\": {\n- \"@babel/core\": \"^7.20.0\"\n+ \"publishConfig\": {\n+ \"executableFiles\": [\n+ \"./android/gradlew\"\n+ ]\n }\n }\n","54..56":"diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle\nindex 3f1c571b679..fc185e53bc3 100644\n--- a/templates/expo-template-bare-minimum/android/app/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/app/build.gradle\n@@ -11,7 +11,7 @@ def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath()\n react {\n entryFile = file([\"node\", \"-e\", \"require('expo/scripts/resolveAppEntry')\", projectRoot, \"android\", \"absolute\"].execute(null, rootDir).text.trim())\n reactNativeDir = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n- hermesCommand = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/sdks/hermesc/%OS-BIN%/hermesc\"\n+ hermesCommand = new File([\"node\", \"--print\", \"require.resolve('hermes-compiler/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/hermesc/%OS-BIN%/hermesc\"\n codegenDir = new File([\"node\", \"--print\", \"require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n \n enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean()\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\nindex 150248b6b3c..14bdba124ab 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n@@ -1,12 +1,13 @@\n-\n+\n \n \n \n \n \n \n- \n- \n+ \n+ \n \n \n \n@@ -19,7 +20,7 @@\n \n \n \n- \n+ \n \n \n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\nindex 5abad96fa00..cbb5ddb85d0 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n@@ -6,37 +6,26 @@ import android.content.res.Configuration\n import com.facebook.react.PackageList\n import com.facebook.react.ReactApplication\n import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative\n-import com.facebook.react.ReactNativeHost\n import com.facebook.react.ReactPackage\n import com.facebook.react.ReactHost\n import com.facebook.react.common.ReleaseLevel\n import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint\n-import com.facebook.react.defaults.DefaultReactNativeHost\n \n import expo.modules.ApplicationLifecycleDispatcher\n-import expo.modules.ReactNativeHostWrapper\n+import expo.modules.ExpoReactHostFactory\n \n class MainApplication : Application(), ReactApplication {\n \n- override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper(\n- this,\n- object : DefaultReactNativeHost(this) {\n- override fun getPackages(): List =\n- PackageList(this).packages.apply {\n- // Packages that cannot be autolinked yet can be added manually here, for example:\n- // add(MyReactNativePackage())\n- }\n-\n- override fun getJSMainModuleName(): String = \".expo/.virtual-metro-entry\"\n-\n- override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG\n-\n- override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED\n- }\n- )\n-\n- override val reactHost: ReactHost\n- get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost)\n+ override val reactHost: ReactHost by lazy {\n+ ExpoReactHostFactory.getDefaultReactHost(\n+ context = applicationContext,\n+ packageList =\n+ PackageList(this).packages.apply {\n+ // Packages that cannot be autolinked yet can be added manually here, for example:\n+ // add(MyReactNativePackage())\n+ }\n+ )\n+ }\n \n override fun onCreate() {\n super.onCreate()\ndiff --git a/templates/expo-template-bare-minimum/android/gitignore b/templates/expo-template-bare-minimum/android/gitignore\nindex 8a6be077181..1ea9b6464ec 100644\n--- a/templates/expo-template-bare-minimum/android/gitignore\n+++ b/templates/expo-template-bare-minimum/android/gitignore\n@@ -12,5 +12,8 @@ local.properties\n *.hprof\n .cxx/\n \n+# generated inline modules\n+app/src/main/java/inline/\n+\n # Bundle artifacts\n *.jsbundle\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar\nindex 1b33c55baab..61285a659d1 100644\nBinary files a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar and b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar differ\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\nindex d4081da476b..37f78a6af83 100644\n--- a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n@@ -1,6 +1,6 @@\n distributionBase=GRADLE_USER_HOME\n distributionPath=wrapper/dists\n-distributionUrl=https\\://services.gradle.org/distributions/gradle-8.14.3-bin.zip\n+distributionUrl=https\\://services.gradle.org/distributions/gradle-9.3.1-bin.zip\n networkTimeout=10000\n validateDistributionUrl=true\n zipStoreBase=GRADLE_USER_HOME\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew b/templates/expo-template-bare-minimum/android/gradlew\nindex 7f94d3d4777..adff685a034 100755\n--- a/templates/expo-template-bare-minimum/android/gradlew\n+++ b/templates/expo-template-bare-minimum/android/gradlew\n@@ -1,7 +1,7 @@\n #!/bin/sh\n \n #\n-# Copyright © 2015-2021 the original authors.\n+# Copyright © 2015 the original authors.\n #\n # Licensed under the Apache License, Version 2.0 (the \"License\");\n # you may not use this file except in compliance with the License.\n@@ -114,7 +114,6 @@ case \"$( uname )\" in #(\n NONSTOP* ) nonstop=true ;;\n esac\n \n-CLASSPATH=\"\\\\\\\"\\\\\\\"\"\n \n \n # Determine the Java command to use to start the JVM.\n@@ -172,7 +171,6 @@ fi\n # For Cygwin or MSYS, switch paths to Windows format before running java\n if \"$cygwin\" || \"$msys\" ; then\n APP_HOME=$( cygpath --path --mixed \"$APP_HOME\" )\n- CLASSPATH=$( cygpath --path --mixed \"$CLASSPATH\" )\n \n JAVACMD=$( cygpath --unix \"$JAVACMD\" )\n \n@@ -205,14 +203,13 @@ fi\n DEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n \n # Collect all arguments for the java command:\n-# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,\n+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,\n # and any embedded shellness will be escaped.\n # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be\n # treated as '${Hostname}' itself on the command line.\n \n set -- \\\n \"-Dorg.gradle.appname=$APP_BASE_NAME\" \\\n- -classpath \"$CLASSPATH\" \\\n -jar \"$APP_HOME/gradle/wrapper/gradle-wrapper.jar\" \\\n \"$@\"\n \ndiff --git a/templates/expo-template-bare-minimum/android/gradlew.bat b/templates/expo-template-bare-minimum/android/gradlew.bat\nindex 5eed7ee8452..39baf4d6846 100644\n--- a/templates/expo-template-bare-minimum/android/gradlew.bat\n+++ b/templates/expo-template-bare-minimum/android/gradlew.bat\n@@ -1,3 +1,8 @@\n+@REM Copyright (c) Meta Platforms, Inc. and affiliates.\r\n+@REM\r\n+@REM This source code is licensed under the MIT license found in the\r\n+@REM LICENSE file in the root directory of this source tree.\r\n+\r\n @rem\r\n @rem Copyright 2015 the original author or authors.\r\n @rem\r\n@@ -70,11 +75,10 @@ goto fail\n :execute\r\n @rem Setup the command line\r\n \r\n-set CLASSPATH=\r\n \r\n \r\n @rem Execute Gradle\r\n-\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" -jar \"%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\" %*\r\n+\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -jar \"%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\" %*\r\n \r\n :end\r\n @rem End local scope for the variables with windows NT shell\r\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\nindex 8a390c764af..39fa5afe55b 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n@@ -248,11 +248,12 @@\n \t\t\t\t\t\"FB_SONARKIT_ENABLED=1\",\n \t\t\t\t);\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n \t\t\t\t\t\"$(inherited)\",\n \t\t\t\t\t\"@executable_path/Frameworks\",\n \t\t\t\t);\n+\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.4;\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -275,11 +276,12 @@\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n \t\t\t\tCURRENT_PROJECT_VERSION = 1;\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n \t\t\t\t\t\"$(inherited)\",\n \t\t\t\t\t\"@executable_path/Frameworks\",\n \t\t\t\t);\n+\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.4;\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -341,7 +343,7 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n \t\t\t\t\t/usr/lib/swift,\n \t\t\t\t\t\"$(inherited)\",\n@@ -393,7 +395,7 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n \t\t\t\t\t/usr/lib/swift,\n \t\t\t\t\t\"$(inherited)\",\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\nindex a7887e1e5b1..9670a1ff07e 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\n@@ -1,9 +1,9 @@\n-import Expo\n+internal import Expo\n import React\n import ReactAppDependencyProvider\n \n-@UIApplicationMain\n-public class AppDelegate: ExpoAppDelegate {\n+@main\n+class AppDelegate: ExpoAppDelegate {\n var window: UIWindow?\n \n var reactNativeDelegate: ExpoReactNativeFactoryDelegate?\n@@ -19,7 +19,6 @@ public class AppDelegate: ExpoAppDelegate {\n \n reactNativeDelegate = delegate\n reactNativeFactory = factory\n- bindReactNativeFactory(factory)\n \n #if os(iOS) || os(tvOS)\n window = UIWindow(frame: UIScreen.main.bounds)\ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex 9743535e7ad..c3158e3fb9b 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -7,16 +7,17 @@ podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties\n def ccache_enabled?(podfile_properties)\n # Environment variable takes precedence\n return ENV['USE_CCACHE'] == '1' if ENV['USE_CCACHE']\n- \n+\n # Fall back to Podfile properties\n podfile_properties['apple.ccacheEnabled'] == 'true'\n end\n \n-ENV['RCT_NEW_ARCH_ENABLED'] ||= '0' if podfile_properties['newArchEnabled'] == 'false'\n ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n-ENV['RCT_USE_RN_DEP'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' && podfile_properties['newArchEnabled'] != 'false'\n-ENV['RCT_USE_PREBUILT_RNCORE'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' && podfile_properties['newArchEnabled'] != 'false'\n-platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'\n+ENV['RCT_USE_RN_DEP'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1'\n+ENV['RCT_USE_PREBUILT_RNCORE'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1'\n+ENV['RCT_HERMES_V1_ENABLED'] ||= '1' if podfile_properties['expo.useHermesV1'] == 'true'\n+ENV['EXPO_USE_PRECOMPILED_MODULES'] ||= '1' if podfile_properties['EXPO_USE_PRECOMPILED_MODULES'] != 'false'\n+platform :ios, podfile_properties['ios.deploymentTarget'] || '16.4'\n \n prepare_react_native_project!\n \ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex a1a026a23e1..3e151175775 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -2,7 +2,7 @@\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n \"license\": \"0BSD\",\n- \"version\": \"54.0.51\",\n+ \"version\": \"56.0.13\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -11,9 +11,14 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~54.0.34\",\n- \"expo-status-bar\": \"~3.0.9\",\n- \"react\": \"19.1.0\",\n- \"react-native\": \"0.81.5\"\n+ \"expo\": \"~56.0.0-preview.13\",\n+ \"expo-status-bar\": \"~56.0.4\",\n+ \"react\": \"19.2.3\",\n+ \"react-native\": \"0.85.3\"\n+ },\n+ \"publishConfig\": {\n+ \"executableFiles\": [\n+ \"./android/gradlew\"\n+ ]\n }\n }\n","55..56":"diff --git a/templates/expo-template-bare-minimum/android/gitignore b/templates/expo-template-bare-minimum/android/gitignore\nindex 8a6be077181..1ea9b6464ec 100644\n--- a/templates/expo-template-bare-minimum/android/gitignore\n+++ b/templates/expo-template-bare-minimum/android/gitignore\n@@ -12,5 +12,8 @@ local.properties\n *.hprof\n .cxx/\n \n+# generated inline modules\n+app/src/main/java/inline/\n+\n # Bundle artifacts\n *.jsbundle\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar\nindex 8bdaf60c75a..61285a659d1 100644\nBinary files a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar and b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar differ\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\nindex 2a84e188b85..37f78a6af83 100644\n--- a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n@@ -1,6 +1,6 @@\n distributionBase=GRADLE_USER_HOME\n distributionPath=wrapper/dists\n-distributionUrl=https\\://services.gradle.org/distributions/gradle-9.0.0-bin.zip\n+distributionUrl=https\\://services.gradle.org/distributions/gradle-9.3.1-bin.zip\n networkTimeout=10000\n validateDistributionUrl=true\n zipStoreBase=GRADLE_USER_HOME\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew b/templates/expo-template-bare-minimum/android/gradlew\nindex bbb00327904..adff685a034 100755\n--- a/templates/expo-template-bare-minimum/android/gradlew\n+++ b/templates/expo-template-bare-minimum/android/gradlew\n@@ -114,7 +114,6 @@ case \"$( uname )\" in #(\n NONSTOP* ) nonstop=true ;;\n esac\n \n-CLASSPATH=\"\\\\\\\"\\\\\\\"\"\n \n \n # Determine the Java command to use to start the JVM.\n@@ -172,7 +171,6 @@ fi\n # For Cygwin or MSYS, switch paths to Windows format before running java\n if \"$cygwin\" || \"$msys\" ; then\n APP_HOME=$( cygpath --path --mixed \"$APP_HOME\" )\n- CLASSPATH=$( cygpath --path --mixed \"$CLASSPATH\" )\n \n JAVACMD=$( cygpath --unix \"$JAVACMD\" )\n \n@@ -205,14 +203,13 @@ fi\n DEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n \n # Collect all arguments for the java command:\n-# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,\n+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,\n # and any embedded shellness will be escaped.\n # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be\n # treated as '${Hostname}' itself on the command line.\n \n set -- \\\n \"-Dorg.gradle.appname=$APP_BASE_NAME\" \\\n- -classpath \"$CLASSPATH\" \\\n -jar \"$APP_HOME/gradle/wrapper/gradle-wrapper.jar\" \\\n \"$@\"\n \ndiff --git a/templates/expo-template-bare-minimum/android/gradlew.bat b/templates/expo-template-bare-minimum/android/gradlew.bat\nindex 5eed7ee8452..39baf4d6846 100644\n--- a/templates/expo-template-bare-minimum/android/gradlew.bat\n+++ b/templates/expo-template-bare-minimum/android/gradlew.bat\n@@ -1,3 +1,8 @@\n+@REM Copyright (c) Meta Platforms, Inc. and affiliates.\r\n+@REM\r\n+@REM This source code is licensed under the MIT license found in the\r\n+@REM LICENSE file in the root directory of this source tree.\r\n+\r\n @rem\r\n @rem Copyright 2015 the original author or authors.\r\n @rem\r\n@@ -70,11 +75,10 @@ goto fail\n :execute\r\n @rem Setup the command line\r\n \r\n-set CLASSPATH=\r\n \r\n \r\n @rem Execute Gradle\r\n-\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" -jar \"%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\" %*\r\n+\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -jar \"%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\" %*\r\n \r\n :end\r\n @rem End local scope for the variables with windows NT shell\r\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\nindex 8a390c764af..39fa5afe55b 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n@@ -248,11 +248,12 @@\n \t\t\t\t\t\"FB_SONARKIT_ENABLED=1\",\n \t\t\t\t);\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n \t\t\t\t\t\"$(inherited)\",\n \t\t\t\t\t\"@executable_path/Frameworks\",\n \t\t\t\t);\n+\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.4;\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -275,11 +276,12 @@\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n \t\t\t\tCURRENT_PROJECT_VERSION = 1;\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n \t\t\t\t\t\"$(inherited)\",\n \t\t\t\t\t\"@executable_path/Frameworks\",\n \t\t\t\t);\n+\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.4;\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -341,7 +343,7 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n \t\t\t\t\t/usr/lib/swift,\n \t\t\t\t\t\"$(inherited)\",\n@@ -393,7 +395,7 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n \t\t\t\t\t/usr/lib/swift,\n \t\t\t\t\t\"$(inherited)\",\ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex 03484edf156..c3158e3fb9b 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -13,10 +13,11 @@ def ccache_enabled?(podfile_properties)\n end\n \n ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n-ENV['RCT_USE_RN_DEP'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true'\n-ENV['RCT_USE_PREBUILT_RNCORE'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true'\n+ENV['RCT_USE_RN_DEP'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1'\n+ENV['RCT_USE_PREBUILT_RNCORE'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1'\n ENV['RCT_HERMES_V1_ENABLED'] ||= '1' if podfile_properties['expo.useHermesV1'] == 'true'\n-platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'\n+ENV['EXPO_USE_PRECOMPILED_MODULES'] ||= '1' if podfile_properties['EXPO_USE_PRECOMPILED_MODULES'] != 'false'\n+platform :ios, podfile_properties['ios.deploymentTarget'] || '16.4'\n \n prepare_react_native_project!\n \ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex 253f825cea9..3e151175775 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -2,7 +2,7 @@\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n \"license\": \"0BSD\",\n- \"version\": \"55.0.37\",\n+ \"version\": \"56.0.13\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -11,9 +11,14 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~55.0.25\",\n- \"expo-status-bar\": \"~55.0.6\",\n- \"react\": \"19.2.0\",\n- \"react-native\": \"0.83.6\"\n+ \"expo\": \"~56.0.0-preview.13\",\n+ \"expo-status-bar\": \"~56.0.4\",\n+ \"react\": \"19.2.3\",\n+ \"react-native\": \"0.85.3\"\n+ },\n+ \"publishConfig\": {\n+ \"executableFiles\": [\n+ \"./android/gradlew\"\n+ ]\n }\n }\n","56..56":"","51..unversioned":"diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle\nindex a4b08330359..fc185e53bc3 100644\n--- a/templates/expo-template-bare-minimum/android/app/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/app/build.gradle\n@@ -4,27 +4,6 @@ apply plugin: \"com.facebook.react\"\n \n def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath()\n \n-static def versionToNumber(major, minor, patch) {\n- return patch * 100 + minor * 10000 + major * 1000000\n-}\n-\n-def getRNVersion() {\n- def version = providers.exec {\n- workingDir(projectDir)\n- commandLine(\"node\", \"-e\", \"console.log(require('react-native/package.json').version);\")\n- }.standardOutput.asText.get().trim()\n-\n- def coreVersion = version.split(\"-\")[0]\n- def (major, minor, patch) = coreVersion.tokenize('.').collect { it.toInteger() }\n-\n- return versionToNumber(\n- major,\n- minor,\n- patch\n- )\n-}\n-def rnVersion = getRNVersion()\n-\n /**\n * This is the configuration block to customize your React Native Android app.\n * By default you don't need to apply any configuration, just uncomment the lines you need.\n@@ -32,21 +11,22 @@ def rnVersion = getRNVersion()\n react {\n entryFile = file([\"node\", \"-e\", \"require('expo/scripts/resolveAppEntry')\", projectRoot, \"android\", \"absolute\"].execute(null, rootDir).text.trim())\n reactNativeDir = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n- hermesCommand = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/sdks/hermesc/%OS-BIN%/hermesc\"\n+ hermesCommand = new File([\"node\", \"--print\", \"require.resolve('hermes-compiler/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/hermesc/%OS-BIN%/hermesc\"\n codegenDir = new File([\"node\", \"--print\", \"require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n \n+ enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean()\n // Use Expo CLI to bundle the app, this ensures the Metro config\n // works correctly with Expo projects.\n cliFile = new File([\"node\", \"--print\", \"require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })\"].execute(null, rootDir).text.trim())\n bundleCommand = \"export:embed\"\n \n /* Folders */\n- // The root of your project, i.e. where \"package.json\" lives. Default is '..'\n- // root = file(\"../\")\n- // The folder where the react-native NPM package is. Default is ../node_modules/react-native\n- // reactNativeDir = file(\"../node_modules/react-native\")\n- // The folder where the react-native Codegen package is. Default is ../node_modules/@react-native/codegen\n- // codegenDir = file(\"../node_modules/@react-native/codegen\")\n+ // The root of your project, i.e. where \"package.json\" lives. Default is '../..'\n+ // root = file(\"../../\")\n+ // The folder where the react-native NPM package is. Default is ../../node_modules/react-native\n+ // reactNativeDir = file(\"../../node_modules/react-native\")\n+ // The folder where the react-native Codegen package is. Default is ../../node_modules/@react-native/codegen\n+ // codegenDir = file(\"../../node_modules/@react-native/codegen\")\n \n /* Variants */\n // The list of variants to that are debuggable. For those we're going to\n@@ -79,16 +59,14 @@ react {\n // The list of flags to pass to the Hermes compiler. By default is \"-O\", \"-output-source-map\"\n // hermesFlags = [\"-O\", \"-output-source-map\"]\n \n- if (rnVersion >= versionToNumber(0, 75, 0)) {\n- /* Autolinking */\n- autolinkLibrariesWithApp()\n- }\n+ /* Autolinking */\n+ autolinkLibrariesWithApp()\n }\n \n /**\n- * Set this to true to Run Proguard on Release builds to minify the Java bytecode.\n+ * Set this to true in release builds to optimize the app using [R8](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization).\n */\n-def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInReleaseBuilds') ?: false).toBoolean()\n+def enableMinifyInReleaseBuilds = (findProperty('android.enableMinifyInReleaseBuilds') ?: false).toBoolean()\n \n /**\n * The preferred build flavor of JavaScriptCore (JSC)\n@@ -101,7 +79,7 @@ def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInRelea\n * give correct results when using with locales other than en-US. Note that\n * this variant is about 6MiB larger per architecture than default.\n */\n-def jscFlavor = 'org.webkit:android-jsc:+'\n+def jscFlavor = 'io.github.react-native-community:jsc-android:2026004.+'\n \n android {\n ndkVersion rootProject.ext.ndkVersion\n@@ -116,6 +94,8 @@ android {\n targetSdkVersion rootProject.ext.targetSdkVersion\n versionCode 1\n versionName \"1.0\"\n+\n+ buildConfigField \"String\", \"REACT_NATIVE_RELEASE_LEVEL\", \"\\\"${findProperty('reactNativeReleaseLevel') ?: 'stable'}\\\"\"\n }\n signingConfigs {\n debug {\n@@ -133,17 +113,23 @@ android {\n // Caution! In production, you need to generate your own keystore file.\n // see https://reactnative.dev/docs/signed-apk-android.\n signingConfig signingConfigs.debug\n- shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false)\n- minifyEnabled enableProguardInReleaseBuilds\n+ def enableShrinkResources = findProperty('android.enableShrinkResourcesInReleaseBuilds') ?: 'false'\n+ shrinkResources enableShrinkResources.toBoolean()\n+ minifyEnabled enableMinifyInReleaseBuilds\n proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n- crunchPngs (findProperty('android.enablePngCrunchInReleaseBuilds')?.toBoolean() ?: true)\n+ def enablePngCrunchInRelease = findProperty('android.enablePngCrunchInReleaseBuilds') ?: 'true'\n+ crunchPngs enablePngCrunchInRelease.toBoolean()\n }\n }\n packagingOptions {\n jniLibs {\n- useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false)\n+ def enableLegacyPackaging = findProperty('expo.useLegacyPackaging') ?: 'false'\n+ useLegacyPackaging enableLegacyPackaging.toBoolean()\n }\n }\n+ androidResources {\n+ ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:!CVS:!thumbs.db:!picasa.ini:!*~'\n+ }\n }\n \n // Apply static values from `gradle.properties` to the `android.packagingOptions`\n@@ -176,15 +162,15 @@ dependencies {\n \n if (isGifEnabled) {\n // For animated gif support\n- implementation(\"com.facebook.fresco:animated-gif:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-gif:${expoLibs.versions.fresco.get()}\")\n }\n \n if (isWebpEnabled) {\n // For webp support\n- implementation(\"com.facebook.fresco:webpsupport:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:webpsupport:${expoLibs.versions.fresco.get()}\")\n if (isWebpAnimatedEnabled) {\n // Animated webp support\n- implementation(\"com.facebook.fresco:animated-webp:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-webp:${expoLibs.versions.fresco.get()}\")\n }\n }\n \n@@ -194,8 +180,3 @@ dependencies {\n implementation jscFlavor\n }\n }\n-\n-if (rnVersion < versionToNumber(0, 75, 0)) {\n- apply from: new File([\"node\", \"--print\", \"require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), \"../native_modules.gradle\");\n- applyNativeModulesAppBuildGradle(project)\n-}\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\nnew file mode 100644\nindex 00000000000..3ec2507bab7\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\n@@ -0,0 +1,7 @@\n+\n+\n+ \n+\n+ \n+\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\nindex 52175508263..14bdba124ab 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n@@ -1,12 +1,13 @@\n-\n+\n \n \n \n \n \n \n- \n- \n+ \n+ \n \n \n \n@@ -18,13 +19,12 @@\n \n \n \n- \n- \n+ \n+ \n \n \n \n \n \n- \n \n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\nindex 5f6e05ce071..cbb5ddb85d0 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n@@ -5,46 +5,36 @@ import android.content.res.Configuration\n \n import com.facebook.react.PackageList\n import com.facebook.react.ReactApplication\n-import com.facebook.react.ReactNativeHost\n+import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative\n import com.facebook.react.ReactPackage\n import com.facebook.react.ReactHost\n-import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load\n-import com.facebook.react.defaults.DefaultReactNativeHost\n-import com.facebook.soloader.SoLoader\n+import com.facebook.react.common.ReleaseLevel\n+import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint\n \n import expo.modules.ApplicationLifecycleDispatcher\n-import expo.modules.ReactNativeHostWrapper\n+import expo.modules.ExpoReactHostFactory\n \n class MainApplication : Application(), ReactApplication {\n \n- override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper(\n- this,\n- object : DefaultReactNativeHost(this) {\n- override fun getPackages(): List {\n- // Packages that cannot be autolinked yet can be added manually here, for example:\n- // packages.add(new MyReactNativePackage());\n- return PackageList(this).packages\n- }\n-\n- override fun getJSMainModuleName(): String = \".expo/.virtual-metro-entry\"\n-\n- override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG\n-\n- override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED\n- override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED\n- }\n- )\n-\n- override val reactHost: ReactHost\n- get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost)\n+ override val reactHost: ReactHost by lazy {\n+ ExpoReactHostFactory.getDefaultReactHost(\n+ context = applicationContext,\n+ packageList =\n+ PackageList(this).packages.apply {\n+ // Packages that cannot be autolinked yet can be added manually here, for example:\n+ // add(MyReactNativePackage())\n+ }\n+ )\n+ }\n \n override fun onCreate() {\n super.onCreate()\n- SoLoader.init(this, false)\n- if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {\n- // If you opted-in for the New Architecture, we load the native entry point for this app.\n- load()\n+ DefaultNewArchitectureEntryPoint.releaseLevel = try {\n+ ReleaseLevel.valueOf(BuildConfig.REACT_NATIVE_RELEASE_LEVEL.uppercase())\n+ } catch (e: IllegalArgumentException) {\n+ ReleaseLevel.STABLE\n }\n+ loadReactNative(this)\n ApplicationLifecycleDispatcher.onApplicationCreate(this)\n }\n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..31df827b18b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..ef243aab6c0\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..e9d5474519c\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..d61da15d241\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png\nnew file mode 100644\nindex 00000000000..4aeed11d00b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml\nnew file mode 100644\nindex 00000000000..883b2a080f3\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml\n@@ -0,0 +1,6 @@\n+\n+ \n+ \n+ \n+ \n+\n\\ No newline at end of file\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..a2f5908281d\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..1b523998081\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..ff10afd6e18\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..115a4c768a2\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..dcd3cd80833\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..459ca609d3a\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..8ca12fe024b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..8e19b410a1b\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp\nnew file mode 100644\nindex 00000000000..b824ebdd48d\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp\nnew file mode 100644\nindex 00000000000..4c19a13c239\nBinary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\nindex 90bcc87b8e8..26f3404be26 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n@@ -1,15 +1,8 @@\n \n- \n- \n \n \ndiff --git a/templates/expo-template-bare-minimum/android/build.gradle b/templates/expo-template-bare-minimum/android/build.gradle\nindex 932bf7b34ba..0554dd156c1 100644\n--- a/templates/expo-template-bare-minimum/android/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/build.gradle\n@@ -1,41 +1,24 @@\n // Top-level build file where you can add configuration options common to all sub-projects/modules.\n \n buildscript {\n- ext {\n- buildToolsVersion = findProperty('android.buildToolsVersion') ?: '34.0.0'\n- minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '23')\n- compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '34')\n- targetSdkVersion = Integer.parseInt(findProperty('android.targetSdkVersion') ?: '34')\n- kotlinVersion = findProperty('android.kotlinVersion') ?: '1.9.23'\n-\n- ndkVersion = \"26.1.10909125\"\n- }\n- repositories {\n- google()\n- mavenCentral()\n- }\n- dependencies {\n- classpath('com.android.tools.build:gradle')\n- classpath('com.facebook.react:react-native-gradle-plugin')\n- classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')\n- }\n+ repositories {\n+ google()\n+ mavenCentral()\n+ }\n+ dependencies {\n+ classpath('com.android.tools.build:gradle')\n+ classpath('com.facebook.react:react-native-gradle-plugin')\n+ classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')\n+ }\n }\n \n-apply plugin: \"com.facebook.react.rootproject\"\n-\n allprojects {\n- repositories {\n- maven {\n- // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n- url(new File(['node', '--print', \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim(), '../android'))\n- }\n- maven {\n- // Android JSC is installed from npm\n- url(new File(['node', '--print', \"require.resolve('jsc-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), '../dist'))\n- }\n-\n- google()\n- mavenCentral()\n- maven { url 'https://www.jitpack.io' }\n- }\n+ repositories {\n+ google()\n+ mavenCentral()\n+ maven { url 'https://www.jitpack.io' }\n+ }\n }\n+\n+apply plugin: \"expo-root-project\"\n+apply plugin: \"com.facebook.react.rootproject\"\ndiff --git a/templates/expo-template-bare-minimum/android/gitignore b/templates/expo-template-bare-minimum/android/gitignore\nindex 8a6be077181..1ea9b6464ec 100644\n--- a/templates/expo-template-bare-minimum/android/gitignore\n+++ b/templates/expo-template-bare-minimum/android/gitignore\n@@ -12,5 +12,8 @@ local.properties\n *.hprof\n .cxx/\n \n+# generated inline modules\n+app/src/main/java/inline/\n+\n # Bundle artifacts\n *.jsbundle\ndiff --git a/templates/expo-template-bare-minimum/android/gradle.properties b/templates/expo-template-bare-minimum/android/gradle.properties\nindex 40220def8da..97271b9456f 100644\n--- a/templates/expo-template-bare-minimum/android/gradle.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle.properties\n@@ -15,16 +15,13 @@ org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m\n # When configured, Gradle will run in incubating parallel mode.\n # This option should only be used with decoupled projects. More details, visit\n # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n-# org.gradle.parallel=true\n+org.gradle.parallel=true\n \n # AndroidX package structure to make it clearer which packages are bundled with the\n # Android operating system, and which are packaged with your app's APK\n # https://developer.android.com/topic/libraries/support-library/androidx-rn\n android.useAndroidX=true\n \n-# Automatically convert third-party libraries to use AndroidX\n-android.enableJetifier=true\n-\n # Enable AAPT2 PNG crunching\n android.enablePngCrunchInReleaseBuilds=true\n \n@@ -38,12 +35,17 @@ reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64\n # your application. You should enable this flag either if you want\n # to write custom TurboModules/Fabric components OR use libraries that\n # are providing them.\n-newArchEnabled=false\n+newArchEnabled=true\n \n # Use this property to enable or disable the Hermes JS engine.\n # If set to false, you will be using JSC instead.\n hermesEnabled=true\n \n+# Use this property to enable edge-to-edge display support.\n+# This allows your app to draw behind system bars for an immersive UI.\n+# Note: Only works with ReactActivity and should not be used with custom Activity.\n+edgeToEdgeEnabled=true\n+\n # Enable GIF support in React Native images (~200 B increase)\n expo.gif.enabled=true\n # Enable webp support in React Native images (~85 KB increase)\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar\nindex e6441136f3d..61285a659d1 100644\nBinary files a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar and b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar differ\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\nindex 6f7a6eb33e8..37f78a6af83 100644\n--- a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n@@ -1,6 +1,6 @@\n distributionBase=GRADLE_USER_HOME\n distributionPath=wrapper/dists\n-distributionUrl=https\\://services.gradle.org/distributions/gradle-8.8-all.zip\n+distributionUrl=https\\://services.gradle.org/distributions/gradle-9.3.1-bin.zip\n networkTimeout=10000\n validateDistributionUrl=true\n zipStoreBase=GRADLE_USER_HOME\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew b/templates/expo-template-bare-minimum/android/gradlew\nindex 1aa94a42690..adff685a034 100755\n--- a/templates/expo-template-bare-minimum/android/gradlew\n+++ b/templates/expo-template-bare-minimum/android/gradlew\n@@ -1,7 +1,7 @@\n #!/bin/sh\n \n #\n-# Copyright © 2015-2021 the original authors.\n+# Copyright © 2015 the original authors.\n #\n # Licensed under the Apache License, Version 2.0 (the \"License\");\n # you may not use this file except in compliance with the License.\n@@ -15,6 +15,8 @@\n # See the License for the specific language governing permissions and\n # limitations under the License.\n #\n+# SPDX-License-Identifier: Apache-2.0\n+#\n \n ##############################################################################\n #\n@@ -55,7 +57,7 @@\n # Darwin, MinGW, and NonStop.\n #\n # (3) This script is generated from the Groovy template\n-# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt\n+# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt\n # within the Gradle project.\n #\n # You can find Gradle at https://github.com/gradle/gradle/.\n@@ -84,7 +86,7 @@ done\n # shellcheck disable=SC2034\n APP_BASE_NAME=${0##*/}\n # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)\n-APP_HOME=$( cd \"${APP_HOME:-./}\" > /dev/null && pwd -P ) || exit\n+APP_HOME=$( cd -P \"${APP_HOME:-./}\" > /dev/null && printf '%s\\n' \"$PWD\" ) || exit\n \n # Use the maximum available, or set MAX_FD != -1 to use that value.\n MAX_FD=maximum\n@@ -112,7 +114,6 @@ case \"$( uname )\" in #(\n NONSTOP* ) nonstop=true ;;\n esac\n \n-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n \n \n # Determine the Java command to use to start the JVM.\n@@ -170,7 +171,6 @@ fi\n # For Cygwin or MSYS, switch paths to Windows format before running java\n if \"$cygwin\" || \"$msys\" ; then\n APP_HOME=$( cygpath --path --mixed \"$APP_HOME\" )\n- CLASSPATH=$( cygpath --path --mixed \"$CLASSPATH\" )\n \n JAVACMD=$( cygpath --unix \"$JAVACMD\" )\n \n@@ -203,15 +203,14 @@ fi\n DEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n \n # Collect all arguments for the java command:\n-# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,\n+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,\n # and any embedded shellness will be escaped.\n # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be\n # treated as '${Hostname}' itself on the command line.\n \n set -- \\\n \"-Dorg.gradle.appname=$APP_BASE_NAME\" \\\n- -classpath \"$CLASSPATH\" \\\n- org.gradle.wrapper.GradleWrapperMain \\\n+ -jar \"$APP_HOME/gradle/wrapper/gradle-wrapper.jar\" \\\n \"$@\"\n \n # Stop when \"xargs\" is not available.\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew.bat b/templates/expo-template-bare-minimum/android/gradlew.bat\nindex 7101f8e4676..39baf4d6846 100644\n--- a/templates/expo-template-bare-minimum/android/gradlew.bat\n+++ b/templates/expo-template-bare-minimum/android/gradlew.bat\n@@ -1,3 +1,8 @@\n+@REM Copyright (c) Meta Platforms, Inc. and affiliates.\r\n+@REM\r\n+@REM This source code is licensed under the MIT license found in the\r\n+@REM LICENSE file in the root directory of this source tree.\r\n+\r\n @rem\r\n @rem Copyright 2015 the original author or authors.\r\n @rem\r\n@@ -13,6 +18,8 @@\n @rem See the License for the specific language governing permissions and\r\n @rem limitations under the License.\r\n @rem\r\n+@rem SPDX-License-Identifier: Apache-2.0\r\n+@rem\r\n \r\n @if \"%DEBUG%\"==\"\" @echo off\r\n @rem ##########################################################################\r\n@@ -68,11 +75,10 @@ goto fail\n :execute\r\n @rem Setup the command line\r\n \r\n-set CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\r\n \r\n \r\n @rem Execute Gradle\r\n-\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\r\n+\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -jar \"%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\" %*\r\n \r\n :end\r\n @rem End local scope for the variables with windows NT shell\r\ndiff --git a/templates/expo-template-bare-minimum/android/settings.gradle b/templates/expo-template-bare-minimum/android/settings.gradle\nindex 80b1bc3267b..7fe91512213 100644\n--- a/templates/expo-template-bare-minimum/android/settings.gradle\n+++ b/templates/expo-template-bare-minimum/android/settings.gradle\n@@ -1,66 +1,39 @@\n pluginManagement {\n- def version = providers.exec {\n- commandLine(\"node\", \"-e\", \"console.log(require('react-native/package.json').version);\")\n- }.standardOutput.asText.get().trim()\n- def (_, reactNativeMinor, reactNativePatch) = version.split(\"-\")[0].tokenize('.').collect { it.toInteger() }\n-\n- includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().toString())\n- if(reactNativeMinor == 74 && reactNativePatch <= 3){\n- includeBuild(\"react-settings-plugin\")\n- }\n+ def reactNativeGradlePlugin = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\")\n+ }.standardOutput.asText.get().trim()\n+ ).getParentFile().absolutePath\n+ includeBuild(reactNativeGradlePlugin)\n+ \n+ def expoPluginsPath = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('expo-modules-autolinking/package.json', { paths: [require.resolve('expo/package.json')] })\")\n+ }.standardOutput.asText.get().trim(),\n+ \"../android/expo-gradle-plugin\"\n+ ).absolutePath\n+ includeBuild(expoPluginsPath)\n }\n \n-plugins { id(\"com.facebook.react.settings\") }\n-\n-def getRNMinorVersion() {\n- def version = providers.exec {\n- commandLine(\"node\", \"-e\", \"console.log(require('react-native/package.json').version);\")\n- }.standardOutput.asText.get().trim()\n-\n- def coreVersion = version.split(\"-\")[0]\n- def (major, minor, patch) = coreVersion.tokenize('.').collect { it.toInteger() }\n-\n- return minor\n+plugins {\n+ id(\"com.facebook.react.settings\")\n+ id(\"expo-autolinking-settings\")\n }\n \n-if (getRNMinorVersion() >= 75) {\n- extensions.configure(com.facebook.react.ReactSettingsExtension) { ex ->\n- if (System.getenv('EXPO_UNSTABLE_CORE_AUTOLINKING') == '1') {\n- println('\\u001B[32mUsing expo-modules-autolinking as core autolinking source\\u001B[0m')\n- def command = [\n- 'node',\n- '--no-warnings',\n- '--eval',\n- 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n- 'react-native-config',\n- '--json',\n- '--platform',\n- 'android'\n- ].toList()\n- ex.autolinkLibrariesFromCommand(command)\n- } else {\n- ex.autolinkLibrariesFromCommand()\n- }\n+extensions.configure(com.facebook.react.ReactSettingsExtension) { ex ->\n+ if (System.getenv('EXPO_USE_COMMUNITY_AUTOLINKING') == '1') {\n+ ex.autolinkLibrariesFromCommand()\n+ } else {\n+ ex.autolinkLibrariesFromCommand(expoAutolinking.rnConfigCommand)\n }\n }\n+expoAutolinking.useExpoModules()\n \n rootProject.name = 'HelloWorld'\n \n-dependencyResolutionManagement {\n- versionCatalogs {\n- reactAndroidLibs {\n- from(files(new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim(), \"../gradle/libs.versions.toml\")))\n- }\n- }\n-}\n-\n-apply from: new File([\"node\", \"--print\", \"require.resolve('expo/package.json')\"].execute(null, rootDir).text.trim(), \"../scripts/autolinking.gradle\");\n-useExpoModules()\n-\n-if (getRNMinorVersion() < 75) {\n- apply from: new File([\"node\", \"--print\", \"require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), \"../native_modules.gradle\");\n- applyNativeModulesSettingsGradle(settings)\n-}\n+expoAutolinking.useExpoVersionCatalog()\n \n include ':app'\n-includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile())\n+includeBuild(expoAutolinking.reactNativeGradlePlugin)\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\nindex f945940c256..39fa5afe55b 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n@@ -3,33 +3,25 @@\n \tarchiveVersion = 1;\n \tclasses = {\n \t};\n-\tobjectVersion = 46;\n+\tobjectVersion = 54;\n \tobjects = {\n \n /* Begin PBXBuildFile section */\n-\t\t13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };\n \t\t13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };\n-\t\t13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };\n \t\t3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; };\n-\t\t96905EF65AED1B983A6B3ABC /* libPods-HelloWorld.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */; };\n-\t\tB18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; };\n \t\tBB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; };\n+\t\tF11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F11748412D0307B40044C1D9 /* AppDelegate.swift */; };\n /* End PBXBuildFile section */\n \n /* Begin PBXFileReference section */\n \t\t13B07F961A680F5B00A75B9A /* HelloWorld.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloWorld.app; sourceTree = BUILT_PRODUCTS_DIR; };\n-\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = HelloWorld/AppDelegate.h; sourceTree = \"\"; };\n-\t\t13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = HelloWorld/AppDelegate.mm; sourceTree = \"\"; };\n \t\t13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = HelloWorld/Images.xcassets; sourceTree = \"\"; };\n \t\t13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = HelloWorld/Info.plist; sourceTree = \"\"; };\n-\t\t13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = HelloWorld/main.m; sourceTree = \"\"; };\n-\t\t58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-HelloWorld.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n-\t\t6C2E3173556A471DD304B334 /* 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 = \"\"; };\n-\t\t7A4D352CD337FB3A3BF06240 /* 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 = \"\"; };\n \t\tAA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = HelloWorld/SplashScreen.storyboard; sourceTree = \"\"; };\n \t\tBB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = \"\"; };\n \t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };\n-\t\tFAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = \"Pods/Target Support Files/Pods-HelloWorld/ExpoModulesProvider.swift\"; sourceTree = \"\"; };\n+\t\tF11748412D0307B40044C1D9 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = HelloWorld/AppDelegate.swift; sourceTree = \"\"; };\n+\t\tF11748442D0722820044C1D9 /* HelloWorld-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = \"HelloWorld-Bridging-Header.h\"; path = \"HelloWorld/HelloWorld-Bridging-Header.h\"; sourceTree = \"\"; };\n /* End PBXFileReference section */\n \n /* Begin PBXFrameworksBuildPhase section */\n@@ -37,7 +29,6 @@\n \t\t\tisa = PBXFrameworksBuildPhase;\n \t\t\tbuildActionMask = 2147483647;\n \t\t\tfiles = (\n-\t\t\t\t96905EF65AED1B983A6B3ABC /* libPods-HelloWorld.a in Frameworks */,\n \t\t\t);\n \t\t\trunOnlyForDeploymentPostprocessing = 0;\n \t\t};\n@@ -47,12 +38,11 @@\n \t\t13B07FAE1A68108700A75B9A /* HelloWorld */ = {\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n+\t\t\t\tF11748412D0307B40044C1D9 /* AppDelegate.swift */,\n+\t\t\t\tF11748442D0722820044C1D9 /* HelloWorld-Bridging-Header.h */,\n \t\t\t\tBB2F792B24A3F905000567C9 /* Supporting */,\n-\t\t\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */,\n-\t\t\t\t13B07FB01A68108700A75B9A /* AppDelegate.mm */,\n \t\t\t\t13B07FB51A68108700A75B9A /* Images.xcassets */,\n \t\t\t\t13B07FB61A68108700A75B9A /* Info.plist */,\n-\t\t\t\t13B07FB71A68108700A75B9A /* main.m */,\n \t\t\t\tAA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */,\n \t\t\t);\n \t\t\tname = HelloWorld;\n@@ -62,7 +52,6 @@\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n \t\t\t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */,\n-\t\t\t\t58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */,\n \t\t\t);\n \t\t\tname = Frameworks;\n \t\t\tsourceTree = \"\";\n@@ -81,8 +70,6 @@\n \t\t\t\t832341AE1AAA6A7D00B99B32 /* Libraries */,\n \t\t\t\t83CBBA001A601CBA00E9B192 /* Products */,\n \t\t\t\t2D16E6871FA4F8E400B85C8A /* Frameworks */,\n-\t\t\t\tD65327D7A22EEC0BE12398D9 /* Pods */,\n-\t\t\t\tD7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */,\n \t\t\t);\n \t\t\tindentWidth = 2;\n \t\t\tsourceTree = \"\";\n@@ -97,14 +84,6 @@\n \t\t\tname = Products;\n \t\t\tsourceTree = \"\";\n \t\t};\n-\t\t92DBD88DE9BF7D494EA9DA96 /* HelloWorld */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\tFAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */,\n-\t\t\t);\n-\t\t\tname = HelloWorld;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n \t\tBB2F792B24A3F905000567C9 /* Supporting */ = {\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n@@ -114,23 +93,6 @@\n \t\t\tpath = HelloWorld/Supporting;\n \t\t\tsourceTree = \"\";\n \t\t};\n-\t\tD65327D7A22EEC0BE12398D9 /* Pods */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\t6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */,\n-\t\t\t\t7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */,\n-\t\t\t);\n-\t\t\tpath = Pods;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n-\t\tD7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\t92DBD88DE9BF7D494EA9DA96 /* HelloWorld */,\n-\t\t\t);\n-\t\t\tname = ExpoModulesProviders;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n /* End PBXGroup section */\n \n /* Begin PBXNativeTarget section */\n@@ -206,6 +168,8 @@\n \t\t\tfiles = (\n \t\t\t);\n \t\t\tinputPaths = (\n+\t\t\t\t\"$(SRCROOT)/.xcode.env\",\n+\t\t\t\t\"$(SRCROOT)/.xcode.env.local\",\n \t\t\t);\n \t\t\tname = \"Bundle React Native code and images\";\n \t\t\toutputPaths = (\n@@ -265,9 +229,7 @@\n \t\t\tisa = PBXSourcesBuildPhase;\n \t\t\tbuildActionMask = 2147483647;\n \t\t\tfiles = (\n-\t\t\t\t13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,\n-\t\t\t\t13B07FC11A68108700A75B9A /* main.m in Sources */,\n-\t\t\t\tB18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */,\n+\t\t\t\tF11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */,\n \t\t\t);\n \t\t\trunOnlyForDeploymentPostprocessing = 0;\n \t\t};\n@@ -276,7 +238,6 @@\n /* Begin XCBuildConfiguration section */\n \t\t13B07F941A680F5B00A75B9A /* Debug */ = {\n \t\t\tisa = XCBuildConfiguration;\n-\t\t\tbaseConfigurationReference = 6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */;\n \t\t\tbuildSettings = {\n \t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n@@ -287,8 +248,12 @@\n \t\t\t\t\t\"FB_SONARKIT_ENABLED=1\",\n \t\t\t\t);\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t\t\"@executable_path/Frameworks\",\n+\t\t\t\t);\n+\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.4;\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -297,6 +262,7 @@\n \t\t\t\t);\n \t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = org.name.HelloWorld;\n \t\t\t\tPRODUCT_NAME = HelloWorld;\n+\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"HelloWorld/HelloWorld-Bridging-Header.h\";\n \t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n \t\t\t\tSWIFT_VERSION = 5.0;\n \t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n@@ -305,14 +271,17 @@\n \t\t};\n \t\t13B07F951A680F5B00A75B9A /* Release */ = {\n \t\t\tisa = XCBuildConfiguration;\n-\t\t\tbaseConfigurationReference = 7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */;\n \t\t\tbuildSettings = {\n \t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n \t\t\t\tCURRENT_PROJECT_VERSION = 1;\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t\t\"@executable_path/Frameworks\",\n+\t\t\t\t);\n+\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.4;\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -321,6 +290,7 @@\n \t\t\t\t);\n \t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = org.name.HelloWorld;\n \t\t\t\tPRODUCT_NAME = HelloWorld;\n+\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"HelloWorld/HelloWorld-Bridging-Header.h\";\n \t\t\t\tSWIFT_VERSION = 5.0;\n \t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n \t\t\t};\n@@ -373,8 +343,11 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t/usr/lib/swift,\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t);\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n \t\t\t\tONLY_ACTIVE_ARCH = YES;\n@@ -422,8 +395,11 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t/usr/lib/swift,\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t);\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n \t\t\t\tSDKROOT = iphoneos;\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\nnew file mode 100644\nindex 00000000000..9670a1ff07e\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\n@@ -0,0 +1,69 @@\n+internal import Expo\n+import React\n+import ReactAppDependencyProvider\n+\n+@main\n+class AppDelegate: ExpoAppDelegate {\n+ var window: UIWindow?\n+\n+ var reactNativeDelegate: ExpoReactNativeFactoryDelegate?\n+ var reactNativeFactory: RCTReactNativeFactory?\n+\n+ public override func application(\n+ _ application: UIApplication,\n+ didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil\n+ ) -> Bool {\n+ let delegate = ReactNativeDelegate()\n+ let factory = ExpoReactNativeFactory(delegate: delegate)\n+ delegate.dependencyProvider = RCTAppDependencyProvider()\n+\n+ reactNativeDelegate = delegate\n+ reactNativeFactory = factory\n+\n+#if os(iOS) || os(tvOS)\n+ window = UIWindow(frame: UIScreen.main.bounds)\n+ factory.startReactNative(\n+ withModuleName: \"main\",\n+ in: window,\n+ launchOptions: launchOptions)\n+#endif\n+\n+ return super.application(application, didFinishLaunchingWithOptions: launchOptions)\n+ }\n+\n+ // Linking API\n+ public override func application(\n+ _ app: UIApplication,\n+ open url: URL,\n+ options: [UIApplication.OpenURLOptionsKey: Any] = [:]\n+ ) -> Bool {\n+ return super.application(app, open: url, options: options) || RCTLinkingManager.application(app, open: url, options: options)\n+ }\n+\n+ // Universal Links\n+ public override func application(\n+ _ application: UIApplication,\n+ continue userActivity: NSUserActivity,\n+ restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void\n+ ) -> Bool {\n+ let result = RCTLinkingManager.application(application, continue: userActivity, restorationHandler: restorationHandler)\n+ return super.application(application, continue: userActivity, restorationHandler: restorationHandler) || result\n+ }\n+}\n+\n+class ReactNativeDelegate: ExpoReactNativeFactoryDelegate {\n+ // Extension point for config-plugins\n+\n+ override func sourceURL(for bridge: RCTBridge) -> URL? {\n+ // needed to return the correct URL for expo-dev-client.\n+ bridge.bundleURL ?? bundleURL()\n+ }\n+\n+ override func bundleURL() -> URL? {\n+#if DEBUG\n+ return RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: \".expo/.virtual-metro-entry\")\n+#else\n+ return Bundle.main.url(forResource: \"main\", withExtension: \"jsbundle\")\n+#endif\n+ }\n+}\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h b/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h\nnew file mode 100644\nindex 00000000000..8361941afc2\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h\n@@ -0,0 +1,3 @@\n+//\n+// Use this file to import your target's public headers that you would like to expose to Swift.\n+//\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist b/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist\nindex 53d78e89033..596dc7ce6b5 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist\n@@ -24,6 +24,8 @@\n \t1\n \tLSRequiresIPhoneOS\n \t\n+\tLSMinimumSystemVersion\n+\t12.0\n \tNSAppTransportSecurity\n \t\n \t\tNSAllowsArbitraryLoads\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\nindex 24eec3df5cb..58d21796e1d 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n@@ -1,91 +1,47 @@\n \n-\n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n+\n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n \ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex 57c1dd38343..c3158e3fb9b 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -4,39 +4,43 @@ require File.join(File.dirname(`node --print \"require.resolve('react-native/pack\n require 'json'\n podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}\n \n-ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0'\n-ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+def ccache_enabled?(podfile_properties)\n+ # Environment variable takes precedence\n+ return ENV['USE_CCACHE'] == '1' if ENV['USE_CCACHE']\n \n-use_autolinking_method_symbol = ('use' + '_native' + '_modules!').to_sym\n-origin_autolinking_method = self.method(use_autolinking_method_symbol)\n-self.define_singleton_method(use_autolinking_method_symbol) do |*args|\n- if ENV['EXPO_UNSTABLE_CORE_AUTOLINKING'] == '1'\n- Pod::UI.puts('Using expo-modules-autolinking as core autolinking source'.green)\n+ # Fall back to Podfile properties\n+ podfile_properties['apple.ccacheEnabled'] == 'true'\n+end\n+\n+ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+ENV['RCT_USE_RN_DEP'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1'\n+ENV['RCT_USE_PREBUILT_RNCORE'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1'\n+ENV['RCT_HERMES_V1_ENABLED'] ||= '1' if podfile_properties['expo.useHermesV1'] == 'true'\n+ENV['EXPO_USE_PRECOMPILED_MODULES'] ||= '1' if podfile_properties['EXPO_USE_PRECOMPILED_MODULES'] != 'false'\n+platform :ios, podfile_properties['ios.deploymentTarget'] || '16.4'\n+\n+prepare_react_native_project!\n+\n+target 'HelloWorld' do\n+ use_expo_modules!\n+\n+ if ENV['EXPO_USE_COMMUNITY_AUTOLINKING'] == '1'\n+ config_command = ['node', '-e', \"process.argv=['', '', 'config'];require('@react-native-community/cli').run()\"];\n+ else\n config_command = [\n 'node',\n '--no-warnings',\n '--eval',\n- 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n+ 'require(\\'expo/bin/autolinking\\')',\n+ 'expo-modules-autolinking',\n 'react-native-config',\n '--json',\n '--platform',\n 'ios'\n ]\n- origin_autolinking_method.call(config_command)\n- else\n- origin_autolinking_method.call()\n end\n-end\n-\n-platform :ios, podfile_properties['ios.deploymentTarget'] || '13.4'\n-install! 'cocoapods',\n- :deterministic_uuids => false\n \n-prepare_react_native_project!\n-\n-target 'HelloWorld' do\n- use_expo_modules!\n- config = use_native_modules!\n+ config = use_native_modules!(config_command)\n \n use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks']\n use_frameworks! :linkage => ENV['USE_FRAMEWORKS'].to_sym if ENV['USE_FRAMEWORKS']\n@@ -54,26 +58,7 @@ target 'HelloWorld' do\n installer,\n config[:reactNativePath],\n :mac_catalyst_enabled => false,\n- :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true',\n+ :ccache_enabled => ccache_enabled?(podfile_properties),\n )\n-\n- # This is necessary for Xcode 14, because it signs resource bundles by default\n- # when building for devices.\n- installer.target_installation_results.pod_target_installation_results\n- .each do |pod_name, target_installation_result|\n- target_installation_result.resource_bundle_targets.each do |resource_bundle_target|\n- resource_bundle_target.build_configurations.each do |config|\n- config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'\n- end\n- end\n- end\n- end\n-\n- post_integrate do |installer|\n- begin\n- expo_patch_react_imports!(installer)\n- rescue => e\n- Pod::UI.warn e\n- end\n end\n end\ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex 563853071f0..3e151175775 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -1,7 +1,8 @@\n {\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n- \"version\": \"51.0.56\",\n+ \"license\": \"0BSD\",\n+ \"version\": \"56.0.13\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -10,12 +11,14 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~51.0.28\",\n- \"expo-status-bar\": \"~1.12.1\",\n- \"react\": \"18.2.0\",\n- \"react-native\": \"0.74.5\"\n+ \"expo\": \"~56.0.0-preview.13\",\n+ \"expo-status-bar\": \"~56.0.4\",\n+ \"react\": \"19.2.3\",\n+ \"react-native\": \"0.85.3\"\n },\n- \"devDependencies\": {\n- \"@babel/core\": \"^7.20.0\"\n+ \"publishConfig\": {\n+ \"executableFiles\": [\n+ \"./android/gradlew\"\n+ ]\n }\n }\n","52..unversioned":"diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle\nindex 84879d83acd..fc185e53bc3 100644\n--- a/templates/expo-template-bare-minimum/android/app/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/app/build.gradle\n@@ -11,9 +11,10 @@ def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath()\n react {\n entryFile = file([\"node\", \"-e\", \"require('expo/scripts/resolveAppEntry')\", projectRoot, \"android\", \"absolute\"].execute(null, rootDir).text.trim())\n reactNativeDir = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n- hermesCommand = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/sdks/hermesc/%OS-BIN%/hermesc\"\n+ hermesCommand = new File([\"node\", \"--print\", \"require.resolve('hermes-compiler/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/hermesc/%OS-BIN%/hermesc\"\n codegenDir = new File([\"node\", \"--print\", \"require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n \n+ enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean()\n // Use Expo CLI to bundle the app, this ensures the Metro config\n // works correctly with Expo projects.\n cliFile = new File([\"node\", \"--print\", \"require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })\"].execute(null, rootDir).text.trim())\n@@ -63,9 +64,9 @@ react {\n }\n \n /**\n- * Set this to true to Run Proguard on Release builds to minify the Java bytecode.\n+ * Set this to true in release builds to optimize the app using [R8](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization).\n */\n-def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInReleaseBuilds') ?: false).toBoolean()\n+def enableMinifyInReleaseBuilds = (findProperty('android.enableMinifyInReleaseBuilds') ?: false).toBoolean()\n \n /**\n * The preferred build flavor of JavaScriptCore (JSC)\n@@ -78,7 +79,7 @@ def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInRelea\n * give correct results when using with locales other than en-US. Note that\n * this variant is about 6MiB larger per architecture than default.\n */\n-def jscFlavor = 'org.webkit:android-jsc:+'\n+def jscFlavor = 'io.github.react-native-community:jsc-android:2026004.+'\n \n android {\n ndkVersion rootProject.ext.ndkVersion\n@@ -93,6 +94,8 @@ android {\n targetSdkVersion rootProject.ext.targetSdkVersion\n versionCode 1\n versionName \"1.0\"\n+\n+ buildConfigField \"String\", \"REACT_NATIVE_RELEASE_LEVEL\", \"\\\"${findProperty('reactNativeReleaseLevel') ?: 'stable'}\\\"\"\n }\n signingConfigs {\n debug {\n@@ -110,15 +113,18 @@ android {\n // Caution! In production, you need to generate your own keystore file.\n // see https://reactnative.dev/docs/signed-apk-android.\n signingConfig signingConfigs.debug\n- shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false)\n- minifyEnabled enableProguardInReleaseBuilds\n+ def enableShrinkResources = findProperty('android.enableShrinkResourcesInReleaseBuilds') ?: 'false'\n+ shrinkResources enableShrinkResources.toBoolean()\n+ minifyEnabled enableMinifyInReleaseBuilds\n proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n- crunchPngs (findProperty('android.enablePngCrunchInReleaseBuilds')?.toBoolean() ?: true)\n+ def enablePngCrunchInRelease = findProperty('android.enablePngCrunchInReleaseBuilds') ?: 'true'\n+ crunchPngs enablePngCrunchInRelease.toBoolean()\n }\n }\n packagingOptions {\n jniLibs {\n- useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false)\n+ def enableLegacyPackaging = findProperty('expo.useLegacyPackaging') ?: 'false'\n+ useLegacyPackaging enableLegacyPackaging.toBoolean()\n }\n }\n androidResources {\n@@ -156,15 +162,15 @@ dependencies {\n \n if (isGifEnabled) {\n // For animated gif support\n- implementation(\"com.facebook.fresco:animated-gif:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-gif:${expoLibs.versions.fresco.get()}\")\n }\n \n if (isWebpEnabled) {\n // For webp support\n- implementation(\"com.facebook.fresco:webpsupport:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:webpsupport:${expoLibs.versions.fresco.get()}\")\n if (isWebpAnimatedEnabled) {\n // Animated webp support\n- implementation(\"com.facebook.fresco:animated-webp:${reactAndroidLibs.versions.fresco.get()}\")\n+ implementation(\"com.facebook.fresco:animated-webp:${expoLibs.versions.fresco.get()}\")\n }\n }\n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\nnew file mode 100644\nindex 00000000000..3ec2507bab7\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\n@@ -0,0 +1,7 @@\n+\n+\n+ \n+\n+ \n+\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\nindex 150248b6b3c..14bdba124ab 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n@@ -1,12 +1,13 @@\n-\n+\n \n \n \n \n \n \n- \n- \n+ \n+ \n \n \n \n@@ -19,7 +20,7 @@\n \n \n \n- \n+ \n \n \n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\nindex e61349d1301..cbb5ddb85d0 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n@@ -5,48 +5,36 @@ import android.content.res.Configuration\n \n import com.facebook.react.PackageList\n import com.facebook.react.ReactApplication\n-import com.facebook.react.ReactNativeHost\n+import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative\n import com.facebook.react.ReactPackage\n import com.facebook.react.ReactHost\n-import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load\n-import com.facebook.react.defaults.DefaultReactNativeHost\n-import com.facebook.react.soloader.OpenSourceMergedSoMapping\n-import com.facebook.soloader.SoLoader\n+import com.facebook.react.common.ReleaseLevel\n+import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint\n \n import expo.modules.ApplicationLifecycleDispatcher\n-import expo.modules.ReactNativeHostWrapper\n+import expo.modules.ExpoReactHostFactory\n \n class MainApplication : Application(), ReactApplication {\n \n- override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper(\n- this,\n- object : DefaultReactNativeHost(this) {\n- override fun getPackages(): List {\n- val packages = PackageList(this).packages\n- // Packages that cannot be autolinked yet can be added manually here, for example:\n- // packages.add(new MyReactNativePackage());\n- return packages\n- }\n-\n- override fun getJSMainModuleName(): String = \".expo/.virtual-metro-entry\"\n-\n- override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG\n-\n- override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED\n- override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED\n- }\n- )\n-\n- override val reactHost: ReactHost\n- get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost)\n+ override val reactHost: ReactHost by lazy {\n+ ExpoReactHostFactory.getDefaultReactHost(\n+ context = applicationContext,\n+ packageList =\n+ PackageList(this).packages.apply {\n+ // Packages that cannot be autolinked yet can be added manually here, for example:\n+ // add(MyReactNativePackage())\n+ }\n+ )\n+ }\n \n override fun onCreate() {\n super.onCreate()\n- SoLoader.init(this, OpenSourceMergedSoMapping)\n- if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {\n- // If you opted-in for the New Architecture, we load the native entry point for this app.\n- load()\n+ DefaultNewArchitectureEntryPoint.releaseLevel = try {\n+ ReleaseLevel.valueOf(BuildConfig.REACT_NATIVE_RELEASE_LEVEL.uppercase())\n+ } catch (e: IllegalArgumentException) {\n+ ReleaseLevel.STABLE\n }\n+ loadReactNative(this)\n ApplicationLifecycleDispatcher.onApplicationCreate(this)\n }\n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\nindex 51fbc1e5a72..26f3404be26 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/values/styles.xml\n@@ -1,14 +1,7 @@\n \n- \n- \n \ndiff --git a/templates/expo-template-bare-minimum/android/build.gradle b/templates/expo-template-bare-minimum/android/build.gradle\nindex abbcb8ec8a1..0554dd156c1 100644\n--- a/templates/expo-template-bare-minimum/android/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/build.gradle\n@@ -1,41 +1,24 @@\n // Top-level build file where you can add configuration options common to all sub-projects/modules.\n \n buildscript {\n- ext {\n- buildToolsVersion = findProperty('android.buildToolsVersion') ?: '35.0.0'\n- minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '24')\n- compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '35')\n- targetSdkVersion = Integer.parseInt(findProperty('android.targetSdkVersion') ?: '34')\n- kotlinVersion = findProperty('android.kotlinVersion') ?: '1.9.25'\n-\n- ndkVersion = \"26.1.10909125\"\n- }\n- repositories {\n- google()\n- mavenCentral()\n- }\n- dependencies {\n- classpath('com.android.tools.build:gradle')\n- classpath('com.facebook.react:react-native-gradle-plugin')\n- classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')\n- }\n+ repositories {\n+ google()\n+ mavenCentral()\n+ }\n+ dependencies {\n+ classpath('com.android.tools.build:gradle')\n+ classpath('com.facebook.react:react-native-gradle-plugin')\n+ classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')\n+ }\n }\n \n-apply plugin: \"com.facebook.react.rootproject\"\n-\n allprojects {\n- repositories {\n- maven {\n- // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n- url(new File(['node', '--print', \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim(), '../android'))\n- }\n- maven {\n- // Android JSC is installed from npm\n- url(new File(['node', '--print', \"require.resolve('jsc-android/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim(), '../dist'))\n- }\n-\n- google()\n- mavenCentral()\n- maven { url 'https://www.jitpack.io' }\n- }\n+ repositories {\n+ google()\n+ mavenCentral()\n+ maven { url 'https://www.jitpack.io' }\n+ }\n }\n+\n+apply plugin: \"expo-root-project\"\n+apply plugin: \"com.facebook.react.rootproject\"\ndiff --git a/templates/expo-template-bare-minimum/android/gitignore b/templates/expo-template-bare-minimum/android/gitignore\nindex 8a6be077181..1ea9b6464ec 100644\n--- a/templates/expo-template-bare-minimum/android/gitignore\n+++ b/templates/expo-template-bare-minimum/android/gitignore\n@@ -12,5 +12,8 @@ local.properties\n *.hprof\n .cxx/\n \n+# generated inline modules\n+app/src/main/java/inline/\n+\n # Bundle artifacts\n *.jsbundle\ndiff --git a/templates/expo-template-bare-minimum/android/gradle.properties b/templates/expo-template-bare-minimum/android/gradle.properties\nindex de47429c64c..97271b9456f 100644\n--- a/templates/expo-template-bare-minimum/android/gradle.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle.properties\n@@ -15,7 +15,7 @@ org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m\n # When configured, Gradle will run in incubating parallel mode.\n # This option should only be used with decoupled projects. More details, visit\n # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n-# org.gradle.parallel=true\n+org.gradle.parallel=true\n \n # AndroidX package structure to make it clearer which packages are bundled with the\n # Android operating system, and which are packaged with your app's APK\n@@ -35,12 +35,17 @@ reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64\n # your application. You should enable this flag either if you want\n # to write custom TurboModules/Fabric components OR use libraries that\n # are providing them.\n-newArchEnabled=false\n+newArchEnabled=true\n \n # Use this property to enable or disable the Hermes JS engine.\n # If set to false, you will be using JSC instead.\n hermesEnabled=true\n \n+# Use this property to enable edge-to-edge display support.\n+# This allows your app to draw behind system bars for an immersive UI.\n+# Note: Only works with ReactActivity and should not be used with custom Activity.\n+edgeToEdgeEnabled=true\n+\n # Enable GIF support in React Native images (~200 B increase)\n expo.gif.enabled=true\n # Enable webp support in React Native images (~85 KB increase)\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar\nindex a4b76b9530d..61285a659d1 100644\nBinary files a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar and b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar differ\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\nindex 79eb9d003fe..37f78a6af83 100644\n--- a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n@@ -1,6 +1,6 @@\n distributionBase=GRADLE_USER_HOME\n distributionPath=wrapper/dists\n-distributionUrl=https\\://services.gradle.org/distributions/gradle-8.10.2-all.zip\n+distributionUrl=https\\://services.gradle.org/distributions/gradle-9.3.1-bin.zip\n networkTimeout=10000\n validateDistributionUrl=true\n zipStoreBase=GRADLE_USER_HOME\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew b/templates/expo-template-bare-minimum/android/gradlew\nindex f5feea6d6b1..adff685a034 100755\n--- a/templates/expo-template-bare-minimum/android/gradlew\n+++ b/templates/expo-template-bare-minimum/android/gradlew\n@@ -1,7 +1,7 @@\n #!/bin/sh\n \n #\n-# Copyright © 2015-2021 the original authors.\n+# Copyright © 2015 the original authors.\n #\n # Licensed under the Apache License, Version 2.0 (the \"License\");\n # you may not use this file except in compliance with the License.\n@@ -86,8 +86,7 @@ done\n # shellcheck disable=SC2034\n APP_BASE_NAME=${0##*/}\n # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)\n-APP_HOME=$( cd -P \"${APP_HOME:-./}\" > /dev/null && printf '%s\n-' \"$PWD\" ) || exit\n+APP_HOME=$( cd -P \"${APP_HOME:-./}\" > /dev/null && printf '%s\\n' \"$PWD\" ) || exit\n \n # Use the maximum available, or set MAX_FD != -1 to use that value.\n MAX_FD=maximum\n@@ -115,7 +114,6 @@ case \"$( uname )\" in #(\n NONSTOP* ) nonstop=true ;;\n esac\n \n-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n \n \n # Determine the Java command to use to start the JVM.\n@@ -173,7 +171,6 @@ fi\n # For Cygwin or MSYS, switch paths to Windows format before running java\n if \"$cygwin\" || \"$msys\" ; then\n APP_HOME=$( cygpath --path --mixed \"$APP_HOME\" )\n- CLASSPATH=$( cygpath --path --mixed \"$CLASSPATH\" )\n \n JAVACMD=$( cygpath --unix \"$JAVACMD\" )\n \n@@ -206,15 +203,14 @@ fi\n DEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n \n # Collect all arguments for the java command:\n-# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,\n+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,\n # and any embedded shellness will be escaped.\n # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be\n # treated as '${Hostname}' itself on the command line.\n \n set -- \\\n \"-Dorg.gradle.appname=$APP_BASE_NAME\" \\\n- -classpath \"$CLASSPATH\" \\\n- org.gradle.wrapper.GradleWrapperMain \\\n+ -jar \"$APP_HOME/gradle/wrapper/gradle-wrapper.jar\" \\\n \"$@\"\n \n # Stop when \"xargs\" is not available.\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew.bat b/templates/expo-template-bare-minimum/android/gradlew.bat\nindex 9b42019c791..39baf4d6846 100644\n--- a/templates/expo-template-bare-minimum/android/gradlew.bat\n+++ b/templates/expo-template-bare-minimum/android/gradlew.bat\n@@ -1,3 +1,8 @@\n+@REM Copyright (c) Meta Platforms, Inc. and affiliates.\r\n+@REM\r\n+@REM This source code is licensed under the MIT license found in the\r\n+@REM LICENSE file in the root directory of this source tree.\r\n+\r\n @rem\r\n @rem Copyright 2015 the original author or authors.\r\n @rem\r\n@@ -70,11 +75,10 @@ goto fail\n :execute\r\n @rem Setup the command line\r\n \r\n-set CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\r\n \r\n \r\n @rem Execute Gradle\r\n-\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\r\n+\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -jar \"%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\" %*\r\n \r\n :end\r\n @rem End local scope for the variables with windows NT shell\r\ndiff --git a/templates/expo-template-bare-minimum/android/settings.gradle b/templates/expo-template-bare-minimum/android/settings.gradle\nindex 39b188e065c..7fe91512213 100644\n--- a/templates/expo-template-bare-minimum/android/settings.gradle\n+++ b/templates/expo-template-bare-minimum/android/settings.gradle\n@@ -1,38 +1,39 @@\n pluginManagement {\n- includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().toString())\n+ def reactNativeGradlePlugin = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\")\n+ }.standardOutput.asText.get().trim()\n+ ).getParentFile().absolutePath\n+ includeBuild(reactNativeGradlePlugin)\n+ \n+ def expoPluginsPath = new File(\n+ providers.exec {\n+ workingDir(rootDir)\n+ commandLine(\"node\", \"--print\", \"require.resolve('expo-modules-autolinking/package.json', { paths: [require.resolve('expo/package.json')] })\")\n+ }.standardOutput.asText.get().trim(),\n+ \"../android/expo-gradle-plugin\"\n+ ).absolutePath\n+ includeBuild(expoPluginsPath)\n+}\n+\n+plugins {\n+ id(\"com.facebook.react.settings\")\n+ id(\"expo-autolinking-settings\")\n }\n-plugins { id(\"com.facebook.react.settings\") }\n \n extensions.configure(com.facebook.react.ReactSettingsExtension) { ex ->\n if (System.getenv('EXPO_USE_COMMUNITY_AUTOLINKING') == '1') {\n ex.autolinkLibrariesFromCommand()\n } else {\n- def command = [\n- 'node',\n- '--no-warnings',\n- '--eval',\n- 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n- 'react-native-config',\n- '--json',\n- '--platform',\n- 'android'\n- ].toList()\n- ex.autolinkLibrariesFromCommand(command)\n+ ex.autolinkLibrariesFromCommand(expoAutolinking.rnConfigCommand)\n }\n }\n+expoAutolinking.useExpoModules()\n \n rootProject.name = 'HelloWorld'\n \n-dependencyResolutionManagement {\n- versionCatalogs {\n- reactAndroidLibs {\n- from(files(new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim(), \"../gradle/libs.versions.toml\")))\n- }\n- }\n-}\n-\n-apply from: new File([\"node\", \"--print\", \"require.resolve('expo/package.json')\"].execute(null, rootDir).text.trim(), \"../scripts/autolinking.gradle\");\n-useExpoModules()\n+expoAutolinking.useExpoVersionCatalog()\n \n include ':app'\n-includeBuild(new File([\"node\", \"--print\", \"require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile())\n+includeBuild(expoAutolinking.reactNativeGradlePlugin)\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\nindex 1ccb9b422d5..39fa5afe55b 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n@@ -3,33 +3,25 @@\n \tarchiveVersion = 1;\n \tclasses = {\n \t};\n-\tobjectVersion = 46;\n+\tobjectVersion = 54;\n \tobjects = {\n \n /* Begin PBXBuildFile section */\n-\t\t13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };\n \t\t13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };\n-\t\t13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };\n \t\t3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; };\n-\t\t96905EF65AED1B983A6B3ABC /* libPods-HelloWorld.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */; };\n-\t\tB18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; };\n \t\tBB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; };\n+\t\tF11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F11748412D0307B40044C1D9 /* AppDelegate.swift */; };\n /* End PBXBuildFile section */\n \n /* Begin PBXFileReference section */\n \t\t13B07F961A680F5B00A75B9A /* HelloWorld.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloWorld.app; sourceTree = BUILT_PRODUCTS_DIR; };\n-\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = HelloWorld/AppDelegate.h; sourceTree = \"\"; };\n-\t\t13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = HelloWorld/AppDelegate.mm; sourceTree = \"\"; };\n \t\t13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = HelloWorld/Images.xcassets; sourceTree = \"\"; };\n \t\t13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = HelloWorld/Info.plist; sourceTree = \"\"; };\n-\t\t13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = HelloWorld/main.m; sourceTree = \"\"; };\n-\t\t58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-HelloWorld.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n-\t\t6C2E3173556A471DD304B334 /* 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 = \"\"; };\n-\t\t7A4D352CD337FB3A3BF06240 /* 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 = \"\"; };\n \t\tAA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = HelloWorld/SplashScreen.storyboard; sourceTree = \"\"; };\n \t\tBB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = \"\"; };\n \t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };\n-\t\tFAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = \"Pods/Target Support Files/Pods-HelloWorld/ExpoModulesProvider.swift\"; sourceTree = \"\"; };\n+\t\tF11748412D0307B40044C1D9 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = HelloWorld/AppDelegate.swift; sourceTree = \"\"; };\n+\t\tF11748442D0722820044C1D9 /* HelloWorld-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = \"HelloWorld-Bridging-Header.h\"; path = \"HelloWorld/HelloWorld-Bridging-Header.h\"; sourceTree = \"\"; };\n /* End PBXFileReference section */\n \n /* Begin PBXFrameworksBuildPhase section */\n@@ -37,7 +29,6 @@\n \t\t\tisa = PBXFrameworksBuildPhase;\n \t\t\tbuildActionMask = 2147483647;\n \t\t\tfiles = (\n-\t\t\t\t96905EF65AED1B983A6B3ABC /* libPods-HelloWorld.a in Frameworks */,\n \t\t\t);\n \t\t\trunOnlyForDeploymentPostprocessing = 0;\n \t\t};\n@@ -47,12 +38,11 @@\n \t\t13B07FAE1A68108700A75B9A /* HelloWorld */ = {\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n+\t\t\t\tF11748412D0307B40044C1D9 /* AppDelegate.swift */,\n+\t\t\t\tF11748442D0722820044C1D9 /* HelloWorld-Bridging-Header.h */,\n \t\t\t\tBB2F792B24A3F905000567C9 /* Supporting */,\n-\t\t\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */,\n-\t\t\t\t13B07FB01A68108700A75B9A /* AppDelegate.mm */,\n \t\t\t\t13B07FB51A68108700A75B9A /* Images.xcassets */,\n \t\t\t\t13B07FB61A68108700A75B9A /* Info.plist */,\n-\t\t\t\t13B07FB71A68108700A75B9A /* main.m */,\n \t\t\t\tAA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */,\n \t\t\t);\n \t\t\tname = HelloWorld;\n@@ -62,7 +52,6 @@\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n \t\t\t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */,\n-\t\t\t\t58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */,\n \t\t\t);\n \t\t\tname = Frameworks;\n \t\t\tsourceTree = \"\";\n@@ -81,8 +70,6 @@\n \t\t\t\t832341AE1AAA6A7D00B99B32 /* Libraries */,\n \t\t\t\t83CBBA001A601CBA00E9B192 /* Products */,\n \t\t\t\t2D16E6871FA4F8E400B85C8A /* Frameworks */,\n-\t\t\t\tD65327D7A22EEC0BE12398D9 /* Pods */,\n-\t\t\t\tD7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */,\n \t\t\t);\n \t\t\tindentWidth = 2;\n \t\t\tsourceTree = \"\";\n@@ -97,14 +84,6 @@\n \t\t\tname = Products;\n \t\t\tsourceTree = \"\";\n \t\t};\n-\t\t92DBD88DE9BF7D494EA9DA96 /* HelloWorld */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\tFAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */,\n-\t\t\t);\n-\t\t\tname = HelloWorld;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n \t\tBB2F792B24A3F905000567C9 /* Supporting */ = {\n \t\t\tisa = PBXGroup;\n \t\t\tchildren = (\n@@ -114,23 +93,6 @@\n \t\t\tpath = HelloWorld/Supporting;\n \t\t\tsourceTree = \"\";\n \t\t};\n-\t\tD65327D7A22EEC0BE12398D9 /* Pods */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\t6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */,\n-\t\t\t\t7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */,\n-\t\t\t);\n-\t\t\tpath = Pods;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n-\t\tD7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */ = {\n-\t\t\tisa = PBXGroup;\n-\t\t\tchildren = (\n-\t\t\t\t92DBD88DE9BF7D494EA9DA96 /* HelloWorld */,\n-\t\t\t);\n-\t\t\tname = ExpoModulesProviders;\n-\t\t\tsourceTree = \"\";\n-\t\t};\n /* End PBXGroup section */\n \n /* Begin PBXNativeTarget section */\n@@ -206,6 +168,8 @@\n \t\t\tfiles = (\n \t\t\t);\n \t\t\tinputPaths = (\n+\t\t\t\t\"$(SRCROOT)/.xcode.env\",\n+\t\t\t\t\"$(SRCROOT)/.xcode.env.local\",\n \t\t\t);\n \t\t\tname = \"Bundle React Native code and images\";\n \t\t\toutputPaths = (\n@@ -265,9 +229,7 @@\n \t\t\tisa = PBXSourcesBuildPhase;\n \t\t\tbuildActionMask = 2147483647;\n \t\t\tfiles = (\n-\t\t\t\t13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,\n-\t\t\t\t13B07FC11A68108700A75B9A /* main.m in Sources */,\n-\t\t\t\tB18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */,\n+\t\t\t\tF11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */,\n \t\t\t);\n \t\t\trunOnlyForDeploymentPostprocessing = 0;\n \t\t};\n@@ -276,7 +238,6 @@\n /* Begin XCBuildConfiguration section */\n \t\t13B07F941A680F5B00A75B9A /* Debug */ = {\n \t\t\tisa = XCBuildConfiguration;\n-\t\t\tbaseConfigurationReference = 6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */;\n \t\t\tbuildSettings = {\n \t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n@@ -287,8 +248,12 @@\n \t\t\t\t\t\"FB_SONARKIT_ENABLED=1\",\n \t\t\t\t);\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t\t\"@executable_path/Frameworks\",\n+\t\t\t\t);\n+\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.4;\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -297,6 +262,7 @@\n \t\t\t\t);\n \t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = org.name.HelloWorld;\n \t\t\t\tPRODUCT_NAME = HelloWorld;\n+\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"HelloWorld/HelloWorld-Bridging-Header.h\";\n \t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n \t\t\t\tSWIFT_VERSION = 5.0;\n \t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n@@ -305,14 +271,17 @@\n \t\t};\n \t\t13B07F951A680F5B00A75B9A /* Release */ = {\n \t\t\tisa = XCBuildConfiguration;\n-\t\t\tbaseConfigurationReference = 7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */;\n \t\t\tbuildSettings = {\n \t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n \t\t\t\tCURRENT_PROJECT_VERSION = 1;\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t\t\"@executable_path/Frameworks\",\n+\t\t\t\t);\n+\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.4;\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -321,6 +290,7 @@\n \t\t\t\t);\n \t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = org.name.HelloWorld;\n \t\t\t\tPRODUCT_NAME = HelloWorld;\n+\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"HelloWorld/HelloWorld-Bridging-Header.h\";\n \t\t\t\tSWIFT_VERSION = 5.0;\n \t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n \t\t\t};\n@@ -373,8 +343,11 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t/usr/lib/swift,\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t);\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n \t\t\t\tONLY_ACTIVE_ARCH = YES;\n@@ -422,8 +395,11 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n-\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n+\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n+\t\t\t\t\t/usr/lib/swift,\n+\t\t\t\t\t\"$(inherited)\",\n+\t\t\t\t);\n \t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(inherited)\\\"\";\n \t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n \t\t\t\tSDKROOT = iphoneos;\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\nnew file mode 100644\nindex 00000000000..9670a1ff07e\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\n@@ -0,0 +1,69 @@\n+internal import Expo\n+import React\n+import ReactAppDependencyProvider\n+\n+@main\n+class AppDelegate: ExpoAppDelegate {\n+ var window: UIWindow?\n+\n+ var reactNativeDelegate: ExpoReactNativeFactoryDelegate?\n+ var reactNativeFactory: RCTReactNativeFactory?\n+\n+ public override func application(\n+ _ application: UIApplication,\n+ didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil\n+ ) -> Bool {\n+ let delegate = ReactNativeDelegate()\n+ let factory = ExpoReactNativeFactory(delegate: delegate)\n+ delegate.dependencyProvider = RCTAppDependencyProvider()\n+\n+ reactNativeDelegate = delegate\n+ reactNativeFactory = factory\n+\n+#if os(iOS) || os(tvOS)\n+ window = UIWindow(frame: UIScreen.main.bounds)\n+ factory.startReactNative(\n+ withModuleName: \"main\",\n+ in: window,\n+ launchOptions: launchOptions)\n+#endif\n+\n+ return super.application(application, didFinishLaunchingWithOptions: launchOptions)\n+ }\n+\n+ // Linking API\n+ public override func application(\n+ _ app: UIApplication,\n+ open url: URL,\n+ options: [UIApplication.OpenURLOptionsKey: Any] = [:]\n+ ) -> Bool {\n+ return super.application(app, open: url, options: options) || RCTLinkingManager.application(app, open: url, options: options)\n+ }\n+\n+ // Universal Links\n+ public override func application(\n+ _ application: UIApplication,\n+ continue userActivity: NSUserActivity,\n+ restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void\n+ ) -> Bool {\n+ let result = RCTLinkingManager.application(application, continue: userActivity, restorationHandler: restorationHandler)\n+ return super.application(application, continue: userActivity, restorationHandler: restorationHandler) || result\n+ }\n+}\n+\n+class ReactNativeDelegate: ExpoReactNativeFactoryDelegate {\n+ // Extension point for config-plugins\n+\n+ override func sourceURL(for bridge: RCTBridge) -> URL? {\n+ // needed to return the correct URL for expo-dev-client.\n+ bridge.bundleURL ?? bundleURL()\n+ }\n+\n+ override func bundleURL() -> URL? {\n+#if DEBUG\n+ return RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: \".expo/.virtual-metro-entry\")\n+#else\n+ return Bundle.main.url(forResource: \"main\", withExtension: \"jsbundle\")\n+#endif\n+ }\n+}\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h b/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h\nnew file mode 100644\nindex 00000000000..8361941afc2\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/HelloWorld-Bridging-Header.h\n@@ -0,0 +1,3 @@\n+//\n+// Use this file to import your target's public headers that you would like to expose to Swift.\n+//\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\nindex 447b4188985..58d21796e1d 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n@@ -1,11 +1,12 @@\n \n-\n+\n \n \n \n- \n+ \n \n \n+ \n \n \n \n@@ -29,6 +30,7 @@\n \n \n \n+ \n \n \n \n@@ -38,5 +40,8 @@\n \n \n \n+ \n+ \n+ \n \n \ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex f740040e7be..c3158e3fb9b 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -4,12 +4,20 @@ require File.join(File.dirname(`node --print \"require.resolve('react-native/pack\n require 'json'\n podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}\n \n-ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0'\n-ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+def ccache_enabled?(podfile_properties)\n+ # Environment variable takes precedence\n+ return ENV['USE_CCACHE'] == '1' if ENV['USE_CCACHE']\n \n-platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'\n-install! 'cocoapods',\n- :deterministic_uuids => false\n+ # Fall back to Podfile properties\n+ podfile_properties['apple.ccacheEnabled'] == 'true'\n+end\n+\n+ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+ENV['RCT_USE_RN_DEP'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1'\n+ENV['RCT_USE_PREBUILT_RNCORE'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1'\n+ENV['RCT_HERMES_V1_ENABLED'] ||= '1' if podfile_properties['expo.useHermesV1'] == 'true'\n+ENV['EXPO_USE_PRECOMPILED_MODULES'] ||= '1' if podfile_properties['EXPO_USE_PRECOMPILED_MODULES'] != 'false'\n+platform :ios, podfile_properties['ios.deploymentTarget'] || '16.4'\n \n prepare_react_native_project!\n \n@@ -23,7 +31,8 @@ target 'HelloWorld' do\n 'node',\n '--no-warnings',\n '--eval',\n- 'require(require.resolve(\\'expo-modules-autolinking\\', { paths: [require.resolve(\\'expo/package.json\\')] }))(process.argv.slice(1))',\n+ 'require(\\'expo/bin/autolinking\\')',\n+ 'expo-modules-autolinking',\n 'react-native-config',\n '--json',\n '--platform',\n@@ -49,18 +58,7 @@ target 'HelloWorld' do\n installer,\n config[:reactNativePath],\n :mac_catalyst_enabled => false,\n- :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true',\n+ :ccache_enabled => ccache_enabled?(podfile_properties),\n )\n-\n- # This is necessary for Xcode 14, because it signs resource bundles by default\n- # when building for devices.\n- installer.target_installation_results.pod_target_installation_results\n- .each do |pod_name, target_installation_result|\n- target_installation_result.resource_bundle_targets.each do |resource_bundle_target|\n- resource_bundle_target.build_configurations.each do |config|\n- config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'\n- end\n- end\n- end\n end\n end\ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex b51159163bf..3e151175775 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -2,7 +2,7 @@\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n \"license\": \"0BSD\",\n- \"version\": \"52.0.79\",\n+ \"version\": \"56.0.13\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -11,12 +11,14 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~52.0.49\",\n- \"expo-status-bar\": \"~2.0.1\",\n- \"react\": \"18.3.1\",\n- \"react-native\": \"0.76.9\"\n+ \"expo\": \"~56.0.0-preview.13\",\n+ \"expo-status-bar\": \"~56.0.4\",\n+ \"react\": \"19.2.3\",\n+ \"react-native\": \"0.85.3\"\n },\n- \"devDependencies\": {\n- \"@babel/core\": \"^7.20.0\"\n+ \"publishConfig\": {\n+ \"executableFiles\": [\n+ \"./android/gradlew\"\n+ ]\n }\n }\n","53..unversioned":"diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle\nindex 34b96c71c33..fc185e53bc3 100644\n--- a/templates/expo-template-bare-minimum/android/app/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/app/build.gradle\n@@ -11,7 +11,7 @@ def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath()\n react {\n entryFile = file([\"node\", \"-e\", \"require('expo/scripts/resolveAppEntry')\", projectRoot, \"android\", \"absolute\"].execute(null, rootDir).text.trim())\n reactNativeDir = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n- hermesCommand = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/sdks/hermesc/%OS-BIN%/hermesc\"\n+ hermesCommand = new File([\"node\", \"--print\", \"require.resolve('hermes-compiler/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/hermesc/%OS-BIN%/hermesc\"\n codegenDir = new File([\"node\", \"--print\", \"require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n \n enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean()\n@@ -64,9 +64,9 @@ react {\n }\n \n /**\n- * Set this to true to Run Proguard on Release builds to minify the Java bytecode.\n+ * Set this to true in release builds to optimize the app using [R8](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization).\n */\n-def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInReleaseBuilds') ?: false).toBoolean()\n+def enableMinifyInReleaseBuilds = (findProperty('android.enableMinifyInReleaseBuilds') ?: false).toBoolean()\n \n /**\n * The preferred build flavor of JavaScriptCore (JSC)\n@@ -94,6 +94,8 @@ android {\n targetSdkVersion rootProject.ext.targetSdkVersion\n versionCode 1\n versionName \"1.0\"\n+\n+ buildConfigField \"String\", \"REACT_NATIVE_RELEASE_LEVEL\", \"\\\"${findProperty('reactNativeReleaseLevel') ?: 'stable'}\\\"\"\n }\n signingConfigs {\n debug {\n@@ -111,15 +113,18 @@ android {\n // Caution! In production, you need to generate your own keystore file.\n // see https://reactnative.dev/docs/signed-apk-android.\n signingConfig signingConfigs.debug\n- shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false)\n- minifyEnabled enableProguardInReleaseBuilds\n+ def enableShrinkResources = findProperty('android.enableShrinkResourcesInReleaseBuilds') ?: 'false'\n+ shrinkResources enableShrinkResources.toBoolean()\n+ minifyEnabled enableMinifyInReleaseBuilds\n proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n- crunchPngs (findProperty('android.enablePngCrunchInReleaseBuilds')?.toBoolean() ?: true)\n+ def enablePngCrunchInRelease = findProperty('android.enablePngCrunchInReleaseBuilds') ?: 'true'\n+ crunchPngs enablePngCrunchInRelease.toBoolean()\n }\n }\n packagingOptions {\n jniLibs {\n- useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false)\n+ def enableLegacyPackaging = findProperty('expo.useLegacyPackaging') ?: 'false'\n+ useLegacyPackaging enableLegacyPackaging.toBoolean()\n }\n }\n androidResources {\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\nnew file mode 100644\nindex 00000000000..3ec2507bab7\n--- /dev/null\n+++ b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml\n@@ -0,0 +1,7 @@\n+\n+\n+ \n+\n+ \n+\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\nindex 150248b6b3c..14bdba124ab 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n@@ -1,12 +1,13 @@\n-\n+\n \n \n \n \n \n \n- \n- \n+ \n+ \n \n \n \n@@ -19,7 +20,7 @@\n \n \n \n- \n+ \n \n \n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\nindex 267e20c30e5..cbb5ddb85d0 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n@@ -5,48 +5,36 @@ import android.content.res.Configuration\n \n import com.facebook.react.PackageList\n import com.facebook.react.ReactApplication\n-import com.facebook.react.ReactNativeHost\n+import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative\n import com.facebook.react.ReactPackage\n import com.facebook.react.ReactHost\n-import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load\n-import com.facebook.react.defaults.DefaultReactNativeHost\n-import com.facebook.react.soloader.OpenSourceMergedSoMapping\n-import com.facebook.soloader.SoLoader\n+import com.facebook.react.common.ReleaseLevel\n+import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint\n \n import expo.modules.ApplicationLifecycleDispatcher\n-import expo.modules.ReactNativeHostWrapper\n+import expo.modules.ExpoReactHostFactory\n \n class MainApplication : Application(), ReactApplication {\n \n- override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper(\n- this,\n- object : DefaultReactNativeHost(this) {\n- override fun getPackages(): List {\n- val packages = PackageList(this).packages\n- // Packages that cannot be autolinked yet can be added manually here, for example:\n- // packages.add(MyReactNativePackage())\n- return packages\n- }\n-\n- override fun getJSMainModuleName(): String = \".expo/.virtual-metro-entry\"\n-\n- override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG\n-\n- override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED\n- override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED\n- }\n- )\n-\n- override val reactHost: ReactHost\n- get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost)\n+ override val reactHost: ReactHost by lazy {\n+ ExpoReactHostFactory.getDefaultReactHost(\n+ context = applicationContext,\n+ packageList =\n+ PackageList(this).packages.apply {\n+ // Packages that cannot be autolinked yet can be added manually here, for example:\n+ // add(MyReactNativePackage())\n+ }\n+ )\n+ }\n \n override fun onCreate() {\n super.onCreate()\n- SoLoader.init(this, OpenSourceMergedSoMapping)\n- if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {\n- // If you opted-in for the New Architecture, we load the native entry point for this app.\n- load()\n+ DefaultNewArchitectureEntryPoint.releaseLevel = try {\n+ ReleaseLevel.valueOf(BuildConfig.REACT_NATIVE_RELEASE_LEVEL.uppercase())\n+ } catch (e: IllegalArgumentException) {\n+ ReleaseLevel.STABLE\n }\n+ loadReactNative(this)\n ApplicationLifecycleDispatcher.onApplicationCreate(this)\n }\n \ndiff --git a/templates/expo-template-bare-minimum/android/build.gradle b/templates/expo-template-bare-minimum/android/build.gradle\nindex fa7b11e23c1..0554dd156c1 100644\n--- a/templates/expo-template-bare-minimum/android/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/build.gradle\n@@ -12,21 +12,8 @@ buildscript {\n }\n }\n \n-def reactNativeAndroidDir = new File(\n- providers.exec {\n- workingDir(rootDir)\n- commandLine(\"node\", \"--print\", \"require.resolve('react-native/package.json')\")\n- }.standardOutput.asText.get().trim(),\n- \"../android\"\n-)\n-\n allprojects {\n repositories {\n- maven {\n- // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n- url(reactNativeAndroidDir)\n- }\n-\n google()\n mavenCentral()\n maven { url 'https://www.jitpack.io' }\ndiff --git a/templates/expo-template-bare-minimum/android/gitignore b/templates/expo-template-bare-minimum/android/gitignore\nindex 8a6be077181..1ea9b6464ec 100644\n--- a/templates/expo-template-bare-minimum/android/gitignore\n+++ b/templates/expo-template-bare-minimum/android/gitignore\n@@ -12,5 +12,8 @@ local.properties\n *.hprof\n .cxx/\n \n+# generated inline modules\n+app/src/main/java/inline/\n+\n # Bundle artifacts\n *.jsbundle\ndiff --git a/templates/expo-template-bare-minimum/android/gradle.properties b/templates/expo-template-bare-minimum/android/gradle.properties\nindex 7531e9eb23c..97271b9456f 100644\n--- a/templates/expo-template-bare-minimum/android/gradle.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle.properties\n@@ -15,7 +15,7 @@ org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m\n # When configured, Gradle will run in incubating parallel mode.\n # This option should only be used with decoupled projects. More details, visit\n # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n-# org.gradle.parallel=true\n+org.gradle.parallel=true\n \n # AndroidX package structure to make it clearer which packages are bundled with the\n # Android operating system, and which are packaged with your app's APK\n@@ -41,6 +41,11 @@ newArchEnabled=true\n # If set to false, you will be using JSC instead.\n hermesEnabled=true\n \n+# Use this property to enable edge-to-edge display support.\n+# This allows your app to draw behind system bars for an immersive UI.\n+# Note: Only works with ReactActivity and should not be used with custom Activity.\n+edgeToEdgeEnabled=true\n+\n # Enable GIF support in React Native images (~200 B increase)\n expo.gif.enabled=true\n # Enable webp support in React Native images (~85 KB increase)\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar\nindex a4b76b9530d..61285a659d1 100644\nBinary files a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar and b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar differ\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\nindex 37f853b1c84..37f78a6af83 100644\n--- a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n@@ -1,6 +1,6 @@\n distributionBase=GRADLE_USER_HOME\n distributionPath=wrapper/dists\n-distributionUrl=https\\://services.gradle.org/distributions/gradle-8.13-bin.zip\n+distributionUrl=https\\://services.gradle.org/distributions/gradle-9.3.1-bin.zip\n networkTimeout=10000\n validateDistributionUrl=true\n zipStoreBase=GRADLE_USER_HOME\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew b/templates/expo-template-bare-minimum/android/gradlew\nindex f3b75f3b0d4..adff685a034 100755\n--- a/templates/expo-template-bare-minimum/android/gradlew\n+++ b/templates/expo-template-bare-minimum/android/gradlew\n@@ -1,7 +1,7 @@\n #!/bin/sh\n \n #\n-# Copyright © 2015-2021 the original authors.\n+# Copyright © 2015 the original authors.\n #\n # Licensed under the Apache License, Version 2.0 (the \"License\");\n # you may not use this file except in compliance with the License.\n@@ -114,7 +114,6 @@ case \"$( uname )\" in #(\n NONSTOP* ) nonstop=true ;;\n esac\n \n-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n \n \n # Determine the Java command to use to start the JVM.\n@@ -172,7 +171,6 @@ fi\n # For Cygwin or MSYS, switch paths to Windows format before running java\n if \"$cygwin\" || \"$msys\" ; then\n APP_HOME=$( cygpath --path --mixed \"$APP_HOME\" )\n- CLASSPATH=$( cygpath --path --mixed \"$CLASSPATH\" )\n \n JAVACMD=$( cygpath --unix \"$JAVACMD\" )\n \n@@ -205,15 +203,14 @@ fi\n DEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n \n # Collect all arguments for the java command:\n-# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,\n+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,\n # and any embedded shellness will be escaped.\n # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be\n # treated as '${Hostname}' itself on the command line.\n \n set -- \\\n \"-Dorg.gradle.appname=$APP_BASE_NAME\" \\\n- -classpath \"$CLASSPATH\" \\\n- org.gradle.wrapper.GradleWrapperMain \\\n+ -jar \"$APP_HOME/gradle/wrapper/gradle-wrapper.jar\" \\\n \"$@\"\n \n # Stop when \"xargs\" is not available.\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew.bat b/templates/expo-template-bare-minimum/android/gradlew.bat\nindex 9b42019c791..39baf4d6846 100644\n--- a/templates/expo-template-bare-minimum/android/gradlew.bat\n+++ b/templates/expo-template-bare-minimum/android/gradlew.bat\n@@ -1,3 +1,8 @@\n+@REM Copyright (c) Meta Platforms, Inc. and affiliates.\r\n+@REM\r\n+@REM This source code is licensed under the MIT license found in the\r\n+@REM LICENSE file in the root directory of this source tree.\r\n+\r\n @rem\r\n @rem Copyright 2015 the original author or authors.\r\n @rem\r\n@@ -70,11 +75,10 @@ goto fail\n :execute\r\n @rem Setup the command line\r\n \r\n-set CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\r\n \r\n \r\n @rem Execute Gradle\r\n-\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\r\n+\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -jar \"%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\" %*\r\n \r\n :end\r\n @rem End local scope for the variables with windows NT shell\r\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\nindex 1b7513bd31b..39fa5afe55b 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n@@ -168,6 +168,8 @@\n \t\t\tfiles = (\n \t\t\t);\n \t\t\tinputPaths = (\n+\t\t\t\t\"$(SRCROOT)/.xcode.env\",\n+\t\t\t\t\"$(SRCROOT)/.xcode.env.local\",\n \t\t\t);\n \t\t\tname = \"Bundle React Native code and images\";\n \t\t\toutputPaths = (\n@@ -246,11 +248,12 @@\n \t\t\t\t\t\"FB_SONARKIT_ENABLED=1\",\n \t\t\t\t);\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n \t\t\t\t\t\"$(inherited)\",\n \t\t\t\t\t\"@executable_path/Frameworks\",\n \t\t\t\t);\n+\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.4;\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -273,11 +276,12 @@\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n \t\t\t\tCURRENT_PROJECT_VERSION = 1;\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n \t\t\t\t\t\"$(inherited)\",\n \t\t\t\t\t\"@executable_path/Frameworks\",\n \t\t\t\t);\n+\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.4;\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -339,7 +343,7 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n \t\t\t\t\t/usr/lib/swift,\n \t\t\t\t\t\"$(inherited)\",\n@@ -391,7 +395,7 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n \t\t\t\t\t/usr/lib/swift,\n \t\t\t\t\t\"$(inherited)\",\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\nindex a7887e1e5b1..9670a1ff07e 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\n@@ -1,9 +1,9 @@\n-import Expo\n+internal import Expo\n import React\n import ReactAppDependencyProvider\n \n-@UIApplicationMain\n-public class AppDelegate: ExpoAppDelegate {\n+@main\n+class AppDelegate: ExpoAppDelegate {\n var window: UIWindow?\n \n var reactNativeDelegate: ExpoReactNativeFactoryDelegate?\n@@ -19,7 +19,6 @@ public class AppDelegate: ExpoAppDelegate {\n \n reactNativeDelegate = delegate\n reactNativeFactory = factory\n- bindReactNativeFactory(factory)\n \n #if os(iOS) || os(tvOS)\n window = UIWindow(frame: UIScreen.main.bounds)\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\nindex 447b4188985..58d21796e1d 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard\n@@ -1,11 +1,12 @@\n \n-\n+\n \n \n \n- \n+ \n \n \n+ \n \n \n \n@@ -29,6 +30,7 @@\n \n \n \n+ \n \n \n \n@@ -38,5 +40,8 @@\n \n \n \n+ \n+ \n+ \n \n \ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex 29503ff0cc1..c3158e3fb9b 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -4,12 +4,20 @@ require File.join(File.dirname(`node --print \"require.resolve('react-native/pack\n require 'json'\n podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}\n \n-ENV['RCT_NEW_ARCH_ENABLED'] = '0' if podfile_properties['newArchEnabled'] == 'false'\n-ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+def ccache_enabled?(podfile_properties)\n+ # Environment variable takes precedence\n+ return ENV['USE_CCACHE'] == '1' if ENV['USE_CCACHE']\n \n-platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'\n-install! 'cocoapods',\n- :deterministic_uuids => false\n+ # Fall back to Podfile properties\n+ podfile_properties['apple.ccacheEnabled'] == 'true'\n+end\n+\n+ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n+ENV['RCT_USE_RN_DEP'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1'\n+ENV['RCT_USE_PREBUILT_RNCORE'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1'\n+ENV['RCT_HERMES_V1_ENABLED'] ||= '1' if podfile_properties['expo.useHermesV1'] == 'true'\n+ENV['EXPO_USE_PRECOMPILED_MODULES'] ||= '1' if podfile_properties['EXPO_USE_PRECOMPILED_MODULES'] != 'false'\n+platform :ios, podfile_properties['ios.deploymentTarget'] || '16.4'\n \n prepare_react_native_project!\n \n@@ -20,7 +28,10 @@ target 'HelloWorld' do\n config_command = ['node', '-e', \"process.argv=['', '', 'config'];require('@react-native-community/cli').run()\"];\n else\n config_command = [\n- 'npx',\n+ 'node',\n+ '--no-warnings',\n+ '--eval',\n+ 'require(\\'expo/bin/autolinking\\')',\n 'expo-modules-autolinking',\n 'react-native-config',\n '--json',\n@@ -47,18 +58,7 @@ target 'HelloWorld' do\n installer,\n config[:reactNativePath],\n :mac_catalyst_enabled => false,\n- :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true',\n+ :ccache_enabled => ccache_enabled?(podfile_properties),\n )\n-\n- # This is necessary for Xcode 14, because it signs resource bundles by default\n- # when building for devices.\n- installer.target_installation_results.pod_target_installation_results\n- .each do |pod_name, target_installation_result|\n- target_installation_result.resource_bundle_targets.each do |resource_bundle_target|\n- resource_bundle_target.build_configurations.each do |config|\n- config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'\n- end\n- end\n- end\n end\n end\ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex 661f6b6addf..3e151175775 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -2,7 +2,7 @@\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n \"license\": \"0BSD\",\n- \"version\": \"53.0.42\",\n+ \"version\": \"56.0.13\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -11,12 +11,14 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~53.0.27\",\n- \"expo-status-bar\": \"~2.2.3\",\n- \"react\": \"19.0.0\",\n- \"react-native\": \"0.79.6\"\n+ \"expo\": \"~56.0.0-preview.13\",\n+ \"expo-status-bar\": \"~56.0.4\",\n+ \"react\": \"19.2.3\",\n+ \"react-native\": \"0.85.3\"\n },\n- \"devDependencies\": {\n- \"@babel/core\": \"^7.20.0\"\n+ \"publishConfig\": {\n+ \"executableFiles\": [\n+ \"./android/gradlew\"\n+ ]\n }\n }\n","54..unversioned":"diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle\nindex 3f1c571b679..fc185e53bc3 100644\n--- a/templates/expo-template-bare-minimum/android/app/build.gradle\n+++ b/templates/expo-template-bare-minimum/android/app/build.gradle\n@@ -11,7 +11,7 @@ def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath()\n react {\n entryFile = file([\"node\", \"-e\", \"require('expo/scripts/resolveAppEntry')\", projectRoot, \"android\", \"absolute\"].execute(null, rootDir).text.trim())\n reactNativeDir = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n- hermesCommand = new File([\"node\", \"--print\", \"require.resolve('react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/sdks/hermesc/%OS-BIN%/hermesc\"\n+ hermesCommand = new File([\"node\", \"--print\", \"require.resolve('hermes-compiler/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/hermesc/%OS-BIN%/hermesc\"\n codegenDir = new File([\"node\", \"--print\", \"require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })\"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()\n \n enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean()\ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\nindex 150248b6b3c..14bdba124ab 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n@@ -1,12 +1,13 @@\n-\n+\n \n \n \n \n \n \n- \n- \n+ \n+ \n \n \n \n@@ -19,7 +20,7 @@\n \n \n \n- \n+ \n \n \n \ndiff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\nindex 5abad96fa00..cbb5ddb85d0 100644\n--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt\n@@ -6,37 +6,26 @@ import android.content.res.Configuration\n import com.facebook.react.PackageList\n import com.facebook.react.ReactApplication\n import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative\n-import com.facebook.react.ReactNativeHost\n import com.facebook.react.ReactPackage\n import com.facebook.react.ReactHost\n import com.facebook.react.common.ReleaseLevel\n import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint\n-import com.facebook.react.defaults.DefaultReactNativeHost\n \n import expo.modules.ApplicationLifecycleDispatcher\n-import expo.modules.ReactNativeHostWrapper\n+import expo.modules.ExpoReactHostFactory\n \n class MainApplication : Application(), ReactApplication {\n \n- override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper(\n- this,\n- object : DefaultReactNativeHost(this) {\n- override fun getPackages(): List =\n- PackageList(this).packages.apply {\n- // Packages that cannot be autolinked yet can be added manually here, for example:\n- // add(MyReactNativePackage())\n- }\n-\n- override fun getJSMainModuleName(): String = \".expo/.virtual-metro-entry\"\n-\n- override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG\n-\n- override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED\n- }\n- )\n-\n- override val reactHost: ReactHost\n- get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost)\n+ override val reactHost: ReactHost by lazy {\n+ ExpoReactHostFactory.getDefaultReactHost(\n+ context = applicationContext,\n+ packageList =\n+ PackageList(this).packages.apply {\n+ // Packages that cannot be autolinked yet can be added manually here, for example:\n+ // add(MyReactNativePackage())\n+ }\n+ )\n+ }\n \n override fun onCreate() {\n super.onCreate()\ndiff --git a/templates/expo-template-bare-minimum/android/gitignore b/templates/expo-template-bare-minimum/android/gitignore\nindex 8a6be077181..1ea9b6464ec 100644\n--- a/templates/expo-template-bare-minimum/android/gitignore\n+++ b/templates/expo-template-bare-minimum/android/gitignore\n@@ -12,5 +12,8 @@ local.properties\n *.hprof\n .cxx/\n \n+# generated inline modules\n+app/src/main/java/inline/\n+\n # Bundle artifacts\n *.jsbundle\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar\nindex 1b33c55baab..61285a659d1 100644\nBinary files a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar and b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar differ\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\nindex d4081da476b..37f78a6af83 100644\n--- a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n@@ -1,6 +1,6 @@\n distributionBase=GRADLE_USER_HOME\n distributionPath=wrapper/dists\n-distributionUrl=https\\://services.gradle.org/distributions/gradle-8.14.3-bin.zip\n+distributionUrl=https\\://services.gradle.org/distributions/gradle-9.3.1-bin.zip\n networkTimeout=10000\n validateDistributionUrl=true\n zipStoreBase=GRADLE_USER_HOME\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew b/templates/expo-template-bare-minimum/android/gradlew\nindex 7f94d3d4777..adff685a034 100755\n--- a/templates/expo-template-bare-minimum/android/gradlew\n+++ b/templates/expo-template-bare-minimum/android/gradlew\n@@ -1,7 +1,7 @@\n #!/bin/sh\n \n #\n-# Copyright © 2015-2021 the original authors.\n+# Copyright © 2015 the original authors.\n #\n # Licensed under the Apache License, Version 2.0 (the \"License\");\n # you may not use this file except in compliance with the License.\n@@ -114,7 +114,6 @@ case \"$( uname )\" in #(\n NONSTOP* ) nonstop=true ;;\n esac\n \n-CLASSPATH=\"\\\\\\\"\\\\\\\"\"\n \n \n # Determine the Java command to use to start the JVM.\n@@ -172,7 +171,6 @@ fi\n # For Cygwin or MSYS, switch paths to Windows format before running java\n if \"$cygwin\" || \"$msys\" ; then\n APP_HOME=$( cygpath --path --mixed \"$APP_HOME\" )\n- CLASSPATH=$( cygpath --path --mixed \"$CLASSPATH\" )\n \n JAVACMD=$( cygpath --unix \"$JAVACMD\" )\n \n@@ -205,14 +203,13 @@ fi\n DEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n \n # Collect all arguments for the java command:\n-# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,\n+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,\n # and any embedded shellness will be escaped.\n # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be\n # treated as '${Hostname}' itself on the command line.\n \n set -- \\\n \"-Dorg.gradle.appname=$APP_BASE_NAME\" \\\n- -classpath \"$CLASSPATH\" \\\n -jar \"$APP_HOME/gradle/wrapper/gradle-wrapper.jar\" \\\n \"$@\"\n \ndiff --git a/templates/expo-template-bare-minimum/android/gradlew.bat b/templates/expo-template-bare-minimum/android/gradlew.bat\nindex 5eed7ee8452..39baf4d6846 100644\n--- a/templates/expo-template-bare-minimum/android/gradlew.bat\n+++ b/templates/expo-template-bare-minimum/android/gradlew.bat\n@@ -1,3 +1,8 @@\n+@REM Copyright (c) Meta Platforms, Inc. and affiliates.\r\n+@REM\r\n+@REM This source code is licensed under the MIT license found in the\r\n+@REM LICENSE file in the root directory of this source tree.\r\n+\r\n @rem\r\n @rem Copyright 2015 the original author or authors.\r\n @rem\r\n@@ -70,11 +75,10 @@ goto fail\n :execute\r\n @rem Setup the command line\r\n \r\n-set CLASSPATH=\r\n \r\n \r\n @rem Execute Gradle\r\n-\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" -jar \"%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\" %*\r\n+\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -jar \"%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\" %*\r\n \r\n :end\r\n @rem End local scope for the variables with windows NT shell\r\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\nindex 8a390c764af..39fa5afe55b 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n@@ -248,11 +248,12 @@\n \t\t\t\t\t\"FB_SONARKIT_ENABLED=1\",\n \t\t\t\t);\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n \t\t\t\t\t\"$(inherited)\",\n \t\t\t\t\t\"@executable_path/Frameworks\",\n \t\t\t\t);\n+\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.4;\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -275,11 +276,12 @@\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n \t\t\t\tCURRENT_PROJECT_VERSION = 1;\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n \t\t\t\t\t\"$(inherited)\",\n \t\t\t\t\t\"@executable_path/Frameworks\",\n \t\t\t\t);\n+\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.4;\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -341,7 +343,7 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n \t\t\t\t\t/usr/lib/swift,\n \t\t\t\t\t\"$(inherited)\",\n@@ -393,7 +395,7 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n \t\t\t\t\t/usr/lib/swift,\n \t\t\t\t\t\"$(inherited)\",\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\nindex a7887e1e5b1..9670a1ff07e 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift\n@@ -1,9 +1,9 @@\n-import Expo\n+internal import Expo\n import React\n import ReactAppDependencyProvider\n \n-@UIApplicationMain\n-public class AppDelegate: ExpoAppDelegate {\n+@main\n+class AppDelegate: ExpoAppDelegate {\n var window: UIWindow?\n \n var reactNativeDelegate: ExpoReactNativeFactoryDelegate?\n@@ -19,7 +19,6 @@ public class AppDelegate: ExpoAppDelegate {\n \n reactNativeDelegate = delegate\n reactNativeFactory = factory\n- bindReactNativeFactory(factory)\n \n #if os(iOS) || os(tvOS)\n window = UIWindow(frame: UIScreen.main.bounds)\ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex 9743535e7ad..c3158e3fb9b 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -7,16 +7,17 @@ podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties\n def ccache_enabled?(podfile_properties)\n # Environment variable takes precedence\n return ENV['USE_CCACHE'] == '1' if ENV['USE_CCACHE']\n- \n+\n # Fall back to Podfile properties\n podfile_properties['apple.ccacheEnabled'] == 'true'\n end\n \n-ENV['RCT_NEW_ARCH_ENABLED'] ||= '0' if podfile_properties['newArchEnabled'] == 'false'\n ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n-ENV['RCT_USE_RN_DEP'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' && podfile_properties['newArchEnabled'] != 'false'\n-ENV['RCT_USE_PREBUILT_RNCORE'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' && podfile_properties['newArchEnabled'] != 'false'\n-platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'\n+ENV['RCT_USE_RN_DEP'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1'\n+ENV['RCT_USE_PREBUILT_RNCORE'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1'\n+ENV['RCT_HERMES_V1_ENABLED'] ||= '1' if podfile_properties['expo.useHermesV1'] == 'true'\n+ENV['EXPO_USE_PRECOMPILED_MODULES'] ||= '1' if podfile_properties['EXPO_USE_PRECOMPILED_MODULES'] != 'false'\n+platform :ios, podfile_properties['ios.deploymentTarget'] || '16.4'\n \n prepare_react_native_project!\n \ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex a1a026a23e1..3e151175775 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -2,7 +2,7 @@\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n \"license\": \"0BSD\",\n- \"version\": \"54.0.51\",\n+ \"version\": \"56.0.13\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -11,9 +11,14 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~54.0.34\",\n- \"expo-status-bar\": \"~3.0.9\",\n- \"react\": \"19.1.0\",\n- \"react-native\": \"0.81.5\"\n+ \"expo\": \"~56.0.0-preview.13\",\n+ \"expo-status-bar\": \"~56.0.4\",\n+ \"react\": \"19.2.3\",\n+ \"react-native\": \"0.85.3\"\n+ },\n+ \"publishConfig\": {\n+ \"executableFiles\": [\n+ \"./android/gradlew\"\n+ ]\n }\n }\n","55..unversioned":"diff --git a/templates/expo-template-bare-minimum/android/gitignore b/templates/expo-template-bare-minimum/android/gitignore\nindex 8a6be077181..1ea9b6464ec 100644\n--- a/templates/expo-template-bare-minimum/android/gitignore\n+++ b/templates/expo-template-bare-minimum/android/gitignore\n@@ -12,5 +12,8 @@ local.properties\n *.hprof\n .cxx/\n \n+# generated inline modules\n+app/src/main/java/inline/\n+\n # Bundle artifacts\n *.jsbundle\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar\nindex 8bdaf60c75a..61285a659d1 100644\nBinary files a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar and b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar differ\ndiff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\nindex 2a84e188b85..37f78a6af83 100644\n--- a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n+++ b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties\n@@ -1,6 +1,6 @@\n distributionBase=GRADLE_USER_HOME\n distributionPath=wrapper/dists\n-distributionUrl=https\\://services.gradle.org/distributions/gradle-9.0.0-bin.zip\n+distributionUrl=https\\://services.gradle.org/distributions/gradle-9.3.1-bin.zip\n networkTimeout=10000\n validateDistributionUrl=true\n zipStoreBase=GRADLE_USER_HOME\ndiff --git a/templates/expo-template-bare-minimum/android/gradlew b/templates/expo-template-bare-minimum/android/gradlew\nindex bbb00327904..adff685a034 100755\n--- a/templates/expo-template-bare-minimum/android/gradlew\n+++ b/templates/expo-template-bare-minimum/android/gradlew\n@@ -114,7 +114,6 @@ case \"$( uname )\" in #(\n NONSTOP* ) nonstop=true ;;\n esac\n \n-CLASSPATH=\"\\\\\\\"\\\\\\\"\"\n \n \n # Determine the Java command to use to start the JVM.\n@@ -172,7 +171,6 @@ fi\n # For Cygwin or MSYS, switch paths to Windows format before running java\n if \"$cygwin\" || \"$msys\" ; then\n APP_HOME=$( cygpath --path --mixed \"$APP_HOME\" )\n- CLASSPATH=$( cygpath --path --mixed \"$CLASSPATH\" )\n \n JAVACMD=$( cygpath --unix \"$JAVACMD\" )\n \n@@ -205,14 +203,13 @@ fi\n DEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n \n # Collect all arguments for the java command:\n-# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,\n+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,\n # and any embedded shellness will be escaped.\n # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be\n # treated as '${Hostname}' itself on the command line.\n \n set -- \\\n \"-Dorg.gradle.appname=$APP_BASE_NAME\" \\\n- -classpath \"$CLASSPATH\" \\\n -jar \"$APP_HOME/gradle/wrapper/gradle-wrapper.jar\" \\\n \"$@\"\n \ndiff --git a/templates/expo-template-bare-minimum/android/gradlew.bat b/templates/expo-template-bare-minimum/android/gradlew.bat\nindex 5eed7ee8452..39baf4d6846 100644\n--- a/templates/expo-template-bare-minimum/android/gradlew.bat\n+++ b/templates/expo-template-bare-minimum/android/gradlew.bat\n@@ -1,3 +1,8 @@\n+@REM Copyright (c) Meta Platforms, Inc. and affiliates.\r\n+@REM\r\n+@REM This source code is licensed under the MIT license found in the\r\n+@REM LICENSE file in the root directory of this source tree.\r\n+\r\n @rem\r\n @rem Copyright 2015 the original author or authors.\r\n @rem\r\n@@ -70,11 +75,10 @@ goto fail\n :execute\r\n @rem Setup the command line\r\n \r\n-set CLASSPATH=\r\n \r\n \r\n @rem Execute Gradle\r\n-\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" -jar \"%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\" %*\r\n+\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -jar \"%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\" %*\r\n \r\n :end\r\n @rem End local scope for the variables with windows NT shell\r\ndiff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\nindex 8a390c764af..39fa5afe55b 100644\n--- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n+++ b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj\n@@ -248,11 +248,12 @@\n \t\t\t\t\t\"FB_SONARKIT_ENABLED=1\",\n \t\t\t\t);\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n \t\t\t\t\t\"$(inherited)\",\n \t\t\t\t\t\"@executable_path/Frameworks\",\n \t\t\t\t);\n+\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.4;\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -275,11 +276,12 @@\n \t\t\t\tCLANG_ENABLE_MODULES = YES;\n \t\t\t\tCURRENT_PROJECT_VERSION = 1;\n \t\t\t\tINFOPLIST_FILE = HelloWorld/Info.plist;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n \t\t\t\t\t\"$(inherited)\",\n \t\t\t\t\t\"@executable_path/Frameworks\",\n \t\t\t\t);\n+\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.4;\n \t\t\t\tMARKETING_VERSION = 1.0;\n \t\t\t\tOTHER_LDFLAGS = (\n \t\t\t\t\t\"$(inherited)\",\n@@ -341,7 +343,7 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n \t\t\t\t\t/usr/lib/swift,\n \t\t\t\t\t\"$(inherited)\",\n@@ -393,7 +395,7 @@\n \t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n \t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n \t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n-\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.1;\n+\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n \t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n \t\t\t\t\t/usr/lib/swift,\n \t\t\t\t\t\"$(inherited)\",\ndiff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile\nindex 03484edf156..c3158e3fb9b 100644\n--- a/templates/expo-template-bare-minimum/ios/Podfile\n+++ b/templates/expo-template-bare-minimum/ios/Podfile\n@@ -13,10 +13,11 @@ def ccache_enabled?(podfile_properties)\n end\n \n ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']\n-ENV['RCT_USE_RN_DEP'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true'\n-ENV['RCT_USE_PREBUILT_RNCORE'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true'\n+ENV['RCT_USE_RN_DEP'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1'\n+ENV['RCT_USE_PREBUILT_RNCORE'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1'\n ENV['RCT_HERMES_V1_ENABLED'] ||= '1' if podfile_properties['expo.useHermesV1'] == 'true'\n-platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'\n+ENV['EXPO_USE_PRECOMPILED_MODULES'] ||= '1' if podfile_properties['EXPO_USE_PRECOMPILED_MODULES'] != 'false'\n+platform :ios, podfile_properties['ios.deploymentTarget'] || '16.4'\n \n prepare_react_native_project!\n \ndiff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json\nindex 253f825cea9..3e151175775 100644\n--- a/templates/expo-template-bare-minimum/package.json\n+++ b/templates/expo-template-bare-minimum/package.json\n@@ -2,7 +2,7 @@\n \"name\": \"expo-template-bare-minimum\",\n \"description\": \"This bare project template includes a minimal setup for using unimodules with React Native.\",\n \"license\": \"0BSD\",\n- \"version\": \"55.0.37\",\n+ \"version\": \"56.0.13\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"expo start --dev-client\",\n@@ -11,9 +11,14 @@\n \"web\": \"expo start --web\"\n },\n \"dependencies\": {\n- \"expo\": \"~55.0.25\",\n- \"expo-status-bar\": \"~55.0.6\",\n- \"react\": \"19.2.0\",\n- \"react-native\": \"0.83.6\"\n+ \"expo\": \"~56.0.0-preview.13\",\n+ \"expo-status-bar\": \"~56.0.4\",\n+ \"react\": \"19.2.3\",\n+ \"react-native\": \"0.85.3\"\n+ },\n+ \"publishConfig\": {\n+ \"executableFiles\": [\n+ \"./android/gradlew\"\n+ ]\n }\n }\n","56..unversioned":"","unversioned..unversioned":""}} \ No newline at end of file diff --git a/docs/public/static/diffs/template-bare-minimum/raw/50..51.diff b/docs/public/static/diffs/template-bare-minimum/raw/50..51.diff deleted file mode 100644 index 6ddb5b16c0c05b..00000000000000 --- a/docs/public/static/diffs/template-bare-minimum/raw/50..51.diff +++ /dev/null @@ -1,499 +0,0 @@ -diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle -index 27c6e63957e..a4b08330359 100644 ---- a/templates/expo-template-bare-minimum/android/app/build.gradle -+++ b/templates/expo-template-bare-minimum/android/app/build.gradle -@@ -4,6 +4,27 @@ apply plugin: "com.facebook.react" - - def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath() - -+static def versionToNumber(major, minor, patch) { -+ return patch * 100 + minor * 10000 + major * 1000000 -+} -+ -+def getRNVersion() { -+ def version = providers.exec { -+ workingDir(projectDir) -+ commandLine("node", "-e", "console.log(require('react-native/package.json').version);") -+ }.standardOutput.asText.get().trim() -+ -+ def coreVersion = version.split("-")[0] -+ def (major, minor, patch) = coreVersion.tokenize('.').collect { it.toInteger() } -+ -+ return versionToNumber( -+ major, -+ minor, -+ patch -+ ) -+} -+def rnVersion = getRNVersion() -+ - /** - * This is the configuration block to customize your React Native Android app. - * By default you don't need to apply any configuration, just uncomment the lines you need. -@@ -57,6 +78,11 @@ react { - // - // The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map" - // hermesFlags = ["-O", "-output-source-map"] -+ -+ if (rnVersion >= versionToNumber(0, 75, 0)) { -+ /* Autolinking */ -+ autolinkLibrariesWithApp() -+ } - } - - /** -@@ -90,8 +116,6 @@ android { - targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 1 - versionName "1.0" -- -- buildConfigField("boolean", "REACT_NATIVE_UNSTABLE_USE_RUNTIME_SCHEDULER_ALWAYS", (findProperty("reactNative.unstable_useRuntimeSchedulerAlways") ?: true).toString()) - } - signingConfigs { - debug { -@@ -112,6 +136,7 @@ android { - shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false) - minifyEnabled enableProguardInReleaseBuilds - proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" -+ crunchPngs (findProperty('android.enablePngCrunchInReleaseBuilds')?.toBoolean() ?: true) - } - } - packagingOptions { -@@ -163,8 +188,6 @@ dependencies { - } - } - -- implementation("com.facebook.react:flipper-integration") -- - if (hermesEnabled.toBoolean()) { - implementation("com.facebook.react:hermes-android") - } else { -@@ -172,5 +195,7 @@ dependencies { - } - } - --apply from: new File(["node", "--print", "require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim(), "../native_modules.gradle"); --applyNativeModulesAppBuildGradle(project) -+if (rnVersion < versionToNumber(0, 75, 0)) { -+ apply from: new File(["node", "--print", "require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim(), "../native_modules.gradle"); -+ applyNativeModulesAppBuildGradle(project) -+} -diff --git a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml -index f8d77fc832f..52175508263 100644 ---- a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml -+++ b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml -@@ -19,8 +19,6 @@ - - - -- -- - - - -@@ -29,4 +27,4 @@ - - - -- -\ No newline at end of file -+ -diff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt -index 8258c40ed4c..5f6e05ce071 100644 ---- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt -+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt -@@ -2,18 +2,14 @@ package com.helloworld - - import android.app.Application - import android.content.res.Configuration --import androidx.annotation.NonNull - - import com.facebook.react.PackageList - import com.facebook.react.ReactApplication - import com.facebook.react.ReactNativeHost - import com.facebook.react.ReactPackage - import com.facebook.react.ReactHost --import com.facebook.react.config.ReactFeatureFlags - import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load --import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost - import com.facebook.react.defaults.DefaultReactNativeHost --import com.facebook.react.flipper.ReactNativeFlipper - import com.facebook.soloader.SoLoader - - import expo.modules.ApplicationLifecycleDispatcher -@@ -40,21 +36,15 @@ class MainApplication : Application(), ReactApplication { - ) - - override val reactHost: ReactHost -- get() = getDefaultReactHost(this.applicationContext, reactNativeHost) -+ get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost) - - override fun onCreate() { - super.onCreate() - SoLoader.init(this, false) -- if (!BuildConfig.REACT_NATIVE_UNSTABLE_USE_RUNTIME_SCHEDULER_ALWAYS) { -- ReactFeatureFlags.unstable_useRuntimeSchedulerAlways = 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() - } -- if (BuildConfig.DEBUG) { -- ReactNativeFlipper.initializeFlipper(this, reactNativeHost.reactInstanceManager) -- } - ApplicationLifecycleDispatcher.onApplicationCreate(this) - } - -diff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/rn_edit_text_material.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/rn_edit_text_material.xml -index 73b37e4d996..5c25e728ea2 100644 ---- a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/rn_edit_text_material.xml -+++ b/templates/expo-template-bare-minimum/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" -+ > - - - -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - -diff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Supporting/Expo.plist b/templates/expo-template-bare-minimum/ios/HelloWorld/Supporting/Expo.plist -index 03410dc8b39..6631ffa6f24 100644 ---- a/templates/expo-template-bare-minimum/ios/HelloWorld/Supporting/Expo.plist -+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/Supporting/Expo.plist -@@ -2,9 +2,5 @@ - - - -- EXUpdatesSDKVersion -- YOUR-APP-SDK-VERSION-HERE -- EXUpdatesURL -- YOUR-APP-URL-HERE - - -diff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile -index b3978b9515d..f740040e7be 100644 ---- a/templates/expo-template-bare-minimum/ios/Podfile -+++ b/templates/expo-template-bare-minimum/ios/Podfile -@@ -7,39 +7,31 @@ podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties - ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0' - ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR'] - --platform :ios, podfile_properties['ios.deploymentTarget'] || '13.4' -+platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1' - install! 'cocoapods', - :deterministic_uuids => false - - prepare_react_native_project! - --# If you are using a `react-native-flipper` your iOS build will fail when `NO_FLIPPER=1` is set. --# because `react-native-flipper` depends on (FlipperKit,...), which will be excluded. To fix this, --# you can also exclude `react-native-flipper` in `react-native.config.js` --# --# ```js --# module.exports = { --# dependencies: { --# ...(process.env.NO_FLIPPER ? { 'react-native-flipper': { platforms: { ios: null } } } : {}), --# } --# } --# ``` --flipper_config = FlipperConfiguration.disabled --if ENV['NO_FLIPPER'] == '1' then -- # Explicitly disabled through environment variables -- flipper_config = FlipperConfiguration.disabled --elsif podfile_properties.key?('ios.flipper') then -- # Configure Flipper in Podfile.properties.json -- if podfile_properties['ios.flipper'] == 'true' then -- flipper_config = FlipperConfiguration.enabled(["Debug", "Release"]) -- elsif podfile_properties['ios.flipper'] != 'false' then -- flipper_config = FlipperConfiguration.enabled(["Debug", "Release"], { 'Flipper' => podfile_properties['ios.flipper'] }) -- end --end -- - target 'HelloWorld' do - use_expo_modules! -- config = use_native_modules! -+ -+ if ENV['EXPO_USE_COMMUNITY_AUTOLINKING'] == '1' -+ config_command = ['node', '-e', "process.argv=['', '', 'config'];require('@react-native-community/cli').run()"]; -+ else -+ config_command = [ -+ 'node', -+ '--no-warnings', -+ '--eval', -+ 'require(require.resolve(\'expo-modules-autolinking\', { paths: [require.resolve(\'expo/package.json\')] }))(process.argv.slice(1))', -+ 'react-native-config', -+ '--json', -+ '--platform', -+ 'ios' -+ ] -+ end -+ -+ config = use_native_modules!(config_command) - - use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks'] - use_frameworks! :linkage => ENV['USE_FRAMEWORKS'].to_sym if ENV['USE_FRAMEWORKS'] -@@ -49,15 +41,15 @@ target 'HelloWorld' do - :hermes_enabled => podfile_properties['expo.jsEngine'] == nil || podfile_properties['expo.jsEngine'] == 'hermes', - # An absolute path to your application root. - :app_path => "#{Pod::Config.instance.installation_root}/..", -- # Note that if you have use_frameworks! enabled, Flipper will not work if enabled -- :flipper_configuration => flipper_config -+ :privacy_file_aggregation_enabled => podfile_properties['apple.privacyManifestAggregationEnabled'] != 'false', - ) - - post_install do |installer| - react_native_post_install( - installer, - config[:reactNativePath], -- :mac_catalyst_enabled => false -+ :mac_catalyst_enabled => false, -+ :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true', - ) - - # This is necessary for Xcode 14, because it signs resource bundles by default -@@ -71,12 +63,4 @@ target 'HelloWorld' do - end - end - end -- -- post_integrate do |installer| -- begin -- expo_patch_react_imports!(installer) -- rescue => e -- Pod::UI.warn e -- end -- end - end -diff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json -index f8f8993585f..b51159163bf 100644 ---- a/templates/expo-template-bare-minimum/package.json -+++ b/templates/expo-template-bare-minimum/package.json -@@ -1,7 +1,8 @@ - { - "name": "expo-template-bare-minimum", - "description": "This bare project template includes a minimal setup for using unimodules with React Native.", -- "version": "50.0.43", -+ "license": "0BSD", -+ "version": "52.0.79", - "main": "index.js", - "scripts": { - "start": "expo start --dev-client", -@@ -10,10 +11,10 @@ - "web": "expo start --web" - }, - "dependencies": { -- "expo": "~50.0.17", -- "expo-status-bar": "~1.11.1", -- "react": "18.2.0", -- "react-native": "0.73.6" -+ "expo": "~52.0.49", -+ "expo-status-bar": "~2.0.1", -+ "react": "18.3.1", -+ "react-native": "0.76.9" - }, - "devDependencies": { - "@babel/core": "^7.20.0" diff --git a/docs/public/static/diffs/template-bare-minimum/raw/50..53.diff b/docs/public/static/diffs/template-bare-minimum/raw/50..53.diff deleted file mode 100644 index b1e098f9d86631..00000000000000 --- a/docs/public/static/diffs/template-bare-minimum/raw/50..53.diff +++ /dev/null @@ -1,1198 +0,0 @@ -diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle -index 27c6e63957e..34b96c71c33 100644 ---- a/templates/expo-template-bare-minimum/android/app/build.gradle -+++ b/templates/expo-template-bare-minimum/android/app/build.gradle -@@ -14,18 +14,19 @@ react { - hermesCommand = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/sdks/hermesc/%OS-BIN%/hermesc" - codegenDir = new File(["node", "--print", "require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile() - -+ enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean() - // Use Expo CLI to bundle the app, this ensures the Metro config - // works correctly with Expo projects. - cliFile = new File(["node", "--print", "require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })"].execute(null, rootDir).text.trim()) - bundleCommand = "export:embed" - - /* 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 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") - - /* Variants */ - // The list of variants to that are debuggable. For those we're going to -@@ -57,6 +58,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() - } - - /** -@@ -75,7 +79,7 @@ def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInRelea - * 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.+' - - android { - ndkVersion rootProject.ext.ndkVersion -@@ -90,8 +94,6 @@ android { - targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 1 - versionName "1.0" -- -- buildConfigField("boolean", "REACT_NATIVE_UNSTABLE_USE_RUNTIME_SCHEDULER_ALWAYS", (findProperty("reactNative.unstable_useRuntimeSchedulerAlways") ?: true).toString()) - } - signingConfigs { - debug { -@@ -112,6 +114,7 @@ android { - shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false) - minifyEnabled enableProguardInReleaseBuilds - proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" -+ crunchPngs (findProperty('android.enablePngCrunchInReleaseBuilds')?.toBoolean() ?: true) - } - } - packagingOptions { -@@ -119,6 +122,9 @@ android { - useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false) - } - } -+ androidResources { -+ ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:!CVS:!thumbs.db:!picasa.ini:!*~' -+ } - } - - // Apply static values from `gradle.properties` to the `android.packagingOptions` -@@ -151,26 +157,21 @@ dependencies { - - if (isGifEnabled) { - // For animated gif support -- implementation("com.facebook.fresco:animated-gif:${reactAndroidLibs.versions.fresco.get()}") -+ implementation("com.facebook.fresco:animated-gif:${expoLibs.versions.fresco.get()}") - } - - if (isWebpEnabled) { - // For webp support -- implementation("com.facebook.fresco:webpsupport:${reactAndroidLibs.versions.fresco.get()}") -+ implementation("com.facebook.fresco:webpsupport:${expoLibs.versions.fresco.get()}") - if (isWebpAnimatedEnabled) { - // Animated webp support -- implementation("com.facebook.fresco:animated-webp:${reactAndroidLibs.versions.fresco.get()}") -+ implementation("com.facebook.fresco:animated-webp:${expoLibs.versions.fresco.get()}") - } - } - -- implementation("com.facebook.react:flipper-integration") -- - if (hermesEnabled.toBoolean()) { - implementation("com.facebook.react:hermes-android") - } else { - implementation jscFlavor - } - } -- --apply from: new File(["node", "--print", "require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim(), "../native_modules.gradle"); --applyNativeModulesAppBuildGradle(project) -diff --git a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml -index f8d77fc832f..150248b6b3c 100644 ---- a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml -+++ b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml -@@ -18,15 +18,12 @@ - - - -- -- -- -+ - - - - - - -- - -- -\ No newline at end of file -+ -diff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt -index 8258c40ed4c..267e20c30e5 100644 ---- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt -+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt -@@ -2,18 +2,15 @@ package com.helloworld - - import android.app.Application - import android.content.res.Configuration --import androidx.annotation.NonNull - - import com.facebook.react.PackageList - import com.facebook.react.ReactApplication - import com.facebook.react.ReactNativeHost - import com.facebook.react.ReactPackage - import com.facebook.react.ReactHost --import com.facebook.react.config.ReactFeatureFlags - import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load --import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost - import com.facebook.react.defaults.DefaultReactNativeHost --import com.facebook.react.flipper.ReactNativeFlipper -+import com.facebook.react.soloader.OpenSourceMergedSoMapping - import com.facebook.soloader.SoLoader - - import expo.modules.ApplicationLifecycleDispatcher -@@ -25,9 +22,10 @@ class MainApplication : Application(), ReactApplication { - this, - object : DefaultReactNativeHost(this) { - override fun getPackages(): List { -+ val packages = PackageList(this).packages - // Packages that cannot be autolinked yet can be added manually here, for example: -- // packages.add(new MyReactNativePackage()); -- return PackageList(this).packages -+ // packages.add(MyReactNativePackage()) -+ return packages - } - - override fun getJSMainModuleName(): String = ".expo/.virtual-metro-entry" -@@ -40,21 +38,15 @@ class MainApplication : Application(), ReactApplication { - ) - - override val reactHost: ReactHost -- get() = getDefaultReactHost(this.applicationContext, reactNativeHost) -+ get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost) - - override fun onCreate() { - super.onCreate() -- SoLoader.init(this, false) -- if (!BuildConfig.REACT_NATIVE_UNSTABLE_USE_RUNTIME_SCHEDULER_ALWAYS) { -- ReactFeatureFlags.unstable_useRuntimeSchedulerAlways = false -- } -+ SoLoader.init(this, OpenSourceMergedSoMapping) - if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { - // If you opted-in for the New Architecture, we load the native entry point for this app. - load() - } -- if (BuildConfig.DEBUG) { -- ReactNativeFlipper.initializeFlipper(this, reactNativeHost.reactInstanceManager) -- } - ApplicationLifecycleDispatcher.onApplicationCreate(this) - } - -diff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png -new file mode 100644 -index 00000000000..31df827b18b -Binary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png differ -diff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png -new file mode 100644 -index 00000000000..ef243aab6c0 -Binary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png differ -diff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png -new file mode 100644 -index 00000000000..e9d5474519c -Binary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png differ -diff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png -new file mode 100644 -index 00000000000..d61da15d241 -Binary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png differ -diff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png -new file mode 100644 -index 00000000000..4aeed11d00b -Binary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png differ -diff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml -new file mode 100644 -index 00000000000..883b2a080f3 ---- /dev/null -+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml -@@ -0,0 +1,6 @@ -+ -+ -+ -+ -+ -+ -\ No newline at end of file -diff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/rn_edit_text_material.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/rn_edit_text_material.xml -index 73b37e4d996..5c25e728ea2 100644 ---- a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/rn_edit_text_material.xml -+++ b/templates/expo-template-bare-minimum/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" -+ > - - - -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - -diff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Supporting/Expo.plist b/templates/expo-template-bare-minimum/ios/HelloWorld/Supporting/Expo.plist -index 03410dc8b39..6631ffa6f24 100644 ---- a/templates/expo-template-bare-minimum/ios/HelloWorld/Supporting/Expo.plist -+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/Supporting/Expo.plist -@@ -2,9 +2,5 @@ - - - -- EXUpdatesSDKVersion -- YOUR-APP-SDK-VERSION-HERE -- EXUpdatesURL -- YOUR-APP-URL-HERE - - -diff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile -index b3978b9515d..29503ff0cc1 100644 ---- a/templates/expo-template-bare-minimum/ios/Podfile -+++ b/templates/expo-template-bare-minimum/ios/Podfile -@@ -4,42 +4,32 @@ require File.join(File.dirname(`node --print "require.resolve('react-native/pack - require 'json' - podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {} - --ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0' -+ENV['RCT_NEW_ARCH_ENABLED'] = '0' if podfile_properties['newArchEnabled'] == 'false' - ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR'] - --platform :ios, podfile_properties['ios.deploymentTarget'] || '13.4' -+platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1' - install! 'cocoapods', - :deterministic_uuids => false - - prepare_react_native_project! - --# If you are using a `react-native-flipper` your iOS build will fail when `NO_FLIPPER=1` is set. --# because `react-native-flipper` depends on (FlipperKit,...), which will be excluded. To fix this, --# you can also exclude `react-native-flipper` in `react-native.config.js` --# --# ```js --# module.exports = { --# dependencies: { --# ...(process.env.NO_FLIPPER ? { 'react-native-flipper': { platforms: { ios: null } } } : {}), --# } --# } --# ``` --flipper_config = FlipperConfiguration.disabled --if ENV['NO_FLIPPER'] == '1' then -- # Explicitly disabled through environment variables -- flipper_config = FlipperConfiguration.disabled --elsif podfile_properties.key?('ios.flipper') then -- # Configure Flipper in Podfile.properties.json -- if podfile_properties['ios.flipper'] == 'true' then -- flipper_config = FlipperConfiguration.enabled(["Debug", "Release"]) -- elsif podfile_properties['ios.flipper'] != 'false' then -- flipper_config = FlipperConfiguration.enabled(["Debug", "Release"], { 'Flipper' => podfile_properties['ios.flipper'] }) -- end --end -- - target 'HelloWorld' do - use_expo_modules! -- config = use_native_modules! -+ -+ if ENV['EXPO_USE_COMMUNITY_AUTOLINKING'] == '1' -+ config_command = ['node', '-e', "process.argv=['', '', 'config'];require('@react-native-community/cli').run()"]; -+ else -+ config_command = [ -+ 'npx', -+ 'expo-modules-autolinking', -+ 'react-native-config', -+ '--json', -+ '--platform', -+ 'ios' -+ ] -+ end -+ -+ config = use_native_modules!(config_command) - - use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks'] - use_frameworks! :linkage => ENV['USE_FRAMEWORKS'].to_sym if ENV['USE_FRAMEWORKS'] -@@ -49,15 +39,15 @@ target 'HelloWorld' do - :hermes_enabled => podfile_properties['expo.jsEngine'] == nil || podfile_properties['expo.jsEngine'] == 'hermes', - # An absolute path to your application root. - :app_path => "#{Pod::Config.instance.installation_root}/..", -- # Note that if you have use_frameworks! enabled, Flipper will not work if enabled -- :flipper_configuration => flipper_config -+ :privacy_file_aggregation_enabled => podfile_properties['apple.privacyManifestAggregationEnabled'] != 'false', - ) - - post_install do |installer| - react_native_post_install( - installer, - config[:reactNativePath], -- :mac_catalyst_enabled => false -+ :mac_catalyst_enabled => false, -+ :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true', - ) - - # This is necessary for Xcode 14, because it signs resource bundles by default -@@ -71,12 +61,4 @@ target 'HelloWorld' do - end - end - end -- -- post_integrate do |installer| -- begin -- expo_patch_react_imports!(installer) -- rescue => e -- Pod::UI.warn e -- end -- end - end -diff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json -index f8f8993585f..661f6b6addf 100644 ---- a/templates/expo-template-bare-minimum/package.json -+++ b/templates/expo-template-bare-minimum/package.json -@@ -1,7 +1,8 @@ - { - "name": "expo-template-bare-minimum", - "description": "This bare project template includes a minimal setup for using unimodules with React Native.", -- "version": "50.0.43", -+ "license": "0BSD", -+ "version": "53.0.42", - "main": "index.js", - "scripts": { - "start": "expo start --dev-client", -@@ -10,10 +11,10 @@ - "web": "expo start --web" - }, - "dependencies": { -- "expo": "~50.0.17", -- "expo-status-bar": "~1.11.1", -- "react": "18.2.0", -- "react-native": "0.73.6" -+ "expo": "~53.0.27", -+ "expo-status-bar": "~2.2.3", -+ "react": "19.0.0", -+ "react-native": "0.79.6" - }, - "devDependencies": { - "@babel/core": "^7.20.0" diff --git a/docs/public/static/diffs/template-bare-minimum/raw/50..54.diff b/docs/public/static/diffs/template-bare-minimum/raw/50..54.diff deleted file mode 100644 index 3ca13d4b4e404d..00000000000000 --- a/docs/public/static/diffs/template-bare-minimum/raw/50..54.diff +++ /dev/null @@ -1,1350 +0,0 @@ -diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle -index 27c6e63957e..3f1c571b679 100644 ---- a/templates/expo-template-bare-minimum/android/app/build.gradle -+++ b/templates/expo-template-bare-minimum/android/app/build.gradle -@@ -14,18 +14,19 @@ react { - hermesCommand = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/sdks/hermesc/%OS-BIN%/hermesc" - codegenDir = new File(["node", "--print", "require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile() - -+ enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean() - // Use Expo CLI to bundle the app, this ensures the Metro config - // works correctly with Expo projects. - cliFile = new File(["node", "--print", "require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })"].execute(null, rootDir).text.trim()) - bundleCommand = "export:embed" - - /* 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 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") - - /* Variants */ - // The list of variants to that are debuggable. For those we're going to -@@ -57,12 +58,15 @@ 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() - } - - /** -- * Set this to true to Run Proguard on Release builds to minify the Java bytecode. -+ * Set this to true in release builds to optimize the app using [R8](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization). - */ --def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInReleaseBuilds') ?: false).toBoolean() -+def enableMinifyInReleaseBuilds = (findProperty('android.enableMinifyInReleaseBuilds') ?: false).toBoolean() - - /** - * The preferred build flavor of JavaScriptCore (JSC) -@@ -75,7 +79,7 @@ def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInRelea - * 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.+' - - android { - ndkVersion rootProject.ext.ndkVersion -@@ -91,7 +95,7 @@ android { - versionCode 1 - versionName "1.0" - -- buildConfigField("boolean", "REACT_NATIVE_UNSTABLE_USE_RUNTIME_SCHEDULER_ALWAYS", (findProperty("reactNative.unstable_useRuntimeSchedulerAlways") ?: true).toString()) -+ buildConfigField "String", "REACT_NATIVE_RELEASE_LEVEL", "\"${findProperty('reactNativeReleaseLevel') ?: 'stable'}\"" - } - signingConfigs { - debug { -@@ -109,16 +113,23 @@ android { - // Caution! In production, you need to generate your own keystore file. - // see https://reactnative.dev/docs/signed-apk-android. - signingConfig signingConfigs.debug -- shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false) -- minifyEnabled enableProguardInReleaseBuilds -+ def enableShrinkResources = findProperty('android.enableShrinkResourcesInReleaseBuilds') ?: 'false' -+ shrinkResources enableShrinkResources.toBoolean() -+ minifyEnabled enableMinifyInReleaseBuilds - proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" -+ def enablePngCrunchInRelease = findProperty('android.enablePngCrunchInReleaseBuilds') ?: 'true' -+ crunchPngs enablePngCrunchInRelease.toBoolean() - } - } - packagingOptions { - jniLibs { -- useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false) -+ def enableLegacyPackaging = findProperty('expo.useLegacyPackaging') ?: 'false' -+ useLegacyPackaging enableLegacyPackaging.toBoolean() - } - } -+ androidResources { -+ ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:!CVS:!thumbs.db:!picasa.ini:!*~' -+ } - } - - // Apply static values from `gradle.properties` to the `android.packagingOptions` -@@ -151,26 +162,21 @@ dependencies { - - if (isGifEnabled) { - // For animated gif support -- implementation("com.facebook.fresco:animated-gif:${reactAndroidLibs.versions.fresco.get()}") -+ implementation("com.facebook.fresco:animated-gif:${expoLibs.versions.fresco.get()}") - } - - if (isWebpEnabled) { - // For webp support -- implementation("com.facebook.fresco:webpsupport:${reactAndroidLibs.versions.fresco.get()}") -+ implementation("com.facebook.fresco:webpsupport:${expoLibs.versions.fresco.get()}") - if (isWebpAnimatedEnabled) { - // Animated webp support -- implementation("com.facebook.fresco:animated-webp:${reactAndroidLibs.versions.fresco.get()}") -+ implementation("com.facebook.fresco:animated-webp:${expoLibs.versions.fresco.get()}") - } - } - -- implementation("com.facebook.react:flipper-integration") -- - if (hermesEnabled.toBoolean()) { - implementation("com.facebook.react:hermes-android") - } else { - implementation jscFlavor - } - } -- --apply from: new File(["node", "--print", "require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim(), "../native_modules.gradle"); --applyNativeModulesAppBuildGradle(project) -diff --git a/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml -new file mode 100644 -index 00000000000..3ec2507bab7 ---- /dev/null -+++ b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml -@@ -0,0 +1,7 @@ -+ -+ -+ -+ -+ -+ -diff --git a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml -index f8d77fc832f..150248b6b3c 100644 ---- a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml -+++ b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml -@@ -18,15 +18,12 @@ - - - -- -- -- -+ - - - - - - -- - -- -\ No newline at end of file -+ -diff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt -index 8258c40ed4c..5abad96fa00 100644 ---- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt -+++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt -@@ -2,19 +2,16 @@ package com.helloworld - - import android.app.Application - import android.content.res.Configuration --import androidx.annotation.NonNull - - import com.facebook.react.PackageList - import com.facebook.react.ReactApplication -+import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative - import com.facebook.react.ReactNativeHost - import com.facebook.react.ReactPackage - import com.facebook.react.ReactHost --import com.facebook.react.config.ReactFeatureFlags --import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load --import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost -+import com.facebook.react.common.ReleaseLevel -+import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint - import com.facebook.react.defaults.DefaultReactNativeHost --import com.facebook.react.flipper.ReactNativeFlipper --import com.facebook.soloader.SoLoader - - import expo.modules.ApplicationLifecycleDispatcher - import expo.modules.ReactNativeHostWrapper -@@ -22,39 +19,33 @@ import expo.modules.ReactNativeHostWrapper - class MainApplication : Application(), ReactApplication { - - override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper( -- this, -- object : DefaultReactNativeHost(this) { -- override fun getPackages(): List { -- // Packages that cannot be autolinked yet can be added manually here, for example: -- // packages.add(new MyReactNativePackage()); -- return PackageList(this).packages -- } -+ this, -+ object : DefaultReactNativeHost(this) { -+ override fun getPackages(): List = -+ PackageList(this).packages.apply { -+ // Packages that cannot be autolinked yet can be added manually here, for example: -+ // add(MyReactNativePackage()) -+ } - - override fun getJSMainModuleName(): String = ".expo/.virtual-metro-entry" - - 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) -+ get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost) - - override fun onCreate() { - super.onCreate() -- SoLoader.init(this, false) -- if (!BuildConfig.REACT_NATIVE_UNSTABLE_USE_RUNTIME_SCHEDULER_ALWAYS) { -- ReactFeatureFlags.unstable_useRuntimeSchedulerAlways = 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() -- } -- if (BuildConfig.DEBUG) { -- ReactNativeFlipper.initializeFlipper(this, reactNativeHost.reactInstanceManager) -+ DefaultNewArchitectureEntryPoint.releaseLevel = try { -+ ReleaseLevel.valueOf(BuildConfig.REACT_NATIVE_RELEASE_LEVEL.uppercase()) -+ } catch (e: IllegalArgumentException) { -+ ReleaseLevel.STABLE - } -+ loadReactNative(this) - ApplicationLifecycleDispatcher.onApplicationCreate(this) - } - -diff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png -new file mode 100644 -index 00000000000..31df827b18b -Binary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png differ -diff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png -new file mode 100644 -index 00000000000..ef243aab6c0 -Binary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png differ -diff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png -new file mode 100644 -index 00000000000..e9d5474519c -Binary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png differ -diff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png -new file mode 100644 -index 00000000000..d61da15d241 -Binary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png differ -diff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png -new file mode 100644 -index 00000000000..4aeed11d00b -Binary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png differ -diff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml -new file mode 100644 -index 00000000000..883b2a080f3 ---- /dev/null -+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml -@@ -0,0 +1,6 @@ -+ -+ -+ -+ -+ -+ -\ No newline at end of file -diff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/rn_edit_text_material.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/rn_edit_text_material.xml -index 73b37e4d996..5c25e728ea2 100644 ---- a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/rn_edit_text_material.xml -+++ b/templates/expo-template-bare-minimum/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" -+ > - - - -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - -diff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Supporting/Expo.plist b/templates/expo-template-bare-minimum/ios/HelloWorld/Supporting/Expo.plist -index 03410dc8b39..6631ffa6f24 100644 ---- a/templates/expo-template-bare-minimum/ios/HelloWorld/Supporting/Expo.plist -+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/Supporting/Expo.plist -@@ -2,9 +2,5 @@ - - - -- EXUpdatesSDKVersion -- YOUR-APP-SDK-VERSION-HERE -- EXUpdatesURL -- YOUR-APP-URL-HERE - - -diff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile -index b3978b9515d..9743535e7ad 100644 ---- a/templates/expo-template-bare-minimum/ios/Podfile -+++ b/templates/expo-template-bare-minimum/ios/Podfile -@@ -4,42 +4,42 @@ require File.join(File.dirname(`node --print "require.resolve('react-native/pack - require 'json' - podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {} - --ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0' --ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR'] -+def ccache_enabled?(podfile_properties) -+ # Environment variable takes precedence -+ return ENV['USE_CCACHE'] == '1' if ENV['USE_CCACHE'] -+ -+ # Fall back to Podfile properties -+ podfile_properties['apple.ccacheEnabled'] == 'true' -+end - --platform :ios, podfile_properties['ios.deploymentTarget'] || '13.4' --install! 'cocoapods', -- :deterministic_uuids => false -+ENV['RCT_NEW_ARCH_ENABLED'] ||= '0' if podfile_properties['newArchEnabled'] == 'false' -+ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR'] -+ENV['RCT_USE_RN_DEP'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' && podfile_properties['newArchEnabled'] != 'false' -+ENV['RCT_USE_PREBUILT_RNCORE'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' && podfile_properties['newArchEnabled'] != 'false' -+platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1' - - prepare_react_native_project! - --# If you are using a `react-native-flipper` your iOS build will fail when `NO_FLIPPER=1` is set. --# because `react-native-flipper` depends on (FlipperKit,...), which will be excluded. To fix this, --# you can also exclude `react-native-flipper` in `react-native.config.js` --# --# ```js --# module.exports = { --# dependencies: { --# ...(process.env.NO_FLIPPER ? { 'react-native-flipper': { platforms: { ios: null } } } : {}), --# } --# } --# ``` --flipper_config = FlipperConfiguration.disabled --if ENV['NO_FLIPPER'] == '1' then -- # Explicitly disabled through environment variables -- flipper_config = FlipperConfiguration.disabled --elsif podfile_properties.key?('ios.flipper') then -- # Configure Flipper in Podfile.properties.json -- if podfile_properties['ios.flipper'] == 'true' then -- flipper_config = FlipperConfiguration.enabled(["Debug", "Release"]) -- elsif podfile_properties['ios.flipper'] != 'false' then -- flipper_config = FlipperConfiguration.enabled(["Debug", "Release"], { 'Flipper' => podfile_properties['ios.flipper'] }) -- end --end -- - target 'HelloWorld' do - use_expo_modules! -- config = use_native_modules! -+ -+ if ENV['EXPO_USE_COMMUNITY_AUTOLINKING'] == '1' -+ config_command = ['node', '-e', "process.argv=['', '', 'config'];require('@react-native-community/cli').run()"]; -+ else -+ config_command = [ -+ 'node', -+ '--no-warnings', -+ '--eval', -+ 'require(\'expo/bin/autolinking\')', -+ 'expo-modules-autolinking', -+ 'react-native-config', -+ '--json', -+ '--platform', -+ 'ios' -+ ] -+ end -+ -+ config = use_native_modules!(config_command) - - use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks'] - use_frameworks! :linkage => ENV['USE_FRAMEWORKS'].to_sym if ENV['USE_FRAMEWORKS'] -@@ -49,34 +49,15 @@ target 'HelloWorld' do - :hermes_enabled => podfile_properties['expo.jsEngine'] == nil || podfile_properties['expo.jsEngine'] == 'hermes', - # An absolute path to your application root. - :app_path => "#{Pod::Config.instance.installation_root}/..", -- # Note that if you have use_frameworks! enabled, Flipper will not work if enabled -- :flipper_configuration => flipper_config -+ :privacy_file_aggregation_enabled => podfile_properties['apple.privacyManifestAggregationEnabled'] != 'false', - ) - - post_install do |installer| - react_native_post_install( - installer, - config[:reactNativePath], -- :mac_catalyst_enabled => false -+ :mac_catalyst_enabled => false, -+ :ccache_enabled => ccache_enabled?(podfile_properties), - ) -- -- # This is necessary for Xcode 14, because it signs resource bundles by default -- # when building for devices. -- installer.target_installation_results.pod_target_installation_results -- .each do |pod_name, target_installation_result| -- target_installation_result.resource_bundle_targets.each do |resource_bundle_target| -- resource_bundle_target.build_configurations.each do |config| -- config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO' -- end -- end -- end -- end -- -- post_integrate do |installer| -- begin -- expo_patch_react_imports!(installer) -- rescue => e -- Pod::UI.warn e -- end - end - end -diff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json -index f8f8993585f..0d90c6e603d 100644 ---- a/templates/expo-template-bare-minimum/package.json -+++ b/templates/expo-template-bare-minimum/package.json -@@ -1,7 +1,8 @@ - { - "name": "expo-template-bare-minimum", - "description": "This bare project template includes a minimal setup for using unimodules with React Native.", -- "version": "50.0.43", -+ "license": "0BSD", -+ "version": "54.0.50", - "main": "index.js", - "scripts": { - "start": "expo start --dev-client", -@@ -10,12 +11,9 @@ - "web": "expo start --web" - }, - "dependencies": { -- "expo": "~50.0.17", -- "expo-status-bar": "~1.11.1", -- "react": "18.2.0", -- "react-native": "0.73.6" -- }, -- "devDependencies": { -- "@babel/core": "^7.20.0" -+ "expo": "~54.0.33", -+ "expo-status-bar": "~3.0.9", -+ "react": "19.1.0", -+ "react-native": "0.81.5" - } - } diff --git a/docs/public/static/diffs/template-bare-minimum/raw/51..52.diff b/docs/public/static/diffs/template-bare-minimum/raw/51..52.diff index 8119a7d822c763..1539d34d43209f 100644 --- a/docs/public/static/diffs/template-bare-minimum/raw/51..52.diff +++ b/docs/public/static/diffs/template-bare-minimum/raw/51..52.diff @@ -390,18 +390,6 @@ index 80b1bc3267b..39b188e065c 100644 - include ':app' includeBuild(new File(["node", "--print", "require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim()).getParentFile()) -diff --git a/templates/expo-template-bare-minimum/gitignore b/templates/expo-template-bare-minimum/gitignore -index 05647d55c75..d16e1efbb3f 100644 ---- a/templates/expo-template-bare-minimum/gitignore -+++ b/templates/expo-template-bare-minimum/gitignore -@@ -7,6 +7,7 @@ node_modules/ - .expo/ - dist/ - web-build/ -+expo-env.d.ts - - # Native - *.orig.* diff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj index f945940c256..1ccb9b422d5 100644 --- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj diff --git a/docs/public/static/diffs/template-bare-minimum/raw/51..53.diff b/docs/public/static/diffs/template-bare-minimum/raw/51..53.diff index 390ec9d9d7c08c..7768992018715f 100644 --- a/docs/public/static/diffs/template-bare-minimum/raw/51..53.diff +++ b/docs/public/static/diffs/template-bare-minimum/raw/51..53.diff @@ -518,18 +518,6 @@ index 80b1bc3267b..7fe91512213 100644 include ':app' -includeBuild(new File(["node", "--print", "require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim()).getParentFile()) +includeBuild(expoAutolinking.reactNativeGradlePlugin) -diff --git a/templates/expo-template-bare-minimum/gitignore b/templates/expo-template-bare-minimum/gitignore -index 05647d55c75..d16e1efbb3f 100644 ---- a/templates/expo-template-bare-minimum/gitignore -+++ b/templates/expo-template-bare-minimum/gitignore -@@ -7,6 +7,7 @@ node_modules/ - .expo/ - dist/ - web-build/ -+expo-env.d.ts - - # Native - *.orig.* diff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj index f945940c256..1b7513bd31b 100644 --- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj diff --git a/docs/public/static/diffs/template-bare-minimum/raw/51..54.diff b/docs/public/static/diffs/template-bare-minimum/raw/51..54.diff index 0d90136a2ce641..7e4e7f42be9e40 100644 --- a/docs/public/static/diffs/template-bare-minimum/raw/51..54.diff +++ b/docs/public/static/diffs/template-bare-minimum/raw/51..54.diff @@ -636,18 +636,6 @@ index 80b1bc3267b..7fe91512213 100644 include ':app' -includeBuild(new File(["node", "--print", "require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim()).getParentFile()) +includeBuild(expoAutolinking.reactNativeGradlePlugin) -diff --git a/templates/expo-template-bare-minimum/gitignore b/templates/expo-template-bare-minimum/gitignore -index 05647d55c75..d16e1efbb3f 100644 ---- a/templates/expo-template-bare-minimum/gitignore -+++ b/templates/expo-template-bare-minimum/gitignore -@@ -7,6 +7,7 @@ node_modules/ - .expo/ - dist/ - web-build/ -+expo-env.d.ts - - # Native - *.orig.* diff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj index f945940c256..8a390c764af 100644 --- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj @@ -960,37 +948,6 @@ index 00000000000..8361941afc2 +// +// Use this file to import your target's public headers that you would like to expose to Swift. +// -diff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json -new file mode 100644 -index 00000000000..255637e0fdb ---- /dev/null -+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json -@@ -0,0 +1,21 @@ -+{ -+ "images" : [ -+ { -+ "filename" : "SplashScreenLegacy.png", -+ "idiom" : "universal", -+ "scale" : "1x" -+ }, -+ { -+ "idiom" : "universal", -+ "scale" : "2x" -+ }, -+ { -+ "idiom" : "universal", -+ "scale" : "3x" -+ } -+ ], -+ "info" : { -+ "author" : "xcode", -+ "version" : 1 -+ } -+} -diff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png -new file mode 100644 -index 00000000000..bbf8e9e6016 -Binary files /dev/null and b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png differ diff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist b/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist index 53d78e89033..596dc7ce6b5 100644 --- a/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist @@ -1242,7 +1199,7 @@ index 57c1dd38343..9743535e7ad 100644 end end diff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json -index 563853071f0..0d90c6e603d 100644 +index 563853071f0..a1a026a23e1 100644 --- a/templates/expo-template-bare-minimum/package.json +++ b/templates/expo-template-bare-minimum/package.json @@ -1,7 +1,8 @@ @@ -1251,7 +1208,7 @@ index 563853071f0..0d90c6e603d 100644 "description": "This bare project template includes a minimal setup for using unimodules with React Native.", - "version": "51.0.56", + "license": "0BSD", -+ "version": "54.0.50", ++ "version": "54.0.51", "main": "index.js", "scripts": { "start": "expo start --dev-client", @@ -1266,7 +1223,7 @@ index 563853071f0..0d90c6e603d 100644 - }, - "devDependencies": { - "@babel/core": "^7.20.0" -+ "expo": "~54.0.33", ++ "expo": "~54.0.34", + "expo-status-bar": "~3.0.9", + "react": "19.1.0", + "react-native": "0.81.5" diff --git a/docs/public/static/diffs/template-bare-minimum/raw/51..55.diff b/docs/public/static/diffs/template-bare-minimum/raw/51..55.diff index ef85ce67f804a4..fce2884d43d9c8 100644 --- a/docs/public/static/diffs/template-bare-minimum/raw/51..55.diff +++ b/docs/public/static/diffs/template-bare-minimum/raw/51..55.diff @@ -672,18 +672,6 @@ index 80b1bc3267b..7fe91512213 100644 include ':app' -includeBuild(new File(["node", "--print", "require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim()).getParentFile()) +includeBuild(expoAutolinking.reactNativeGradlePlugin) -diff --git a/templates/expo-template-bare-minimum/gitignore b/templates/expo-template-bare-minimum/gitignore -index 05647d55c75..d16e1efbb3f 100644 ---- a/templates/expo-template-bare-minimum/gitignore -+++ b/templates/expo-template-bare-minimum/gitignore -@@ -7,6 +7,7 @@ node_modules/ - .expo/ - dist/ - web-build/ -+expo-env.d.ts - - # Native - *.orig.* diff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj index f945940c256..8a390c764af 100644 --- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj @@ -995,37 +983,6 @@ index 00000000000..8361941afc2 +// +// Use this file to import your target's public headers that you would like to expose to Swift. +// -diff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json -new file mode 100644 -index 00000000000..255637e0fdb ---- /dev/null -+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json -@@ -0,0 +1,21 @@ -+{ -+ "images" : [ -+ { -+ "filename" : "SplashScreenLegacy.png", -+ "idiom" : "universal", -+ "scale" : "1x" -+ }, -+ { -+ "idiom" : "universal", -+ "scale" : "2x" -+ }, -+ { -+ "idiom" : "universal", -+ "scale" : "3x" -+ } -+ ], -+ "info" : { -+ "author" : "xcode", -+ "version" : 1 -+ } -+} -diff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png -new file mode 100644 -index 00000000000..bbf8e9e6016 -Binary files /dev/null and b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png differ diff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist b/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist index 53d78e89033..596dc7ce6b5 100644 --- a/templates/expo-template-bare-minimum/ios/HelloWorld/Info.plist @@ -1277,7 +1234,7 @@ index 57c1dd38343..03484edf156 100644 end end diff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json -index 563853071f0..7d81baed15d 100644 +index 563853071f0..253f825cea9 100644 --- a/templates/expo-template-bare-minimum/package.json +++ b/templates/expo-template-bare-minimum/package.json @@ -1,7 +1,8 @@ @@ -1286,7 +1243,7 @@ index 563853071f0..7d81baed15d 100644 "description": "This bare project template includes a minimal setup for using unimodules with React Native.", - "version": "51.0.56", + "license": "0BSD", -+ "version": "55.0.26", ++ "version": "55.0.37", "main": "index.js", "scripts": { "start": "expo start --dev-client", @@ -1301,9 +1258,9 @@ index 563853071f0..7d81baed15d 100644 - }, - "devDependencies": { - "@babel/core": "^7.20.0" -+ "expo": "~55.0.14", -+ "expo-status-bar": "~55.0.5", ++ "expo": "~55.0.25", ++ "expo-status-bar": "~55.0.6", + "react": "19.2.0", -+ "react-native": "0.83.4" ++ "react-native": "0.83.6" } } diff --git a/docs/public/static/diffs/template-bare-minimum/raw/50..unversioned.diff b/docs/public/static/diffs/template-bare-minimum/raw/51..56.diff similarity index 80% rename from docs/public/static/diffs/template-bare-minimum/raw/50..unversioned.diff rename to docs/public/static/diffs/template-bare-minimum/raw/51..56.diff index d93254eda0988e..259aac77e69ee3 100644 --- a/docs/public/static/diffs/template-bare-minimum/raw/50..unversioned.diff +++ b/docs/public/static/diffs/template-bare-minimum/raw/51..56.diff @@ -1,8 +1,36 @@ diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle -index 27c6e63957e..fc185e53bc3 100644 +index a4b08330359..fc185e53bc3 100644 --- a/templates/expo-template-bare-minimum/android/app/build.gradle +++ b/templates/expo-template-bare-minimum/android/app/build.gradle -@@ -11,21 +11,22 @@ def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath() +@@ -4,27 +4,6 @@ apply plugin: "com.facebook.react" + + def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath() + +-static def versionToNumber(major, minor, patch) { +- return patch * 100 + minor * 10000 + major * 1000000 +-} +- +-def getRNVersion() { +- def version = providers.exec { +- workingDir(projectDir) +- commandLine("node", "-e", "console.log(require('react-native/package.json').version);") +- }.standardOutput.asText.get().trim() +- +- def coreVersion = version.split("-")[0] +- def (major, minor, patch) = coreVersion.tokenize('.').collect { it.toInteger() } +- +- return versionToNumber( +- major, +- minor, +- patch +- ) +-} +-def rnVersion = getRNVersion() +- + /** + * This is the configuration block to customize your React Native Android app. + * By default you don't need to apply any configuration, just uncomment the lines you need. +@@ -32,21 +11,22 @@ def rnVersion = getRNVersion() react { entryFile = file(["node", "-e", "require('expo/scripts/resolveAppEntry')", projectRoot, "android", "absolute"].execute(null, rootDir).text.trim()) reactNativeDir = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile() @@ -32,11 +60,14 @@ index 27c6e63957e..fc185e53bc3 100644 /* Variants */ // The list of variants to that are debuggable. For those we're going to -@@ -57,12 +58,15 @@ react { - // +@@ -79,16 +59,14 @@ react { // The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map" // hermesFlags = ["-O", "-output-source-map"] -+ + +- if (rnVersion >= versionToNumber(0, 75, 0)) { +- /* Autolinking */ +- autolinkLibrariesWithApp() +- } + /* Autolinking */ + autolinkLibrariesWithApp() } @@ -50,7 +81,7 @@ index 27c6e63957e..fc185e53bc3 100644 /** * The preferred build flavor of JavaScriptCore (JSC) -@@ -75,7 +79,7 @@ def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInRelea +@@ -101,7 +79,7 @@ def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInRelea * give correct results when using with locales other than en-US. Note that * this variant is about 6MiB larger per architecture than default. */ @@ -59,16 +90,16 @@ index 27c6e63957e..fc185e53bc3 100644 android { ndkVersion rootProject.ext.ndkVersion -@@ -91,7 +95,7 @@ android { +@@ -116,6 +94,8 @@ android { + targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 versionName "1.0" - -- buildConfigField("boolean", "REACT_NATIVE_UNSTABLE_USE_RUNTIME_SCHEDULER_ALWAYS", (findProperty("reactNative.unstable_useRuntimeSchedulerAlways") ?: true).toString()) ++ + buildConfigField "String", "REACT_NATIVE_RELEASE_LEVEL", "\"${findProperty('reactNativeReleaseLevel') ?: 'stable'}\"" } signingConfigs { debug { -@@ -109,16 +113,23 @@ android { +@@ -133,17 +113,23 @@ android { // Caution! In production, you need to generate your own keystore file. // see https://reactnative.dev/docs/signed-apk-android. signingConfig signingConfigs.debug @@ -78,6 +109,7 @@ index 27c6e63957e..fc185e53bc3 100644 + shrinkResources enableShrinkResources.toBoolean() + minifyEnabled enableMinifyInReleaseBuilds proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" +- crunchPngs (findProperty('android.enablePngCrunchInReleaseBuilds')?.toBoolean() ?: true) + def enablePngCrunchInRelease = findProperty('android.enablePngCrunchInReleaseBuilds') ?: 'true' + crunchPngs enablePngCrunchInRelease.toBoolean() } @@ -95,7 +127,7 @@ index 27c6e63957e..fc185e53bc3 100644 } // Apply static values from `gradle.properties` to the `android.packagingOptions` -@@ -151,26 +162,21 @@ dependencies { +@@ -176,15 +162,15 @@ dependencies { if (isGifEnabled) { // For animated gif support @@ -114,17 +146,15 @@ index 27c6e63957e..fc185e53bc3 100644 } } -- implementation("com.facebook.react:flipper-integration") -- - if (hermesEnabled.toBoolean()) { - implementation("com.facebook.react:hermes-android") - } else { +@@ -194,8 +180,3 @@ dependencies { implementation jscFlavor } } - --apply from: new File(["node", "--print", "require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim(), "../native_modules.gradle"); --applyNativeModulesAppBuildGradle(project) +-if (rnVersion < versionToNumber(0, 75, 0)) { +- apply from: new File(["node", "--print", "require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim(), "../native_modules.gradle"); +- applyNativeModulesAppBuildGradle(project) +-} diff --git a/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml new file mode 100644 index 00000000000..3ec2507bab7 @@ -139,7 +169,7 @@ index 00000000000..3ec2507bab7 + + diff --git a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml -index f8d77fc832f..14bdba124ab 100644 +index 52175508263..14bdba124ab 100644 --- a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml +++ b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml @@ -1,12 +1,13 @@ @@ -159,13 +189,11 @@ index f8d77fc832f..14bdba124ab 100644 -@@ -18,15 +19,12 @@ +@@ -18,13 +19,12 @@ - -- -- - + + @@ -176,18 +204,12 @@ index f8d77fc832f..14bdba124ab 100644 - -- -\ No newline at end of file -+ + diff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt -index 8258c40ed4c..cbb5ddb85d0 100644 +index 5f6e05ce071..cbb5ddb85d0 100644 --- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt +++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt -@@ -2,59 +2,39 @@ package com.helloworld - - import android.app.Application - import android.content.res.Configuration --import androidx.annotation.NonNull +@@ -5,46 +5,36 @@ import android.content.res.Configuration import com.facebook.react.PackageList import com.facebook.react.ReactApplication @@ -195,11 +217,8 @@ index 8258c40ed4c..cbb5ddb85d0 100644 +import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative import com.facebook.react.ReactPackage import com.facebook.react.ReactHost --import com.facebook.react.config.ReactFeatureFlags -import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load --import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost -import com.facebook.react.defaults.DefaultReactNativeHost --import com.facebook.react.flipper.ReactNativeFlipper -import com.facebook.soloader.SoLoader +import com.facebook.react.common.ReleaseLevel +import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint @@ -229,7 +248,7 @@ index 8258c40ed4c..cbb5ddb85d0 100644 - ) - - override val reactHost: ReactHost -- get() = getDefaultReactHost(this.applicationContext, reactNativeHost) +- get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost) + override val reactHost: ReactHost by lazy { + ExpoReactHostFactory.getDefaultReactHost( + context = applicationContext, @@ -244,15 +263,9 @@ index 8258c40ed4c..cbb5ddb85d0 100644 override fun onCreate() { super.onCreate() - SoLoader.init(this, false) -- if (!BuildConfig.REACT_NATIVE_UNSTABLE_USE_RUNTIME_SCHEDULER_ALWAYS) { -- ReactFeatureFlags.unstable_useRuntimeSchedulerAlways = 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() -- } -- if (BuildConfig.DEBUG) { -- ReactNativeFlipper.initializeFlipper(this, reactNativeHost.reactInstanceManager) + DefaultNewArchitectureEntryPoint.releaseLevel = try { + ReleaseLevel.valueOf(BuildConfig.REACT_NATIVE_RELEASE_LEVEL.uppercase()) + } catch (e: IllegalArgumentException) { @@ -295,20 +308,6 @@ index 00000000000..883b2a080f3 + + \ No newline at end of file -diff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/rn_edit_text_material.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/rn_edit_text_material.xml -index 73b37e4d996..5c25e728ea2 100644 ---- a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/rn_edit_text_material.xml -+++ b/templates/expo-template-bare-minimum/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" -+ > - - - -@@ -18,15 +19,12 @@ - +@@ -19,7 +20,7 @@ -- -- -- + - -+ + - - -- - -- -\ No newline at end of file -+ diff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt -index 8258c40ed4c..cbb5ddb85d0 100644 +index e61349d1301..cbb5ddb85d0 100644 --- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt +++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt -@@ -2,59 +2,39 @@ package com.helloworld - - import android.app.Application - import android.content.res.Configuration --import androidx.annotation.NonNull +@@ -5,48 +5,36 @@ import android.content.res.Configuration import com.facebook.react.PackageList import com.facebook.react.ReactApplication @@ -195,11 +141,9 @@ index 8258c40ed4c..cbb5ddb85d0 100644 +import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative import com.facebook.react.ReactPackage import com.facebook.react.ReactHost --import com.facebook.react.config.ReactFeatureFlags -import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load --import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost -import com.facebook.react.defaults.DefaultReactNativeHost --import com.facebook.react.flipper.ReactNativeFlipper +-import com.facebook.react.soloader.OpenSourceMergedSoMapping -import com.facebook.soloader.SoLoader +import com.facebook.react.common.ReleaseLevel +import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint @@ -214,9 +158,10 @@ index 8258c40ed4c..cbb5ddb85d0 100644 - this, - object : DefaultReactNativeHost(this) { - override fun getPackages(): List { +- val packages = PackageList(this).packages - // Packages that cannot be autolinked yet can be added manually here, for example: - // packages.add(new MyReactNativePackage()); -- return PackageList(this).packages +- return packages - } - - override fun getJSMainModuleName(): String = ".expo/.virtual-metro-entry" @@ -229,7 +174,7 @@ index 8258c40ed4c..cbb5ddb85d0 100644 - ) - - override val reactHost: ReactHost -- get() = getDefaultReactHost(this.applicationContext, reactNativeHost) +- get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost) + override val reactHost: ReactHost by lazy { + ExpoReactHostFactory.getDefaultReactHost( + context = applicationContext, @@ -243,16 +188,10 @@ index 8258c40ed4c..cbb5ddb85d0 100644 override fun onCreate() { super.onCreate() -- SoLoader.init(this, false) -- if (!BuildConfig.REACT_NATIVE_UNSTABLE_USE_RUNTIME_SCHEDULER_ALWAYS) { -- ReactFeatureFlags.unstable_useRuntimeSchedulerAlways = false -- } +- SoLoader.init(this, OpenSourceMergedSoMapping) - if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { - // If you opted-in for the New Architecture, we load the native entry point for this app. - load() -- } -- if (BuildConfig.DEBUG) { -- ReactNativeFlipper.initializeFlipper(this, reactNativeHost.reactInstanceManager) + DefaultNewArchitectureEntryPoint.releaseLevel = try { + ReleaseLevel.valueOf(BuildConfig.REACT_NATIVE_RELEASE_LEVEL.uppercase()) + } catch (e: IllegalArgumentException) { @@ -262,98 +201,11 @@ index 8258c40ed4c..cbb5ddb85d0 100644 ApplicationLifecycleDispatcher.onApplicationCreate(this) } -diff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png -new file mode 100644 -index 00000000000..31df827b18b -Binary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png differ -diff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png -new file mode 100644 -index 00000000000..ef243aab6c0 -Binary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png differ -diff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png -new file mode 100644 -index 00000000000..e9d5474519c -Binary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png differ -diff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png -new file mode 100644 -index 00000000000..d61da15d241 -Binary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png differ -diff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png -new file mode 100644 -index 00000000000..4aeed11d00b -Binary files /dev/null and b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png differ -diff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml -new file mode 100644 -index 00000000000..883b2a080f3 ---- /dev/null -+++ b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/ic_launcher_background.xml -@@ -0,0 +1,6 @@ -+ -+ -+ -+ -+ -+ -\ No newline at end of file -diff --git a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/rn_edit_text_material.xml b/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/rn_edit_text_material.xml -index 73b37e4d996..5c25e728ea2 100644 ---- a/templates/expo-template-bare-minimum/android/app/src/main/res/drawable/rn_edit_text_material.xml -+++ b/templates/expo-template-bare-minimum/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" -+ > - - - -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +- + -+ -+ -+ + + + +- + -+ -+ + + + -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ + + + +@@ -29,6 +30,7 @@ + + + + -+ -+ -+ -+ -+ -+ -+ -+ -+ + + + +@@ -38,5 +40,8 @@ + + + + + + -+ + -diff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Supporting/Expo.plist b/templates/expo-template-bare-minimum/ios/HelloWorld/Supporting/Expo.plist -index 03410dc8b39..6631ffa6f24 100644 ---- a/templates/expo-template-bare-minimum/ios/HelloWorld/Supporting/Expo.plist -+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/Supporting/Expo.plist -@@ -2,9 +2,5 @@ - - - -- EXUpdatesSDKVersion -- YOUR-APP-SDK-VERSION-HERE -- EXUpdatesURL -- YOUR-APP-URL-HERE - - diff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile -index b3978b9515d..03484edf156 100644 +index f740040e7be..c3158e3fb9b 100644 --- a/templates/expo-template-bare-minimum/ios/Podfile +++ b/templates/expo-template-bare-minimum/ios/Podfile -@@ -4,42 +4,42 @@ require File.join(File.dirname(`node --print "require.resolve('react-native/pack +@@ -4,12 +4,20 @@ require File.join(File.dirname(`node --print "require.resolve('react-native/pack require 'json' podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {} @@ -1249,84 +858,37 @@ index b3978b9515d..03484edf156 100644 + # Environment variable takes precedence + return ENV['USE_CCACHE'] == '1' if ENV['USE_CCACHE'] --platform :ios, podfile_properties['ios.deploymentTarget'] || '13.4' +-platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1' -install! 'cocoapods', - :deterministic_uuids => false + # Fall back to Podfile properties + podfile_properties['apple.ccacheEnabled'] == 'true' +end - --prepare_react_native_project! ++ +ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR'] -+ENV['RCT_USE_RN_DEP'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' -+ENV['RCT_USE_PREBUILT_RNCORE'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' ++ENV['RCT_USE_RN_DEP'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1' ++ENV['RCT_USE_PREBUILT_RNCORE'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1' +ENV['RCT_HERMES_V1_ENABLED'] ||= '1' if podfile_properties['expo.useHermesV1'] == 'true' -+platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1' ++ENV['EXPO_USE_PRECOMPILED_MODULES'] ||= '1' if podfile_properties['EXPO_USE_PRECOMPILED_MODULES'] != 'false' ++platform :ios, podfile_properties['ios.deploymentTarget'] || '16.4' --# If you are using a `react-native-flipper` your iOS build will fail when `NO_FLIPPER=1` is set. --# because `react-native-flipper` depends on (FlipperKit,...), which will be excluded. To fix this, --# you can also exclude `react-native-flipper` in `react-native.config.js` --# --# ```js --# module.exports = { --# dependencies: { --# ...(process.env.NO_FLIPPER ? { 'react-native-flipper': { platforms: { ios: null } } } : {}), --# } --# } --# ``` --flipper_config = FlipperConfiguration.disabled --if ENV['NO_FLIPPER'] == '1' then -- # Explicitly disabled through environment variables -- flipper_config = FlipperConfiguration.disabled --elsif podfile_properties.key?('ios.flipper') then -- # Configure Flipper in Podfile.properties.json -- if podfile_properties['ios.flipper'] == 'true' then -- flipper_config = FlipperConfiguration.enabled(["Debug", "Release"]) -- elsif podfile_properties['ios.flipper'] != 'false' then -- flipper_config = FlipperConfiguration.enabled(["Debug", "Release"], { 'Flipper' => podfile_properties['ios.flipper'] }) -- end --end -+prepare_react_native_project! + prepare_react_native_project! - target 'HelloWorld' do - use_expo_modules! -- config = use_native_modules! -+ -+ if ENV['EXPO_USE_COMMUNITY_AUTOLINKING'] == '1' -+ config_command = ['node', '-e', "process.argv=['', '', 'config'];require('@react-native-community/cli').run()"]; -+ else -+ config_command = [ -+ 'node', -+ '--no-warnings', -+ '--eval', +@@ -23,7 +31,8 @@ target 'HelloWorld' do + 'node', + '--no-warnings', + '--eval', +- 'require(require.resolve(\'expo-modules-autolinking\', { paths: [require.resolve(\'expo/package.json\')] }))(process.argv.slice(1))', + 'require(\'expo/bin/autolinking\')', + 'expo-modules-autolinking', -+ 'react-native-config', -+ '--json', -+ '--platform', -+ 'ios' -+ ] -+ end -+ -+ config = use_native_modules!(config_command) - - use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks'] - use_frameworks! :linkage => ENV['USE_FRAMEWORKS'].to_sym if ENV['USE_FRAMEWORKS'] -@@ -49,34 +49,15 @@ target 'HelloWorld' do - :hermes_enabled => podfile_properties['expo.jsEngine'] == nil || podfile_properties['expo.jsEngine'] == 'hermes', - # An absolute path to your application root. - :app_path => "#{Pod::Config.instance.installation_root}/..", -- # Note that if you have use_frameworks! enabled, Flipper will not work if enabled -- :flipper_configuration => flipper_config -+ :privacy_file_aggregation_enabled => podfile_properties['apple.privacyManifestAggregationEnabled'] != 'false', - ) - - post_install do |installer| - react_native_post_install( + 'react-native-config', + '--json', + '--platform', +@@ -49,18 +58,7 @@ target 'HelloWorld' do installer, config[:reactNativePath], -- :mac_catalyst_enabled => false -+ :mac_catalyst_enabled => false, + :mac_catalyst_enabled => false, +- :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true', + :ccache_enabled => ccache_enabled?(podfile_properties), ) - @@ -1339,45 +901,40 @@ index b3978b9515d..03484edf156 100644 - config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO' - end - end -- end -- end -- -- post_integrate do |installer| -- begin -- expo_patch_react_imports!(installer) -- rescue => e -- Pod::UI.warn e - end end end diff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json -index f8f8993585f..7d81baed15d 100644 +index b51159163bf..3e151175775 100644 --- a/templates/expo-template-bare-minimum/package.json +++ b/templates/expo-template-bare-minimum/package.json -@@ -1,7 +1,8 @@ - { +@@ -2,7 +2,7 @@ "name": "expo-template-bare-minimum", "description": "This bare project template includes a minimal setup for using unimodules with React Native.", -- "version": "50.0.43", -+ "license": "0BSD", -+ "version": "55.0.26", + "license": "0BSD", +- "version": "52.0.79", ++ "version": "56.0.13", "main": "index.js", "scripts": { "start": "expo start --dev-client", -@@ -10,12 +11,9 @@ +@@ -11,12 +11,14 @@ "web": "expo start --web" }, "dependencies": { -- "expo": "~50.0.17", -- "expo-status-bar": "~1.11.1", -- "react": "18.2.0", -- "react-native": "0.73.6" -- }, +- "expo": "~52.0.49", +- "expo-status-bar": "~2.0.1", +- "react": "18.3.1", +- "react-native": "0.76.9" ++ "expo": "~56.0.0-preview.13", ++ "expo-status-bar": "~56.0.4", ++ "react": "19.2.3", ++ "react-native": "0.85.3" + }, - "devDependencies": { - "@babel/core": "^7.20.0" -+ "expo": "~55.0.14", -+ "expo-status-bar": "~55.0.5", -+ "react": "19.2.0", -+ "react-native": "0.83.4" ++ "publishConfig": { ++ "executableFiles": [ ++ "./android/gradlew" ++ ] } } diff --git a/docs/public/static/diffs/template-bare-minimum/raw/52..unversioned.diff b/docs/public/static/diffs/template-bare-minimum/raw/52..unversioned.diff index cace9197c11e7b..8cb96b3e37d416 100644 --- a/docs/public/static/diffs/template-bare-minimum/raw/52..unversioned.diff +++ b/docs/public/static/diffs/template-bare-minimum/raw/52..unversioned.diff @@ -808,37 +808,6 @@ index 00000000000..8361941afc2 +// +// Use this file to import your target's public headers that you would like to expose to Swift. +// -diff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json -new file mode 100644 -index 00000000000..255637e0fdb ---- /dev/null -+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json -@@ -0,0 +1,21 @@ -+{ -+ "images" : [ -+ { -+ "filename" : "SplashScreenLegacy.png", -+ "idiom" : "universal", -+ "scale" : "1x" -+ }, -+ { -+ "idiom" : "universal", -+ "scale" : "2x" -+ }, -+ { -+ "idiom" : "universal", -+ "scale" : "3x" -+ } -+ ], -+ "info" : { -+ "author" : "xcode", -+ "version" : 1 -+ } -+} -diff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png -new file mode 100644 -index 00000000000..bbf8e9e6016 -Binary files /dev/null and b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png differ diff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard index 447b4188985..58d21796e1d 100644 --- a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard @@ -876,7 +845,7 @@ index 447b4188985..58d21796e1d 100644 diff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile -index f740040e7be..a2af7b4a5de 100644 +index f740040e7be..c3158e3fb9b 100644 --- a/templates/expo-template-bare-minimum/ios/Podfile +++ b/templates/expo-template-bare-minimum/ios/Podfile @@ -4,12 +4,20 @@ require File.join(File.dirname(`node --print "require.resolve('react-native/pack @@ -897,10 +866,10 @@ index f740040e7be..a2af7b4a5de 100644 +end + +ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR'] -+ENV['RCT_USE_RN_DEP'] ||= '0' if podfile_properties['ios.buildReactNativeFromSource'] == 'true' -+ENV['RCT_USE_PREBUILT_RNCORE'] ||= '0' if podfile_properties['ios.buildReactNativeFromSource'] == 'true' ++ENV['RCT_USE_RN_DEP'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1' ++ENV['RCT_USE_PREBUILT_RNCORE'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1' +ENV['RCT_HERMES_V1_ENABLED'] ||= '1' if podfile_properties['expo.useHermesV1'] == 'true' -+ENV['EXPO_USE_PRECOMPILED_MODULES'] ||= '1' if podfile_properties['EXPO_USE_PRECOMPILED_MODULES'] == '1' ++ENV['EXPO_USE_PRECOMPILED_MODULES'] ||= '1' if podfile_properties['EXPO_USE_PRECOMPILED_MODULES'] != 'false' +platform :ios, podfile_properties['ios.deploymentTarget'] || '16.4' prepare_react_native_project! @@ -936,7 +905,7 @@ index f740040e7be..a2af7b4a5de 100644 end end diff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json -index b51159163bf..e6346b6d456 100644 +index b51159163bf..3e151175775 100644 --- a/templates/expo-template-bare-minimum/package.json +++ b/templates/expo-template-bare-minimum/package.json @@ -2,7 +2,7 @@ @@ -944,11 +913,11 @@ index b51159163bf..e6346b6d456 100644 "description": "This bare project template includes a minimal setup for using unimodules with React Native.", "license": "0BSD", - "version": "52.0.79", -+ "version": "55.0.14", ++ "version": "56.0.13", "main": "index.js", "scripts": { "start": "expo start --dev-client", -@@ -11,12 +11,9 @@ +@@ -11,12 +11,14 @@ "web": "expo start --web" }, "dependencies": { @@ -956,12 +925,16 @@ index b51159163bf..e6346b6d456 100644 - "expo-status-bar": "~2.0.1", - "react": "18.3.1", - "react-native": "0.76.9" -- }, ++ "expo": "~56.0.0-preview.13", ++ "expo-status-bar": "~56.0.4", ++ "react": "19.2.3", ++ "react-native": "0.85.3" + }, - "devDependencies": { - "@babel/core": "^7.20.0" -+ "expo": "~55.0.2", -+ "expo-status-bar": "~55.0.4", -+ "react": "19.2.3", -+ "react-native": "0.85.0" ++ "publishConfig": { ++ "executableFiles": [ ++ "./android/gradlew" ++ ] } } diff --git a/docs/public/static/diffs/template-bare-minimum/raw/53..54.diff b/docs/public/static/diffs/template-bare-minimum/raw/53..54.diff index 00d08170b8db76..2f5dd7f5fee55d 100644 --- a/docs/public/static/diffs/template-bare-minimum/raw/53..54.diff +++ b/docs/public/static/diffs/template-bare-minimum/raw/53..54.diff @@ -245,37 +245,6 @@ index 1b7513bd31b..8a390c764af 100644 ); name = "Bundle React Native code and images"; outputPaths = ( -diff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json -new file mode 100644 -index 00000000000..255637e0fdb ---- /dev/null -+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json -@@ -0,0 +1,21 @@ -+{ -+ "images" : [ -+ { -+ "filename" : "SplashScreenLegacy.png", -+ "idiom" : "universal", -+ "scale" : "1x" -+ }, -+ { -+ "idiom" : "universal", -+ "scale" : "2x" -+ }, -+ { -+ "idiom" : "universal", -+ "scale" : "3x" -+ } -+ ], -+ "info" : { -+ "author" : "xcode", -+ "version" : 1 -+ } -+} -diff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png -new file mode 100644 -index 00000000000..bbf8e9e6016 -Binary files /dev/null and b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png differ diff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard index 447b4188985..58d21796e1d 100644 --- a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard @@ -373,7 +342,7 @@ index 29503ff0cc1..9743535e7ad 100644 end end diff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json -index 661f6b6addf..0d90c6e603d 100644 +index 661f6b6addf..a1a026a23e1 100644 --- a/templates/expo-template-bare-minimum/package.json +++ b/templates/expo-template-bare-minimum/package.json @@ -2,7 +2,7 @@ @@ -381,7 +350,7 @@ index 661f6b6addf..0d90c6e603d 100644 "description": "This bare project template includes a minimal setup for using unimodules with React Native.", "license": "0BSD", - "version": "53.0.42", -+ "version": "54.0.50", ++ "version": "54.0.51", "main": "index.js", "scripts": { "start": "expo start --dev-client", @@ -396,7 +365,7 @@ index 661f6b6addf..0d90c6e603d 100644 - }, - "devDependencies": { - "@babel/core": "^7.20.0" -+ "expo": "~54.0.33", ++ "expo": "~54.0.34", + "expo-status-bar": "~3.0.9", + "react": "19.1.0", + "react-native": "0.81.5" diff --git a/docs/public/static/diffs/template-bare-minimum/raw/53..55.diff b/docs/public/static/diffs/template-bare-minimum/raw/53..55.diff index ba0286261e3826..7b8b51a6629e5b 100644 --- a/docs/public/static/diffs/template-bare-minimum/raw/53..55.diff +++ b/docs/public/static/diffs/template-bare-minimum/raw/53..55.diff @@ -323,37 +323,6 @@ index a7887e1e5b1..9670a1ff07e 100644 #if os(iOS) || os(tvOS) window = UIWindow(frame: UIScreen.main.bounds) -diff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json -new file mode 100644 -index 00000000000..255637e0fdb ---- /dev/null -+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json -@@ -0,0 +1,21 @@ -+{ -+ "images" : [ -+ { -+ "filename" : "SplashScreenLegacy.png", -+ "idiom" : "universal", -+ "scale" : "1x" -+ }, -+ { -+ "idiom" : "universal", -+ "scale" : "2x" -+ }, -+ { -+ "idiom" : "universal", -+ "scale" : "3x" -+ } -+ ], -+ "info" : { -+ "author" : "xcode", -+ "version" : 1 -+ } -+} -diff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png -new file mode 100644 -index 00000000000..bbf8e9e6016 -Binary files /dev/null and b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png differ diff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard index 447b4188985..58d21796e1d 100644 --- a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard @@ -451,7 +420,7 @@ index 29503ff0cc1..03484edf156 100644 end end diff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json -index 661f6b6addf..7d81baed15d 100644 +index 661f6b6addf..253f825cea9 100644 --- a/templates/expo-template-bare-minimum/package.json +++ b/templates/expo-template-bare-minimum/package.json @@ -2,7 +2,7 @@ @@ -459,7 +428,7 @@ index 661f6b6addf..7d81baed15d 100644 "description": "This bare project template includes a minimal setup for using unimodules with React Native.", "license": "0BSD", - "version": "53.0.42", -+ "version": "55.0.26", ++ "version": "55.0.37", "main": "index.js", "scripts": { "start": "expo start --dev-client", @@ -474,9 +443,9 @@ index 661f6b6addf..7d81baed15d 100644 - }, - "devDependencies": { - "@babel/core": "^7.20.0" -+ "expo": "~55.0.14", -+ "expo-status-bar": "~55.0.5", ++ "expo": "~55.0.25", ++ "expo-status-bar": "~55.0.6", + "react": "19.2.0", -+ "react-native": "0.83.4" ++ "react-native": "0.83.6" } } diff --git a/docs/public/static/diffs/template-bare-minimum/raw/53..56.diff b/docs/public/static/diffs/template-bare-minimum/raw/53..56.diff new file mode 100644 index 00000000000000..e844601be2eb4d --- /dev/null +++ b/docs/public/static/diffs/template-bare-minimum/raw/53..56.diff @@ -0,0 +1,540 @@ +diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle +index 34b96c71c33..fc185e53bc3 100644 +--- a/templates/expo-template-bare-minimum/android/app/build.gradle ++++ b/templates/expo-template-bare-minimum/android/app/build.gradle +@@ -11,7 +11,7 @@ def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath() + react { + entryFile = file(["node", "-e", "require('expo/scripts/resolveAppEntry')", projectRoot, "android", "absolute"].execute(null, rootDir).text.trim()) + reactNativeDir = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile() +- hermesCommand = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/sdks/hermesc/%OS-BIN%/hermesc" ++ hermesCommand = new File(["node", "--print", "require.resolve('hermes-compiler/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/hermesc/%OS-BIN%/hermesc" + codegenDir = new File(["node", "--print", "require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile() + + enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean() +@@ -64,9 +64,9 @@ react { + } + + /** +- * Set this to true to Run Proguard on Release builds to minify the Java bytecode. ++ * Set this to true in release builds to optimize the app using [R8](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization). + */ +-def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInReleaseBuilds') ?: false).toBoolean() ++def enableMinifyInReleaseBuilds = (findProperty('android.enableMinifyInReleaseBuilds') ?: false).toBoolean() + + /** + * The preferred build flavor of JavaScriptCore (JSC) +@@ -94,6 +94,8 @@ android { + targetSdkVersion rootProject.ext.targetSdkVersion + versionCode 1 + versionName "1.0" ++ ++ buildConfigField "String", "REACT_NATIVE_RELEASE_LEVEL", "\"${findProperty('reactNativeReleaseLevel') ?: 'stable'}\"" + } + signingConfigs { + debug { +@@ -111,15 +113,18 @@ android { + // Caution! In production, you need to generate your own keystore file. + // see https://reactnative.dev/docs/signed-apk-android. + signingConfig signingConfigs.debug +- shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false) +- minifyEnabled enableProguardInReleaseBuilds ++ def enableShrinkResources = findProperty('android.enableShrinkResourcesInReleaseBuilds') ?: 'false' ++ shrinkResources enableShrinkResources.toBoolean() ++ minifyEnabled enableMinifyInReleaseBuilds + proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" +- crunchPngs (findProperty('android.enablePngCrunchInReleaseBuilds')?.toBoolean() ?: true) ++ def enablePngCrunchInRelease = findProperty('android.enablePngCrunchInReleaseBuilds') ?: 'true' ++ crunchPngs enablePngCrunchInRelease.toBoolean() + } + } + packagingOptions { + jniLibs { +- useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false) ++ def enableLegacyPackaging = findProperty('expo.useLegacyPackaging') ?: 'false' ++ useLegacyPackaging enableLegacyPackaging.toBoolean() + } + } + androidResources { +diff --git a/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml +new file mode 100644 +index 00000000000..3ec2507bab7 +--- /dev/null ++++ b/templates/expo-template-bare-minimum/android/app/src/debugOptimized/AndroidManifest.xml +@@ -0,0 +1,7 @@ ++ ++ ++ ++ ++ ++ +diff --git a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml +index 150248b6b3c..14bdba124ab 100644 +--- a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml ++++ b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml +@@ -1,12 +1,13 @@ +- ++ + + + + + + +- +- ++ ++ + + + +@@ -19,7 +20,7 @@ + + + +- ++ + + + +diff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt +index 267e20c30e5..cbb5ddb85d0 100644 +--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt ++++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt +@@ -5,48 +5,36 @@ import android.content.res.Configuration + + import com.facebook.react.PackageList + import com.facebook.react.ReactApplication +-import com.facebook.react.ReactNativeHost ++import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative + import com.facebook.react.ReactPackage + import com.facebook.react.ReactHost +-import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load +-import com.facebook.react.defaults.DefaultReactNativeHost +-import com.facebook.react.soloader.OpenSourceMergedSoMapping +-import com.facebook.soloader.SoLoader ++import com.facebook.react.common.ReleaseLevel ++import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint + + import expo.modules.ApplicationLifecycleDispatcher +-import expo.modules.ReactNativeHostWrapper ++import expo.modules.ExpoReactHostFactory + + class MainApplication : Application(), ReactApplication { + +- override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper( +- this, +- object : DefaultReactNativeHost(this) { +- override fun getPackages(): List { +- val packages = PackageList(this).packages +- // Packages that cannot be autolinked yet can be added manually here, for example: +- // packages.add(MyReactNativePackage()) +- return packages +- } +- +- override fun getJSMainModuleName(): String = ".expo/.virtual-metro-entry" +- +- 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() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost) ++ override val reactHost: ReactHost by lazy { ++ ExpoReactHostFactory.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, OpenSourceMergedSoMapping) +- if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { +- // If you opted-in for the New Architecture, we load the native entry point for this app. +- load() ++ DefaultNewArchitectureEntryPoint.releaseLevel = try { ++ ReleaseLevel.valueOf(BuildConfig.REACT_NATIVE_RELEASE_LEVEL.uppercase()) ++ } catch (e: IllegalArgumentException) { ++ ReleaseLevel.STABLE + } ++ loadReactNative(this) + ApplicationLifecycleDispatcher.onApplicationCreate(this) + } + +diff --git a/templates/expo-template-bare-minimum/android/build.gradle b/templates/expo-template-bare-minimum/android/build.gradle +index fa7b11e23c1..0554dd156c1 100644 +--- a/templates/expo-template-bare-minimum/android/build.gradle ++++ b/templates/expo-template-bare-minimum/android/build.gradle +@@ -12,21 +12,8 @@ buildscript { + } + } + +-def reactNativeAndroidDir = new File( +- providers.exec { +- workingDir(rootDir) +- commandLine("node", "--print", "require.resolve('react-native/package.json')") +- }.standardOutput.asText.get().trim(), +- "../android" +-) +- + allprojects { + repositories { +- maven { +- // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm +- url(reactNativeAndroidDir) +- } +- + google() + mavenCentral() + maven { url 'https://www.jitpack.io' } +diff --git a/templates/expo-template-bare-minimum/android/gitignore b/templates/expo-template-bare-minimum/android/gitignore +index 8a6be077181..1ea9b6464ec 100644 +--- a/templates/expo-template-bare-minimum/android/gitignore ++++ b/templates/expo-template-bare-minimum/android/gitignore +@@ -12,5 +12,8 @@ local.properties + *.hprof + .cxx/ + ++# generated inline modules ++app/src/main/java/inline/ ++ + # Bundle artifacts + *.jsbundle +diff --git a/templates/expo-template-bare-minimum/android/gradle.properties b/templates/expo-template-bare-minimum/android/gradle.properties +index 7531e9eb23c..97271b9456f 100644 +--- a/templates/expo-template-bare-minimum/android/gradle.properties ++++ b/templates/expo-template-bare-minimum/android/gradle.properties +@@ -15,7 +15,7 @@ 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 + # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +-# org.gradle.parallel=true ++org.gradle.parallel=true + + # AndroidX package structure to make it clearer which packages are bundled with the + # Android operating system, and which are packaged with your app's APK +@@ -41,6 +41,11 @@ newArchEnabled=true + # If set to false, you will be using JSC instead. + hermesEnabled=true + ++# Use this property to enable edge-to-edge display support. ++# This allows your app to draw behind system bars for an immersive UI. ++# Note: Only works with ReactActivity and should not be used with custom Activity. ++edgeToEdgeEnabled=true ++ + # Enable GIF support in React Native images (~200 B increase) + expo.gif.enabled=true + # Enable webp support in React Native images (~85 KB increase) +diff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar +index a4b76b9530d..61285a659d1 100644 +Binary files a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar and b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar differ +diff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties +index 37f853b1c84..37f78a6af83 100644 +--- a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties ++++ b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties +@@ -1,6 +1,6 @@ + distributionBase=GRADLE_USER_HOME + distributionPath=wrapper/dists +-distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip ++distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip + networkTimeout=10000 + validateDistributionUrl=true + zipStoreBase=GRADLE_USER_HOME +diff --git a/templates/expo-template-bare-minimum/android/gradlew b/templates/expo-template-bare-minimum/android/gradlew +index f3b75f3b0d4..adff685a034 100755 +--- a/templates/expo-template-bare-minimum/android/gradlew ++++ b/templates/expo-template-bare-minimum/android/gradlew +@@ -1,7 +1,7 @@ + #!/bin/sh + + # +-# Copyright © 2015-2021 the original authors. ++# Copyright © 2015 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. +@@ -114,7 +114,6 @@ case "$( uname )" in #( + NONSTOP* ) nonstop=true ;; + esac + +-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + + # Determine the Java command to use to start the JVM. +@@ -172,7 +171,6 @@ fi + # For Cygwin or MSYS, switch paths to Windows format before running java + if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) +- CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + +@@ -205,15 +203,14 @@ fi + DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + + # Collect all arguments for the java command: +-# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, ++# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, + # and any embedded shellness will be escaped. + # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be + # treated as '${Hostname}' itself on the command line. + + set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ +- -classpath "$CLASSPATH" \ +- org.gradle.wrapper.GradleWrapperMain \ ++ -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ + "$@" + + # Stop when "xargs" is not available. +diff --git a/templates/expo-template-bare-minimum/android/gradlew.bat b/templates/expo-template-bare-minimum/android/gradlew.bat +index 9b42019c791..39baf4d6846 100644 +--- a/templates/expo-template-bare-minimum/android/gradlew.bat ++++ b/templates/expo-template-bare-minimum/android/gradlew.bat +@@ -1,3 +1,8 @@ ++@REM Copyright (c) Meta Platforms, Inc. and affiliates. ++@REM ++@REM This source code is licensed under the MIT license found in the ++@REM LICENSE file in the root directory of this source tree. ++ + @rem + @rem Copyright 2015 the original author or authors. + @rem +@@ -70,11 +75,10 @@ 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 %* ++"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* + + :end + @rem End local scope for the variables with windows NT shell +diff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj +index 1b7513bd31b..39fa5afe55b 100644 +--- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj ++++ b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj +@@ -168,6 +168,8 @@ + files = ( + ); + inputPaths = ( ++ "$(SRCROOT)/.xcode.env", ++ "$(SRCROOT)/.xcode.env.local", + ); + name = "Bundle React Native code and images"; + outputPaths = ( +@@ -246,11 +248,12 @@ + "FB_SONARKIT_ENABLED=1", + ); + INFOPLIST_FILE = HelloWorld/Info.plist; +- IPHONEOS_DEPLOYMENT_TARGET = 15.1; ++ IPHONEOS_DEPLOYMENT_TARGET = 16.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); ++ MACOSX_DEPLOYMENT_TARGET = 13.4; + MARKETING_VERSION = 1.0; + OTHER_LDFLAGS = ( + "$(inherited)", +@@ -273,11 +276,12 @@ + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = 1; + INFOPLIST_FILE = HelloWorld/Info.plist; +- IPHONEOS_DEPLOYMENT_TARGET = 15.1; ++ IPHONEOS_DEPLOYMENT_TARGET = 16.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); ++ MACOSX_DEPLOYMENT_TARGET = 13.4; + MARKETING_VERSION = 1.0; + OTHER_LDFLAGS = ( + "$(inherited)", +@@ -339,7 +343,7 @@ + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; +- IPHONEOS_DEPLOYMENT_TARGET = 15.1; ++ IPHONEOS_DEPLOYMENT_TARGET = 16.4; + LD_RUNPATH_SEARCH_PATHS = ( + /usr/lib/swift, + "$(inherited)", +@@ -391,7 +395,7 @@ + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; +- IPHONEOS_DEPLOYMENT_TARGET = 15.1; ++ IPHONEOS_DEPLOYMENT_TARGET = 16.4; + LD_RUNPATH_SEARCH_PATHS = ( + /usr/lib/swift, + "$(inherited)", +diff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift +index a7887e1e5b1..9670a1ff07e 100644 +--- a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift ++++ b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift +@@ -1,9 +1,9 @@ +-import Expo ++internal import Expo + import React + import ReactAppDependencyProvider + +-@UIApplicationMain +-public class AppDelegate: ExpoAppDelegate { ++@main ++class AppDelegate: ExpoAppDelegate { + var window: UIWindow? + + var reactNativeDelegate: ExpoReactNativeFactoryDelegate? +@@ -19,7 +19,6 @@ public class AppDelegate: ExpoAppDelegate { + + reactNativeDelegate = delegate + reactNativeFactory = factory +- bindReactNativeFactory(factory) + + #if os(iOS) || os(tvOS) + window = UIWindow(frame: UIScreen.main.bounds) +diff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard +index 447b4188985..58d21796e1d 100644 +--- a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard ++++ b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard +@@ -1,11 +1,12 @@ + +- ++ + + + +- ++ + + ++ + + + +@@ -29,6 +30,7 @@ + + + ++ + + + +@@ -38,5 +40,8 @@ + + + ++ ++ ++ + + +diff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile +index 29503ff0cc1..c3158e3fb9b 100644 +--- a/templates/expo-template-bare-minimum/ios/Podfile ++++ b/templates/expo-template-bare-minimum/ios/Podfile +@@ -4,12 +4,20 @@ require File.join(File.dirname(`node --print "require.resolve('react-native/pack + require 'json' + podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {} + +-ENV['RCT_NEW_ARCH_ENABLED'] = '0' if podfile_properties['newArchEnabled'] == 'false' +-ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ++def ccache_enabled?(podfile_properties) ++ # Environment variable takes precedence ++ return ENV['USE_CCACHE'] == '1' if ENV['USE_CCACHE'] + +-platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1' +-install! 'cocoapods', +- :deterministic_uuids => false ++ # Fall back to Podfile properties ++ podfile_properties['apple.ccacheEnabled'] == 'true' ++end ++ ++ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ++ENV['RCT_USE_RN_DEP'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1' ++ENV['RCT_USE_PREBUILT_RNCORE'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1' ++ENV['RCT_HERMES_V1_ENABLED'] ||= '1' if podfile_properties['expo.useHermesV1'] == 'true' ++ENV['EXPO_USE_PRECOMPILED_MODULES'] ||= '1' if podfile_properties['EXPO_USE_PRECOMPILED_MODULES'] != 'false' ++platform :ios, podfile_properties['ios.deploymentTarget'] || '16.4' + + prepare_react_native_project! + +@@ -20,7 +28,10 @@ target 'HelloWorld' do + config_command = ['node', '-e', "process.argv=['', '', 'config'];require('@react-native-community/cli').run()"]; + else + config_command = [ +- 'npx', ++ 'node', ++ '--no-warnings', ++ '--eval', ++ 'require(\'expo/bin/autolinking\')', + 'expo-modules-autolinking', + 'react-native-config', + '--json', +@@ -47,18 +58,7 @@ target 'HelloWorld' do + installer, + config[:reactNativePath], + :mac_catalyst_enabled => false, +- :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true', ++ :ccache_enabled => ccache_enabled?(podfile_properties), + ) +- +- # This is necessary for Xcode 14, because it signs resource bundles by default +- # when building for devices. +- installer.target_installation_results.pod_target_installation_results +- .each do |pod_name, target_installation_result| +- target_installation_result.resource_bundle_targets.each do |resource_bundle_target| +- resource_bundle_target.build_configurations.each do |config| +- config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO' +- end +- end +- end + end + end +diff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json +index 661f6b6addf..3e151175775 100644 +--- a/templates/expo-template-bare-minimum/package.json ++++ b/templates/expo-template-bare-minimum/package.json +@@ -2,7 +2,7 @@ + "name": "expo-template-bare-minimum", + "description": "This bare project template includes a minimal setup for using unimodules with React Native.", + "license": "0BSD", +- "version": "53.0.42", ++ "version": "56.0.13", + "main": "index.js", + "scripts": { + "start": "expo start --dev-client", +@@ -11,12 +11,14 @@ + "web": "expo start --web" + }, + "dependencies": { +- "expo": "~53.0.27", +- "expo-status-bar": "~2.2.3", +- "react": "19.0.0", +- "react-native": "0.79.6" ++ "expo": "~56.0.0-preview.13", ++ "expo-status-bar": "~56.0.4", ++ "react": "19.2.3", ++ "react-native": "0.85.3" + }, +- "devDependencies": { +- "@babel/core": "^7.20.0" ++ "publishConfig": { ++ "executableFiles": [ ++ "./android/gradlew" ++ ] + } + } diff --git a/docs/public/static/diffs/template-bare-minimum/raw/53..unversioned.diff b/docs/public/static/diffs/template-bare-minimum/raw/53..unversioned.diff index 026fc6c1e6d9ee..e844601be2eb4d 100644 --- a/docs/public/static/diffs/template-bare-minimum/raw/53..unversioned.diff +++ b/docs/public/static/diffs/template-bare-minimum/raw/53..unversioned.diff @@ -406,37 +406,6 @@ index a7887e1e5b1..9670a1ff07e 100644 #if os(iOS) || os(tvOS) window = UIWindow(frame: UIScreen.main.bounds) -diff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json -new file mode 100644 -index 00000000000..255637e0fdb ---- /dev/null -+++ b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/Contents.json -@@ -0,0 +1,21 @@ -+{ -+ "images" : [ -+ { -+ "filename" : "SplashScreenLegacy.png", -+ "idiom" : "universal", -+ "scale" : "1x" -+ }, -+ { -+ "idiom" : "universal", -+ "scale" : "2x" -+ }, -+ { -+ "idiom" : "universal", -+ "scale" : "3x" -+ } -+ ], -+ "info" : { -+ "author" : "xcode", -+ "version" : 1 -+ } -+} -diff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png -new file mode 100644 -index 00000000000..bbf8e9e6016 -Binary files /dev/null and b/templates/expo-template-bare-minimum/ios/HelloWorld/Images.xcassets/SplashScreenLegacy.imageset/SplashScreenLegacy.png differ diff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard b/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard index 447b4188985..58d21796e1d 100644 --- a/templates/expo-template-bare-minimum/ios/HelloWorld/SplashScreen.storyboard @@ -474,7 +443,7 @@ index 447b4188985..58d21796e1d 100644 diff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile -index 29503ff0cc1..a2af7b4a5de 100644 +index 29503ff0cc1..c3158e3fb9b 100644 --- a/templates/expo-template-bare-minimum/ios/Podfile +++ b/templates/expo-template-bare-minimum/ios/Podfile @@ -4,12 +4,20 @@ require File.join(File.dirname(`node --print "require.resolve('react-native/pack @@ -495,10 +464,10 @@ index 29503ff0cc1..a2af7b4a5de 100644 +end + +ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR'] -+ENV['RCT_USE_RN_DEP'] ||= '0' if podfile_properties['ios.buildReactNativeFromSource'] == 'true' -+ENV['RCT_USE_PREBUILT_RNCORE'] ||= '0' if podfile_properties['ios.buildReactNativeFromSource'] == 'true' ++ENV['RCT_USE_RN_DEP'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1' ++ENV['RCT_USE_PREBUILT_RNCORE'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1' +ENV['RCT_HERMES_V1_ENABLED'] ||= '1' if podfile_properties['expo.useHermesV1'] == 'true' -+ENV['EXPO_USE_PRECOMPILED_MODULES'] ||= '1' if podfile_properties['EXPO_USE_PRECOMPILED_MODULES'] == '1' ++ENV['EXPO_USE_PRECOMPILED_MODULES'] ||= '1' if podfile_properties['EXPO_USE_PRECOMPILED_MODULES'] != 'false' +platform :ios, podfile_properties['ios.deploymentTarget'] || '16.4' prepare_react_native_project! @@ -536,7 +505,7 @@ index 29503ff0cc1..a2af7b4a5de 100644 end end diff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json -index 661f6b6addf..e6346b6d456 100644 +index 661f6b6addf..3e151175775 100644 --- a/templates/expo-template-bare-minimum/package.json +++ b/templates/expo-template-bare-minimum/package.json @@ -2,7 +2,7 @@ @@ -544,11 +513,11 @@ index 661f6b6addf..e6346b6d456 100644 "description": "This bare project template includes a minimal setup for using unimodules with React Native.", "license": "0BSD", - "version": "53.0.42", -+ "version": "55.0.14", ++ "version": "56.0.13", "main": "index.js", "scripts": { "start": "expo start --dev-client", -@@ -11,12 +11,9 @@ +@@ -11,12 +11,14 @@ "web": "expo start --web" }, "dependencies": { @@ -556,12 +525,16 @@ index 661f6b6addf..e6346b6d456 100644 - "expo-status-bar": "~2.2.3", - "react": "19.0.0", - "react-native": "0.79.6" -- }, ++ "expo": "~56.0.0-preview.13", ++ "expo-status-bar": "~56.0.4", ++ "react": "19.2.3", ++ "react-native": "0.85.3" + }, - "devDependencies": { - "@babel/core": "^7.20.0" -+ "expo": "~55.0.2", -+ "expo-status-bar": "~55.0.4", -+ "react": "19.2.3", -+ "react-native": "0.85.0" ++ "publishConfig": { ++ "executableFiles": [ ++ "./android/gradlew" ++ ] } } diff --git a/docs/public/static/diffs/template-bare-minimum/raw/54..55.diff b/docs/public/static/diffs/template-bare-minimum/raw/54..55.diff index e1175a511d3bec..5b4dcc85cb5a73 100644 --- a/docs/public/static/diffs/template-bare-minimum/raw/54..55.diff +++ b/docs/public/static/diffs/template-bare-minimum/raw/54..55.diff @@ -172,15 +172,15 @@ index 9743535e7ad..03484edf156 100644 prepare_react_native_project! diff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json -index 0d90c6e603d..7d81baed15d 100644 +index a1a026a23e1..253f825cea9 100644 --- a/templates/expo-template-bare-minimum/package.json +++ b/templates/expo-template-bare-minimum/package.json @@ -2,7 +2,7 @@ "name": "expo-template-bare-minimum", "description": "This bare project template includes a minimal setup for using unimodules with React Native.", "license": "0BSD", -- "version": "54.0.50", -+ "version": "55.0.26", +- "version": "54.0.51", ++ "version": "55.0.37", "main": "index.js", "scripts": { "start": "expo start --dev-client", @@ -188,13 +188,13 @@ index 0d90c6e603d..7d81baed15d 100644 "web": "expo start --web" }, "dependencies": { -- "expo": "~54.0.33", +- "expo": "~54.0.34", - "expo-status-bar": "~3.0.9", - "react": "19.1.0", - "react-native": "0.81.5" -+ "expo": "~55.0.14", -+ "expo-status-bar": "~55.0.5", ++ "expo": "~55.0.25", ++ "expo-status-bar": "~55.0.6", + "react": "19.2.0", -+ "react-native": "0.83.4" ++ "react-native": "0.83.6" } } diff --git a/docs/public/static/diffs/template-bare-minimum/raw/54..56.diff b/docs/public/static/diffs/template-bare-minimum/raw/54..56.diff new file mode 100644 index 00000000000000..1eb1ef8b9c7b36 --- /dev/null +++ b/docs/public/static/diffs/template-bare-minimum/raw/54..56.diff @@ -0,0 +1,329 @@ +diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle +index 3f1c571b679..fc185e53bc3 100644 +--- a/templates/expo-template-bare-minimum/android/app/build.gradle ++++ b/templates/expo-template-bare-minimum/android/app/build.gradle +@@ -11,7 +11,7 @@ def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath() + react { + entryFile = file(["node", "-e", "require('expo/scripts/resolveAppEntry')", projectRoot, "android", "absolute"].execute(null, rootDir).text.trim()) + reactNativeDir = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile() +- hermesCommand = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/sdks/hermesc/%OS-BIN%/hermesc" ++ hermesCommand = new File(["node", "--print", "require.resolve('hermes-compiler/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/hermesc/%OS-BIN%/hermesc" + codegenDir = new File(["node", "--print", "require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile() + + enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean() +diff --git a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml +index 150248b6b3c..14bdba124ab 100644 +--- a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml ++++ b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml +@@ -1,12 +1,13 @@ +- ++ + + + + + + +- +- ++ ++ + + + +@@ -19,7 +20,7 @@ + + + +- ++ + + + +diff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt +index 5abad96fa00..cbb5ddb85d0 100644 +--- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt ++++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.kt +@@ -6,37 +6,26 @@ import android.content.res.Configuration + import com.facebook.react.PackageList + import com.facebook.react.ReactApplication + import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative +-import com.facebook.react.ReactNativeHost + import com.facebook.react.ReactPackage + import com.facebook.react.ReactHost + import com.facebook.react.common.ReleaseLevel + import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint +-import com.facebook.react.defaults.DefaultReactNativeHost + + import expo.modules.ApplicationLifecycleDispatcher +-import expo.modules.ReactNativeHostWrapper ++import expo.modules.ExpoReactHostFactory + + class MainApplication : Application(), ReactApplication { + +- override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper( +- this, +- object : DefaultReactNativeHost(this) { +- override fun getPackages(): List = +- PackageList(this).packages.apply { +- // Packages that cannot be autolinked yet can be added manually here, for example: +- // add(MyReactNativePackage()) +- } +- +- override fun getJSMainModuleName(): String = ".expo/.virtual-metro-entry" +- +- override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG +- +- override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED +- } +- ) +- +- override val reactHost: ReactHost +- get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost) ++ override val reactHost: ReactHost by lazy { ++ ExpoReactHostFactory.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() +diff --git a/templates/expo-template-bare-minimum/android/gitignore b/templates/expo-template-bare-minimum/android/gitignore +index 8a6be077181..1ea9b6464ec 100644 +--- a/templates/expo-template-bare-minimum/android/gitignore ++++ b/templates/expo-template-bare-minimum/android/gitignore +@@ -12,5 +12,8 @@ local.properties + *.hprof + .cxx/ + ++# generated inline modules ++app/src/main/java/inline/ ++ + # Bundle artifacts + *.jsbundle +diff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar +index 1b33c55baab..61285a659d1 100644 +Binary files a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar and b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar differ +diff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties +index d4081da476b..37f78a6af83 100644 +--- a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties ++++ b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties +@@ -1,6 +1,6 @@ + distributionBase=GRADLE_USER_HOME + distributionPath=wrapper/dists +-distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip ++distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip + networkTimeout=10000 + validateDistributionUrl=true + zipStoreBase=GRADLE_USER_HOME +diff --git a/templates/expo-template-bare-minimum/android/gradlew b/templates/expo-template-bare-minimum/android/gradlew +index 7f94d3d4777..adff685a034 100755 +--- a/templates/expo-template-bare-minimum/android/gradlew ++++ b/templates/expo-template-bare-minimum/android/gradlew +@@ -1,7 +1,7 @@ + #!/bin/sh + + # +-# Copyright © 2015-2021 the original authors. ++# Copyright © 2015 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. +@@ -114,7 +114,6 @@ case "$( uname )" in #( + NONSTOP* ) nonstop=true ;; + esac + +-CLASSPATH="\\\"\\\"" + + + # Determine the Java command to use to start the JVM. +@@ -172,7 +171,6 @@ fi + # For Cygwin or MSYS, switch paths to Windows format before running java + if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) +- CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + +@@ -205,14 +203,13 @@ fi + DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + + # Collect all arguments for the java command: +-# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, ++# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, + # and any embedded shellness will be escaped. + # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be + # treated as '${Hostname}' itself on the command line. + + set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ +- -classpath "$CLASSPATH" \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ + "$@" + +diff --git a/templates/expo-template-bare-minimum/android/gradlew.bat b/templates/expo-template-bare-minimum/android/gradlew.bat +index 5eed7ee8452..39baf4d6846 100644 +--- a/templates/expo-template-bare-minimum/android/gradlew.bat ++++ b/templates/expo-template-bare-minimum/android/gradlew.bat +@@ -1,3 +1,8 @@ ++@REM Copyright (c) Meta Platforms, Inc. and affiliates. ++@REM ++@REM This source code is licensed under the MIT license found in the ++@REM LICENSE file in the root directory of this source tree. ++ + @rem + @rem Copyright 2015 the original author or authors. + @rem +@@ -70,11 +75,10 @@ goto fail + :execute + @rem Setup the command line + +-set CLASSPATH= + + + @rem Execute Gradle +-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* ++"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* + + :end + @rem End local scope for the variables with windows NT shell +diff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj +index 8a390c764af..39fa5afe55b 100644 +--- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj ++++ b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj +@@ -248,11 +248,12 @@ + "FB_SONARKIT_ENABLED=1", + ); + INFOPLIST_FILE = HelloWorld/Info.plist; +- IPHONEOS_DEPLOYMENT_TARGET = 15.1; ++ IPHONEOS_DEPLOYMENT_TARGET = 16.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); ++ MACOSX_DEPLOYMENT_TARGET = 13.4; + MARKETING_VERSION = 1.0; + OTHER_LDFLAGS = ( + "$(inherited)", +@@ -275,11 +276,12 @@ + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = 1; + INFOPLIST_FILE = HelloWorld/Info.plist; +- IPHONEOS_DEPLOYMENT_TARGET = 15.1; ++ IPHONEOS_DEPLOYMENT_TARGET = 16.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); ++ MACOSX_DEPLOYMENT_TARGET = 13.4; + MARKETING_VERSION = 1.0; + OTHER_LDFLAGS = ( + "$(inherited)", +@@ -341,7 +343,7 @@ + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; +- IPHONEOS_DEPLOYMENT_TARGET = 15.1; ++ IPHONEOS_DEPLOYMENT_TARGET = 16.4; + LD_RUNPATH_SEARCH_PATHS = ( + /usr/lib/swift, + "$(inherited)", +@@ -393,7 +395,7 @@ + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; +- IPHONEOS_DEPLOYMENT_TARGET = 15.1; ++ IPHONEOS_DEPLOYMENT_TARGET = 16.4; + LD_RUNPATH_SEARCH_PATHS = ( + /usr/lib/swift, + "$(inherited)", +diff --git a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift +index a7887e1e5b1..9670a1ff07e 100644 +--- a/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift ++++ b/templates/expo-template-bare-minimum/ios/HelloWorld/AppDelegate.swift +@@ -1,9 +1,9 @@ +-import Expo ++internal import Expo + import React + import ReactAppDependencyProvider + +-@UIApplicationMain +-public class AppDelegate: ExpoAppDelegate { ++@main ++class AppDelegate: ExpoAppDelegate { + var window: UIWindow? + + var reactNativeDelegate: ExpoReactNativeFactoryDelegate? +@@ -19,7 +19,6 @@ public class AppDelegate: ExpoAppDelegate { + + reactNativeDelegate = delegate + reactNativeFactory = factory +- bindReactNativeFactory(factory) + + #if os(iOS) || os(tvOS) + window = UIWindow(frame: UIScreen.main.bounds) +diff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile +index 9743535e7ad..c3158e3fb9b 100644 +--- a/templates/expo-template-bare-minimum/ios/Podfile ++++ b/templates/expo-template-bare-minimum/ios/Podfile +@@ -7,16 +7,17 @@ podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties + def ccache_enabled?(podfile_properties) + # Environment variable takes precedence + return ENV['USE_CCACHE'] == '1' if ENV['USE_CCACHE'] +- ++ + # Fall back to Podfile properties + podfile_properties['apple.ccacheEnabled'] == 'true' + end + +-ENV['RCT_NEW_ARCH_ENABLED'] ||= '0' if podfile_properties['newArchEnabled'] == 'false' + ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR'] +-ENV['RCT_USE_RN_DEP'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' && podfile_properties['newArchEnabled'] != 'false' +-ENV['RCT_USE_PREBUILT_RNCORE'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' && podfile_properties['newArchEnabled'] != 'false' +-platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1' ++ENV['RCT_USE_RN_DEP'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1' ++ENV['RCT_USE_PREBUILT_RNCORE'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1' ++ENV['RCT_HERMES_V1_ENABLED'] ||= '1' if podfile_properties['expo.useHermesV1'] == 'true' ++ENV['EXPO_USE_PRECOMPILED_MODULES'] ||= '1' if podfile_properties['EXPO_USE_PRECOMPILED_MODULES'] != 'false' ++platform :ios, podfile_properties['ios.deploymentTarget'] || '16.4' + + prepare_react_native_project! + +diff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json +index a1a026a23e1..3e151175775 100644 +--- a/templates/expo-template-bare-minimum/package.json ++++ b/templates/expo-template-bare-minimum/package.json +@@ -2,7 +2,7 @@ + "name": "expo-template-bare-minimum", + "description": "This bare project template includes a minimal setup for using unimodules with React Native.", + "license": "0BSD", +- "version": "54.0.51", ++ "version": "56.0.13", + "main": "index.js", + "scripts": { + "start": "expo start --dev-client", +@@ -11,9 +11,14 @@ + "web": "expo start --web" + }, + "dependencies": { +- "expo": "~54.0.34", +- "expo-status-bar": "~3.0.9", +- "react": "19.1.0", +- "react-native": "0.81.5" ++ "expo": "~56.0.0-preview.13", ++ "expo-status-bar": "~56.0.4", ++ "react": "19.2.3", ++ "react-native": "0.85.3" ++ }, ++ "publishConfig": { ++ "executableFiles": [ ++ "./android/gradlew" ++ ] + } + } diff --git a/docs/public/static/diffs/template-bare-minimum/raw/54..unversioned.diff b/docs/public/static/diffs/template-bare-minimum/raw/54..unversioned.diff index 5f5670269563cb..1eb1ef8b9c7b36 100644 --- a/docs/public/static/diffs/template-bare-minimum/raw/54..unversioned.diff +++ b/docs/public/static/diffs/template-bare-minimum/raw/54..unversioned.diff @@ -269,7 +269,7 @@ index a7887e1e5b1..9670a1ff07e 100644 #if os(iOS) || os(tvOS) window = UIWindow(frame: UIScreen.main.bounds) diff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile -index 9743535e7ad..a2af7b4a5de 100644 +index 9743535e7ad..c3158e3fb9b 100644 --- a/templates/expo-template-bare-minimum/ios/Podfile +++ b/templates/expo-template-bare-minimum/ios/Podfile @@ -7,16 +7,17 @@ podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties @@ -287,38 +287,43 @@ index 9743535e7ad..a2af7b4a5de 100644 -ENV['RCT_USE_RN_DEP'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' && podfile_properties['newArchEnabled'] != 'false' -ENV['RCT_USE_PREBUILT_RNCORE'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' && podfile_properties['newArchEnabled'] != 'false' -platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1' -+ENV['RCT_USE_RN_DEP'] ||= '0' if podfile_properties['ios.buildReactNativeFromSource'] == 'true' -+ENV['RCT_USE_PREBUILT_RNCORE'] ||= '0' if podfile_properties['ios.buildReactNativeFromSource'] == 'true' ++ENV['RCT_USE_RN_DEP'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1' ++ENV['RCT_USE_PREBUILT_RNCORE'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1' +ENV['RCT_HERMES_V1_ENABLED'] ||= '1' if podfile_properties['expo.useHermesV1'] == 'true' -+ENV['EXPO_USE_PRECOMPILED_MODULES'] ||= '1' if podfile_properties['EXPO_USE_PRECOMPILED_MODULES'] == '1' ++ENV['EXPO_USE_PRECOMPILED_MODULES'] ||= '1' if podfile_properties['EXPO_USE_PRECOMPILED_MODULES'] != 'false' +platform :ios, podfile_properties['ios.deploymentTarget'] || '16.4' prepare_react_native_project! diff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json -index 0d90c6e603d..e6346b6d456 100644 +index a1a026a23e1..3e151175775 100644 --- a/templates/expo-template-bare-minimum/package.json +++ b/templates/expo-template-bare-minimum/package.json @@ -2,7 +2,7 @@ "name": "expo-template-bare-minimum", "description": "This bare project template includes a minimal setup for using unimodules with React Native.", "license": "0BSD", -- "version": "54.0.50", -+ "version": "55.0.14", +- "version": "54.0.51", ++ "version": "56.0.13", "main": "index.js", "scripts": { "start": "expo start --dev-client", -@@ -11,9 +11,9 @@ +@@ -11,9 +11,14 @@ "web": "expo start --web" }, "dependencies": { -- "expo": "~54.0.33", +- "expo": "~54.0.34", - "expo-status-bar": "~3.0.9", - "react": "19.1.0", - "react-native": "0.81.5" -+ "expo": "~55.0.2", -+ "expo-status-bar": "~55.0.4", ++ "expo": "~56.0.0-preview.13", ++ "expo-status-bar": "~56.0.4", + "react": "19.2.3", -+ "react-native": "0.85.0" ++ "react-native": "0.85.3" ++ }, ++ "publishConfig": { ++ "executableFiles": [ ++ "./android/gradlew" ++ ] } } diff --git a/docs/public/static/diffs/template-bare-minimum/raw/55..56.diff b/docs/public/static/diffs/template-bare-minimum/raw/55..56.diff new file mode 100644 index 00000000000000..db6d9c839f2e88 --- /dev/null +++ b/docs/public/static/diffs/template-bare-minimum/raw/55..56.diff @@ -0,0 +1,191 @@ +diff --git a/templates/expo-template-bare-minimum/android/gitignore b/templates/expo-template-bare-minimum/android/gitignore +index 8a6be077181..1ea9b6464ec 100644 +--- a/templates/expo-template-bare-minimum/android/gitignore ++++ b/templates/expo-template-bare-minimum/android/gitignore +@@ -12,5 +12,8 @@ local.properties + *.hprof + .cxx/ + ++# generated inline modules ++app/src/main/java/inline/ ++ + # Bundle artifacts + *.jsbundle +diff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar +index 8bdaf60c75a..61285a659d1 100644 +Binary files a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar and b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.jar differ +diff --git a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties +index 2a84e188b85..37f78a6af83 100644 +--- a/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties ++++ b/templates/expo-template-bare-minimum/android/gradle/wrapper/gradle-wrapper.properties +@@ -1,6 +1,6 @@ + distributionBase=GRADLE_USER_HOME + distributionPath=wrapper/dists +-distributionUrl=https\://services.gradle.org/distributions/gradle-9.0.0-bin.zip ++distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip + networkTimeout=10000 + validateDistributionUrl=true + zipStoreBase=GRADLE_USER_HOME +diff --git a/templates/expo-template-bare-minimum/android/gradlew b/templates/expo-template-bare-minimum/android/gradlew +index bbb00327904..adff685a034 100755 +--- a/templates/expo-template-bare-minimum/android/gradlew ++++ b/templates/expo-template-bare-minimum/android/gradlew +@@ -114,7 +114,6 @@ case "$( uname )" in #( + NONSTOP* ) nonstop=true ;; + esac + +-CLASSPATH="\\\"\\\"" + + + # Determine the Java command to use to start the JVM. +@@ -172,7 +171,6 @@ fi + # For Cygwin or MSYS, switch paths to Windows format before running java + if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) +- CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + +@@ -205,14 +203,13 @@ fi + DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + + # Collect all arguments for the java command: +-# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, ++# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, + # and any embedded shellness will be escaped. + # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be + # treated as '${Hostname}' itself on the command line. + + set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ +- -classpath "$CLASSPATH" \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ + "$@" + +diff --git a/templates/expo-template-bare-minimum/android/gradlew.bat b/templates/expo-template-bare-minimum/android/gradlew.bat +index 5eed7ee8452..39baf4d6846 100644 +--- a/templates/expo-template-bare-minimum/android/gradlew.bat ++++ b/templates/expo-template-bare-minimum/android/gradlew.bat +@@ -1,3 +1,8 @@ ++@REM Copyright (c) Meta Platforms, Inc. and affiliates. ++@REM ++@REM This source code is licensed under the MIT license found in the ++@REM LICENSE file in the root directory of this source tree. ++ + @rem + @rem Copyright 2015 the original author or authors. + @rem +@@ -70,11 +75,10 @@ goto fail + :execute + @rem Setup the command line + +-set CLASSPATH= + + + @rem Execute Gradle +-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* ++"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* + + :end + @rem End local scope for the variables with windows NT shell +diff --git a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj +index 8a390c764af..39fa5afe55b 100644 +--- a/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj ++++ b/templates/expo-template-bare-minimum/ios/HelloWorld.xcodeproj/project.pbxproj +@@ -248,11 +248,12 @@ + "FB_SONARKIT_ENABLED=1", + ); + INFOPLIST_FILE = HelloWorld/Info.plist; +- IPHONEOS_DEPLOYMENT_TARGET = 15.1; ++ IPHONEOS_DEPLOYMENT_TARGET = 16.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); ++ MACOSX_DEPLOYMENT_TARGET = 13.4; + MARKETING_VERSION = 1.0; + OTHER_LDFLAGS = ( + "$(inherited)", +@@ -275,11 +276,12 @@ + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = 1; + INFOPLIST_FILE = HelloWorld/Info.plist; +- IPHONEOS_DEPLOYMENT_TARGET = 15.1; ++ IPHONEOS_DEPLOYMENT_TARGET = 16.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); ++ MACOSX_DEPLOYMENT_TARGET = 13.4; + MARKETING_VERSION = 1.0; + OTHER_LDFLAGS = ( + "$(inherited)", +@@ -341,7 +343,7 @@ + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; +- IPHONEOS_DEPLOYMENT_TARGET = 15.1; ++ IPHONEOS_DEPLOYMENT_TARGET = 16.4; + LD_RUNPATH_SEARCH_PATHS = ( + /usr/lib/swift, + "$(inherited)", +@@ -393,7 +395,7 @@ + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; +- IPHONEOS_DEPLOYMENT_TARGET = 15.1; ++ IPHONEOS_DEPLOYMENT_TARGET = 16.4; + LD_RUNPATH_SEARCH_PATHS = ( + /usr/lib/swift, + "$(inherited)", +diff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile +index 03484edf156..c3158e3fb9b 100644 +--- a/templates/expo-template-bare-minimum/ios/Podfile ++++ b/templates/expo-template-bare-minimum/ios/Podfile +@@ -13,10 +13,11 @@ def ccache_enabled?(podfile_properties) + end + + ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR'] +-ENV['RCT_USE_RN_DEP'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' +-ENV['RCT_USE_PREBUILT_RNCORE'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' ++ENV['RCT_USE_RN_DEP'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1' ++ENV['RCT_USE_PREBUILT_RNCORE'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1' + ENV['RCT_HERMES_V1_ENABLED'] ||= '1' if podfile_properties['expo.useHermesV1'] == 'true' +-platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1' ++ENV['EXPO_USE_PRECOMPILED_MODULES'] ||= '1' if podfile_properties['EXPO_USE_PRECOMPILED_MODULES'] != 'false' ++platform :ios, podfile_properties['ios.deploymentTarget'] || '16.4' + + prepare_react_native_project! + +diff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json +index 253f825cea9..3e151175775 100644 +--- a/templates/expo-template-bare-minimum/package.json ++++ b/templates/expo-template-bare-minimum/package.json +@@ -2,7 +2,7 @@ + "name": "expo-template-bare-minimum", + "description": "This bare project template includes a minimal setup for using unimodules with React Native.", + "license": "0BSD", +- "version": "55.0.37", ++ "version": "56.0.13", + "main": "index.js", + "scripts": { + "start": "expo start --dev-client", +@@ -11,9 +11,14 @@ + "web": "expo start --web" + }, + "dependencies": { +- "expo": "~55.0.25", +- "expo-status-bar": "~55.0.6", +- "react": "19.2.0", +- "react-native": "0.83.6" ++ "expo": "~56.0.0-preview.13", ++ "expo-status-bar": "~56.0.4", ++ "react": "19.2.3", ++ "react-native": "0.85.3" ++ }, ++ "publishConfig": { ++ "executableFiles": [ ++ "./android/gradlew" ++ ] + } + } diff --git a/docs/public/static/diffs/template-bare-minimum/raw/55..unversioned.diff b/docs/public/static/diffs/template-bare-minimum/raw/55..unversioned.diff index 9d6819b457847b..db6d9c839f2e88 100644 --- a/docs/public/static/diffs/template-bare-minimum/raw/55..unversioned.diff +++ b/docs/public/static/diffs/template-bare-minimum/raw/55..unversioned.diff @@ -139,7 +139,7 @@ index 8a390c764af..39fa5afe55b 100644 /usr/lib/swift, "$(inherited)", diff --git a/templates/expo-template-bare-minimum/ios/Podfile b/templates/expo-template-bare-minimum/ios/Podfile -index 03484edf156..a2af7b4a5de 100644 +index 03484edf156..c3158e3fb9b 100644 --- a/templates/expo-template-bare-minimum/ios/Podfile +++ b/templates/expo-template-bare-minimum/ios/Podfile @@ -13,10 +13,11 @@ def ccache_enabled?(podfile_properties) @@ -148,39 +148,44 @@ index 03484edf156..a2af7b4a5de 100644 ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR'] -ENV['RCT_USE_RN_DEP'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' -ENV['RCT_USE_PREBUILT_RNCORE'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' -+ENV['RCT_USE_RN_DEP'] ||= '0' if podfile_properties['ios.buildReactNativeFromSource'] == 'true' -+ENV['RCT_USE_PREBUILT_RNCORE'] ||= '0' if podfile_properties['ios.buildReactNativeFromSource'] == 'true' ++ENV['RCT_USE_RN_DEP'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1' ++ENV['RCT_USE_PREBUILT_RNCORE'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1' ENV['RCT_HERMES_V1_ENABLED'] ||= '1' if podfile_properties['expo.useHermesV1'] == 'true' -platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1' -+ENV['EXPO_USE_PRECOMPILED_MODULES'] ||= '1' if podfile_properties['EXPO_USE_PRECOMPILED_MODULES'] == '1' ++ENV['EXPO_USE_PRECOMPILED_MODULES'] ||= '1' if podfile_properties['EXPO_USE_PRECOMPILED_MODULES'] != 'false' +platform :ios, podfile_properties['ios.deploymentTarget'] || '16.4' prepare_react_native_project! diff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json -index 7d81baed15d..e6346b6d456 100644 +index 253f825cea9..3e151175775 100644 --- a/templates/expo-template-bare-minimum/package.json +++ b/templates/expo-template-bare-minimum/package.json @@ -2,7 +2,7 @@ "name": "expo-template-bare-minimum", "description": "This bare project template includes a minimal setup for using unimodules with React Native.", "license": "0BSD", -- "version": "55.0.26", -+ "version": "55.0.14", +- "version": "55.0.37", ++ "version": "56.0.13", "main": "index.js", "scripts": { "start": "expo start --dev-client", -@@ -11,9 +11,9 @@ +@@ -11,9 +11,14 @@ "web": "expo start --web" }, "dependencies": { -- "expo": "~55.0.14", -- "expo-status-bar": "~55.0.5", +- "expo": "~55.0.25", +- "expo-status-bar": "~55.0.6", - "react": "19.2.0", -- "react-native": "0.83.4" -+ "expo": "~55.0.2", -+ "expo-status-bar": "~55.0.4", +- "react-native": "0.83.6" ++ "expo": "~56.0.0-preview.13", ++ "expo-status-bar": "~56.0.4", + "react": "19.2.3", -+ "react-native": "0.85.0" ++ "react-native": "0.85.3" ++ }, ++ "publishConfig": { ++ "executableFiles": [ ++ "./android/gradlew" ++ ] } } diff --git a/docs/public/static/diffs/template-bare-minimum/raw/50..50.diff b/docs/public/static/diffs/template-bare-minimum/raw/56..56.diff similarity index 100% rename from docs/public/static/diffs/template-bare-minimum/raw/50..50.diff rename to docs/public/static/diffs/template-bare-minimum/raw/56..56.diff diff --git a/docs/public/static/diffs/template-bare-minimum/raw/56..unversioned.diff b/docs/public/static/diffs/template-bare-minimum/raw/56..unversioned.diff new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/tools/src/commands/GenerateBareDiffs.ts b/tools/src/commands/GenerateBareDiffs.ts index 4c70f31101e857..30ef69d8da189f 100644 --- a/tools/src/commands/GenerateBareDiffs.ts +++ b/tools/src/commands/GenerateBareDiffs.ts @@ -61,7 +61,9 @@ const TEMPLATE_PATH = 'templates/expo-template-bare-minimum'; async function getTemplatePathspecs(): Promise { const packlist = await npmPacklist({ path: path.join(EXPO_DIR, TEMPLATE_PATH) }); - return packlist.map((f) => `${TEMPLATE_PATH}/${f}`); + return packlist + .filter((f) => f.startsWith('android/') || f.startsWith('ios/') || f === 'package.json') + .map((f) => `${TEMPLATE_PATH}/${f}`); } async function executeDiffCommand( From 27182caf905ba63eda5abd8b15f3c111f8443eeb Mon Sep 17 00:00:00 2001 From: Aman Mittal Date: Thu, 21 May 2026 16:14:37 +0530 Subject: [PATCH 08/28] [docs] Fix settings menu not opening on Native Project Upgrade Helper diff blocks (#46059) --- docs/ui/components/Snippet/DiffBlock.test.tsx | 35 +++++++++++++++++++ .../Snippet/PermalinkedSnippetHeader.tsx | 21 ++++++----- 2 files changed, 47 insertions(+), 9 deletions(-) diff --git a/docs/ui/components/Snippet/DiffBlock.test.tsx b/docs/ui/components/Snippet/DiffBlock.test.tsx index 1885abf95b24cb..bb53ad76b7ca94 100644 --- a/docs/ui/components/Snippet/DiffBlock.test.tsx +++ b/docs/ui/components/Snippet/DiffBlock.test.tsx @@ -1,10 +1,15 @@ import { jest } from '@jest/globals'; import { render, Screen, screen } from '@testing-library/react'; import fs from 'fs-extra'; +import GithubSlugger from 'github-slugger'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; +import { createHeadingManager } from '~/common/headingManager'; +import { HeadingsContext } from '~/common/withHeadingManager'; + import { DiffBlock } from '.'; +import { PermalinkedSnippetHeader } from './PermalinkedSnippetHeader'; const dirname = path.dirname(fileURLToPath(import.meta.url)); @@ -74,4 +79,34 @@ index fa45c70206..0000000000 expect(screen.queryByText(`import 'react-native';`)).not.toBeInTheDocument(); }); + + it('keeps permalinked diff header actions outside of the permalink link', () => { + const headingManager = createHeadingManager(new GithubSlugger(), { headings: [] }); + const singleFileDiff = `diff --git a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml +index 43aaf83..3d5a6c7 100644 +--- a/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml ++++ b/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml +@@ -1 +1 @@ +- ++`; + + render( + + str.replace('templates/expo-template-bare-minimum/', '')} + filenameToLinkUrl={filename => `https://github.com/expo/expo/tree/sdk-55/${filename}`} + SnippetHeaderComponent={PermalinkedSnippetHeader} + /> + + ); + + expect( + screen.getByRole('link', { name: 'android/app/src/main/AndroidManifest.xml' }) + ).toHaveAttribute('href', '#androidappsrcmainandroidmanifestxml'); + expect(screen.queryByRole('link', { name: /Raw/ })).not.toBeInTheDocument(); + expect(screen.queryByRole('link', { name: /Show settings/ })).not.toBeInTheDocument(); + expect(screen.getByRole('button', { name: 'Raw' })).toBeInTheDocument(); + expect(screen.getByRole('button', { name: 'Show settings' })).toBeInTheDocument(); + }); }); diff --git a/docs/ui/components/Snippet/PermalinkedSnippetHeader.tsx b/docs/ui/components/Snippet/PermalinkedSnippetHeader.tsx index 9ebdb7f2e86485..d5a4b7a4aaa7d6 100644 --- a/docs/ui/components/Snippet/PermalinkedSnippetHeader.tsx +++ b/docs/ui/components/Snippet/PermalinkedSnippetHeader.tsx @@ -8,7 +8,7 @@ import { SnippetHeader, SnippetHeaderProps } from './SnippetHeader'; export const PermalinkedSnippetHeader = withHeadingManager( (props: SnippetHeaderProps & HeadingManagerProps) => { - const { title } = props; + const { headingManager, title, ...snippetHeaderProps } = props; let sidebarTitle; if (typeof title === 'string') { const pathSegments = title.split('/'); @@ -17,19 +17,22 @@ export const PermalinkedSnippetHeader = withHeadingManager( sidebarTitle = pathSegments.length > 2 ? pathSegments[0] + '/../' + pathSegments.at(-1) : title; } - const heading = props.headingManager.addHeading(title, 3, { + const heading = headingManager.addHeading(title, 3, { sidebarTitle, sidebarType: HeadingType.CODE_FILE_PATH, }); return ( - - - +
+ + {title} + + } + /> +
); } ); From f9e9f161200fd6193a67e43438fc0fc017391dd9 Mon Sep 17 00:00:00 2001 From: Aman Mittal Date: Thu, 21 May 2026 16:14:47 +0530 Subject: [PATCH 09/28] [docs] Add Expo Observe to glossary and monitoring services page (#46056) --- docs/pages/monitoring/services.mdx | 21 ++++++++++++++++++++- docs/pages/more/glossary-of-terms.mdx | 6 +++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/docs/pages/monitoring/services.mdx b/docs/pages/monitoring/services.mdx index 25ac9a94fb3aaf..9849efcc9ac49f 100644 --- a/docs/pages/monitoring/services.mdx +++ b/docs/pages/monitoring/services.mdx @@ -5,13 +5,14 @@ description: Learn how to monitor the usage of your Expo and React Native app af import { LogrocketIcon } from '@expo/styleguide-icons/custom/LogrocketIcon'; import { SentryIcon } from '@expo/styleguide-icons/custom/SentryIcon'; +import { ActivityIcon } from '@expo/styleguide-icons/outline/ActivityIcon'; import { BookOpen02Icon } from '@expo/styleguide-icons/outline/BookOpen02Icon'; import { DataIcon } from '@expo/styleguide-icons/outline/DataIcon'; import { BoxLink } from '~/ui/components/BoxLink'; import { ContentSpotlight } from '~/ui/components/ContentSpotlight'; -Once your app is released, you can track anonymized usage data to give you insights on how users use your app. This data includes which updates are in use, when users experience bugs, and more. +Once your app is released, you can track anonymized usage data to give you insights on how users use your app. This data includes which updates are in use, when users experience bugs, how the app performs in production, and more. ## EAS Insights @@ -31,6 +32,24 @@ Get started with the following guide: Icon={DataIcon} /> +## Expo Observe + +[Expo Observe](/eas/observe/introduction/) is a performance monitoring service from Expo that tracks how your app performs in production. It gives you visibility in startup metrics (such as cold launch time, time to first render, and time to interactive) from real app user sessions, rendering performance, and app user experience across different devices, networks, and conditions. + + + +Get started with the following guide: + + + ## LogRocket You can get more insights with [LogRocket](https://logrocket.com). LogRocket records user sessions and identifies bugs as your users use your app. You can filter sessions by update IDs and also connect to your LogRocket account on the EAS dashboard to get quick access to your app's session data. diff --git a/docs/pages/more/glossary-of-terms.mdx b/docs/pages/more/glossary-of-terms.mdx index 4f1fef626c002e..727449f88b12fb 100644 --- a/docs/pages/more/glossary-of-terms.mdx +++ b/docs/pages/more/glossary-of-terms.mdx @@ -126,7 +126,7 @@ The development server is typically hosted on `http://localhost:8081`. It hosts ### Expo Application Services (EAS) -[Expo Application Services (EAS)](/eas) are deeply integrated cloud services for Expo and React Native apps, such as [EAS Build](/build/introduction/), [EAS Submit](/submit/introduction/), [EAS Update](/eas-update/introduction/), [EAS Metadata](/eas/metadata/), [EAS Insights](/eas-insights/introduction/), [EAS Hosting](/eas/hosting/introduction/), and [EAS Workflows](/eas/workflows/introduction/). +[Expo Application Services (EAS)](/eas) are deeply integrated cloud services for Expo and React Native apps, such as [EAS Build](/build/introduction/), [EAS Submit](/submit/introduction/), [EAS Update](/eas-update/introduction/), [EAS Metadata](/eas/metadata/), [EAS Insights](/eas-insights/introduction/), [EAS Hosting](/eas/hosting/introduction/), [EAS Workflows](/eas/workflows/introduction/), and [Expo Observe](/eas/observe/introduction/). ### EAS Build @@ -223,6 +223,10 @@ A file named **expo-module.config.json** that lives in the root directory of a [ [Expo Modules API](/modules/module-api/) is a cross-platform API for writing native modules in Kotlin and Swift to add new capabilities to your apps. This API is provided by the library `expo-modules-core` which is included in the `expo` package. +### Expo Observe + +[Expo Observe](/eas/observe/introduction/) is a performance monitoring service that tracks how an app performs in production, including cold and warm launch times, time to first render, and time to interactive. It uses the `expo-observe` library to collect metrics from production builds, which can then be viewed in the Observe dashboard. + ### Expo Orbit [Expo Orbit](/build/orbit/) is an application for macOS, Windows, and Linux that enables faster installation and launching of builds or updates from EAS, local files, or Snack projects, on devices or emulators/simulators. From 186f866c1245c4ed8077f8f0980029c8e283da3e Mon Sep 17 00:00:00 2001 From: Christian Falch <875252+chrfalch@users.noreply.github.com> Date: Thu, 21 May 2026 12:51:46 +0200 Subject: [PATCH 10/28] fix(precompile) use bundledNativeVersions.json to resolve versions (#46079) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Why Previously `BareExpo's` `node_modules` folder was used as the source of truth for selecting which 3rd party versions to pick. This failed when we forgot to update BareExpo's package.json after updating `bundlednativeVersions.json`. ## How Now package resolving is done against the pnpm store instead of BareExpo. ## Test-plan ✅ Ran `et prebuild -f Debug react-native-safe-area-context` when RNCSafeAreaContext was set to 5.6.2 in BareEXpo and 5.7.0 in bundledNativeVersions.json - built 5.7.0 correctly. --- tools/src/prebuilds/pipeline/RunSteps.test.ts | 42 ++++++++ tools/src/prebuilds/pipeline/RunSteps.ts | 55 +++++++++- tools/src/prebuilds/resolvePackage.test.ts | 101 ++++++++++++++++++ tools/src/prebuilds/resolvePackage.ts | 36 +++++++ 4 files changed, 232 insertions(+), 2 deletions(-) create mode 100644 tools/src/prebuilds/resolvePackage.test.ts diff --git a/tools/src/prebuilds/pipeline/RunSteps.test.ts b/tools/src/prebuilds/pipeline/RunSteps.test.ts index 27a0fe30cd6dce..95e116bff869c9 100644 --- a/tools/src/prebuilds/pipeline/RunSteps.test.ts +++ b/tools/src/prebuilds/pipeline/RunSteps.test.ts @@ -17,6 +17,7 @@ import { collectSharedSPMDependencies, CACHE_DEPS, expandWithUnbuiltDependencies, + rebindExternalPackagesToBundledVersions, } from './RunSteps'; import type { SPMPackageSource } from '../ExternalPackage'; import type { SPMProduct, SPMPackageDependencyConfig } from '../SPMConfig.types'; @@ -173,6 +174,47 @@ describe('resolveFlavorTemplatedPath', () => { }); }); +// --------------------------------------------------------------------------- +// rebindExternalPackagesToBundledVersions +// --------------------------------------------------------------------------- + +describe('rebindExternalPackagesToBundledVersions', () => { + it('rewrites path and packageVersion for packages listed in bundledNativeModules', () => { + const pkg = makePkg('rn-safe-area', [], { path: '/before', packageVersion: '5.6.2' }); + rebindExternalPackagesToBundledVersions([pkg], { 'rn-safe-area': '~5.7.0' }, () => ({ + path: '/after', + version: '5.7.0', + })); + assert.equal(pkg.packageVersion, '5.7.0'); + assert.equal(pkg.path, '/after'); + }); + + it('throws with an actionable error when no installed version satisfies the bundled range', () => { + const pkg = makePkg('rn-safe-area', [], { path: '/before', packageVersion: '5.6.2' }); + assert.throws( + () => + rebindExternalPackagesToBundledVersions([pkg], { 'rn-safe-area': '~5.7.0' }, () => null), + (err: Error) => + err.message.includes('rn-safe-area') && + err.message.includes('~5.7.0') && + err.message.includes('bundledNativeModules.json') && + err.message.includes('pnpm install') + ); + }); + + it('leaves packages absent from the bundled map untouched', () => { + const pkg = makePkg('private-pkg', [], { path: '/before', packageVersion: '0.0.1' }); + let resolverCalled = false; + rebindExternalPackagesToBundledVersions([pkg], { 'something-else': '1.0.0' }, () => { + resolverCalled = true; + return null; + }); + assert.equal(resolverCalled, false); + assert.equal(pkg.packageVersion, '0.0.1'); + assert.equal(pkg.path, '/before'); + }); +}); + // --------------------------------------------------------------------------- // sortPackagesByDependencies // --------------------------------------------------------------------------- diff --git a/tools/src/prebuilds/pipeline/RunSteps.ts b/tools/src/prebuilds/pipeline/RunSteps.ts index 31bc7d3f522d3f..35e0da4f9f2a4f 100644 --- a/tools/src/prebuilds/pipeline/RunSteps.ts +++ b/tools/src/prebuilds/pipeline/RunSteps.ts @@ -16,6 +16,7 @@ import path from 'path'; import { PACKAGES_DIR } from '../../Constants'; import logger from '../../Logger'; import { getPackageByName } from '../../Packages'; +import { getBundledVersionsAsync } from '../../ProjectVersions'; import { Artifacts } from '../Artifacts'; import { Dependencies } from '../Dependencies'; import type { SPMPackageSource } from '../ExternalPackage'; @@ -31,6 +32,7 @@ import { verifyAllPackagesAsync, verifyLocalTarballPathsIfSetAsync, } from '../Utils'; +import { resolveInstalledPackage } from '../resolvePackage'; import type { PrebuildContext } from './Context'; import type { Step } from './Types'; @@ -43,6 +45,41 @@ import type { Step } from './Types'; */ export const CACHE_DEPS = new Set(['ReactNativeDependencies', 'React', 'Hermes']); +// --------------------------------------------------------------------------- +// Helper: rebindExternalPackagesToBundledVersions +// --------------------------------------------------------------------------- + +/** + * Rebinds each external package's `path` / `packageVersion` to the install in + * any monorepo workspace whose version satisfies `packages/expo/bundledNativeModules.json` + * — the canonical SDK manifest end users resolve against via `expo install`. + * Packages absent from the bundled map are left untouched. Throws when a + * bundled-listed package has no satisfying install anywhere in the workspace. + */ +export function rebindExternalPackagesToBundledVersions( + externalPackages: SPMPackageSource[], + bundledNativeModules: Record, + resolve: (name: string, range: string) => { path: string; version: string } | null +): void { + for (const pkg of externalPackages) { + const range = bundledNativeModules[pkg.packageName]; + if (!range) continue; + const resolved = resolve(pkg.packageName, range); + if (!resolved) { + throw new Error( + `No installed version of "${pkg.packageName}" in the monorepo satisfies ${range} ` + + `(from packages/expo/bundledNativeModules.json — the canonical SDK manifest for ` + + `"expo install" and create-expo templates). Without a satisfying install, the ` + + `prebuilt XCFramework would be invisible to precompiled_modules.rb at end-user ` + + `pod install. Fix: add "${pkg.packageName}" to some workspace at a version ` + + `satisfying ${range} and run "pnpm install".` + ); + } + pkg.path = resolved.path; + pkg.packageVersion = resolved.version; + } +} + // --------------------------------------------------------------------------- // Helper: resolveFlavorTemplatedPath // --------------------------------------------------------------------------- @@ -486,11 +523,25 @@ export const prepareInputsStep: Step = { ctx.packages = sorted; ctx.dependsOn = dependsOn; - // Log external packages if any const externalPackages = ctx.packages.filter((p) => isExternalPackage(p)); + + // 4b. Rebind each external package's source path to the install in any + // workspace whose version satisfies bundledNativeModules.json. This decouples + // the precompile from apps/bare-expo's pin, which drifts. Packages absent + // from the bundled map keep their bare-expo-resolved path. + rebindExternalPackagesToBundledVersions( + externalPackages, + await getBundledVersionsAsync(), + resolveInstalledPackage + ); + + // Log external packages with their resolved versions, so the post-rebind + // values are visible in the build output. if (externalPackages.length > 0) { logger.info( - `📦 External packages to build:\n${chalk.blue(externalPackages.map((p) => p.packageName).join(', '))}` + `📦 External packages to build:\n${chalk.blue( + externalPackages.map((p) => `${p.packageName}@${p.packageVersion}`).join(', ') + )}` ); } diff --git a/tools/src/prebuilds/resolvePackage.test.ts b/tools/src/prebuilds/resolvePackage.test.ts new file mode 100644 index 00000000000000..570a8d5da981cd --- /dev/null +++ b/tools/src/prebuilds/resolvePackage.test.ts @@ -0,0 +1,101 @@ +/** + * Hermetic tests for resolveInstalledPackage. Each test builds a fake monorepo + * under a tmpdir with workspace dirs that each have their own + * `node_modules//package.json`, then calls the resolver with the tmpdir as + * repoRoot. Node's `require.resolve` does the rest. + */ +import fs from 'fs'; +import assert from 'node:assert/strict'; +import { describe, it } from 'node:test'; +import os from 'os'; +import path from 'path'; + +import { resolveInstalledPackage } from './resolvePackage'; + +function withTempRepo(fn: (repoRoot: string) => T): T { + const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'mono-')); + try { + return fn(dir); + } finally { + fs.rmSync(dir, { recursive: true, force: true }); + } +} + +function installInWorkspace( + repoRoot: string, + workspaceRelDir: string, + packageName: string, + version: string +) { + const installDir = path.join(repoRoot, workspaceRelDir, 'node_modules', packageName); + fs.mkdirSync(installDir, { recursive: true }); + fs.writeFileSync( + path.join(installDir, 'package.json'), + JSON.stringify({ name: packageName, version }) + ); + // require.resolve returns the realpath (macOS `/var` → `/private/var`). + return fs.realpathSync(installDir); +} + +const resolve = (repoRoot: string, name: string, range: string) => + resolveInstalledPackage(name, range, { repoRoot, workspacePatterns: ['apps/*'] }); + +describe('resolveInstalledPackage', () => { + it('returns the install when exactly one workspace has a satisfying version', () => { + withTempRepo((repoRoot) => { + const installDir = installInWorkspace(repoRoot, 'apps/expo-go', 'rn-sample', '5.7.0'); + // A second workspace without the dep is skipped. + fs.mkdirSync(path.join(repoRoot, 'apps/empty'), { recursive: true }); + assert.deepEqual(resolve(repoRoot, 'rn-sample', '~5.7.0'), { + version: '5.7.0', + path: installDir, + }); + }); + }); + + it('returns the highest version when multiple workspaces have different versions', () => { + withTempRepo((repoRoot) => { + installInWorkspace(repoRoot, 'apps/bare-expo', 'rn-sample', '5.6.2'); + installInWorkspace(repoRoot, 'apps/expo-go', 'rn-sample', '5.7.0'); + assert.equal(resolve(repoRoot, 'rn-sample', '^5.6.0')?.version, '5.7.0'); + }); + }); + + it('resolves scoped packages', () => { + withTempRepo((repoRoot) => { + const installDir = installInWorkspace( + repoRoot, + 'apps/expo-go', + '@shopify/react-native-skia', + '2.6.2' + ); + assert.deepEqual(resolve(repoRoot, '@shopify/react-native-skia', '2.6.2'), { + version: '2.6.2', + path: installDir, + }); + }); + }); + + it('returns null when no workspace has a satisfying version', () => { + withTempRepo((repoRoot) => { + installInWorkspace(repoRoot, 'apps/bare-expo', 'rn-sample', '5.6.2'); + assert.equal(resolve(repoRoot, 'rn-sample', '~5.7.0'), null); + }); + }); + + it('ignores a workspace install with a non-semver version', () => { + withTempRepo((repoRoot) => { + installInWorkspace(repoRoot, 'apps/garbage', 'rn-sample', 'not-a-version'); + const installDir = installInWorkspace(repoRoot, 'apps/ok', 'rn-sample', '5.7.0'); + assert.deepEqual(resolve(repoRoot, 'rn-sample', '^5.0.0'), { + version: '5.7.0', + path: installDir, + }); + }); + }); + + it('returns null without throwing when the repo root does not exist', () => { + const missing = path.join(os.tmpdir(), `mono-missing-${Date.now()}`); + assert.equal(resolve(missing, 'rn-sample', '1.0.0'), null); + }); +}); diff --git a/tools/src/prebuilds/resolvePackage.ts b/tools/src/prebuilds/resolvePackage.ts index dd832dfa66be85..a6b788f0231179 100644 --- a/tools/src/prebuilds/resolvePackage.ts +++ b/tools/src/prebuilds/resolvePackage.ts @@ -1,7 +1,12 @@ +import fs from 'fs'; +import { globSync } from 'glob'; import path from 'path'; +import semver from 'semver'; import { getExpoRepositoryRootDir } from '../Directories'; +const WORKSPACE_GLOBS = ['apps/*', 'packages/*', 'packages/@expo/*', 'tools']; + /** * Resolves the filesystem path to an npm package that isn't a direct dependency * of the tools package. Tries apps/bare-expo first (direct deps like react-native), @@ -17,3 +22,34 @@ export function resolvePackagePath(packageName: string): string { return path.dirname(require.resolve(`${packageName}/package.json`, { paths: [rnDir] })); } } + +/** + * Returns the highest version of `packageName` installed in any monorepo + * workspace satisfying `range`, or `null`. Goes through Node's `require.resolve` + * — no assumptions about pnpm store / lockfile shape. + */ +export function resolveInstalledPackage( + packageName: string, + range: string, + opts: { repoRoot?: string; workspacePatterns?: string[] } = {} +): { path: string; version: string } | null { + const repoRoot = opts.repoRoot ?? getExpoRepositoryRootDir(); + const patterns = opts.workspacePatterns ?? WORKSPACE_GLOBS; + let best: { path: string; version: string } | null = null; + for (const pattern of patterns) { + for (const ws of globSync(pattern, { cwd: repoRoot, absolute: true })) { + let pkgJson: string; + let version: string | undefined; + try { + pkgJson = require.resolve(`${packageName}/package.json`, { paths: [ws] }); + version = JSON.parse(fs.readFileSync(pkgJson, 'utf8')).version; + } catch { + continue; + } + if (!version || !semver.valid(version) || !semver.satisfies(version, range)) continue; + if (!best || semver.gt(version, best.version)) + best = { path: path.dirname(pkgJson), version }; + } + } + return best; +} From 661af9e3798b2d422687ce89220f3183b1dbef81 Mon Sep 17 00:00:00 2001 From: HubertBer <115428831+HubertBer@users.noreply.github.com> Date: Thu, 21 May 2026 12:55:20 +0200 Subject: [PATCH 11/28] [expo-type-information] CLI fix: create output directory if it doesn't exist (#45973) # Why The cli commands that output multiple files take the `-o` option for output directory. If it doesn't exist it just prints error and returns. Now it will create the directories instead to make it easier to work with. # How Run `fs.promises.mkdir(outDir, {recursive: true})` in the commands that output files to a directory. # Test Plan Checked the cli commands manually. # Checklist - [ ] I added a `changelog.md` entry and rebuilt the package sources according to [this short guide](https://github.com/expo/expo/blob/main/CONTRIBUTING.md#-before-submitting) - [ ] This diff will work correctly for `npx expo prebuild` & EAS Build (eg: updated a module plugin). - [ ] Conforms with the [Documentation Writing Style Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md) --- .../build/commands/commandUtils.d.ts | 1 + .../build/commands/commandUtils.js | 17 ++++++++++++++++- .../build/commands/commandUtils.js.map | 2 +- .../commands/inlineModulesInterfaceCommand.js | 1 + .../inlineModulesInterfaceCommand.js.map | 2 +- .../build/commands/moduleInterfaceCommand.js | 1 + .../commands/moduleInterfaceCommand.js.map | 2 +- .../src/commands/commandUtils.ts | 17 ++++++++++++++++- .../commands/inlineModulesInterfaceCommand.ts | 2 ++ .../src/commands/moduleInterfaceCommand.ts | 2 ++ 10 files changed, 42 insertions(+), 5 deletions(-) diff --git a/packages/expo-type-information/build/commands/commandUtils.d.ts b/packages/expo-type-information/build/commands/commandUtils.d.ts index 5ea757ec56cfbe..acef837e78d5c2 100644 --- a/packages/expo-type-information/build/commands/commandUtils.d.ts +++ b/packages/expo-type-information/build/commands/commandUtils.d.ts @@ -30,6 +30,7 @@ export declare function getPodspecFilePath(modulePath: string): string | null; export declare function getSourceFilesGlobFromPodspecFile(podspecPath: string): string | null; export declare function getModuleFilePathsFromPodspec(modulePath: string): string[] | null; export declare function uniqueStrings(strings: string[]): string[]; +export declare function maybePrepareOutputDirectory(dirName?: string): Promise; export declare function parseCommandArguments(options: TypeInformationCommandCommonAllArguments, isOutputFile?: boolean): ParsedArguments | null; export declare function getFileTypeInformationFromArgs({ realInputPaths, typeInference, }: { realInputPaths: string[]; diff --git a/packages/expo-type-information/build/commands/commandUtils.js b/packages/expo-type-information/build/commands/commandUtils.js index 88a35aaf9cb4d8..07a271ffe783b5 100644 --- a/packages/expo-type-information/build/commands/commandUtils.js +++ b/packages/expo-type-information/build/commands/commandUtils.js @@ -14,6 +14,7 @@ exports.getPodspecFilePath = getPodspecFilePath; exports.getSourceFilesGlobFromPodspecFile = getSourceFilesGlobFromPodspecFile; exports.getModuleFilePathsFromPodspec = getModuleFilePathsFromPodspec; exports.uniqueStrings = uniqueStrings; +exports.maybePrepareOutputDirectory = maybePrepareOutputDirectory; exports.parseCommandArguments = parseCommandArguments; exports.getFileTypeInformationFromArgs = getFileTypeInformationFromArgs; exports.writeStringToFileOrPrintToConsole = writeStringToFileOrPrintToConsole; @@ -109,6 +110,9 @@ function sanitizeAndValidateOutputPath(rawPath, isFilePath = true) { if (isFilePath && fs_1.default.existsSync(path_1.default.dirname(resolvedPath))) { return resolvedPath; } + if (!isFilePath) { + return resolvedPath; + } } catch { } return null; @@ -156,6 +160,17 @@ function getModuleFilePathsFromPodspec(modulePath) { function uniqueStrings(strings) { return [...new Set(strings)]; } +async function maybePrepareOutputDirectory(dirName) { + if (!dirName) { + return; + } + try { + await fs_1.default.promises.mkdir(dirName, { recursive: true }); + } + catch { + console.error(`Error creating the output directory: ${dirName}`); + } +} function parseCommandArguments(options, isOutputFile = true) { const appJsonPath = options.appJson ?? undefined; let realInputPaths = (options.inputPaths ?? []) @@ -174,7 +189,7 @@ function parseCommandArguments(options, isOutputFile = true) { if (options.outputPath) { const validatedOutPath = sanitizeAndValidateOutputPath(options.outputPath, isOutputFile); if (!validatedOutPath) { - console.error(`Output path ${options.outputPath} is not valid. ${isOutputFile ? 'Provide a path to an existing file, or to a file in an existing parent directory.' : 'Provide a path to an existing directory.'}`); + console.error(`Output path ${options.outputPath} is not valid. ${isOutputFile ? 'Provide a path to an existing file, or to a file in an existing parent directory.' : 'Provide a valid path to a directory.'}`); return null; } realOutputPath = validatedOutPath; diff --git a/packages/expo-type-information/build/commands/commandUtils.js.map b/packages/expo-type-information/build/commands/commandUtils.js.map index 308db69fb4eb92..2f294eb4439011 100644 --- a/packages/expo-type-information/build/commands/commandUtils.js.map +++ b/packages/expo-type-information/build/commands/commandUtils.js.map @@ -1 +1 @@ -{"version":3,"file":"commandUtils.js","sourceRoot":"","sources":["../../src/commands/commandUtils.ts"],"names":[],"mappings":";;;;;AAyBA,0DAWC;AAUD,4CAkBC;AAMD,4BAWC;AAED,8CAgBC;AAED,wDAgBC;AAED,sEAmBC;AAED,oDAWC;AAED,gDAMC;AAED,8EAKC;AAED,sEAiBC;AAED,sCAEC;AAED,sDA8CC;AAED,wEAmBC;AAED,8EASC;AAED,wCAEC;AAED,8CAYC;AAED,sDAIC;AAED,8CAuBC;AAED,wDA+BC;AA/VD,kDAA0B;AAC1B,iDAAyC;AAEzC,mCAAoC;AACpC,4CAAoB;AACpB,gDAAwB;AAExB,wDAI4B;AAC5B,kEAAqE;AACrE,oCAAmC;AAWnC,IAAI,qBAA8B,CAAC;AACnC,SAAgB,uBAAuB;IACrC,IAAI,qBAAqB,KAAK,SAAS,EAAE,CAAC;QACxC,OAAO,qBAAqB,CAAC;IAC/B,CAAC;IACD,IAAI,CAAC;QACH,IAAA,wBAAQ,EAAC,oBAAoB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACpD,qBAAqB,GAAG,IAAI,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,qBAAqB,GAAG,KAAK,CAAC;IAChC,CAAC;IACD,OAAO,qBAAqB,CAAC;AAC/B,CAAC;AAUD,SAAgB,gBAAgB,CAAC,OAA0B;IACzD,OAAO,OAAO;SACX,MAAM,CACL,kCAAkC,EAClC,kEAAkE,CACnE;SACA,MAAM,CAAC,+BAA+B,EAAE,qCAAqC,CAAC;SAC9E,MAAM,CACL,8BAA8B,EAC9B,+GAA+G,CAChH;SACA,MAAM,CACL,sCAAsC;IACtC,4DAA4D;IAC5D,kQAAkQ,EAClQ,kBAAkB,CACnB;SACA,MAAM,CAAC,cAAc,EAAE,8DAA8D,CAAC,CAAC;AAC5F,CAAC;AAED;;;GAGG;AACH,SAAgB,QAAQ,CACtB,EAAK,EACL,UAAkB,GAAG;IAErB,IAAI,KAAoC,CAAC;IACzC,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE;QACjB,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YACtB,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QACd,CAAC,EAAE,OAAO,CAAC,CAAC;IACd,CAAC,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,iBAAiB,CAAC,UAA2B,EAAE,OAA4B;IAC/F,MAAM,iBAAiB,GAAG,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAClD,iBAAiB,EAAE,CAAC;IACpB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACxB,OAAO;IACT,CAAC;IAED,MAAM,IAAA,eAAO,EAAC,UAAU,CAAC,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE;QAC/D,6DAA6D;QAC7D,IAAI,KAAK,EAAE,MAAM,CAAC,IAAI,YAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;gBAClC,OAAO;YACT,CAAC;YACD,iBAAiB,EAAE,CAAC;QACtB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,sBAAsB,CAAC,WAAmB;IACxD,IAAI,CAAC;QACH,MAAM,iBAAiB,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAE1D,MAAM,OAAO,GAAG,YAAE,CAAC,QAAQ,CAAC,iBAAiB,EAAE;YAC7C,aAAa,EAAE,IAAI;SACpB,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,OAAO;aAC1B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;aACjC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,cAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAE9D,OAAO,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAgB,6BAA6B,CAC3C,OAAe,EACf,aAAsB,IAAI;IAE1B,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAE3C,IAAI,YAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,MAAM,QAAQ,GAAG,YAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YAC3C,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YACxE,OAAO,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;QACvC,CAAC;QAED,IAAI,UAAU,IAAI,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;YAC5D,OAAO,YAAY,CAAC;QACtB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,oBAAoB,CAAC,MAAe;IAClD,IAAI,CAAC,MAAM;QAAE,OAAO,qCAAmB,CAAC,wBAAwB,CAAC;IACjE,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,cAAc;YACjB,OAAO,qCAAmB,CAAC,YAAY,CAAC;QAC1C,KAAK,kBAAkB;YACrB,OAAO,qCAAmB,CAAC,gBAAgB,CAAC;QAC9C,KAAK,0BAA0B;YAC7B,OAAO,qCAAmB,CAAC,wBAAwB,CAAC;IACxD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,kBAAkB,CAAC,UAAkB;IACnD,MAAM,oBAAoB,GAAG,YAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAE7E,MAAM,YAAY,GAAG,CAAC,GAAG,YAAE,CAAC,QAAQ,CAAC,GAAG,oBAAoB,gBAAgB,CAAC,CAAC,CAAC;IAC/E,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IACpC,OAAO,WAAW,IAAI,IAAI,CAAC;AAC7B,CAAC;AAED,SAAgB,iCAAiC,CAAC,WAAmB;IACnE,MAAM,cAAc,GAAG,YAAE,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC5D,MAAM,gBAAgB,GAAG,oCAAoC,CAAC;IAC9D,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACrD,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC5B,CAAC;AAED,SAAgB,6BAA6B,CAAC,UAAkB;IAC9D,MAAM,WAAW,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IACnD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,wBAAwB,UAAU,EAAE,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,aAAa,GAAG,iCAAiC,CAAC,WAAW,CAAC,CAAC;IACrE,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,4CAA4C,WAAW,EAAE,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,cAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,mBAAmB,GAAG,cAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,aAAa,CAAC,CAAC;IAE3F,OAAO,sBAAsB,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC;AAClG,CAAC;AAED,SAAgB,aAAa,CAAC,OAAiB;IAC7C,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED,SAAgB,qBAAqB,CACnC,OAAiD,EACjD,eAAwB,IAAI;IAE5B,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,IAAI,SAAS,CAAC;IACjD,IAAI,cAAc,GAAa,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;SACtD,OAAO,CAAC,sBAAsB,CAAC;SAC/B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;IAE5B,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,6BAA6B,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAC5E,cAAc,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;IACtC,CAAC;IACD,cAAc,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;IAE/C,IAAI,CAAC,CAAC,cAAc,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACrE,OAAO,CAAC,KAAK,CACX,iFAAiF,CAClF,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,cAAc,GAAuB,SAAS,CAAC;IACnD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,gBAAgB,GAAG,6BAA6B,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QACzF,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CACX,eAAe,OAAO,CAAC,UAAU,kBAAkB,YAAY,CAAC,CAAC,CAAC,mFAAmF,CAAC,CAAC,CAAC,0CAA0C,EAAE,CACrM,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QACD,cAAc,GAAG,gBAAgB,CAAC;IACpC,CAAC;SAAM,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QAC9B,wFAAwF;QACxF,cAAc;YACZ,6BAA6B,CAAC,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,IAAI,SAAS,CAAC;IAC5F,CAAC;IAED,MAAM,aAAa,GAAG,oBAAoB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAClE,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,iCAAiC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC;IACzC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AACjF,CAAC;AAEM,KAAK,UAAU,8BAA8B,CAAC,EACnD,cAAc,EACd,aAAa,GAId;IACC,MAAM,QAAQ,GAAG,MAAM,IAAA,wCAAsB,EAAC;QAC5C,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,sBAAsB,EAAE,cAAc,EAAE;QAC/D,aAAa;KACd,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CACX,eAAK,CAAC,GAAG,CAAC,mBAAmB,cAAc,2CAA2C,CAAC,CACxF,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAgB,iCAAiC,CAC/C,IAAY,EACZ,cAAkC;IAElC,IAAI,cAAc,EAAE,CAAC;QACnB,YAAE,CAAC,aAAa,CAAC,cAAc,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QACzE,OAAO;IACT,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC;AAED,SAAgB,cAAc,CAAC,OAAe;IAC5C,OAAO,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5D,CAAC;AAED,SAAgB,iBAAiB,CAAC,WAAmB;IACnD,MAAM,SAAS,GAAG,sCAAsC,CAAC;IACzD,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAE3C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,eAAe,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC3D,MAAM,cAAc,GAAG,cAAc,CAAC,eAAe,CAAC,CAAC;IACvD,OAAO,UAAU,KAAK,cAAc,CAAC;AACvC,CAAC;AAED,SAAgB,qBAAqB,CAAC,WAAmB;IACvD,MAAM,UAAU,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IAC/C,OAAO,iBAAiB,UAAU;EAClC,WAAW,EAAE,CAAC;AAChB,CAAC;AAEM,KAAK,UAAU,iBAAiB,CAAC,EACtC,QAAQ,EACR,OAAO,GAIR;IACC,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,IACE,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QACvB,CAAC,iBAAiB,CAAC,MAAM,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,EACjE,CAAC;QACD,oEAAoE;QACpE,IAAI,GAAG,GAAG,CAAC;IACb,CAAC;IACD,IAAI,CAAC;QACH,MAAM,YAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,qBAAqB,CAAC,OAAO,CAAC,EAAE;YACpE,IAAI;YACJ,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,sBAAsB,CAAC,UAA2B;IACtE,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,UAAU,CAAC;IACtD,MAAM,QAAQ,GAAG,MAAM,8BAA8B,CAAC,UAAU,CAAC,CAAC;IAClE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO;IACT,CAAC;IAED,MAAM,EAAE,4BAA4B,EAAE,oCAAoC,EAAE,GAC1E,MAAM,IAAA,iDAA0B,EAAC,QAAQ,CAAC,CAAC;IAE7C,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,mBAAmB,CAAC;IAC1E,MAAM,OAAO,GAAG,cAAc,IAAI,cAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAW,CAAC,CAAC;IAE5E,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,GAAG,CAAC;YAChB,YAAE,CAAC,QAAQ,CAAC,SAAS,CACnB,cAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,UAAU,eAAe,CAAC,EACnD,4BAA4B,EAC5B;gBACE,IAAI,EAAE,GAAG;gBACT,QAAQ,EAAE,OAAO;aAClB,CACF;YACD,iBAAiB,CAAC;gBAChB,QAAQ,EAAE,cAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,UAAU,MAAM,CAAC;gBACpD,OAAO,EAAE,oCAAoC;aAC9C,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC"} \ No newline at end of file +{"version":3,"file":"commandUtils.js","sourceRoot":"","sources":["../../src/commands/commandUtils.ts"],"names":[],"mappings":";;;;;AAyBA,0DAWC;AAUD,4CAkBC;AAMD,4BAWC;AAED,8CAgBC;AAED,wDAgBC;AAED,sEAuBC;AAED,oDAWC;AAED,gDAMC;AAED,8EAKC;AAED,sEAiBC;AAED,sCAEC;AAED,kEASC;AAED,sDA8CC;AAED,wEAmBC;AAED,8EASC;AAED,wCAEC;AAED,8CAYC;AAED,sDAIC;AAED,8CAuBC;AAED,wDA+BC;AA9WD,kDAA0B;AAC1B,iDAAyC;AAEzC,mCAAoC;AACpC,4CAAoB;AACpB,gDAAwB;AAExB,wDAI4B;AAC5B,kEAAqE;AACrE,oCAAmC;AAWnC,IAAI,qBAA8B,CAAC;AACnC,SAAgB,uBAAuB;IACrC,IAAI,qBAAqB,KAAK,SAAS,EAAE,CAAC;QACxC,OAAO,qBAAqB,CAAC;IAC/B,CAAC;IACD,IAAI,CAAC;QACH,IAAA,wBAAQ,EAAC,oBAAoB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACpD,qBAAqB,GAAG,IAAI,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,qBAAqB,GAAG,KAAK,CAAC;IAChC,CAAC;IACD,OAAO,qBAAqB,CAAC;AAC/B,CAAC;AAUD,SAAgB,gBAAgB,CAAC,OAA0B;IACzD,OAAO,OAAO;SACX,MAAM,CACL,kCAAkC,EAClC,kEAAkE,CACnE;SACA,MAAM,CAAC,+BAA+B,EAAE,qCAAqC,CAAC;SAC9E,MAAM,CACL,8BAA8B,EAC9B,+GAA+G,CAChH;SACA,MAAM,CACL,sCAAsC;IACtC,4DAA4D;IAC5D,kQAAkQ,EAClQ,kBAAkB,CACnB;SACA,MAAM,CAAC,cAAc,EAAE,8DAA8D,CAAC,CAAC;AAC5F,CAAC;AAED;;;GAGG;AACH,SAAgB,QAAQ,CACtB,EAAK,EACL,UAAkB,GAAG;IAErB,IAAI,KAAoC,CAAC;IACzC,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE;QACjB,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YACtB,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QACd,CAAC,EAAE,OAAO,CAAC,CAAC;IACd,CAAC,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,iBAAiB,CAAC,UAA2B,EAAE,OAA4B;IAC/F,MAAM,iBAAiB,GAAG,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAClD,iBAAiB,EAAE,CAAC;IACpB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACxB,OAAO;IACT,CAAC;IAED,MAAM,IAAA,eAAO,EAAC,UAAU,CAAC,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE;QAC/D,6DAA6D;QAC7D,IAAI,KAAK,EAAE,MAAM,CAAC,IAAI,YAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;gBAClC,OAAO;YACT,CAAC;YACD,iBAAiB,EAAE,CAAC;QACtB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,sBAAsB,CAAC,WAAmB;IACxD,IAAI,CAAC;QACH,MAAM,iBAAiB,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAE1D,MAAM,OAAO,GAAG,YAAE,CAAC,QAAQ,CAAC,iBAAiB,EAAE;YAC7C,aAAa,EAAE,IAAI;SACpB,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,OAAO;aAC1B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;aACjC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,cAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAE9D,OAAO,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAgB,6BAA6B,CAC3C,OAAe,EACf,aAAsB,IAAI;IAE1B,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAE3C,IAAI,YAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,MAAM,QAAQ,GAAG,YAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YAC3C,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YACxE,OAAO,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;QACvC,CAAC;QAED,IAAI,UAAU,IAAI,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;YAC5D,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,YAAY,CAAC;QACtB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,oBAAoB,CAAC,MAAe;IAClD,IAAI,CAAC,MAAM;QAAE,OAAO,qCAAmB,CAAC,wBAAwB,CAAC;IACjE,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,cAAc;YACjB,OAAO,qCAAmB,CAAC,YAAY,CAAC;QAC1C,KAAK,kBAAkB;YACrB,OAAO,qCAAmB,CAAC,gBAAgB,CAAC;QAC9C,KAAK,0BAA0B;YAC7B,OAAO,qCAAmB,CAAC,wBAAwB,CAAC;IACxD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,kBAAkB,CAAC,UAAkB;IACnD,MAAM,oBAAoB,GAAG,YAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAE7E,MAAM,YAAY,GAAG,CAAC,GAAG,YAAE,CAAC,QAAQ,CAAC,GAAG,oBAAoB,gBAAgB,CAAC,CAAC,CAAC;IAC/E,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IACpC,OAAO,WAAW,IAAI,IAAI,CAAC;AAC7B,CAAC;AAED,SAAgB,iCAAiC,CAAC,WAAmB;IACnE,MAAM,cAAc,GAAG,YAAE,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC5D,MAAM,gBAAgB,GAAG,oCAAoC,CAAC;IAC9D,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACrD,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC5B,CAAC;AAED,SAAgB,6BAA6B,CAAC,UAAkB;IAC9D,MAAM,WAAW,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IACnD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,wBAAwB,UAAU,EAAE,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,aAAa,GAAG,iCAAiC,CAAC,WAAW,CAAC,CAAC;IACrE,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,4CAA4C,WAAW,EAAE,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,cAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,mBAAmB,GAAG,cAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,aAAa,CAAC,CAAC;IAE3F,OAAO,sBAAsB,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC;AAClG,CAAC;AAED,SAAgB,aAAa,CAAC,OAAiB;IAC7C,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAC/B,CAAC;AAEM,KAAK,UAAU,2BAA2B,CAAC,OAAgB;IAChE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;IACT,CAAC;IACD,IAAI,CAAC;QACH,MAAM,YAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,wCAAwC,OAAO,EAAE,CAAC,CAAC;IACnE,CAAC;AACH,CAAC;AAED,SAAgB,qBAAqB,CACnC,OAAiD,EACjD,eAAwB,IAAI;IAE5B,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,IAAI,SAAS,CAAC;IACjD,IAAI,cAAc,GAAa,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;SACtD,OAAO,CAAC,sBAAsB,CAAC;SAC/B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;IAE5B,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,6BAA6B,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAC5E,cAAc,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;IACtC,CAAC;IACD,cAAc,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;IAE/C,IAAI,CAAC,CAAC,cAAc,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACrE,OAAO,CAAC,KAAK,CACX,iFAAiF,CAClF,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,cAAc,GAAuB,SAAS,CAAC;IACnD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,gBAAgB,GAAG,6BAA6B,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QACzF,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CACX,eAAe,OAAO,CAAC,UAAU,kBAAkB,YAAY,CAAC,CAAC,CAAC,mFAAmF,CAAC,CAAC,CAAC,sCAAsC,EAAE,CACjM,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QACD,cAAc,GAAG,gBAAgB,CAAC;IACpC,CAAC;SAAM,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QAC9B,wFAAwF;QACxF,cAAc;YACZ,6BAA6B,CAAC,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,IAAI,SAAS,CAAC;IAC5F,CAAC;IAED,MAAM,aAAa,GAAG,oBAAoB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAClE,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,iCAAiC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC;IACzC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AACjF,CAAC;AAEM,KAAK,UAAU,8BAA8B,CAAC,EACnD,cAAc,EACd,aAAa,GAId;IACC,MAAM,QAAQ,GAAG,MAAM,IAAA,wCAAsB,EAAC;QAC5C,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,sBAAsB,EAAE,cAAc,EAAE;QAC/D,aAAa;KACd,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CACX,eAAK,CAAC,GAAG,CAAC,mBAAmB,cAAc,2CAA2C,CAAC,CACxF,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAgB,iCAAiC,CAC/C,IAAY,EACZ,cAAkC;IAElC,IAAI,cAAc,EAAE,CAAC;QACnB,YAAE,CAAC,aAAa,CAAC,cAAc,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QACzE,OAAO;IACT,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC;AAED,SAAgB,cAAc,CAAC,OAAe;IAC5C,OAAO,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5D,CAAC;AAED,SAAgB,iBAAiB,CAAC,WAAmB;IACnD,MAAM,SAAS,GAAG,sCAAsC,CAAC;IACzD,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAE3C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,eAAe,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC3D,MAAM,cAAc,GAAG,cAAc,CAAC,eAAe,CAAC,CAAC;IACvD,OAAO,UAAU,KAAK,cAAc,CAAC;AACvC,CAAC;AAED,SAAgB,qBAAqB,CAAC,WAAmB;IACvD,MAAM,UAAU,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IAC/C,OAAO,iBAAiB,UAAU;EAClC,WAAW,EAAE,CAAC;AAChB,CAAC;AAEM,KAAK,UAAU,iBAAiB,CAAC,EACtC,QAAQ,EACR,OAAO,GAIR;IACC,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,IACE,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QACvB,CAAC,iBAAiB,CAAC,MAAM,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,EACjE,CAAC;QACD,oEAAoE;QACpE,IAAI,GAAG,GAAG,CAAC;IACb,CAAC;IACD,IAAI,CAAC;QACH,MAAM,YAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,qBAAqB,CAAC,OAAO,CAAC,EAAE;YACpE,IAAI;YACJ,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,sBAAsB,CAAC,UAA2B;IACtE,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,UAAU,CAAC;IACtD,MAAM,QAAQ,GAAG,MAAM,8BAA8B,CAAC,UAAU,CAAC,CAAC;IAClE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO;IACT,CAAC;IAED,MAAM,EAAE,4BAA4B,EAAE,oCAAoC,EAAE,GAC1E,MAAM,IAAA,iDAA0B,EAAC,QAAQ,CAAC,CAAC;IAE7C,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,mBAAmB,CAAC;IAC1E,MAAM,OAAO,GAAG,cAAc,IAAI,cAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAW,CAAC,CAAC;IAE5E,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,GAAG,CAAC;YAChB,YAAE,CAAC,QAAQ,CAAC,SAAS,CACnB,cAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,UAAU,eAAe,CAAC,EACnD,4BAA4B,EAC5B;gBACE,IAAI,EAAE,GAAG;gBACT,QAAQ,EAAE,OAAO;aAClB,CACF;YACD,iBAAiB,CAAC;gBAChB,QAAQ,EAAE,cAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,UAAU,MAAM,CAAC;gBACpD,OAAO,EAAE,oCAAoC;aAC9C,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC"} \ No newline at end of file diff --git a/packages/expo-type-information/build/commands/inlineModulesInterfaceCommand.js b/packages/expo-type-information/build/commands/inlineModulesInterfaceCommand.js index c689bf273c7d80..d3c46782e36dda 100644 --- a/packages/expo-type-information/build/commands/inlineModulesInterfaceCommand.js +++ b/packages/expo-type-information/build/commands/inlineModulesInterfaceCommand.js @@ -102,6 +102,7 @@ async function inlineModulesInterfaceCommand(cli) { if (!parsedArgs) { return; } + (0, commandUtils_1.maybePrepareOutputDirectory)(parsedArgs?.realOutputPath); const { appJsonPath, watcher } = parsedArgs; if (!appJsonPath) { return; diff --git a/packages/expo-type-information/build/commands/inlineModulesInterfaceCommand.js.map b/packages/expo-type-information/build/commands/inlineModulesInterfaceCommand.js.map index f8cc607ba04873..e10af603c534d6 100644 --- a/packages/expo-type-information/build/commands/inlineModulesInterfaceCommand.js.map +++ b/packages/expo-type-information/build/commands/inlineModulesInterfaceCommand.js.map @@ -1 +1 @@ -{"version":3,"file":"inlineModulesInterfaceCommand.js","sourceRoot":"","sources":["../../src/commands/inlineModulesInterfaceCommand.ts"],"names":[],"mappings":";;;;;AAyHA,sEA4DC;AApLD,4CAAoB;AACpB,gDAAwB;AAExB,iDAKwB;AAExB,oCAAyD;AAEzD,KAAK,UAAU,wCAAwC,CACrD,WAAmB;IAEnB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;QAC7E,MAAM,kBAAkB,GAAG,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,kBAAkB,CAAC;QAEzF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACvC,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACrD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GAAG,cAAI,CAAC,OAAO,CAAC,cAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;QACxD,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,cAAI,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IACvF,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,iBAAiB,WAAW,GAAG,EAAE,CAAC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAQD,KAAK,UAAU,2BAA2B,CAAC,EACzC,QAAQ,EACR,OAAO,EACP,aAAa,GACuB;IACpC,OAAO,MAAM,IAAA,qCAAsB,EAAC;QAClC,cAAc,EAAE,CAAC,QAAQ,CAAC;QAC1B,cAAc,EAAE,OAAO;QACvB,aAAa;QACb,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;AACL,CAAC;AAOD,KAAK,UAAU,oBAAoB,CAAC,EAAE,WAAW,EAAE,aAAa,EAA+B;IAC7F,MAAM,kCAAkC,GAAG,IAAA,uBAAQ,EAAC,2BAA2B,CAAC,CAAC;IACjF,MAAM,0BAA0B,GAA8B,IAAI,GAAG,EAAwB,CAAC;IAE9F,MAAM,+BAA+B,GAAG,KAAK,IAAI,EAAE;QACjD,MAAM,kBAAkB,GAAG,MAAM,wCAAwC,CAAC,WAAW,CAAC,CAAC;QAEvF,wCAAwC;QACxC,iDAAiD;QACjD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;QACzD,MAAM,oBAAoB,GAAG,EAAE,CAAC;QAChC,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,0BAA0B,EAAE,CAAC;YAC/C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7B,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,oBAAoB,EAAE,CAAC;YACvC,MAAM,OAAO,GAAG,0BAA0B,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACpD,OAAO,EAAE,KAAK,EAAE,CAAC;YACjB,0BAA0B,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACzC,CAAC;QAED,wCAAwC;QACxC,MAAM,mBAAmB,GAAG,CAAC,GAAW,EAAE,EAAE;YAC1C,OAAO,YAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;gBACrF,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,OAAO;gBACT,CAAC;gBAED,MAAM,gBAAgB,GAAG,cAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;gBACrD,IAAI,YAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;oBACpC,kCAAkC,CAAC;wBACjC,QAAQ,EAAE,gBAAgB;wBAC1B,OAAO,EAAE,cAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC;wBACvC,aAAa;qBACd,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,kBAAkB,IAAI,EAAE,EAAE,CAAC;YAC3C,MAAM,OAAO,GAAG,0BAA0B,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACpD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,0BAA0B,CAAC,GAAG,CAAC,GAAG,EAAE,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IACF,MAAM,+BAA+B,EAAE,CAAC;IAExC,MAAM,cAAc,GAAG,YAAE,CAAC,KAAK,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QACpE,IAAI,KAAK,KAAK,QAAQ,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YACtD,6DAA6D;YAC7D,KAAK,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,0BAA0B,EAAE,CAAC;gBACtD,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,CAAC;YACD,cAAc,CAAC,KAAK,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,MAAM,+BAA+B,EAAE,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,6BAA6B,CAAC,GAAsB;IACxE,OAAO,GAAG;SACP,OAAO,CAAC,0BAA0B,CAAC;SACnC,OAAO,CAAC,oEAAoE,CAAC;SAC7E,WAAW,CACV;;+DAEyD,CAC1D;SACA,cAAc,CACb,6BAA6B,EAC7B,0FAA0F,CAC3F;SACA,MAAM,CAAC,cAAc,EAAE,mEAAmE,CAAC;SAC3F,MAAM,CACL,sCAAsC,EACtC,kQAAkQ,EAClQ,kBAAkB,CACnB;SACA,MAAM,CAAC,KAAK,EAAE,OAAiD,EAAE,EAAE;QAClE,MAAM,UAAU,GAAG,IAAA,oCAAqB,EAAC,OAAO,CAAC,CAAC;QAClD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QAED,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC;QAC5C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,MAAM,kBAAkB,GAAG,MAAM,wCAAwC,CAAC,WAAW,CAAC,CAAC;QACvF,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,KAAK,MAAM,GAAG,IAAI,kBAAkB,EAAE,CAAC;YACrC,IAAI,KAAK,EAAE,MAAM,MAAM,IAAI,IAAA,4BAAoB,EAAC,GAAG,CAAC,EAAE,CAAC;gBACrD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACpC,SAAS;gBACX,CAAC;gBAED,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAED,MAAM,IAAA,eAAO,EACX,OAAO,EACP,KAAK,EAAE,MAAM,EAAE,EAAE,CACf,MAAM,2BAA2B,CAAC;YAChC,QAAQ,EAAE,MAAM,CAAC,IAAI;YACrB,OAAO,EAAE,MAAM,CAAC,UAAU;YAC1B,aAAa,EAAE,UAAU,CAAC,aAAa;SACxC,CAAC,CACL,CAAC;QAEF,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,oBAAoB,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;QACvF,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"} \ No newline at end of file +{"version":3,"file":"inlineModulesInterfaceCommand.js","sourceRoot":"","sources":["../../src/commands/inlineModulesInterfaceCommand.ts"],"names":[],"mappings":";;;;;AA0HA,sEA6DC;AAtLD,4CAAoB;AACpB,gDAAwB;AAExB,iDAMwB;AAExB,oCAAyD;AAEzD,KAAK,UAAU,wCAAwC,CACrD,WAAmB;IAEnB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;QAC7E,MAAM,kBAAkB,GAAG,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,kBAAkB,CAAC;QAEzF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACvC,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACrD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GAAG,cAAI,CAAC,OAAO,CAAC,cAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;QACxD,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,cAAI,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IACvF,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,iBAAiB,WAAW,GAAG,EAAE,CAAC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAQD,KAAK,UAAU,2BAA2B,CAAC,EACzC,QAAQ,EACR,OAAO,EACP,aAAa,GACuB;IACpC,OAAO,MAAM,IAAA,qCAAsB,EAAC;QAClC,cAAc,EAAE,CAAC,QAAQ,CAAC;QAC1B,cAAc,EAAE,OAAO;QACvB,aAAa;QACb,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;AACL,CAAC;AAOD,KAAK,UAAU,oBAAoB,CAAC,EAAE,WAAW,EAAE,aAAa,EAA+B;IAC7F,MAAM,kCAAkC,GAAG,IAAA,uBAAQ,EAAC,2BAA2B,CAAC,CAAC;IACjF,MAAM,0BAA0B,GAA8B,IAAI,GAAG,EAAwB,CAAC;IAE9F,MAAM,+BAA+B,GAAG,KAAK,IAAI,EAAE;QACjD,MAAM,kBAAkB,GAAG,MAAM,wCAAwC,CAAC,WAAW,CAAC,CAAC;QAEvF,wCAAwC;QACxC,iDAAiD;QACjD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;QACzD,MAAM,oBAAoB,GAAG,EAAE,CAAC;QAChC,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,0BAA0B,EAAE,CAAC;YAC/C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7B,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,oBAAoB,EAAE,CAAC;YACvC,MAAM,OAAO,GAAG,0BAA0B,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACpD,OAAO,EAAE,KAAK,EAAE,CAAC;YACjB,0BAA0B,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACzC,CAAC;QAED,wCAAwC;QACxC,MAAM,mBAAmB,GAAG,CAAC,GAAW,EAAE,EAAE;YAC1C,OAAO,YAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;gBACrF,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,OAAO;gBACT,CAAC;gBAED,MAAM,gBAAgB,GAAG,cAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;gBACrD,IAAI,YAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;oBACpC,kCAAkC,CAAC;wBACjC,QAAQ,EAAE,gBAAgB;wBAC1B,OAAO,EAAE,cAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC;wBACvC,aAAa;qBACd,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,kBAAkB,IAAI,EAAE,EAAE,CAAC;YAC3C,MAAM,OAAO,GAAG,0BAA0B,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACpD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,0BAA0B,CAAC,GAAG,CAAC,GAAG,EAAE,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IACF,MAAM,+BAA+B,EAAE,CAAC;IAExC,MAAM,cAAc,GAAG,YAAE,CAAC,KAAK,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QACpE,IAAI,KAAK,KAAK,QAAQ,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YACtD,6DAA6D;YAC7D,KAAK,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,0BAA0B,EAAE,CAAC;gBACtD,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,CAAC;YACD,cAAc,CAAC,KAAK,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,MAAM,+BAA+B,EAAE,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,6BAA6B,CAAC,GAAsB;IACxE,OAAO,GAAG;SACP,OAAO,CAAC,0BAA0B,CAAC;SACnC,OAAO,CAAC,oEAAoE,CAAC;SAC7E,WAAW,CACV;;+DAEyD,CAC1D;SACA,cAAc,CACb,6BAA6B,EAC7B,0FAA0F,CAC3F;SACA,MAAM,CAAC,cAAc,EAAE,mEAAmE,CAAC;SAC3F,MAAM,CACL,sCAAsC,EACtC,kQAAkQ,EAClQ,kBAAkB,CACnB;SACA,MAAM,CAAC,KAAK,EAAE,OAAiD,EAAE,EAAE;QAClE,MAAM,UAAU,GAAG,IAAA,oCAAqB,EAAC,OAAO,CAAC,CAAC;QAClD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QACD,IAAA,0CAA2B,EAAC,UAAU,EAAE,cAAc,CAAC,CAAC;QAExD,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC;QAC5C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,MAAM,kBAAkB,GAAG,MAAM,wCAAwC,CAAC,WAAW,CAAC,CAAC;QACvF,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,KAAK,MAAM,GAAG,IAAI,kBAAkB,EAAE,CAAC;YACrC,IAAI,KAAK,EAAE,MAAM,MAAM,IAAI,IAAA,4BAAoB,EAAC,GAAG,CAAC,EAAE,CAAC;gBACrD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACpC,SAAS;gBACX,CAAC;gBAED,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAED,MAAM,IAAA,eAAO,EACX,OAAO,EACP,KAAK,EAAE,MAAM,EAAE,EAAE,CACf,MAAM,2BAA2B,CAAC;YAChC,QAAQ,EAAE,MAAM,CAAC,IAAI;YACrB,OAAO,EAAE,MAAM,CAAC,UAAU;YAC1B,aAAa,EAAE,UAAU,CAAC,aAAa;SACxC,CAAC,CACL,CAAC;QAEF,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,oBAAoB,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;QACvF,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"} \ No newline at end of file diff --git a/packages/expo-type-information/build/commands/moduleInterfaceCommand.js b/packages/expo-type-information/build/commands/moduleInterfaceCommand.js index 4179bb3b5d75be..02028d453899b4 100644 --- a/packages/expo-type-information/build/commands/moduleInterfaceCommand.js +++ b/packages/expo-type-information/build/commands/moduleInterfaceCommand.js @@ -22,6 +22,7 @@ function moduleInterfaceCommand(cli) { if (!parsedArgs) { return; } + (0, commandUtils_1.maybePrepareOutputDirectory)(parsedArgs.realOutputPath); const { realInputPaths, realOutputPath } = parsedArgs; const command = async () => { const typeInfo = await (0, commandUtils_1.getFileTypeInformationFromArgs)(parsedArgs); diff --git a/packages/expo-type-information/build/commands/moduleInterfaceCommand.js.map b/packages/expo-type-information/build/commands/moduleInterfaceCommand.js.map index ec53c13e22a0e3..5df4e49c14c6b5 100644 --- a/packages/expo-type-information/build/commands/moduleInterfaceCommand.js.map +++ b/packages/expo-type-information/build/commands/moduleInterfaceCommand.js.map @@ -1 +1 @@ -{"version":3,"file":"moduleInterfaceCommand.js","sourceRoot":"","sources":["../../src/commands/moduleInterfaceCommand.ts"],"names":[],"mappings":";;;;;AAaA,wDAgDC;AA5DD,gDAAwB;AAExB,iDAOwB;AACxB,kEAAkE;AAElE,SAAgB,sBAAsB,CAAC,GAAsB;IAC3D,OAAO,IAAA,+BAAgB,EAAC,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;SACrD,OAAO,CAAC,mDAAmD,CAAC;SAC5D,WAAW,CACV;;;;;;CAML,CACI;SACA,MAAM,CAAC,KAAK,EAAE,OAAiD,EAAE,EAAE;QAClE,MAAM,UAAU,GAAG,MAAM,IAAA,oCAAqB,EAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC/D,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QACD,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,UAAU,CAAC;QAEtD,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;YACzB,MAAM,QAAQ,GAAG,MAAM,IAAA,6CAA8B,EAAC,UAAU,CAAC,CAAC;YAClE,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO;YACT,CAAC;YACD,MAAM,cAAc,GAAG,MAAM,IAAA,8CAAuB,EAAC,QAAQ,CAAC,CAAC;YAC/D,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,OAAO;YACT,CAAC;YACD,MAAM,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,SAAS,EAAE,GAAG,cAAc,CAAC;YAE1F,MAAM,OAAO,GAAG,cAAc,IAAI,cAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAW,CAAC,CAAC;YAC5E,MAAM,iBAAiB,GAAG,EAAE,CAAC;YAC7B,KAAK,MAAM,UAAU,IAAI;gBACvB,eAAe;gBACf,GAAG,gBAAgB;gBACnB,gBAAgB;gBAChB,SAAS;aACV,EAAE,CAAC;gBACF,MAAM,cAAc,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC9D,iBAAiB,CAAC,IAAI,CACpB,IAAA,gCAAiB,EAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAC7E,CAAC;YACJ,CAAC;YACD,MAAM,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QACvC,CAAC,CAAC;QAEF,IAAA,gCAAiB,EAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACP,CAAC"} \ No newline at end of file +{"version":3,"file":"moduleInterfaceCommand.js","sourceRoot":"","sources":["../../src/commands/moduleInterfaceCommand.ts"],"names":[],"mappings":";;;;;AAcA,wDAiDC;AA9DD,gDAAwB;AAExB,iDAQwB;AACxB,kEAAkE;AAElE,SAAgB,sBAAsB,CAAC,GAAsB;IAC3D,OAAO,IAAA,+BAAgB,EAAC,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;SACrD,OAAO,CAAC,mDAAmD,CAAC;SAC5D,WAAW,CACV;;;;;;CAML,CACI;SACA,MAAM,CAAC,KAAK,EAAE,OAAiD,EAAE,EAAE;QAClE,MAAM,UAAU,GAAG,MAAM,IAAA,oCAAqB,EAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC/D,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QACD,IAAA,0CAA2B,EAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QACvD,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,UAAU,CAAC;QAEtD,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;YACzB,MAAM,QAAQ,GAAG,MAAM,IAAA,6CAA8B,EAAC,UAAU,CAAC,CAAC;YAClE,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO;YACT,CAAC;YACD,MAAM,cAAc,GAAG,MAAM,IAAA,8CAAuB,EAAC,QAAQ,CAAC,CAAC;YAC/D,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,OAAO;YACT,CAAC;YACD,MAAM,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,SAAS,EAAE,GAAG,cAAc,CAAC;YAE1F,MAAM,OAAO,GAAG,cAAc,IAAI,cAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAW,CAAC,CAAC;YAC5E,MAAM,iBAAiB,GAAG,EAAE,CAAC;YAC7B,KAAK,MAAM,UAAU,IAAI;gBACvB,eAAe;gBACf,GAAG,gBAAgB;gBACnB,gBAAgB;gBAChB,SAAS;aACV,EAAE,CAAC;gBACF,MAAM,cAAc,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC9D,iBAAiB,CAAC,IAAI,CACpB,IAAA,gCAAiB,EAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAC7E,CAAC;YACJ,CAAC;YACD,MAAM,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QACvC,CAAC,CAAC;QAEF,IAAA,gCAAiB,EAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACP,CAAC"} \ No newline at end of file diff --git a/packages/expo-type-information/src/commands/commandUtils.ts b/packages/expo-type-information/src/commands/commandUtils.ts index 6138d839651c34..e75588a6ba5c9d 100644 --- a/packages/expo-type-information/src/commands/commandUtils.ts +++ b/packages/expo-type-information/src/commands/commandUtils.ts @@ -133,6 +133,10 @@ export function sanitizeAndValidateOutputPath( if (isFilePath && fs.existsSync(path.dirname(resolvedPath))) { return resolvedPath; } + + if (!isFilePath) { + return resolvedPath; + } } catch {} return null; @@ -189,6 +193,17 @@ export function uniqueStrings(strings: string[]): string[] { return [...new Set(strings)]; } +export async function maybePrepareOutputDirectory(dirName?: string) { + if (!dirName) { + return; + } + try { + await fs.promises.mkdir(dirName, { recursive: true }); + } catch { + console.error(`Error creating the output directory: ${dirName}`); + } +} + export function parseCommandArguments( options: TypeInformationCommandCommonAllArguments, isOutputFile: boolean = true @@ -216,7 +231,7 @@ export function parseCommandArguments( const validatedOutPath = sanitizeAndValidateOutputPath(options.outputPath, isOutputFile); if (!validatedOutPath) { console.error( - `Output path ${options.outputPath} is not valid. ${isOutputFile ? 'Provide a path to an existing file, or to a file in an existing parent directory.' : 'Provide a path to an existing directory.'}` + `Output path ${options.outputPath} is not valid. ${isOutputFile ? 'Provide a path to an existing file, or to a file in an existing parent directory.' : 'Provide a valid path to a directory.'}` ); return null; } diff --git a/packages/expo-type-information/src/commands/inlineModulesInterfaceCommand.ts b/packages/expo-type-information/src/commands/inlineModulesInterfaceCommand.ts index 3442cc38482c8e..eabaa55eb82453 100644 --- a/packages/expo-type-information/src/commands/inlineModulesInterfaceCommand.ts +++ b/packages/expo-type-information/src/commands/inlineModulesInterfaceCommand.ts @@ -5,6 +5,7 @@ import path from 'path'; import { debounce, generateConciseTsFiles, + maybePrepareOutputDirectory, parseCommandArguments, TypeInformationCommandCommonAllArguments, } from './commandUtils'; @@ -143,6 +144,7 @@ export async function inlineModulesInterfaceCommand(cli: commander.Command) { if (!parsedArgs) { return; } + maybePrepareOutputDirectory(parsedArgs?.realOutputPath); const { appJsonPath, watcher } = parsedArgs; if (!appJsonPath) { diff --git a/packages/expo-type-information/src/commands/moduleInterfaceCommand.ts b/packages/expo-type-information/src/commands/moduleInterfaceCommand.ts index 592fa4bfdddb81..19ede2e285371a 100644 --- a/packages/expo-type-information/src/commands/moduleInterfaceCommand.ts +++ b/packages/expo-type-information/src/commands/moduleInterfaceCommand.ts @@ -4,6 +4,7 @@ import path from 'path'; import { addCommonOptions, getFileTypeInformationFromArgs, + maybePrepareOutputDirectory, parseCommandArguments, runCommandOnWatch, TypeInformationCommandCommonAllArguments, @@ -28,6 +29,7 @@ export function moduleInterfaceCommand(cli: commander.Command) { if (!parsedArgs) { return; } + maybePrepareOutputDirectory(parsedArgs.realOutputPath); const { realInputPaths, realOutputPath } = parsedArgs; const command = async () => { From 5d08ef56bd263169b90b9871c8c75dcf70584771 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nishan=20=28o=5E=E2=96=BD=5Eo=29?= Date: Thu, 21 May 2026 17:02:28 +0530 Subject: [PATCH 12/28] [image][maps][android] Fix SVG handling in `useImage` and map markers (#46077) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # Why Fixes - https://github.com/expo/expo/issues/46060 and https://github.com/expo/expo/issues/38323 # How ### 1. Crash fix Only set `svg.documentSize = size.toFloat()` if user passed width/height is `> 0`. The root cause of crash was that the size of documentHeight/Width was getting set to minimum integer value passed as default by Glide (Glide passes this value as an indicator of no explicit size passed) Screenshot 2026-05-21 at 1 28 34 PM ### 2. Fix SVG marker rendering in Expo Maps. Call `toBitmap()` instead of `.bitmap`. `toBitmap()` calls the SVG drawable's `toBitmap()` which rasterizes the vector to bitmap. # Test Plan - Added `useImage` with SVG testcase in bare-expo - Added a screen for SVG maxWidth/height sizing to make sure output is consistent on Android and iOS. # Checklist - [ ] I added a `changelog.md` entry and rebuilt the package sources according to [this short guide](https://github.com/expo/expo/blob/main/CONTRIBUTING.md#-before-submitting) - [ ] This diff will work correctly for `npx expo prebuild` & EAS Build (eg: updated a module plugin). - [ ] Conforms with the [Documentation Writing Style Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md) --- .../google/MapsImageRefIntegrationScreen.tsx | 36 ++++++-- .../src/screens/Image/ImageScreen.tsx | 7 ++ .../screens/Image/ImageSvgSizingScreen.tsx | 92 +++++++++++++++++++ apps/test-suite/assets/expo.svg | 9 ++ apps/test-suite/tests/Image.js | 23 +++++ packages/expo-image/CHANGELOG.md | 2 + .../java/expo/modules/image/svg/SVGDecoder.kt | 20 +++- packages/expo-maps/CHANGELOG.md | 2 + .../java/expo/modules/maps/GoogleMapsView.kt | 55 +++++------ 9 files changed, 209 insertions(+), 37 deletions(-) create mode 100644 apps/native-component-list/src/screens/Image/ImageSvgSizingScreen.tsx create mode 100644 apps/test-suite/assets/expo.svg diff --git a/apps/native-component-list/src/screens/ExpoMaps/google/MapsImageRefIntegrationScreen.tsx b/apps/native-component-list/src/screens/ExpoMaps/google/MapsImageRefIntegrationScreen.tsx index 52a72f58cabfd1..1d3ca3b167a422 100644 --- a/apps/native-component-list/src/screens/ExpoMaps/google/MapsImageRefIntegrationScreen.tsx +++ b/apps/native-component-list/src/screens/ExpoMaps/google/MapsImageRefIntegrationScreen.tsx @@ -2,18 +2,38 @@ import { useImage } from 'expo-image'; import { GoogleMaps } from 'expo-maps'; import { View } from 'react-native'; -export default function MapsCameraControlsScreen() { - const image = useImage('https://picsum.photos/128', { +const VANCOUVER = { + latitude: 49.246292, + longitude: -123.116226, +}; + +const VANCOUVER_SVG = { + latitude: VANCOUVER.latitude + 0.01, + longitude: VANCOUVER.longitude + 0.01, +}; + +export default function MapsImageRefIntegrationScreen() { + const pngImage = useImage('https://picsum.photos/128', { + onError(error) { + console.error(error); + }, + }); + + // maxWidth/maxHeight control the rasterized resolution, without them the + // SVG renders at its viewBox size (24x22 px here), which is too small to + // see on a city-zoom map. + const svgImage = useImage(require('../../../../assets/images/expo.svg'), { + maxWidth: 128, + maxHeight: 128, onError(error) { console.error(error); }, }); - const coordinates = { - latitude: 49.246292, - longitude: -123.116226, - }; - const markers = image ? [{ title: 'Vancouver', coordinates, icon: image }] : []; + const markers = [ + ...(pngImage ? [{ title: 'PNG marker', coordinates: VANCOUVER, icon: pngImage }] : []), + ...(svgImage ? [{ title: 'SVG marker', coordinates: VANCOUVER_SVG, icon: svgImage }] : []), + ]; return ( @@ -21,7 +41,7 @@ export default function MapsCameraControlsScreen() { style={{ width: 'auto', height: '100%' }} cameraPosition={{ zoom: 10, - coordinates, + coordinates: VANCOUVER, }} markers={markers} /> diff --git a/apps/native-component-list/src/screens/Image/ImageScreen.tsx b/apps/native-component-list/src/screens/Image/ImageScreen.tsx index 9cd6c00a127d83..194738672a8291 100644 --- a/apps/native-component-list/src/screens/Image/ImageScreen.tsx +++ b/apps/native-component-list/src/screens/Image/ImageScreen.tsx @@ -126,6 +126,13 @@ export const ImageScreens = [ return optionalRequire(() => require('./ImageTintingScreen')); }, }, + { + name: 'SVG sizing (maxWidth/maxHeight)', + route: 'image/svg-sizing', + getComponent() { + return optionalRequire(() => require('./ImageSvgSizingScreen')); + }, + }, { name: 'Hash Placeholders', route: 'image/hash-placeholders', diff --git a/apps/native-component-list/src/screens/Image/ImageSvgSizingScreen.tsx b/apps/native-component-list/src/screens/Image/ImageSvgSizingScreen.tsx new file mode 100644 index 00000000000000..1105646d2b1980 --- /dev/null +++ b/apps/native-component-list/src/screens/Image/ImageSvgSizingScreen.tsx @@ -0,0 +1,92 @@ +import { Image, ImageLoadOptions, ImageSource, useImage } from 'expo-image'; +import { Platform, ScrollView, StyleSheet, Text, View } from 'react-native'; + +import MonoText from '../../components/MonoText'; + +const EXPO_SVG = require('../../../assets/images/expo.svg'); +const PIN_SVG = require('../../../assets/images/pin.svg'); +const REACT_SVG: ImageSource = { + uri: 'https://upload.wikimedia.org/wikipedia/commons/a/a7/React-icon.svg', +}; + +const CASES: { label: string; source: ImageSource; options?: ImageLoadOptions }[] = [ + { label: 'expo.svg — no options', source: EXPO_SVG }, + { + label: 'expo.svg — maxWidth/maxHeight: 64', + source: EXPO_SVG, + options: { maxWidth: 64, maxHeight: 64 }, + }, + { + label: 'expo.svg — maxWidth/maxHeight: 256', + source: EXPO_SVG, + options: { maxWidth: 256, maxHeight: 256 }, + }, + { label: 'pin.svg — no options', source: PIN_SVG }, + { + label: 'pin.svg — maxWidth/maxHeight: 128', + source: PIN_SVG, + options: { maxWidth: 128, maxHeight: 128 }, + }, + { label: 'react-icon.svg (remote) — no options', source: REACT_SVG }, + { + label: 'react-icon.svg (remote) — maxWidth/maxHeight: 64', + source: REACT_SVG, + options: { maxWidth: 64, maxHeight: 64 }, + }, +]; + +function Case({ label, source, options }: (typeof CASES)[number]) { + const image = useImage(source, options); + return ( + + {label} + + {image ? `image.width × image.height = ${image.width} × ${image.height}` : '(loading…)'} + + + {image && ( + + )} + + + ); +} + +export default function ImageSvgSizingScreen() { + return ( + + + Compare what {``} reports for `image.width` / `image.height` on {Platform.OS}, + with and without `maxWidth`/`maxHeight`. + + {CASES.map((c, i) => ( + + ))} + + ); +} + +const styles = StyleSheet.create({ + container: { flex: 1, backgroundColor: '#fff' }, + header: { padding: 16, fontSize: 13, color: '#444' }, + case: { + padding: 12, + borderBottomWidth: StyleSheet.hairlineWidth, + borderBottomColor: '#ccc', + gap: 8, + }, + label: { fontWeight: '600' }, + preview: { + backgroundColor: '#f5f5f5', + alignItems: 'center', + justifyContent: 'center', + }, + previewImage: { width: 100, height: 200 }, +}); diff --git a/apps/test-suite/assets/expo.svg b/apps/test-suite/assets/expo.svg new file mode 100644 index 00000000000000..38839863515c54 --- /dev/null +++ b/apps/test-suite/assets/expo.svg @@ -0,0 +1,9 @@ + + + diff --git a/apps/test-suite/tests/Image.js b/apps/test-suite/tests/Image.js index a27d56eede4a23..bfbc65a1a19f5d 100644 --- a/apps/test-suite/tests/Image.js +++ b/apps/test-suite/tests/Image.js @@ -69,6 +69,29 @@ export async function test(t, { setPortalChild, cleanupPortal }) { t.expect(image.scale).toBe(1); t.expect(image.isAnimated).toBe(false); }); + + t.it('loads a local SVG asset without crashing', async () => { + const image = await Image.loadAsync(require('../assets/expo.svg')); + + t.expect(image).toBeDefined(); + t.expect(image instanceof Image.Image).toBe(true); + t.expect(image.width).toBeGreaterThan(0); + t.expect(image.height).toBeGreaterThan(0); + }); + + t.it('preserves the SVG aspect ratio when maxWidth/maxHeight are provided', async () => { + const image = await Image.loadAsync(require('../assets/expo.svg'), { + maxWidth: 64, + maxHeight: 64, + }); + + t.expect(image.width).toBe(64); + t.expect(image.height).toBeLessThan(64); + t.expect(image.height).toBeGreaterThan(0); + // Aspect ratio should match the viewBox within a small rounding tolerance. + const aspect = image.width / image.height; + t.expect(Math.abs(aspect - 24 / 22)).toBeLessThan(0.05); + }); }); } diff --git a/packages/expo-image/CHANGELOG.md b/packages/expo-image/CHANGELOG.md index 1c558e241e100d..29747435a25909 100644 --- a/packages/expo-image/CHANGELOG.md +++ b/packages/expo-image/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- [Android] Fixed `useImage` crashing on SVG sources, and made `maxWidth`/`maxHeight` preserve the SVG's aspect ratio. ([#46077](https://github.com/expo/expo/pull/46077) by [@nishan](https://github.com/intergalacticspacehighway)) + ### 💡 Others ## 56.0.7 — 2026-05-21 diff --git a/packages/expo-image/android/src/main/java/expo/modules/image/svg/SVGDecoder.kt b/packages/expo-image/android/src/main/java/expo/modules/image/svg/SVGDecoder.kt index 2f4597404e1ac8..a5c9cdaeb09df4 100644 --- a/packages/expo-image/android/src/main/java/expo/modules/image/svg/SVGDecoder.kt +++ b/packages/expo-image/android/src/main/java/expo/modules/image/svg/SVGDecoder.kt @@ -24,7 +24,6 @@ class SVGDecoder : ResourceDecoder { return try { val svg: SVG = SVG.getFromInputStream(source) // Use document width and height if view box is not set. - // Later, we will override the document width and height with the dimensions of the native view. if (svg.documentViewBox == null) { val documentWidth = svg.documentWidth val documentHeight = svg.documentHeight @@ -32,8 +31,23 @@ class SVGDecoder : ResourceDecoder { svg.setDocumentViewBox(0f, 0f, documentWidth, documentHeight) } } - svg.documentWidth = width.toFloat() - svg.documentHeight = height.toFloat() + + // Render at maxWidth/maxHeight if provided (preserving aspect ratio), otherwise at the viewBox's natural size. + val viewBox = svg.documentViewBox + if (viewBox != null && viewBox.width() > 0 && viewBox.height() > 0) { + val scaleW = if (width > 0) width.toFloat() / viewBox.width() else Float.POSITIVE_INFINITY + val scaleH = if (height > 0) height.toFloat() / viewBox.height() else Float.POSITIVE_INFINITY + val scale = if (scaleW.isFinite() || scaleH.isFinite()) minOf(scaleW, scaleH) else 1f + if (scale.isFinite() && scale > 0) { + svg.documentWidth = viewBox.width() * scale + svg.documentHeight = viewBox.height() * scale + } + } else if (width > 0 && height > 0) { + // No viewBox available to derive an aspect ratio from, fall back to the requested bounds. + svg.documentWidth = width.toFloat() + svg.documentHeight = height.toFloat() + } + SimpleResource(svg) } catch (ex: SVGParseException) { throw IOException("Cannot load SVG from stream", ex) diff --git a/packages/expo-maps/CHANGELOG.md b/packages/expo-maps/CHANGELOG.md index b24900065c1444..081d94a0b6ab87 100644 --- a/packages/expo-maps/CHANGELOG.md +++ b/packages/expo-maps/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- [Android] Fixed SVG drawables not rendering as Google Maps marker icons, and memoized marker rasterization across recompositions. ([#46077](https://github.com/expo/expo/pull/46077) by [@nishan](https://github.com/intergalacticspacehighway)) + ### 💡 Others ## 56.0.5 — 2026-05-13 diff --git a/packages/expo-maps/android/src/main/java/expo/modules/maps/GoogleMapsView.kt b/packages/expo-maps/android/src/main/java/expo/modules/maps/GoogleMapsView.kt index a8c8358590a397..82450b6ab008ef 100644 --- a/packages/expo-maps/android/src/main/java/expo/modules/maps/GoogleMapsView.kt +++ b/packages/expo-maps/android/src/main/java/expo/modules/maps/GoogleMapsView.kt @@ -4,16 +4,17 @@ import android.annotation.SuppressLint import android.content.Context import android.graphics.Bitmap import android.graphics.Point -import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.Drawable import android.view.MotionEvent import androidx.compose.foundation.layout.fillMaxSize +import androidx.core.graphics.drawable.toBitmap import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.MutableState import androidx.compose.runtime.State import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue +import androidx.compose.runtime.key import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Modifier @@ -192,30 +193,32 @@ class GoogleMapsView(context: Context, appContext: AppContext) : ) for ((marker, state) in markerState.value) { - val icon = getIconDescriptor(marker) - - Marker( - state = state, - title = marker.title, - snippet = marker.snippet, - draggable = marker.draggable, - anchor = marker.anchor.toOffset(), - zIndex = marker.zIndex, - icon = icon, - onClick = { - onMarkerClick( - // We can't send icon to js, because it's not serializable - // So we need to remove it from the marker record - MarkerRecord( - id = marker.id, - title = marker.title, - snippet = marker.snippet, - coordinates = marker.coordinates + key(marker.id) { + val icon = remember(marker.icon) { getIconDescriptor(marker) } + + Marker( + state = state, + title = marker.title, + snippet = marker.snippet, + draggable = marker.draggable, + anchor = marker.anchor.toOffset(), + zIndex = marker.zIndex, + icon = icon, + onClick = { + onMarkerClick( + // We can't send icon to js, because it's not serializable + // So we need to remove it from the marker record + MarkerRecord( + id = marker.id, + title = marker.title, + snippet = marker.snippet, + coordinates = marker.coordinates + ) ) - ) - !marker.showCallout - } - ) + !marker.showCallout + } + ) + } } } } @@ -414,12 +417,12 @@ class GoogleMapsView(context: Context, appContext: AppContext) : private fun getIconDescriptor(marker: MarkerRecord): BitmapDescriptor? { return marker.icon?.let { icon -> val bitmap = if (icon.`is`(toKClass>())) { - (icon.get(toKClass>()).ref as? BitmapDrawable)?.bitmap + icon.get(toKClass>()).ref.toBitmap() } else { icon.get(toKClass>()).ref } - bitmap?.let { BitmapDescriptorFactory.fromBitmap(it) } + BitmapDescriptorFactory.fromBitmap(bitmap) } } } From faf927cf683a37cedb7da1c145166a59ced51dd4 Mon Sep 17 00:00:00 2001 From: Mathieu Acthernoene Date: Thu, 21 May 2026 13:59:06 +0200 Subject: [PATCH 13/28] Switch typed plugins bridge file to CommonJS (#46089) # Why Fix https://github.com/expo/expo/issues/46082 # How Some packages doesn't have a package.json exports map, so for them we used an `index.js` bridge file that re-export what' inside `/build`. Those cannot be ES modules. # Test Plan - Clone https://github.com/LeonDvlpmnt/typed-config-plugins-reproducer - Edit `node_modules/expo-camera/plugin/index.js` and add `node_modules/expo-camera/plugin/index.d.ts` - Restart the TS language server - Run `expo start`, `expo prebuild` # Checklist - [ ] I added a `changelog.md` entry and rebuilt the package sources according to [this short guide](https://github.com/expo/expo/blob/main/CONTRIBUTING.md#-before-submitting) - [ ] This diff will work correctly for `npx expo prebuild` & EAS Build (eg: updated a module plugin). - [ ] Conforms with the [Documentation Writing Style Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md) --- packages/expo-apple-authentication/CHANGELOG.md | 2 ++ packages/expo-apple-authentication/plugin/index.d.ts | 1 + packages/expo-apple-authentication/plugin/index.js | 2 +- packages/expo-audio/CHANGELOG.md | 2 ++ packages/expo-audio/plugin/index.d.ts | 1 + packages/expo-audio/plugin/index.js | 2 +- packages/expo-background-fetch/CHANGELOG.md | 2 ++ packages/expo-background-fetch/plugin/index.d.ts | 1 + packages/expo-background-fetch/plugin/index.js | 2 +- packages/expo-background-task/CHANGELOG.md | 2 ++ packages/expo-background-task/plugin/index.d.ts | 1 + packages/expo-background-task/plugin/index.js | 2 +- packages/expo-brightness/CHANGELOG.md | 2 ++ packages/expo-brightness/plugin/index.d.ts | 1 + packages/expo-brightness/plugin/index.js | 2 +- packages/expo-calendar/CHANGELOG.md | 2 ++ packages/expo-calendar/plugin/index.d.ts | 1 + packages/expo-calendar/plugin/index.js | 2 +- packages/expo-camera/CHANGELOG.md | 2 ++ packages/expo-camera/plugin/index.d.ts | 1 + packages/expo-camera/plugin/index.js | 2 +- packages/expo-cellular/CHANGELOG.md | 2 ++ packages/expo-cellular/plugin/index.d.ts | 1 + packages/expo-cellular/plugin/index.js | 2 +- packages/expo-contacts/CHANGELOG.md | 2 ++ packages/expo-contacts/plugin/index.d.ts | 1 + packages/expo-contacts/plugin/index.js | 2 +- packages/expo-dev-client/CHANGELOG.md | 2 ++ packages/expo-dev-client/plugin/index.d.ts | 1 + packages/expo-dev-client/plugin/index.js | 2 +- packages/expo-dev-launcher/CHANGELOG.md | 2 ++ packages/expo-dev-launcher/plugin/index.d.ts | 1 + packages/expo-dev-launcher/plugin/index.js | 2 +- packages/expo-dev-menu/CHANGELOG.md | 2 ++ packages/expo-dev-menu/plugin/index.d.ts | 1 + packages/expo-dev-menu/plugin/index.js | 2 +- packages/expo-document-picker/CHANGELOG.md | 2 ++ packages/expo-document-picker/plugin/index.d.ts | 1 + packages/expo-document-picker/plugin/index.js | 2 +- packages/expo-image-picker/CHANGELOG.md | 2 ++ packages/expo-image-picker/plugin/index.d.ts | 1 + packages/expo-image-picker/plugin/index.js | 2 +- packages/expo-image/CHANGELOG.md | 1 + packages/expo-image/plugin/index.d.ts | 1 + packages/expo-image/plugin/index.js | 2 +- packages/expo-local-authentication/CHANGELOG.md | 2 ++ packages/expo-local-authentication/plugin/index.d.ts | 1 + packages/expo-local-authentication/plugin/index.js | 2 +- packages/expo-localization/CHANGELOG.md | 2 ++ packages/expo-localization/plugin/index.d.ts | 1 + packages/expo-localization/plugin/index.js | 2 +- packages/expo-location/CHANGELOG.md | 2 ++ packages/expo-location/plugin/index.d.ts | 1 + packages/expo-location/plugin/index.js | 2 +- packages/expo-mail-composer/CHANGELOG.md | 2 ++ packages/expo-mail-composer/plugin/index.d.ts | 1 + packages/expo-mail-composer/plugin/index.js | 2 +- packages/expo-maps/CHANGELOG.md | 1 + packages/expo-maps/plugin/index.d.ts | 1 + packages/expo-maps/plugin/index.js | 2 +- packages/expo-media-library/CHANGELOG.md | 2 ++ packages/expo-media-library/plugin/index.d.ts | 1 + packages/expo-media-library/plugin/index.js | 2 +- packages/expo-notifications/CHANGELOG.md | 2 ++ packages/expo-notifications/plugin/index.d.ts | 1 + packages/expo-notifications/plugin/index.js | 2 +- packages/expo-router/CHANGELOG.md | 2 ++ packages/expo-router/plugin/index.d.ts | 1 + packages/expo-router/plugin/index.js | 2 +- packages/expo-screen-orientation/CHANGELOG.md | 6 ++++-- packages/expo-screen-orientation/plugin/index.d.ts | 1 + packages/expo-screen-orientation/plugin/index.js | 2 +- packages/expo-secure-store/CHANGELOG.md | 2 ++ packages/expo-secure-store/plugin/index.d.ts | 1 + packages/expo-secure-store/plugin/index.js | 2 +- packages/expo-sensors/CHANGELOG.md | 2 ++ packages/expo-sensors/plugin/index.d.ts | 1 + packages/expo-sensors/plugin/index.js | 2 +- packages/expo-sharing/CHANGELOG.md | 2 ++ packages/expo-sharing/plugin/index.d.ts | 1 + packages/expo-sharing/plugin/index.js | 2 +- packages/expo-sqlite/CHANGELOG.md | 2 ++ packages/expo-sqlite/plugin/index.d.ts | 1 + packages/expo-sqlite/plugin/index.js | 2 +- packages/expo-system-ui/CHANGELOG.md | 2 ++ packages/expo-system-ui/plugin/index.d.ts | 1 + packages/expo-system-ui/plugin/index.js | 2 +- packages/expo-task-manager/CHANGELOG.md | 2 ++ packages/expo-task-manager/plugin/index.d.ts | 1 + packages/expo-task-manager/plugin/index.js | 2 +- packages/expo-tracking-transparency/CHANGELOG.md | 2 ++ packages/expo-tracking-transparency/plugin/index.d.ts | 1 + packages/expo-tracking-transparency/plugin/index.js | 2 +- packages/expo-updates/CHANGELOG.md | 2 ++ packages/expo-updates/plugin/index.d.ts | 1 + packages/expo-updates/plugin/index.js | 2 +- packages/expo-video/CHANGELOG.md | 2 ++ packages/expo-video/plugin/index.d.ts | 1 + packages/expo-video/plugin/index.js | 2 +- packages/expo-web-browser/CHANGELOG.md | 2 ++ packages/expo-web-browser/plugin/index.d.ts | 1 + packages/expo-web-browser/plugin/index.js | 2 +- packages/expo-widgets/CHANGELOG.md | 2 ++ packages/expo-widgets/plugin/index.d.ts | 1 + packages/expo-widgets/plugin/index.js | 2 +- 105 files changed, 140 insertions(+), 37 deletions(-) create mode 100644 packages/expo-apple-authentication/plugin/index.d.ts create mode 100644 packages/expo-audio/plugin/index.d.ts create mode 100644 packages/expo-background-fetch/plugin/index.d.ts create mode 100644 packages/expo-background-task/plugin/index.d.ts create mode 100644 packages/expo-brightness/plugin/index.d.ts create mode 100644 packages/expo-calendar/plugin/index.d.ts create mode 100644 packages/expo-camera/plugin/index.d.ts create mode 100644 packages/expo-cellular/plugin/index.d.ts create mode 100644 packages/expo-contacts/plugin/index.d.ts create mode 100644 packages/expo-dev-client/plugin/index.d.ts create mode 100644 packages/expo-dev-launcher/plugin/index.d.ts create mode 100644 packages/expo-dev-menu/plugin/index.d.ts create mode 100644 packages/expo-document-picker/plugin/index.d.ts create mode 100644 packages/expo-image-picker/plugin/index.d.ts create mode 100644 packages/expo-image/plugin/index.d.ts create mode 100644 packages/expo-local-authentication/plugin/index.d.ts create mode 100644 packages/expo-localization/plugin/index.d.ts create mode 100644 packages/expo-location/plugin/index.d.ts create mode 100644 packages/expo-mail-composer/plugin/index.d.ts create mode 100644 packages/expo-maps/plugin/index.d.ts create mode 100644 packages/expo-media-library/plugin/index.d.ts create mode 100644 packages/expo-notifications/plugin/index.d.ts create mode 100644 packages/expo-router/plugin/index.d.ts create mode 100644 packages/expo-screen-orientation/plugin/index.d.ts create mode 100644 packages/expo-secure-store/plugin/index.d.ts create mode 100644 packages/expo-sensors/plugin/index.d.ts create mode 100644 packages/expo-sharing/plugin/index.d.ts create mode 100644 packages/expo-sqlite/plugin/index.d.ts create mode 100644 packages/expo-system-ui/plugin/index.d.ts create mode 100644 packages/expo-task-manager/plugin/index.d.ts create mode 100644 packages/expo-tracking-transparency/plugin/index.d.ts create mode 100644 packages/expo-updates/plugin/index.d.ts create mode 100644 packages/expo-video/plugin/index.d.ts create mode 100644 packages/expo-web-browser/plugin/index.d.ts create mode 100644 packages/expo-widgets/plugin/index.d.ts diff --git a/packages/expo-apple-authentication/CHANGELOG.md b/packages/expo-apple-authentication/CHANGELOG.md index 454e67c7f14246..95fa920a841dfd 100644 --- a/packages/expo-apple-authentication/CHANGELOG.md +++ b/packages/expo-apple-authentication/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- Fix an ES module import error in the typed config plugin. ([#46089](https://github.com/expo/expo/pull/46089) by [@zoontek](https://github.com/zoontek)) + ### 💡 Others ## 56.0.3 — 2026-05-06 diff --git a/packages/expo-apple-authentication/plugin/index.d.ts b/packages/expo-apple-authentication/plugin/index.d.ts new file mode 100644 index 00000000000000..99a73babced38a --- /dev/null +++ b/packages/expo-apple-authentication/plugin/index.d.ts @@ -0,0 +1 @@ +export { default } from './build'; diff --git a/packages/expo-apple-authentication/plugin/index.js b/packages/expo-apple-authentication/plugin/index.js index 99a73babced38a..a5c027389cd64c 100644 --- a/packages/expo-apple-authentication/plugin/index.js +++ b/packages/expo-apple-authentication/plugin/index.js @@ -1 +1 @@ -export { default } from './build'; +module.exports = require('./build'); diff --git a/packages/expo-audio/CHANGELOG.md b/packages/expo-audio/CHANGELOG.md index d6d234404bf807..4278fd902e910e 100644 --- a/packages/expo-audio/CHANGELOG.md +++ b/packages/expo-audio/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- Fix an ES module import error in the typed config plugin. ([#46089](https://github.com/expo/expo/pull/46089) by [@zoontek](https://github.com/zoontek)) + ### 💡 Others ## 56.0.8 — 2026-05-20 diff --git a/packages/expo-audio/plugin/index.d.ts b/packages/expo-audio/plugin/index.d.ts new file mode 100644 index 00000000000000..99a73babced38a --- /dev/null +++ b/packages/expo-audio/plugin/index.d.ts @@ -0,0 +1 @@ +export { default } from './build'; diff --git a/packages/expo-audio/plugin/index.js b/packages/expo-audio/plugin/index.js index 99a73babced38a..a5c027389cd64c 100644 --- a/packages/expo-audio/plugin/index.js +++ b/packages/expo-audio/plugin/index.js @@ -1 +1 @@ -export { default } from './build'; +module.exports = require('./build'); diff --git a/packages/expo-background-fetch/CHANGELOG.md b/packages/expo-background-fetch/CHANGELOG.md index b35f03ed839707..9b289b790af28c 100644 --- a/packages/expo-background-fetch/CHANGELOG.md +++ b/packages/expo-background-fetch/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- Fix an ES module import error in the typed config plugin. ([#46089](https://github.com/expo/expo/pull/46089) by [@zoontek](https://github.com/zoontek)) + ### 💡 Others ## 56.0.11 — 2026-05-20 diff --git a/packages/expo-background-fetch/plugin/index.d.ts b/packages/expo-background-fetch/plugin/index.d.ts new file mode 100644 index 00000000000000..99a73babced38a --- /dev/null +++ b/packages/expo-background-fetch/plugin/index.d.ts @@ -0,0 +1 @@ +export { default } from './build'; diff --git a/packages/expo-background-fetch/plugin/index.js b/packages/expo-background-fetch/plugin/index.js index 99a73babced38a..a5c027389cd64c 100644 --- a/packages/expo-background-fetch/plugin/index.js +++ b/packages/expo-background-fetch/plugin/index.js @@ -1 +1 @@ -export { default } from './build'; +module.exports = require('./build'); diff --git a/packages/expo-background-task/CHANGELOG.md b/packages/expo-background-task/CHANGELOG.md index 7b170d3c971f55..afa404259c1440 100644 --- a/packages/expo-background-task/CHANGELOG.md +++ b/packages/expo-background-task/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- Fix an ES module import error in the typed config plugin. ([#46089](https://github.com/expo/expo/pull/46089) by [@zoontek](https://github.com/zoontek)) + ### 💡 Others ## 56.0.11 — 2026-05-20 diff --git a/packages/expo-background-task/plugin/index.d.ts b/packages/expo-background-task/plugin/index.d.ts new file mode 100644 index 00000000000000..99a73babced38a --- /dev/null +++ b/packages/expo-background-task/plugin/index.d.ts @@ -0,0 +1 @@ +export { default } from './build'; diff --git a/packages/expo-background-task/plugin/index.js b/packages/expo-background-task/plugin/index.js index 99a73babced38a..a5c027389cd64c 100644 --- a/packages/expo-background-task/plugin/index.js +++ b/packages/expo-background-task/plugin/index.js @@ -1 +1 @@ -export { default } from './build'; +module.exports = require('./build'); diff --git a/packages/expo-brightness/CHANGELOG.md b/packages/expo-brightness/CHANGELOG.md index db1a6cc4808390..2d7f889d78110e 100644 --- a/packages/expo-brightness/CHANGELOG.md +++ b/packages/expo-brightness/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- Fix an ES module import error in the typed config plugin. ([#46089](https://github.com/expo/expo/pull/46089) by [@zoontek](https://github.com/zoontek)) + ### 💡 Others ## 56.0.4 — 2026-05-13 diff --git a/packages/expo-brightness/plugin/index.d.ts b/packages/expo-brightness/plugin/index.d.ts new file mode 100644 index 00000000000000..99a73babced38a --- /dev/null +++ b/packages/expo-brightness/plugin/index.d.ts @@ -0,0 +1 @@ +export { default } from './build'; diff --git a/packages/expo-brightness/plugin/index.js b/packages/expo-brightness/plugin/index.js index 99a73babced38a..a5c027389cd64c 100644 --- a/packages/expo-brightness/plugin/index.js +++ b/packages/expo-brightness/plugin/index.js @@ -1 +1 @@ -export { default } from './build'; +module.exports = require('./build'); diff --git a/packages/expo-calendar/CHANGELOG.md b/packages/expo-calendar/CHANGELOG.md index ac9db47fa68887..7dbc62e7045d73 100644 --- a/packages/expo-calendar/CHANGELOG.md +++ b/packages/expo-calendar/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- Fix an ES module import error in the typed config plugin. ([#46089](https://github.com/expo/expo/pull/46089) by [@zoontek](https://github.com/zoontek)) + ### 💡 Others ## 56.0.7 — 2026-05-20 diff --git a/packages/expo-calendar/plugin/index.d.ts b/packages/expo-calendar/plugin/index.d.ts new file mode 100644 index 00000000000000..99a73babced38a --- /dev/null +++ b/packages/expo-calendar/plugin/index.d.ts @@ -0,0 +1 @@ +export { default } from './build'; diff --git a/packages/expo-calendar/plugin/index.js b/packages/expo-calendar/plugin/index.js index 99a73babced38a..a5c027389cd64c 100644 --- a/packages/expo-calendar/plugin/index.js +++ b/packages/expo-calendar/plugin/index.js @@ -1 +1 @@ -export { default } from './build'; +module.exports = require('./build'); diff --git a/packages/expo-camera/CHANGELOG.md b/packages/expo-camera/CHANGELOG.md index fb9bda7b7c037e..02993ad86bcdc2 100644 --- a/packages/expo-camera/CHANGELOG.md +++ b/packages/expo-camera/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- Fix an ES module import error in the typed config plugin. ([#46089](https://github.com/expo/expo/pull/46089) by [@zoontek](https://github.com/zoontek)) + ### 💡 Others ## 56.0.6 — 2026-05-21 diff --git a/packages/expo-camera/plugin/index.d.ts b/packages/expo-camera/plugin/index.d.ts new file mode 100644 index 00000000000000..99a73babced38a --- /dev/null +++ b/packages/expo-camera/plugin/index.d.ts @@ -0,0 +1 @@ +export { default } from './build'; diff --git a/packages/expo-camera/plugin/index.js b/packages/expo-camera/plugin/index.js index 99a73babced38a..a5c027389cd64c 100644 --- a/packages/expo-camera/plugin/index.js +++ b/packages/expo-camera/plugin/index.js @@ -1 +1 @@ -export { default } from './build'; +module.exports = require('./build'); diff --git a/packages/expo-cellular/CHANGELOG.md b/packages/expo-cellular/CHANGELOG.md index 51ef46e469f3e8..b4a3b9c508eeed 100644 --- a/packages/expo-cellular/CHANGELOG.md +++ b/packages/expo-cellular/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- Fix an ES module import error in the typed config plugin. ([#46089](https://github.com/expo/expo/pull/46089) by [@zoontek](https://github.com/zoontek)) + ### 💡 Others ## 56.0.4 — 2026-05-13 diff --git a/packages/expo-cellular/plugin/index.d.ts b/packages/expo-cellular/plugin/index.d.ts new file mode 100644 index 00000000000000..99a73babced38a --- /dev/null +++ b/packages/expo-cellular/plugin/index.d.ts @@ -0,0 +1 @@ +export { default } from './build'; diff --git a/packages/expo-cellular/plugin/index.js b/packages/expo-cellular/plugin/index.js index 99a73babced38a..a5c027389cd64c 100644 --- a/packages/expo-cellular/plugin/index.js +++ b/packages/expo-cellular/plugin/index.js @@ -1 +1 @@ -export { default } from './build'; +module.exports = require('./build'); diff --git a/packages/expo-contacts/CHANGELOG.md b/packages/expo-contacts/CHANGELOG.md index 1279c880c18687..48a933c098a0e6 100644 --- a/packages/expo-contacts/CHANGELOG.md +++ b/packages/expo-contacts/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- Fix an ES module import error in the typed config plugin. ([#46089](https://github.com/expo/expo/pull/46089) by [@zoontek](https://github.com/zoontek)) + ### 💡 Others ## 56.0.6 — 2026-05-20 diff --git a/packages/expo-contacts/plugin/index.d.ts b/packages/expo-contacts/plugin/index.d.ts new file mode 100644 index 00000000000000..99a73babced38a --- /dev/null +++ b/packages/expo-contacts/plugin/index.d.ts @@ -0,0 +1 @@ +export { default } from './build'; diff --git a/packages/expo-contacts/plugin/index.js b/packages/expo-contacts/plugin/index.js index 99a73babced38a..a5c027389cd64c 100644 --- a/packages/expo-contacts/plugin/index.js +++ b/packages/expo-contacts/plugin/index.js @@ -1 +1 @@ -export { default } from './build'; +module.exports = require('./build'); diff --git a/packages/expo-dev-client/CHANGELOG.md b/packages/expo-dev-client/CHANGELOG.md index 2ffdb87470755b..70c3b89ae48262 100644 --- a/packages/expo-dev-client/CHANGELOG.md +++ b/packages/expo-dev-client/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- Fix an ES module import error in the typed config plugin. ([#46089](https://github.com/expo/expo/pull/46089) by [@zoontek](https://github.com/zoontek)) + ### 💡 Others ## 56.0.13 — 2026-05-20 diff --git a/packages/expo-dev-client/plugin/index.d.ts b/packages/expo-dev-client/plugin/index.d.ts new file mode 100644 index 00000000000000..99a73babced38a --- /dev/null +++ b/packages/expo-dev-client/plugin/index.d.ts @@ -0,0 +1 @@ +export { default } from './build'; diff --git a/packages/expo-dev-client/plugin/index.js b/packages/expo-dev-client/plugin/index.js index 99a73babced38a..a5c027389cd64c 100644 --- a/packages/expo-dev-client/plugin/index.js +++ b/packages/expo-dev-client/plugin/index.js @@ -1 +1 @@ -export { default } from './build'; +module.exports = require('./build'); diff --git a/packages/expo-dev-launcher/CHANGELOG.md b/packages/expo-dev-launcher/CHANGELOG.md index c8bab4021954d9..16fe563b945554 100644 --- a/packages/expo-dev-launcher/CHANGELOG.md +++ b/packages/expo-dev-launcher/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- Fix an ES module import error in the typed config plugin. ([#46089](https://github.com/expo/expo/pull/46089) by [@zoontek](https://github.com/zoontek)) + ### 💡 Others ## 56.0.13 — 2026-05-20 diff --git a/packages/expo-dev-launcher/plugin/index.d.ts b/packages/expo-dev-launcher/plugin/index.d.ts new file mode 100644 index 00000000000000..99a73babced38a --- /dev/null +++ b/packages/expo-dev-launcher/plugin/index.d.ts @@ -0,0 +1 @@ +export { default } from './build'; diff --git a/packages/expo-dev-launcher/plugin/index.js b/packages/expo-dev-launcher/plugin/index.js index 99a73babced38a..a5c027389cd64c 100644 --- a/packages/expo-dev-launcher/plugin/index.js +++ b/packages/expo-dev-launcher/plugin/index.js @@ -1 +1 @@ -export { default } from './build'; +module.exports = require('./build'); diff --git a/packages/expo-dev-menu/CHANGELOG.md b/packages/expo-dev-menu/CHANGELOG.md index a157da9d72ba57..3133a0bd76b2ea 100644 --- a/packages/expo-dev-menu/CHANGELOG.md +++ b/packages/expo-dev-menu/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- Fix an ES module import error in the typed config plugin. ([#46089](https://github.com/expo/expo/pull/46089) by [@zoontek](https://github.com/zoontek)) + ### 💡 Others ## 56.0.12 — 2026-05-20 diff --git a/packages/expo-dev-menu/plugin/index.d.ts b/packages/expo-dev-menu/plugin/index.d.ts new file mode 100644 index 00000000000000..99a73babced38a --- /dev/null +++ b/packages/expo-dev-menu/plugin/index.d.ts @@ -0,0 +1 @@ +export { default } from './build'; diff --git a/packages/expo-dev-menu/plugin/index.js b/packages/expo-dev-menu/plugin/index.js index 99a73babced38a..a5c027389cd64c 100644 --- a/packages/expo-dev-menu/plugin/index.js +++ b/packages/expo-dev-menu/plugin/index.js @@ -1 +1 @@ -export { default } from './build'; +module.exports = require('./build'); diff --git a/packages/expo-document-picker/CHANGELOG.md b/packages/expo-document-picker/CHANGELOG.md index 50733610ebf477..9bd750b661e6d9 100644 --- a/packages/expo-document-picker/CHANGELOG.md +++ b/packages/expo-document-picker/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- Fix an ES module import error in the typed config plugin. ([#46089](https://github.com/expo/expo/pull/46089) by [@zoontek](https://github.com/zoontek)) + ### 💡 Others ## 56.0.3 — 2026-05-06 diff --git a/packages/expo-document-picker/plugin/index.d.ts b/packages/expo-document-picker/plugin/index.d.ts new file mode 100644 index 00000000000000..99a73babced38a --- /dev/null +++ b/packages/expo-document-picker/plugin/index.d.ts @@ -0,0 +1 @@ +export { default } from './build'; diff --git a/packages/expo-document-picker/plugin/index.js b/packages/expo-document-picker/plugin/index.js index 99a73babced38a..a5c027389cd64c 100644 --- a/packages/expo-document-picker/plugin/index.js +++ b/packages/expo-document-picker/plugin/index.js @@ -1 +1 @@ -export { default } from './build'; +module.exports = require('./build'); diff --git a/packages/expo-image-picker/CHANGELOG.md b/packages/expo-image-picker/CHANGELOG.md index b34ab950e1b9c3..a2de8fd1a71e0f 100644 --- a/packages/expo-image-picker/CHANGELOG.md +++ b/packages/expo-image-picker/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- Fix an ES module import error in the typed config plugin. ([#46089](https://github.com/expo/expo/pull/46089) by [@zoontek](https://github.com/zoontek)) + ### 💡 Others ## 56.0.11 — 2026-05-20 diff --git a/packages/expo-image-picker/plugin/index.d.ts b/packages/expo-image-picker/plugin/index.d.ts new file mode 100644 index 00000000000000..99a73babced38a --- /dev/null +++ b/packages/expo-image-picker/plugin/index.d.ts @@ -0,0 +1 @@ +export { default } from './build'; diff --git a/packages/expo-image-picker/plugin/index.js b/packages/expo-image-picker/plugin/index.js index 99a73babced38a..a5c027389cd64c 100644 --- a/packages/expo-image-picker/plugin/index.js +++ b/packages/expo-image-picker/plugin/index.js @@ -1 +1 @@ -export { default } from './build'; +module.exports = require('./build'); diff --git a/packages/expo-image/CHANGELOG.md b/packages/expo-image/CHANGELOG.md index 29747435a25909..6a2a21841d0d08 100644 --- a/packages/expo-image/CHANGELOG.md +++ b/packages/expo-image/CHANGELOG.md @@ -8,6 +8,7 @@ ### 🐛 Bug fixes +- Fix an ES module import error in the typed config plugin. ([#46089](https://github.com/expo/expo/pull/46089) by [@zoontek](https://github.com/zoontek)) - [Android] Fixed `useImage` crashing on SVG sources, and made `maxWidth`/`maxHeight` preserve the SVG's aspect ratio. ([#46077](https://github.com/expo/expo/pull/46077) by [@nishan](https://github.com/intergalacticspacehighway)) ### 💡 Others diff --git a/packages/expo-image/plugin/index.d.ts b/packages/expo-image/plugin/index.d.ts new file mode 100644 index 00000000000000..99a73babced38a --- /dev/null +++ b/packages/expo-image/plugin/index.d.ts @@ -0,0 +1 @@ +export { default } from './build'; diff --git a/packages/expo-image/plugin/index.js b/packages/expo-image/plugin/index.js index 99a73babced38a..a5c027389cd64c 100644 --- a/packages/expo-image/plugin/index.js +++ b/packages/expo-image/plugin/index.js @@ -1 +1 @@ -export { default } from './build'; +module.exports = require('./build'); diff --git a/packages/expo-local-authentication/CHANGELOG.md b/packages/expo-local-authentication/CHANGELOG.md index 4140ba69bb28ab..923a13286cedb8 100644 --- a/packages/expo-local-authentication/CHANGELOG.md +++ b/packages/expo-local-authentication/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- Fix an ES module import error in the typed config plugin. ([#46089](https://github.com/expo/expo/pull/46089) by [@zoontek](https://github.com/zoontek)) + ### 💡 Others ## 56.0.3 — 2026-05-06 diff --git a/packages/expo-local-authentication/plugin/index.d.ts b/packages/expo-local-authentication/plugin/index.d.ts new file mode 100644 index 00000000000000..99a73babced38a --- /dev/null +++ b/packages/expo-local-authentication/plugin/index.d.ts @@ -0,0 +1 @@ +export { default } from './build'; diff --git a/packages/expo-local-authentication/plugin/index.js b/packages/expo-local-authentication/plugin/index.js index 99a73babced38a..a5c027389cd64c 100644 --- a/packages/expo-local-authentication/plugin/index.js +++ b/packages/expo-local-authentication/plugin/index.js @@ -1 +1 @@ -export { default } from './build'; +module.exports = require('./build'); diff --git a/packages/expo-localization/CHANGELOG.md b/packages/expo-localization/CHANGELOG.md index 24b77f7b443cba..c3daa765abc8f2 100644 --- a/packages/expo-localization/CHANGELOG.md +++ b/packages/expo-localization/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- Fix an ES module import error in the typed config plugin. ([#46089](https://github.com/expo/expo/pull/46089) by [@zoontek](https://github.com/zoontek)) + ### 💡 Others ## 56.0.5 — 2026-05-19 diff --git a/packages/expo-localization/plugin/index.d.ts b/packages/expo-localization/plugin/index.d.ts new file mode 100644 index 00000000000000..99a73babced38a --- /dev/null +++ b/packages/expo-localization/plugin/index.d.ts @@ -0,0 +1 @@ +export { default } from './build'; diff --git a/packages/expo-localization/plugin/index.js b/packages/expo-localization/plugin/index.js index 99a73babced38a..a5c027389cd64c 100644 --- a/packages/expo-localization/plugin/index.js +++ b/packages/expo-localization/plugin/index.js @@ -1 +1 @@ -export { default } from './build'; +module.exports = require('./build'); diff --git a/packages/expo-location/CHANGELOG.md b/packages/expo-location/CHANGELOG.md index 342c3c67e4da47..3a0010e4887389 100644 --- a/packages/expo-location/CHANGELOG.md +++ b/packages/expo-location/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- Fix an ES module import error in the typed config plugin. ([#46089](https://github.com/expo/expo/pull/46089) by [@zoontek](https://github.com/zoontek)) + ### 💡 Others ## 56.0.11 — 2026-05-20 diff --git a/packages/expo-location/plugin/index.d.ts b/packages/expo-location/plugin/index.d.ts new file mode 100644 index 00000000000000..99a73babced38a --- /dev/null +++ b/packages/expo-location/plugin/index.d.ts @@ -0,0 +1 @@ +export { default } from './build'; diff --git a/packages/expo-location/plugin/index.js b/packages/expo-location/plugin/index.js index 99a73babced38a..a5c027389cd64c 100644 --- a/packages/expo-location/plugin/index.js +++ b/packages/expo-location/plugin/index.js @@ -1 +1 @@ -export { default } from './build'; +module.exports = require('./build'); diff --git a/packages/expo-mail-composer/CHANGELOG.md b/packages/expo-mail-composer/CHANGELOG.md index a16787d62d5d00..8919fa865f0864 100644 --- a/packages/expo-mail-composer/CHANGELOG.md +++ b/packages/expo-mail-composer/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- Fix an ES module import error in the typed config plugin. ([#46089](https://github.com/expo/expo/pull/46089) by [@zoontek](https://github.com/zoontek)) + ### 💡 Others ## 56.0.3 — 2026-05-06 diff --git a/packages/expo-mail-composer/plugin/index.d.ts b/packages/expo-mail-composer/plugin/index.d.ts new file mode 100644 index 00000000000000..99a73babced38a --- /dev/null +++ b/packages/expo-mail-composer/plugin/index.d.ts @@ -0,0 +1 @@ +export { default } from './build'; diff --git a/packages/expo-mail-composer/plugin/index.js b/packages/expo-mail-composer/plugin/index.js index 99a73babced38a..a5c027389cd64c 100644 --- a/packages/expo-mail-composer/plugin/index.js +++ b/packages/expo-mail-composer/plugin/index.js @@ -1 +1 @@ -export { default } from './build'; +module.exports = require('./build'); diff --git a/packages/expo-maps/CHANGELOG.md b/packages/expo-maps/CHANGELOG.md index 081d94a0b6ab87..c25694373644dd 100644 --- a/packages/expo-maps/CHANGELOG.md +++ b/packages/expo-maps/CHANGELOG.md @@ -8,6 +8,7 @@ ### 🐛 Bug fixes +- Fix an ES module import error in the typed config plugin. ([#46089](https://github.com/expo/expo/pull/46089) by [@zoontek](https://github.com/zoontek)) - [Android] Fixed SVG drawables not rendering as Google Maps marker icons, and memoized marker rasterization across recompositions. ([#46077](https://github.com/expo/expo/pull/46077) by [@nishan](https://github.com/intergalacticspacehighway)) ### 💡 Others diff --git a/packages/expo-maps/plugin/index.d.ts b/packages/expo-maps/plugin/index.d.ts new file mode 100644 index 00000000000000..99a73babced38a --- /dev/null +++ b/packages/expo-maps/plugin/index.d.ts @@ -0,0 +1 @@ +export { default } from './build'; diff --git a/packages/expo-maps/plugin/index.js b/packages/expo-maps/plugin/index.js index 99a73babced38a..a5c027389cd64c 100644 --- a/packages/expo-maps/plugin/index.js +++ b/packages/expo-maps/plugin/index.js @@ -1 +1 @@ -export { default } from './build'; +module.exports = require('./build'); diff --git a/packages/expo-media-library/CHANGELOG.md b/packages/expo-media-library/CHANGELOG.md index 94b3ef4ea480b5..6378ed450b91f4 100644 --- a/packages/expo-media-library/CHANGELOG.md +++ b/packages/expo-media-library/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- Fix an ES module import error in the typed config plugin. ([#46089](https://github.com/expo/expo/pull/46089) by [@zoontek](https://github.com/zoontek)) + ### 💡 Others ## 56.0.5 — 2026-05-20 diff --git a/packages/expo-media-library/plugin/index.d.ts b/packages/expo-media-library/plugin/index.d.ts new file mode 100644 index 00000000000000..99a73babced38a --- /dev/null +++ b/packages/expo-media-library/plugin/index.d.ts @@ -0,0 +1 @@ +export { default } from './build'; diff --git a/packages/expo-media-library/plugin/index.js b/packages/expo-media-library/plugin/index.js index 99a73babced38a..a5c027389cd64c 100644 --- a/packages/expo-media-library/plugin/index.js +++ b/packages/expo-media-library/plugin/index.js @@ -1 +1 @@ -export { default } from './build'; +module.exports = require('./build'); diff --git a/packages/expo-notifications/CHANGELOG.md b/packages/expo-notifications/CHANGELOG.md index 8dcf81b040934a..20c6ea2eb6e4c6 100644 --- a/packages/expo-notifications/CHANGELOG.md +++ b/packages/expo-notifications/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- Fix an ES module import error in the typed config plugin. ([#46089](https://github.com/expo/expo/pull/46089) by [@zoontek](https://github.com/zoontek)) + ### 💡 Others ## 56.0.11 — 2026-05-20 diff --git a/packages/expo-notifications/plugin/index.d.ts b/packages/expo-notifications/plugin/index.d.ts new file mode 100644 index 00000000000000..99a73babced38a --- /dev/null +++ b/packages/expo-notifications/plugin/index.d.ts @@ -0,0 +1 @@ +export { default } from './build'; diff --git a/packages/expo-notifications/plugin/index.js b/packages/expo-notifications/plugin/index.js index 99a73babced38a..a5c027389cd64c 100644 --- a/packages/expo-notifications/plugin/index.js +++ b/packages/expo-notifications/plugin/index.js @@ -1 +1 @@ -export { default } from './build'; +module.exports = require('./build'); diff --git a/packages/expo-router/CHANGELOG.md b/packages/expo-router/CHANGELOG.md index 8168d72f6e3545..e9914b77b84bef 100644 --- a/packages/expo-router/CHANGELOG.md +++ b/packages/expo-router/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- Fix an ES module import error in the typed config plugin. ([#46089](https://github.com/expo/expo/pull/46089) by [@zoontek](https://github.com/zoontek)) + ### 💡 Others ## 56.2.4 — 2026-05-21 diff --git a/packages/expo-router/plugin/index.d.ts b/packages/expo-router/plugin/index.d.ts new file mode 100644 index 00000000000000..99a73babced38a --- /dev/null +++ b/packages/expo-router/plugin/index.d.ts @@ -0,0 +1 @@ +export { default } from './build'; diff --git a/packages/expo-router/plugin/index.js b/packages/expo-router/plugin/index.js index 99a73babced38a..a5c027389cd64c 100644 --- a/packages/expo-router/plugin/index.js +++ b/packages/expo-router/plugin/index.js @@ -1 +1 @@ -export { default } from './build'; +module.exports = require('./build'); diff --git a/packages/expo-screen-orientation/CHANGELOG.md b/packages/expo-screen-orientation/CHANGELOG.md index bcf5b8536f4bd2..d6fec82e2dd5a5 100644 --- a/packages/expo-screen-orientation/CHANGELOG.md +++ b/packages/expo-screen-orientation/CHANGELOG.md @@ -8,14 +8,16 @@ ### 🐛 Bug fixes +- Fix an ES module import error in the typed config plugin. ([#46089](https://github.com/expo/expo/pull/46089) by [@zoontek](https://github.com/zoontek)) + ### 💡 Others ## 56.0.4 — 2026-05-13 ### 🐛 Bug fixes -- [iOS] Fixed `EXC_BAD_ACCESS` crash from recursive `supportedInterfaceOrientations` when `react-native-screens` per-screen orientation is set. -([#45733](https://github.com/expo/expo/pull/45733) by [@rayabelcode](https://github.com/rayabelcode)) +- [iOS] Fixed `EXC_BAD_ACCESS` crash from recursive `supportedInterfaceOrientations` when `react-native-screens` per-screen orientation is set. + ([#45733](https://github.com/expo/expo/pull/45733) by [@rayabelcode](https://github.com/rayabelcode)) ## 56.0.3 — 2026-05-06 diff --git a/packages/expo-screen-orientation/plugin/index.d.ts b/packages/expo-screen-orientation/plugin/index.d.ts new file mode 100644 index 00000000000000..99a73babced38a --- /dev/null +++ b/packages/expo-screen-orientation/plugin/index.d.ts @@ -0,0 +1 @@ +export { default } from './build'; diff --git a/packages/expo-screen-orientation/plugin/index.js b/packages/expo-screen-orientation/plugin/index.js index 99a73babced38a..a5c027389cd64c 100644 --- a/packages/expo-screen-orientation/plugin/index.js +++ b/packages/expo-screen-orientation/plugin/index.js @@ -1 +1 @@ -export { default } from './build'; +module.exports = require('./build'); diff --git a/packages/expo-secure-store/CHANGELOG.md b/packages/expo-secure-store/CHANGELOG.md index 4f0c08fdc09df3..4d20371e82be2f 100644 --- a/packages/expo-secure-store/CHANGELOG.md +++ b/packages/expo-secure-store/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- Fix an ES module import error in the typed config plugin. ([#46089](https://github.com/expo/expo/pull/46089) by [@zoontek](https://github.com/zoontek)) + ### 💡 Others ## 56.0.3 — 2026-05-06 diff --git a/packages/expo-secure-store/plugin/index.d.ts b/packages/expo-secure-store/plugin/index.d.ts new file mode 100644 index 00000000000000..99a73babced38a --- /dev/null +++ b/packages/expo-secure-store/plugin/index.d.ts @@ -0,0 +1 @@ +export { default } from './build'; diff --git a/packages/expo-secure-store/plugin/index.js b/packages/expo-secure-store/plugin/index.js index 99a73babced38a..a5c027389cd64c 100644 --- a/packages/expo-secure-store/plugin/index.js +++ b/packages/expo-secure-store/plugin/index.js @@ -1 +1 @@ -export { default } from './build'; +module.exports = require('./build'); diff --git a/packages/expo-sensors/CHANGELOG.md b/packages/expo-sensors/CHANGELOG.md index 5903829e00909b..c2bbf5dc27d258 100644 --- a/packages/expo-sensors/CHANGELOG.md +++ b/packages/expo-sensors/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- Fix an ES module import error in the typed config plugin. ([#46089](https://github.com/expo/expo/pull/46089) by [@zoontek](https://github.com/zoontek)) + ### 💡 Others ## 56.0.4 — 2026-05-13 diff --git a/packages/expo-sensors/plugin/index.d.ts b/packages/expo-sensors/plugin/index.d.ts new file mode 100644 index 00000000000000..99a73babced38a --- /dev/null +++ b/packages/expo-sensors/plugin/index.d.ts @@ -0,0 +1 @@ +export { default } from './build'; diff --git a/packages/expo-sensors/plugin/index.js b/packages/expo-sensors/plugin/index.js index 99a73babced38a..a5c027389cd64c 100644 --- a/packages/expo-sensors/plugin/index.js +++ b/packages/expo-sensors/plugin/index.js @@ -1 +1 @@ -export { default } from './build'; +module.exports = require('./build'); diff --git a/packages/expo-sharing/CHANGELOG.md b/packages/expo-sharing/CHANGELOG.md index ca6e9a963415bb..903d58dc38eea6 100644 --- a/packages/expo-sharing/CHANGELOG.md +++ b/packages/expo-sharing/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- Fix an ES module import error in the typed config plugin. ([#46089](https://github.com/expo/expo/pull/46089) by [@zoontek](https://github.com/zoontek)) + ### 💡 Others ## 56.0.11 — 2026-05-20 diff --git a/packages/expo-sharing/plugin/index.d.ts b/packages/expo-sharing/plugin/index.d.ts new file mode 100644 index 00000000000000..99a73babced38a --- /dev/null +++ b/packages/expo-sharing/plugin/index.d.ts @@ -0,0 +1 @@ +export { default } from './build'; diff --git a/packages/expo-sharing/plugin/index.js b/packages/expo-sharing/plugin/index.js index 99a73babced38a..a5c027389cd64c 100644 --- a/packages/expo-sharing/plugin/index.js +++ b/packages/expo-sharing/plugin/index.js @@ -1 +1 @@ -export { default } from './build'; +module.exports = require('./build'); diff --git a/packages/expo-sqlite/CHANGELOG.md b/packages/expo-sqlite/CHANGELOG.md index f3c5c9d91c88a6..bc862ed35284db 100644 --- a/packages/expo-sqlite/CHANGELOG.md +++ b/packages/expo-sqlite/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- Fix an ES module import error in the typed config plugin. ([#46089](https://github.com/expo/expo/pull/46089) by [@zoontek](https://github.com/zoontek)) + ### 💡 Others ## 56.0.3 — 2026-05-06 diff --git a/packages/expo-sqlite/plugin/index.d.ts b/packages/expo-sqlite/plugin/index.d.ts new file mode 100644 index 00000000000000..99a73babced38a --- /dev/null +++ b/packages/expo-sqlite/plugin/index.d.ts @@ -0,0 +1 @@ +export { default } from './build'; diff --git a/packages/expo-sqlite/plugin/index.js b/packages/expo-sqlite/plugin/index.js index 99a73babced38a..a5c027389cd64c 100644 --- a/packages/expo-sqlite/plugin/index.js +++ b/packages/expo-sqlite/plugin/index.js @@ -1 +1 @@ -export { default } from './build'; +module.exports = require('./build'); diff --git a/packages/expo-system-ui/CHANGELOG.md b/packages/expo-system-ui/CHANGELOG.md index e8adc0d3f1dd24..e3fb33f83cf7c8 100644 --- a/packages/expo-system-ui/CHANGELOG.md +++ b/packages/expo-system-ui/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- Fix an ES module import error in the typed config plugin. ([#46089](https://github.com/expo/expo/pull/46089) by [@zoontek](https://github.com/zoontek)) + ### 💡 Others ## 56.0.4 — 2026-05-06 diff --git a/packages/expo-system-ui/plugin/index.d.ts b/packages/expo-system-ui/plugin/index.d.ts new file mode 100644 index 00000000000000..99a73babced38a --- /dev/null +++ b/packages/expo-system-ui/plugin/index.d.ts @@ -0,0 +1 @@ +export { default } from './build'; diff --git a/packages/expo-system-ui/plugin/index.js b/packages/expo-system-ui/plugin/index.js index 99a73babced38a..a5c027389cd64c 100644 --- a/packages/expo-system-ui/plugin/index.js +++ b/packages/expo-system-ui/plugin/index.js @@ -1 +1 @@ -export { default } from './build'; +module.exports = require('./build'); diff --git a/packages/expo-task-manager/CHANGELOG.md b/packages/expo-task-manager/CHANGELOG.md index 2242baf11827b5..220a0f26a63a58 100644 --- a/packages/expo-task-manager/CHANGELOG.md +++ b/packages/expo-task-manager/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- Fix an ES module import error in the typed config plugin. ([#46089](https://github.com/expo/expo/pull/46089) by [@zoontek](https://github.com/zoontek)) + ### 💡 Others ## 56.0.11 — 2026-05-20 diff --git a/packages/expo-task-manager/plugin/index.d.ts b/packages/expo-task-manager/plugin/index.d.ts new file mode 100644 index 00000000000000..99a73babced38a --- /dev/null +++ b/packages/expo-task-manager/plugin/index.d.ts @@ -0,0 +1 @@ +export { default } from './build'; diff --git a/packages/expo-task-manager/plugin/index.js b/packages/expo-task-manager/plugin/index.js index 99a73babced38a..a5c027389cd64c 100644 --- a/packages/expo-task-manager/plugin/index.js +++ b/packages/expo-task-manager/plugin/index.js @@ -1 +1 @@ -export { default } from './build'; +module.exports = require('./build'); diff --git a/packages/expo-tracking-transparency/CHANGELOG.md b/packages/expo-tracking-transparency/CHANGELOG.md index 0dc1c6ca383c18..14f424ff31b550 100644 --- a/packages/expo-tracking-transparency/CHANGELOG.md +++ b/packages/expo-tracking-transparency/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- Fix an ES module import error in the typed config plugin. ([#46089](https://github.com/expo/expo/pull/46089) by [@zoontek](https://github.com/zoontek)) + ### 💡 Others ## 56.0.4 — 2026-05-13 diff --git a/packages/expo-tracking-transparency/plugin/index.d.ts b/packages/expo-tracking-transparency/plugin/index.d.ts new file mode 100644 index 00000000000000..99a73babced38a --- /dev/null +++ b/packages/expo-tracking-transparency/plugin/index.d.ts @@ -0,0 +1 @@ +export { default } from './build'; diff --git a/packages/expo-tracking-transparency/plugin/index.js b/packages/expo-tracking-transparency/plugin/index.js index 99a73babced38a..a5c027389cd64c 100644 --- a/packages/expo-tracking-transparency/plugin/index.js +++ b/packages/expo-tracking-transparency/plugin/index.js @@ -1 +1 @@ -export { default } from './build'; +module.exports = require('./build'); diff --git a/packages/expo-updates/CHANGELOG.md b/packages/expo-updates/CHANGELOG.md index b3cd92c372eed9..dc0f4f5d65a2d4 100644 --- a/packages/expo-updates/CHANGELOG.md +++ b/packages/expo-updates/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- Fix an ES module import error in the typed config plugin. ([#46089](https://github.com/expo/expo/pull/46089) by [@zoontek](https://github.com/zoontek)) + ### 💡 Others ## 56.0.14 — 2026-05-20 diff --git a/packages/expo-updates/plugin/index.d.ts b/packages/expo-updates/plugin/index.d.ts new file mode 100644 index 00000000000000..99a73babced38a --- /dev/null +++ b/packages/expo-updates/plugin/index.d.ts @@ -0,0 +1 @@ +export { default } from './build'; diff --git a/packages/expo-updates/plugin/index.js b/packages/expo-updates/plugin/index.js index 99a73babced38a..a5c027389cd64c 100644 --- a/packages/expo-updates/plugin/index.js +++ b/packages/expo-updates/plugin/index.js @@ -1 +1 @@ -export { default } from './build'; +module.exports = require('./build'); diff --git a/packages/expo-video/CHANGELOG.md b/packages/expo-video/CHANGELOG.md index 59711a3bdc0934..e9707c3085a412 100644 --- a/packages/expo-video/CHANGELOG.md +++ b/packages/expo-video/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- Fix an ES module import error in the typed config plugin. ([#46089](https://github.com/expo/expo/pull/46089) by [@zoontek](https://github.com/zoontek)) + ### 💡 Others ## 56.1.1 — 2026-05-15 diff --git a/packages/expo-video/plugin/index.d.ts b/packages/expo-video/plugin/index.d.ts new file mode 100644 index 00000000000000..99a73babced38a --- /dev/null +++ b/packages/expo-video/plugin/index.d.ts @@ -0,0 +1 @@ +export { default } from './build'; diff --git a/packages/expo-video/plugin/index.js b/packages/expo-video/plugin/index.js index 99a73babced38a..a5c027389cd64c 100644 --- a/packages/expo-video/plugin/index.js +++ b/packages/expo-video/plugin/index.js @@ -1 +1 @@ -export { default } from './build'; +module.exports = require('./build'); diff --git a/packages/expo-web-browser/CHANGELOG.md b/packages/expo-web-browser/CHANGELOG.md index 4cf27569f10d9d..e55ff781fe4596 100644 --- a/packages/expo-web-browser/CHANGELOG.md +++ b/packages/expo-web-browser/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- Fix an ES module import error in the typed config plugin. ([#46089](https://github.com/expo/expo/pull/46089) by [@zoontek](https://github.com/zoontek)) + ### 💡 Others ## 56.0.4 — 2026-05-06 diff --git a/packages/expo-web-browser/plugin/index.d.ts b/packages/expo-web-browser/plugin/index.d.ts new file mode 100644 index 00000000000000..99a73babced38a --- /dev/null +++ b/packages/expo-web-browser/plugin/index.d.ts @@ -0,0 +1 @@ +export { default } from './build'; diff --git a/packages/expo-web-browser/plugin/index.js b/packages/expo-web-browser/plugin/index.js index 99a73babced38a..a5c027389cd64c 100644 --- a/packages/expo-web-browser/plugin/index.js +++ b/packages/expo-web-browser/plugin/index.js @@ -1 +1 @@ -export { default } from './build'; +module.exports = require('./build'); diff --git a/packages/expo-widgets/CHANGELOG.md b/packages/expo-widgets/CHANGELOG.md index 4b97edba85419e..9753056554719d 100644 --- a/packages/expo-widgets/CHANGELOG.md +++ b/packages/expo-widgets/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- Fix an ES module import error in the typed config plugin. ([#46089](https://github.com/expo/expo/pull/46089) by [@zoontek](https://github.com/zoontek)) + ### 💡 Others ## 56.0.11 — 2026-05-20 diff --git a/packages/expo-widgets/plugin/index.d.ts b/packages/expo-widgets/plugin/index.d.ts new file mode 100644 index 00000000000000..99a73babced38a --- /dev/null +++ b/packages/expo-widgets/plugin/index.d.ts @@ -0,0 +1 @@ +export { default } from './build'; diff --git a/packages/expo-widgets/plugin/index.js b/packages/expo-widgets/plugin/index.js index 99a73babced38a..a5c027389cd64c 100644 --- a/packages/expo-widgets/plugin/index.js +++ b/packages/expo-widgets/plugin/index.js @@ -1 +1 @@ -export { default } from './build'; +module.exports = require('./build'); From 3083bb1d7bcf971ad96096f1448457b4e70c1f28 Mon Sep 17 00:00:00 2001 From: Mathieu Acthernoene Date: Thu, 21 May 2026 14:05:57 +0200 Subject: [PATCH 14/28] [expo-screen-orientation] Fix changelog entry (#46093) # Why Fix https://github.com/expo/expo/pull/45733 changelog entry being incorrectly formatted. # How # Test Plan # Checklist - [ ] I added a `changelog.md` entry and rebuilt the package sources according to [this short guide](https://github.com/expo/expo/blob/main/CONTRIBUTING.md#-before-submitting) - [ ] This diff will work correctly for `npx expo prebuild` & EAS Build (eg: updated a module plugin). - [ ] Conforms with the [Documentation Writing Style Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md) --- packages/expo-screen-orientation/CHANGELOG.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/expo-screen-orientation/CHANGELOG.md b/packages/expo-screen-orientation/CHANGELOG.md index d6fec82e2dd5a5..62e4fea71121eb 100644 --- a/packages/expo-screen-orientation/CHANGELOG.md +++ b/packages/expo-screen-orientation/CHANGELOG.md @@ -16,8 +16,7 @@ ### 🐛 Bug fixes -- [iOS] Fixed `EXC_BAD_ACCESS` crash from recursive `supportedInterfaceOrientations` when `react-native-screens` per-screen orientation is set. - ([#45733](https://github.com/expo/expo/pull/45733) by [@rayabelcode](https://github.com/rayabelcode)) +- [iOS] Fixed `EXC_BAD_ACCESS` crash from recursive `supportedInterfaceOrientations` when `react-native-screens` per-screen orientation is set. ([#45733](https://github.com/expo/expo/pull/45733) by [@rayabelcode](https://github.com/rayabelcode)) ## 56.0.3 — 2026-05-06 From 4d31485416ec572ecf81e8f5c54518322c8795a8 Mon Sep 17 00:00:00 2001 From: Vojtech Novak Date: Thu, 21 May 2026 14:20:12 +0200 Subject: [PATCH 15/28] [docs] pick screen orientation advice to sdk-55 (#46095) --- .../versions/v55.0.0/sdk/screen-orientation.mdx | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/docs/pages/versions/v55.0.0/sdk/screen-orientation.mdx b/docs/pages/versions/v55.0.0/sdk/screen-orientation.mdx index 8568f1f52c0207..ad79ac27c91dfb 100644 --- a/docs/pages/versions/v55.0.0/sdk/screen-orientation.mdx +++ b/docs/pages/versions/v55.0.0/sdk/screen-orientation.mdx @@ -80,6 +80,23 @@ You can configure `expo-screen-orientation` using its built-in [config plugin](/ +## Per-screen orientation with Expo Router + +If you use [Expo Router](/router/introduction/), you can set the orientation per screen using the `orientation` option on [`Stack.Screen`](/router/advanced/stack/). This is powered by `react-native-screens` and is the recommended approach for per-screen orientation in stack navigators. + +```tsx src/app/_layout.tsx +import { Stack } from 'expo-router'; + +export default function Layout() { + return ( + + + + + ); +} +``` + ## API ```js From a56db53c3a4a34e27748f5547594006d2fa5048c Mon Sep 17 00:00:00 2001 From: Vincent Ong Date: Thu, 21 May 2026 21:22:47 +0800 Subject: [PATCH 16/28] fix(expo-router): Fix Jest 30 compatibility in testing library (#44188) ## Why Fixes #40184. `expo-router/testing-library` imported Jest's private `expect/build/matchers` module, which is gone in Jest 30 and causes the testing-library helper to fail at import time. ## How - Replace the private matcher import with Jest matcher context APIs: `this.equals`, `this.utils.matcherHint`, and `this.utils.printDiffOrStringify`. - Apply the same matcher-context approach to `@expo/prebuild-config`'s test-only matcher helpers. - Remove the obsolete dependency-checker exception for `expect/build/matchers`. - Keep generated `expo-router/build/testing-library/expect.*` in sync with the source change. ## Test Plan - `pnpm --filter expo-router test -- src/__tests__/testing-library.test.ios.tsx --runInBand` - `pnpm --filter @expo/prebuild-config test -- src/plugins/__tests__/withDefaultPlugins-test.ts src/testing-library/__tests__/prebuild-testing-lib.test.ts --runInBand` - `pnpm --filter @expo/prebuild-config test -- src/testing-library/__tests__/prebuild-testing-lib.test.ts --runInBand` - `pnpm --filter @expo/prebuild-config test -- src/plugins/__tests__/withDefaultPlugins-test.ts --runInBand` - `pnpm --filter @expo/prebuild-config test -- --watch false --passWithNoTests --maxWorkers 1` - `pnpm --filter expo-router exec eslint --max-warnings 0 src/testing-library/expect.ts src/__tests__/testing-library.test.ios.tsx` - `pnpm --filter @expo/prebuild-config exec eslint --max-warnings 0 src/testing-library/__tests__/expect.ts src/testing-library/__tests__/prebuild-testing-lib.test.ts src/plugins/__tests__/withDefaultPlugins-test.ts src/testing-library/__tests__/prebuild-tester.ts` - `git diff --check` - `git diff --check upstream/main` `pnpm --filter expo-router build` still fails after generation with the existing `TS5095` module-resolution config error, so unrelated generated build churn was restored and only `build/testing-library/expect.*` was kept. ## Risk Scope is limited to Jest matcher helper output in `expo-router`, equivalent test-only helpers in `@expo/prebuild-config`, changelog entries, and the dependency-checker exception removal. The generated output is limited to the committed `expo-router/build/testing-library/expect.*` files. --------- Co-authored-by: Jakub Tkacz --- packages/@expo/prebuild-config/CHANGELOG.md | 2 + .../src/testing-library/__tests__/expect.ts | 76 +++++++-- .../__tests__/prebuild-testing-lib.test.ts | 6 + packages/expo-router/CHANGELOG.md | 1 + .../build/testing-library/expect.js | 68 ++++++-- .../build/testing-library/expect.js.map | 2 +- .../testing-library.test.ios.tsx.snap.ios | 106 ++++++++++++ .../__tests__/testing-library.test.ios.tsx | 160 +++++++++++++----- .../expo-router/src/testing-library/expect.ts | 88 +++++++++- .../src/ts-declarations/expect.d.ts | 5 - .../check-packages/checkDependenciesAsync.ts | 1 - 11 files changed, 441 insertions(+), 74 deletions(-) create mode 100644 packages/expo-router/src/__tests__/__snapshots__/testing-library.test.ios.tsx.snap.ios diff --git a/packages/@expo/prebuild-config/CHANGELOG.md b/packages/@expo/prebuild-config/CHANGELOG.md index 70ce43770e267d..34e07a13f26ac4 100644 --- a/packages/@expo/prebuild-config/CHANGELOG.md +++ b/packages/@expo/prebuild-config/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- Fix Jest 30 compatibility in prebuild test helpers by removing internal `expect/build/matchers` import. ([#44188](https://github.com/expo/expo/pull/44188) by [@mvincentong](https://github.com/mvincentong)) + ### 💡 Others ## 56.0.11 — 2026-05-21 diff --git a/packages/@expo/prebuild-config/src/testing-library/__tests__/expect.ts b/packages/@expo/prebuild-config/src/testing-library/__tests__/expect.ts index 1b3da08a9dde33..9f02bb913aecc8 100644 --- a/packages/@expo/prebuild-config/src/testing-library/__tests__/expect.ts +++ b/packages/@expo/prebuild-config/src/testing-library/__tests__/expect.ts @@ -1,14 +1,39 @@ import { AndroidConfig, type ExportedConfig, IOSConfig } from '@expo/config-plugins'; import plist from '@expo/plist'; -import matchers from 'expect/build/matchers'; import fs from 'fs'; import { getInfoPlistPathLikePrebuild, getProjectRootLikePrebuild } from './prebuild-tester'; -matchers.customTesters = []; - const cacheSymbol = Symbol('jest.prebuild.cache'); +function printMatcherDiff( + context: jest.MatcherContext, + expected: unknown, + received: unknown +): string { + if (context.isNot) { + return ( + `Expected: ${context.isNot ? 'not ' : ''}${context.utils.printExpected(expected)}\n` + + `Received: ${context.utils.printReceived(received)}` + ); + } + + return context.utils.printDiffOrStringify( + expected, + received, + 'Expected', + 'Received', + context.expand !== false + ); +} + +function getMatcherHint(context: jest.MatcherContext, matcherName: string): string { + return context.utils.matcherHint(matcherName, undefined, undefined, { + isNot: context.isNot, + promise: context.promise, + }); +} + expect.extend({ toMatchInfoPlist( config: ExportedConfig & { @@ -19,7 +44,15 @@ expect.extend({ expected: any ) { if (config[cacheSymbol]?.infoPlist) { - return matchers.toEqual(config[cacheSymbol].infoPlist, expected); + const received = config[cacheSymbol].infoPlist; + const pass = this.equals(received, expected); + return { + pass, + message: () => + getMatcherHint(this, 'toMatchInfoPlist') + + '\n\n' + + printMatcherDiff(this, expected, received), + }; } const infoPlistPath = getInfoPlistPathLikePrebuild(config); @@ -28,13 +61,27 @@ expect.extend({ config[cacheSymbol] = config[cacheSymbol] || {}; config[cacheSymbol].infoPlist = config[cacheSymbol].infoPlist || infoPlist; - return matchers.toEqual(infoPlist, expected); + const pass = this.equals(infoPlist, expected); + return { + pass, + message: () => + getMatcherHint(this, 'toMatchInfoPlist') + + '\n\n' + + printMatcherDiff(this, expected, infoPlist), + }; }, toMatchAppleEntitlements(config: ExportedConfig, expected: any) { const filePath = IOSConfig.Entitlements.getEntitlementsPath(getProjectRootLikePrebuild(config)); if (!filePath) throw new Error('iOS entitlements path not found'); const data = plist.parse(fs.readFileSync(filePath, 'utf8')); - return matchers.toEqual(data, expected); + const pass = this.equals(data, expected); + return { + pass, + message: () => + getMatcherHint(this, 'toMatchAppleEntitlements') + + '\n\n' + + printMatcherDiff(this, expected, data), + }; }, toHaveModHistory(config: ExportedConfig, name: string) { if (!config._internal?.pluginHistory) { @@ -57,13 +104,18 @@ expect.extend({ }, toMatchAndroidProjectBuildGradle(config: ExportedConfig, expected: any) { - return matchers.toEqual( - fs.readFileSync( - AndroidConfig.Paths.getProjectBuildGradleFilePath(getProjectRootLikePrebuild(config)), - 'utf8' - ), - expected + const received = fs.readFileSync( + AndroidConfig.Paths.getProjectBuildGradleFilePath(getProjectRootLikePrebuild(config)), + 'utf8' ); + const pass = this.equals(received, expected); + return { + pass, + message: () => + getMatcherHint(this, 'toMatchAndroidProjectBuildGradle') + + '\n\n' + + printMatcherDiff(this, expected, received), + }; }, }); diff --git a/packages/@expo/prebuild-config/src/testing-library/__tests__/prebuild-testing-lib.test.ts b/packages/@expo/prebuild-config/src/testing-library/__tests__/prebuild-testing-lib.test.ts index 5e6bef91b6a017..07655021700910 100644 --- a/packages/@expo/prebuild-config/src/testing-library/__tests__/prebuild-testing-lib.test.ts +++ b/packages/@expo/prebuild-config/src/testing-library/__tests__/prebuild-testing-lib.test.ts @@ -40,6 +40,12 @@ it('runs normally for a single iOS prebuild', async () => { expect(Object.values(config.mods!.ios!).every((value) => typeof value === 'function')).toBe(true); expect(config).toMatchInfoPlist(expect.objectContaining({ CFBundleDisplayName: 'app' })); + expect(() => + expect(config).not.toMatchInfoPlist(expect.objectContaining({ CFBundleDisplayName: 'app' })) + ).toThrow(/\.not\.toMatchInfoPlist/); + expect(() => + expect(config).not.toMatchInfoPlist(expect.objectContaining({ CFBundleDisplayName: 'app' })) + ).toThrow(/Expected: not/); expect(config).toMatchAppleEntitlements({}); }); diff --git a/packages/expo-router/CHANGELOG.md b/packages/expo-router/CHANGELOG.md index e9914b77b84bef..ac13d2664cbb99 100644 --- a/packages/expo-router/CHANGELOG.md +++ b/packages/expo-router/CHANGELOG.md @@ -9,6 +9,7 @@ ### 🐛 Bug fixes - Fix an ES module import error in the typed config plugin. ([#46089](https://github.com/expo/expo/pull/46089) by [@zoontek](https://github.com/zoontek)) +- Fix Jest 30 compatibility in testing library by removing internal `expect/build/matchers` import. ([#40184](https://github.com/expo/expo/issues/40184)) ([#44188](https://github.com/expo/expo/pull/44188) by [@mvincentong](https://github.com/mvincentong)) ### 💡 Others diff --git a/packages/expo-router/build/testing-library/expect.js b/packages/expo-router/build/testing-library/expect.js index d86294639db64c..f12b9888702543 100644 --- a/packages/expo-router/build/testing-library/expect.js +++ b/packages/expo-router/build/testing-library/expect.js @@ -1,25 +1,73 @@ "use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; Object.defineProperty(exports, "__esModule", { value: true }); -const matchers_1 = __importDefault(require("expect/build/matchers")); -matchers_1.default.customTesters = []; +function printMatcherDiff(context, expected, received) { + if (context.isNot) { + return printMatcherValues(context, expected, received); + } + return context.utils.printDiffOrStringify(expected, received, 'Expected', 'Received', context.expand !== false); +} +function getMatcherHint(context, matcherName) { + return context.utils.matcherHint(matcherName, undefined, undefined, { + isNot: context.isNot, + promise: context.promise, + }); +} +function printMatcherValues(context, expected, received) { + return (`Expected: ${context.isNot ? 'not ' : ''}${context.utils.printExpected(expected)}\n` + + `Received: ${context.utils.printReceived(received)}`); +} expect.extend({ toHavePathname(screen, expected) { - return matchers_1.default.toEqual(screen.getPathname(), expected); + const received = screen.getPathname(); + const pass = this.equals(received, expected); + return { + pass, + // Diffs add value for structured data, but are noise for short strings, so print raw values here. + message: () => getMatcherHint(this, 'toHavePathname') + + '\n\n' + + printMatcherValues(this, expected, received), + }; }, toHavePathnameWithParams(screen, expected) { - return matchers_1.default.toEqual(screen.getPathnameWithParams(), expected); + const received = screen.getPathnameWithParams(); + const pass = this.equals(received, expected); + return { + pass, + // Diffs add value for structured data, but are noise for short strings, so print raw values here. + message: () => getMatcherHint(this, 'toHavePathnameWithParams') + + '\n\n' + + printMatcherValues(this, expected, received), + }; }, toHaveSegments(screen, expected) { - return matchers_1.default.toEqual(screen.getSegments(), expected); + const received = screen.getSegments(); + const pass = this.equals(received, expected); + return { + pass, + message: () => getMatcherHint(this, 'toHaveSegments') + + '\n\n' + + printMatcherDiff(this, expected, received), + }; }, toHaveSearchParams(screen, expected) { - return matchers_1.default.toEqual(screen.getSearchParams(), expected); + const received = screen.getSearchParams(); + const pass = this.equals(received, expected); + return { + pass, + message: () => getMatcherHint(this, 'toHaveSearchParams') + + '\n\n' + + printMatcherDiff(this, expected, received), + }; }, toHaveRouterState(screen, expected) { - return matchers_1.default.toEqual(screen.getRouterState(), expected); + const received = screen.getRouterState(); + const pass = this.equals(received, expected); + return { + pass, + message: () => getMatcherHint(this, 'toHaveRouterState') + + '\n\n' + + printMatcherDiff(this, expected, received), + }; }, }); //# sourceMappingURL=expect.js.map \ No newline at end of file diff --git a/packages/expo-router/build/testing-library/expect.js.map b/packages/expo-router/build/testing-library/expect.js.map index b3d441fba3a701..53df680acf6b83 100644 --- a/packages/expo-router/build/testing-library/expect.js.map +++ b/packages/expo-router/build/testing-library/expect.js.map @@ -1 +1 @@ -{"version":3,"file":"expect.js","sourceRoot":"","sources":["../../src/testing-library/expect.ts"],"names":[],"mappings":";;;;;AAAA,qEAA6C;AAE7C,kBAAQ,CAAC,aAAa,GAAG,EAAE,CAAC;AAE5B,MAAM,CAAC,MAAM,CAAC;IACZ,cAAc,CAAC,MAAM,EAAE,QAAQ;QAC7B,OAAO,kBAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC1D,CAAC;IACD,wBAAwB,CAAC,MAAM,EAAE,QAAQ;QACvC,OAAO,kBAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,qBAAqB,EAAE,EAAE,QAAQ,CAAC,CAAC;IACpE,CAAC;IACD,cAAc,CAAC,MAAM,EAAE,QAAQ;QAC7B,OAAO,kBAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC1D,CAAC;IACD,kBAAkB,CAAC,MAAM,EAAE,QAAQ;QACjC,OAAO,kBAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC9D,CAAC;IACD,iBAAiB,CAAC,MAAM,EAAE,QAAQ;QAChC,OAAO,kBAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC7D,CAAC;CACF,CAAC,CAAC","sourcesContent":["import matchers from 'expect/build/matchers';\n\nmatchers.customTesters = [];\n\nexpect.extend({\n toHavePathname(screen, expected) {\n return matchers.toEqual(screen.getPathname(), expected);\n },\n toHavePathnameWithParams(screen, expected) {\n return matchers.toEqual(screen.getPathnameWithParams(), expected);\n },\n toHaveSegments(screen, expected) {\n return matchers.toEqual(screen.getSegments(), expected);\n },\n toHaveSearchParams(screen, expected) {\n return matchers.toEqual(screen.getSearchParams(), expected);\n },\n toHaveRouterState(screen, expected) {\n return matchers.toEqual(screen.getRouterState(), expected);\n },\n});\n"]} \ No newline at end of file +{"version":3,"file":"expect.js","sourceRoot":"","sources":["../../src/testing-library/expect.ts"],"names":[],"mappings":";;AAAA,SAAS,gBAAgB,CACvB,OAA4B,EAC5B,QAAiB,EACjB,QAAiB;IAEjB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,kBAAkB,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,OAAO,CAAC,KAAK,CAAC,oBAAoB,CACvC,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,UAAU,EACV,OAAO,CAAC,MAAM,KAAK,KAAK,CACzB,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,OAA4B,EAAE,WAAmB;IACvE,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE;QAClE,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB,CACzB,OAA4B,EAC5B,QAAiB,EACjB,QAAiB;IAEjB,OAAO,CACL,aAAa,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI;QACpF,aAAa,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CACrD,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,CAAC;IACZ,cAAc,CAAC,MAAM,EAAE,QAAQ;QAC7B,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC7C,OAAO;YACL,IAAI;YACJ,kGAAkG;YAClG,OAAO,EAAE,GAAG,EAAE,CACZ,cAAc,CAAC,IAAI,EAAE,gBAAgB,CAAC;gBACtC,MAAM;gBACN,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC;SAC/C,CAAC;IACJ,CAAC;IACD,wBAAwB,CAAC,MAAM,EAAE,QAAQ;QACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC7C,OAAO;YACL,IAAI;YACJ,kGAAkG;YAClG,OAAO,EAAE,GAAG,EAAE,CACZ,cAAc,CAAC,IAAI,EAAE,0BAA0B,CAAC;gBAChD,MAAM;gBACN,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC;SAC/C,CAAC;IACJ,CAAC;IACD,cAAc,CAAC,MAAM,EAAE,QAAQ;QAC7B,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC7C,OAAO;YACL,IAAI;YACJ,OAAO,EAAE,GAAG,EAAE,CACZ,cAAc,CAAC,IAAI,EAAE,gBAAgB,CAAC;gBACtC,MAAM;gBACN,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC;SAC7C,CAAC;IACJ,CAAC;IACD,kBAAkB,CAAC,MAAM,EAAE,QAAQ;QACjC,MAAM,QAAQ,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC7C,OAAO;YACL,IAAI;YACJ,OAAO,EAAE,GAAG,EAAE,CACZ,cAAc,CAAC,IAAI,EAAE,oBAAoB,CAAC;gBAC1C,MAAM;gBACN,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC;SAC7C,CAAC;IACJ,CAAC;IACD,iBAAiB,CAAC,MAAM,EAAE,QAAQ;QAChC,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC7C,OAAO;YACL,IAAI;YACJ,OAAO,EAAE,GAAG,EAAE,CACZ,cAAc,CAAC,IAAI,EAAE,mBAAmB,CAAC;gBACzC,MAAM;gBACN,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC;SAC7C,CAAC;IACJ,CAAC;CACF,CAAC,CAAC","sourcesContent":["function printMatcherDiff(\n context: jest.MatcherContext,\n expected: unknown,\n received: unknown\n): string {\n if (context.isNot) {\n return printMatcherValues(context, expected, received);\n }\n\n return context.utils.printDiffOrStringify(\n expected,\n received,\n 'Expected',\n 'Received',\n context.expand !== false\n );\n}\n\nfunction getMatcherHint(context: jest.MatcherContext, matcherName: string): string {\n return context.utils.matcherHint(matcherName, undefined, undefined, {\n isNot: context.isNot,\n promise: context.promise,\n });\n}\n\nfunction printMatcherValues(\n context: jest.MatcherContext,\n expected: unknown,\n received: unknown\n): string {\n return (\n `Expected: ${context.isNot ? 'not ' : ''}${context.utils.printExpected(expected)}\\n` +\n `Received: ${context.utils.printReceived(received)}`\n );\n}\n\nexpect.extend({\n toHavePathname(screen, expected) {\n const received = screen.getPathname();\n const pass = this.equals(received, expected);\n return {\n pass,\n // Diffs add value for structured data, but are noise for short strings, so print raw values here.\n message: () =>\n getMatcherHint(this, 'toHavePathname') +\n '\\n\\n' +\n printMatcherValues(this, expected, received),\n };\n },\n toHavePathnameWithParams(screen, expected) {\n const received = screen.getPathnameWithParams();\n const pass = this.equals(received, expected);\n return {\n pass,\n // Diffs add value for structured data, but are noise for short strings, so print raw values here.\n message: () =>\n getMatcherHint(this, 'toHavePathnameWithParams') +\n '\\n\\n' +\n printMatcherValues(this, expected, received),\n };\n },\n toHaveSegments(screen, expected) {\n const received = screen.getSegments();\n const pass = this.equals(received, expected);\n return {\n pass,\n message: () =>\n getMatcherHint(this, 'toHaveSegments') +\n '\\n\\n' +\n printMatcherDiff(this, expected, received),\n };\n },\n toHaveSearchParams(screen, expected) {\n const received = screen.getSearchParams();\n const pass = this.equals(received, expected);\n return {\n pass,\n message: () =>\n getMatcherHint(this, 'toHaveSearchParams') +\n '\\n\\n' +\n printMatcherDiff(this, expected, received),\n };\n },\n toHaveRouterState(screen, expected) {\n const received = screen.getRouterState();\n const pass = this.equals(received, expected);\n return {\n pass,\n message: () =>\n getMatcherHint(this, 'toHaveRouterState') +\n '\\n\\n' +\n printMatcherDiff(this, expected, received),\n };\n },\n});\n"]} \ No newline at end of file diff --git a/packages/expo-router/src/__tests__/__snapshots__/testing-library.test.ios.tsx.snap.ios b/packages/expo-router/src/__tests__/__snapshots__/testing-library.test.ios.tsx.snap.ios new file mode 100644 index 00000000000000..bb9632ab9a350f --- /dev/null +++ b/packages/expo-router/src/__tests__/__snapshots__/testing-library.test.ios.tsx.snap.ios @@ -0,0 +1,106 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`toHavePathname fails with the correct message 1`] = ` +"expect(received).toHavePathname(expected) + +Expected: "/xyz" +Received: "/home"" +`; + +exports[`toHavePathname fails with the correct message for a .not assertion 1`] = ` +"expect(received).not.toHavePathname(expected) + +Expected: not "/home" +Received: "/home"" +`; + +exports[`toHavePathnameWithParams fails with the correct message 1`] = ` +"expect(received).toHavePathnameWithParams(expected) + +Expected: "/xyz" +Received: "/home?test=true"" +`; + +exports[`toHavePathnameWithParams fails with the correct message for a .not assertion 1`] = ` +"expect(received).not.toHavePathnameWithParams(expected) + +Expected: not "/home?test=true" +Received: "/home?test=true"" +`; + +exports[`toHaveRouterState fails with the correct message 1`] = ` +"expect(received).toHaveRouterState(expected) + +- Expected - 1 ++ Received + 20 + + Object { +- "routes": Array [], ++ "routes": Array [ ++ Object { ++ "name": "__root", ++ "params": Object { ++ "slug": "home", ++ }, ++ "state": Object { ++ "routes": Array [ ++ Object { ++ "name": "[slug]", ++ "params": Object { ++ "slug": "home", ++ "test": "true", ++ }, ++ "path": "/home?test=true", ++ }, ++ ], ++ }, ++ }, ++ ], + }" +`; + +exports[`toHaveRouterState fails with the correct message for a .not assertion 1`] = ` +"expect(received).not.toHaveRouterState(expected) + +Expected: not {"routes": [{"name": "__root", "params": {"slug": "home"}, "state": {"routes": [{"name": "[slug]", "params": {"slug": "home", "test": "true"}, "path": "/home?test=true"}]}}]} +Received: {"routes": [{"name": "__root", "params": {"slug": "home"}, "state": {"routes": [{"name": "[slug]", "params": {"slug": "home", "test": "true"}, "path": "/home?test=true"}]}}]}" +`; + +exports[`toHaveSearchParams fails with the correct message 1`] = ` +"expect(received).toHaveSearchParams(expected) + +- Expected - 1 ++ Received + 2 + + Object { +- "slug": "xyz", ++ "slug": "home", ++ "test": "true", + }" +`; + +exports[`toHaveSearchParams fails with the correct message for a .not assertion 1`] = ` +"expect(received).not.toHaveSearchParams(expected) + +Expected: not {"slug": "home", "test": "true"} +Received: {"slug": "home", "test": "true"}" +`; + +exports[`toHaveSegments fails with the correct message 1`] = ` +"expect(received).toHaveSegments(expected) + +- Expected - 1 ++ Received + 1 + + Array [ +- "xyz", ++ "[slug]", + ]" +`; + +exports[`toHaveSegments fails with the correct message for a .not assertion 1`] = ` +"expect(received).not.toHaveSegments(expected) + +Expected: not ["[slug]"] +Received: ["[slug]"]" +`; diff --git a/packages/expo-router/src/__tests__/testing-library.test.ios.tsx b/packages/expo-router/src/__tests__/testing-library.test.ios.tsx index 4549bff0afc284..b409c30b3e70f2 100644 --- a/packages/expo-router/src/__tests__/testing-library.test.ios.tsx +++ b/packages/expo-router/src/__tests__/testing-library.test.ios.tsx @@ -1,57 +1,141 @@ import { act, screen } from '@testing-library/react-native'; +import { stripVTControlCharacters } from 'node:util'; import { router } from '../imperative-api'; import { renderRouter } from '../testing-library'; +function getThrownMessage(fn: () => void): string { + try { + fn(); + } catch (e) { + return stripVTControlCharacters((e as Error).message); + } + throw new Error('Expected function to throw'); +} + /* * Smoke Tests for the Testing Library. While we use these functions in the other tests, we want to make sure they work as expected. */ -it('toHavePathname', () => { - renderRouter(['[slug]'], { initialUrl: '/home?test=true' }); - expect(screen).toHavePathname('/home'); +describe('toHavePathname', () => { + it('correctly matches', () => { + renderRouter(['[slug]'], { initialUrl: '/home?test=true' }); + expect(screen).toHavePathname('/home'); + }); + + it('fails with the correct message', () => { + renderRouter(['[slug]'], { initialUrl: '/home?test=true' }); + const message = getThrownMessage(() => expect(screen).toHavePathname('/xyz')); + expect(message).toMatchSnapshot(); + }); + + it('fails with the correct message for a .not assertion', () => { + renderRouter(['[slug]'], { initialUrl: '/home?test=true' }); + const message = getThrownMessage(() => expect(screen).not.toHavePathname('/home')); + expect(message).toMatchSnapshot(); + }); }); -it('toHavePathnameWithParams', () => { - renderRouter(['[slug]'], { initialUrl: '/home?test=true' }); - expect(screen).toHavePathnameWithParams('/home?test=true'); +describe('toHavePathnameWithParams', () => { + it('correctly matches', () => { + renderRouter(['[slug]'], { initialUrl: '/home?test=true' }); + expect(screen).toHavePathnameWithParams('/home?test=true'); + }); + + it('fails with the correct message', () => { + renderRouter(['[slug]'], { initialUrl: '/home?test=true' }); + const message = getThrownMessage(() => expect(screen).toHavePathnameWithParams('/xyz')); + expect(message).toMatchSnapshot(); + }); + + it('fails with the correct message for a .not assertion', () => { + renderRouter(['[slug]'], { initialUrl: '/home?test=true' }); + const message = getThrownMessage(() => + expect(screen).not.toHavePathnameWithParams('/home?test=true') + ); + expect(message).toMatchSnapshot(); + }); }); -it('toHaveSearchParams', () => { - renderRouter(['[slug]/[...catchAll]'], { initialUrl: '/home/long/name?test=true' }); - expect(screen).toHaveSearchParams({ slug: 'home', test: 'true', catchAll: ['long', 'name'] }); +describe('toHaveSegments', () => { + it('correctly matches', () => { + renderRouter(['[slug]'], { initialUrl: '/home?test=true' }); + expect(screen).toHaveSegments(['[slug]']); + }); + + it('fails with the correct message', () => { + renderRouter(['[slug]'], { initialUrl: '/home?test=true' }); + const message = getThrownMessage(() => expect(screen).toHaveSegments(['xyz'])); + expect(message).toMatchSnapshot(); + }); + + it('fails with the correct message for a .not assertion', () => { + renderRouter(['[slug]'], { initialUrl: '/home?test=true' }); + const message = getThrownMessage(() => expect(screen).not.toHaveSegments(['[slug]'])); + expect(message).toMatchSnapshot(); + }); }); -it('toHavePathnameWithParams', () => { - renderRouter(['[slug]'], { initialUrl: '/home?test=true' }); - expect(screen).toHavePathnameWithParams('/home?test=true'); +describe('toHaveSearchParams', () => { + it('correctly matches', () => { + renderRouter(['[slug]/[...catchAll]'], { initialUrl: '/home/long/name?test=true' }); + expect(screen).toHaveSearchParams({ slug: 'home', test: 'true', catchAll: ['long', 'name'] }); + }); + + it('fails with the correct message', () => { + renderRouter(['[slug]'], { initialUrl: '/home?test=true' }); + const message = getThrownMessage(() => expect(screen).toHaveSearchParams({ slug: 'xyz' })); + expect(message).toMatchSnapshot(); + }); + + it('fails with the correct message for a .not assertion', () => { + renderRouter(['[slug]'], { initialUrl: '/home?test=true' }); + const params = { slug: 'home', test: 'true' }; + const message = getThrownMessage(() => expect(screen).not.toHaveSearchParams(params)); + expect(message).toMatchSnapshot(); + }); }); -// This test is currently broken in React Navigation v7 as @react-navigation/routers still has the prerenderRoutes key -it.skip('toHaveRouterState', () => { - renderRouter(['[slug]', '[...catchAll]', 'directory/page'], { initialUrl: '/home?test=true' }); - act(() => router.navigate('/directory/page')); - expect(screen).toHaveRouterState({ - index: 1, - key: expect.any(String), - routeNames: ['directory/page', '[slug]', '[...catchAll]'], - routes: [ - { - key: expect.any(String), - name: '[slug]', - params: { - slug: 'home', - test: 'true', +describe('toHaveRouterState', () => { + // This test is currently broken in React Navigation v7 as @react-navigation/routers still has the prerenderRoutes key + it.skip('correctly matches', () => { + renderRouter(['[slug]', '[...catchAll]', 'directory/page'], { initialUrl: '/home?test=true' }); + act(() => router.navigate('/directory/page')); + expect(screen).toHaveRouterState({ + index: 1, + key: expect.any(String), + routeNames: ['directory/page', '[slug]', '[...catchAll]'], + routes: [ + { + key: expect.any(String), + name: '[slug]', + params: { + slug: 'home', + test: 'true', + }, + path: '/home?test=true', + }, + { + key: expect.any(String), + name: 'directory/page', + params: {}, + path: undefined, }, - path: '/home?test=true', - }, - { - key: expect.any(String), - name: 'directory/page', - params: {}, - path: undefined, - }, - ], - stale: false, - type: 'stack', + ], + stale: false, + type: 'stack', + }); + }); + + it('fails with the correct message', () => { + renderRouter(['[slug]'], { initialUrl: '/home?test=true' }); + const message = getThrownMessage(() => expect(screen).toHaveRouterState({ routes: [] })); + expect(message).toMatchSnapshot(); + }); + + it('fails with the correct message for a .not assertion', () => { + const result = renderRouter(['[slug]'], { initialUrl: '/home?test=true' }); + const state = result.getRouterState(); + const message = getThrownMessage(() => expect(screen).not.toHaveRouterState(state)); + expect(message).toMatchSnapshot(); }); }); diff --git a/packages/expo-router/src/testing-library/expect.ts b/packages/expo-router/src/testing-library/expect.ts index 2783cfda34a28d..47d24469154909 100644 --- a/packages/expo-router/src/testing-library/expect.ts +++ b/packages/expo-router/src/testing-library/expect.ts @@ -1,21 +1,95 @@ -import matchers from 'expect/build/matchers'; +function printMatcherDiff( + context: jest.MatcherContext, + expected: unknown, + received: unknown +): string { + if (context.isNot) { + return printMatcherValues(context, expected, received); + } -matchers.customTesters = []; + return context.utils.printDiffOrStringify( + expected, + received, + 'Expected', + 'Received', + context.expand !== false + ); +} + +function getMatcherHint(context: jest.MatcherContext, matcherName: string): string { + return context.utils.matcherHint(matcherName, undefined, undefined, { + isNot: context.isNot, + promise: context.promise, + }); +} + +function printMatcherValues( + context: jest.MatcherContext, + expected: unknown, + received: unknown +): string { + return ( + `Expected: ${context.isNot ? 'not ' : ''}${context.utils.printExpected(expected)}\n` + + `Received: ${context.utils.printReceived(received)}` + ); +} expect.extend({ toHavePathname(screen, expected) { - return matchers.toEqual(screen.getPathname(), expected); + const received = screen.getPathname(); + const pass = this.equals(received, expected); + return { + pass, + // Diffs add value for structured data, but are noise for short strings, so print raw values here. + message: () => + getMatcherHint(this, 'toHavePathname') + + '\n\n' + + printMatcherValues(this, expected, received), + }; }, toHavePathnameWithParams(screen, expected) { - return matchers.toEqual(screen.getPathnameWithParams(), expected); + const received = screen.getPathnameWithParams(); + const pass = this.equals(received, expected); + return { + pass, + // Diffs add value for structured data, but are noise for short strings, so print raw values here. + message: () => + getMatcherHint(this, 'toHavePathnameWithParams') + + '\n\n' + + printMatcherValues(this, expected, received), + }; }, toHaveSegments(screen, expected) { - return matchers.toEqual(screen.getSegments(), expected); + const received = screen.getSegments(); + const pass = this.equals(received, expected); + return { + pass, + message: () => + getMatcherHint(this, 'toHaveSegments') + + '\n\n' + + printMatcherDiff(this, expected, received), + }; }, toHaveSearchParams(screen, expected) { - return matchers.toEqual(screen.getSearchParams(), expected); + const received = screen.getSearchParams(); + const pass = this.equals(received, expected); + return { + pass, + message: () => + getMatcherHint(this, 'toHaveSearchParams') + + '\n\n' + + printMatcherDiff(this, expected, received), + }; }, toHaveRouterState(screen, expected) { - return matchers.toEqual(screen.getRouterState(), expected); + const received = screen.getRouterState(); + const pass = this.equals(received, expected); + return { + pass, + message: () => + getMatcherHint(this, 'toHaveRouterState') + + '\n\n' + + printMatcherDiff(this, expected, received), + }; }, }); diff --git a/packages/expo-router/src/ts-declarations/expect.d.ts b/packages/expo-router/src/ts-declarations/expect.d.ts index 275725a7b44e6c..6dc6ef9ff6dd14 100644 --- a/packages/expo-router/src/ts-declarations/expect.d.ts +++ b/packages/expo-router/src/ts-declarations/expect.d.ts @@ -1,8 +1,3 @@ -declare module 'expect/build/matchers' { - const matchers: any; - export default matchers; -} - declare namespace jest { interface Matchers { toHavePathname(pathname: string): R; diff --git a/tools/src/check-packages/checkDependenciesAsync.ts b/tools/src/check-packages/checkDependenciesAsync.ts index 66e2cdeade67c5..b71b1eb48654bd 100644 --- a/tools/src/check-packages/checkDependenciesAsync.ts +++ b/tools/src/check-packages/checkDependenciesAsync.ts @@ -43,7 +43,6 @@ const SPECIAL_DEPENDENCIES: Record | v }, 'expo-router': { - 'expect/build/matchers': 'ignore-dev', // TODO: Unsure how to replace safely. Dep/Peer won't work. Globals and `@jest/globals` unclear 'react-native-tab-view': 'ignore-dev', // TODO: Should be a peer dep, but it's only used in the MaterialTopTabs which is gated behind a try/catch require, so it's not inherently dangerous }, From bf00d9229c0ecee9639c573fb4728e8a62b37ef6 Mon Sep 17 00:00:00 2001 From: Christian Falch <875252+chrfalch@users.noreply.github.com> Date: Thu, 21 May 2026 15:38:31 +0200 Subject: [PATCH 17/28] chore(precompile) updated patch/config for skia prebuilds (#46081) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Why After starting to use the right version of RNSkia through #46079 we had a few build errors due to changes in RNSkia itself. Merge after #46079 ## How This fixes the spm config and patches skia for prebuild. ## Test-plan ✅ Ran et prebuild @shopify/react-native-skia # Checklist - [x] I added a `changelog.md` entry and rebuilt the package sources according to [this short guide](https://github.com/expo/expo/blob/main/CONTRIBUTING.md#-before-submitting) - [x] This diff will work correctly for `npx expo prebuild` & EAS Build (eg: updated a module plugin). --------- Co-authored-by: Expo Bot <34669131+expo-bot@users.noreply.github.com> --- .../expo-modules-autolinking/CHANGELOG.md | 2 + .../react-native-skia/spm.config.json | 400 +++++++++--------- .../@shopify__react-native-skia@2.6.2.patch | 13 + 3 files changed, 210 insertions(+), 205 deletions(-) create mode 100644 patches/@shopify__react-native-skia@2.6.2.patch diff --git a/packages/expo-modules-autolinking/CHANGELOG.md b/packages/expo-modules-autolinking/CHANGELOG.md index 5f408ed4aef504..5f61b25193c86e 100644 --- a/packages/expo-modules-autolinking/CHANGELOG.md +++ b/packages/expo-modules-autolinking/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- [iOS] Update `@shopify/react-native-skia` precompile config for the 2.6.x source layout ([#46081](https://github.com/expo/expo/pull/46081) by [@chrfalch](https://github.com/chrfalch)) + ### 💡 Others ## 56.0.10 — 2026-05-21 diff --git a/packages/expo-modules-autolinking/external-configs/ios/@shopify/react-native-skia/spm.config.json b/packages/expo-modules-autolinking/external-configs/ios/@shopify/react-native-skia/spm.config.json index 3eff66b05be436..e8ef6d3289bcdb 100644 --- a/packages/expo-modules-autolinking/external-configs/ios/@shopify/react-native-skia/spm.config.json +++ b/packages/expo-modules-autolinking/external-configs/ios/@shopify/react-native-skia/spm.config.json @@ -1,209 +1,199 @@ { - "$schema": "../../../../../../tools/src/prebuilds/schemas/spm.config.schema.json", - "products": [ + "$schema": "../../../../../../tools/src/prebuilds/schemas/spm.config.schema.json", + "products": [ + { + "name": "RNSkia", + "podName": "react-native-skia", + "codegenName": "rnskia", + "platforms": ["iOS(.v16)"], + "externalDependencies": ["ReactNativeDependencies", "React", "Hermes"], + "targets": [ { - "name": "RNSkia", - "podName": "react-native-skia", - "codegenName": "rnskia", - "platforms": [ - "iOS(.v16)" - ], - "externalDependencies": [ - "ReactNativeDependencies", - "React", - "Hermes" - ], - "targets": [ - { - "type": "framework", - "name": "libskia", - "path": "libs/apple/ios/libskia.xcframework" - }, - { - "type": "framework", - "name": "libsvg", - "path": "libs/apple/ios/libsvg.xcframework" - }, - { - "type": "framework", - "name": "libskshaper", - "path": "libs/apple/ios/libskshaper.xcframework" - }, - { - "type": "framework", - "name": "libskparagraph", - "path": "libs/apple/ios/libskparagraph.xcframework" - }, - { - "type": "framework", - "name": "libskunicode_core", - "path": "libs/apple/ios/libskunicode_core.xcframework" - }, - { - "type": "framework", - "name": "libskunicode_libgrapheme", - "path": "libs/apple/ios/libskunicode_libgrapheme.xcframework" - }, - { - "type": "framework", - "name": "libskottie", - "path": "libs/apple/ios/libskottie.xcframework" - }, - { - "type": "framework", - "name": "libsksg", - "path": "libs/apple/ios/libsksg.xcframework" - }, - { - "type": "objc", - "name": "rnskia_codegen_modules", - "moduleName": "rnskia", - "path": ".build/codegen/build/generated/ios/ReactCodegen/rnskia", - "pattern": "**/*.mm", - "headerPattern": "**/*.h", - "dependencies": [ - "React", - "ReactNativeDependencies" - ], - "includeDirectories": [ ".." ] - }, - { - "type": "cpp", - "name": "rnskia_codegen_components", - "moduleName": "rnskia", - "path": ".build/codegen/build/generated/ios/ReactCodegen/react/renderer/components/rnskia", - "pattern": "**/*.cpp", - "headerPattern": "**/*.h", - "dependencies": [ - "React", - "ReactNativeDependencies" - ], - "includeDirectories": [ "../../../.." ], - "compilerFlags": { - "common": { - "cxx": [ "-fno-cxx-modules" ] - } - } - }, - { - "type": "cpp", - "name": "RNSkia_cpp", - "moduleName": "rnskia", - "path": "cpp", - "pattern": "**/*.cpp", - "headerPattern": "**/*.h", - "exclude": [ - "rnskia/RNDawnContext.h", - "rnskia/RNDawnUtils.h", - "rnskia/RNDawnWindowContext.h", - "rnskia/RNDawnWindowContext.cpp", - "rnskia/RNImageProvider.h", - "rnwgpu/**", - "skia/include/**", - "skia/modules/skottie/**", - "skia/modules/skparagraph/**", - "skia/modules/sksg/**", - "skia/modules/skshaper/**", - "skia/modules/skunicode/**", - "skia/modules/svg/**", - "skia/src/**" - ], - "dependencies": [ - "React", - "ReactNativeDependencies", - "Hermes", - "libskia", - "libsvg", - "libskshaper", - "libskparagraph", - "libskunicode_core", - "libskunicode_libgrapheme", - "libskottie", - "libsksg" - ], - "includeDirectories": [ - ".", - "api", - "skia", - "../.build/codegen/build/generated/ios/ReactCodegen" - ], - "compilerFlags": { - "common": { - "c": [ - "-DSK_METAL=1", - "-DSK_GANESH=1", - "-DSK_IMAGE_READ_PIXELS_DISABLE_LEGACY_API=1", - "-DSK_DISABLE_LEGACY_SHAPER_FACTORY=1" - ], - "cxx": [ - "-fno-cxx-modules", - "-DSK_METAL=1", - "-DSK_GANESH=1", - "-DSK_IMAGE_READ_PIXELS_DISABLE_LEGACY_API=1", - "-DSK_DISABLE_LEGACY_SHAPER_FACTORY=1" - ] - }, - "debug": [ "-DHERMES_ENABLE_DEBUGGER=1" ] - }, - "publicHeaders": false - }, - { - "type": "objc", - "name": "RNSkia", - "path": "apple", - "pattern": "**/*.{m,mm}", - "headerPattern": "**/*.h", - "dependencies": [ - "Hermes", - "React", - "ReactNativeDependencies", - "libskia", - "libsvg", - "libskshaper", - "libskparagraph", - "libskunicode_core", - "libskunicode_libgrapheme", - "libskottie", - "libsksg", - "rnskia_codegen_modules", - "rnskia_codegen_components", - "RNSkia_cpp" - ], - "includeDirectories": [ - ".", - "../cpp", - "../cpp/rnskia", - "../cpp/jsi", - "../cpp/api", - "../cpp/utils", - "../cpp/skia", - "../.build/codegen/build/generated/ios/ReactCodegen" - ], - "linkedFrameworks": [ - "Foundation", - "UIKit", - "Metal", - "MetalKit", - "AVFoundation", - "AVKit", - "CoreMedia", - "QuartzCore", - "CoreGraphics", - "CoreText", - "CoreVideo", - "CoreImage", - "IOSurface" - ], - "compilerFlags": [ - "-include", "Foundation/Foundation.h", - "-include", "UIKit/UIKit.h", - "-DSK_METAL=1", - "-DSK_GANESH=1", - "-DSK_IMAGE_READ_PIXELS_DISABLE_LEGACY_API=1", - "-DSK_DISABLE_LEGACY_SHAPER_FACTORY=1" - ] - } - ] + "type": "framework", + "name": "libskia", + "path": "libs/ios/libskia.xcframework" + }, + { + "type": "framework", + "name": "libsvg", + "path": "libs/ios/libsvg.xcframework" + }, + { + "type": "framework", + "name": "libskshaper", + "path": "libs/ios/libskshaper.xcframework" + }, + { + "type": "framework", + "name": "libskparagraph", + "path": "libs/ios/libskparagraph.xcframework" + }, + { + "type": "framework", + "name": "libskunicode_core", + "path": "libs/ios/libskunicode_core.xcframework" + }, + { + "type": "framework", + "name": "libskunicode_libgrapheme", + "path": "libs/ios/libskunicode_libgrapheme.xcframework" + }, + { + "type": "framework", + "name": "libskottie", + "path": "libs/ios/libskottie.xcframework" + }, + { + "type": "framework", + "name": "libsksg", + "path": "libs/ios/libsksg.xcframework" + }, + { + "type": "objc", + "name": "rnskia_codegen_modules", + "moduleName": "rnskia", + "path": ".build/codegen/build/generated/ios/ReactCodegen/rnskia", + "pattern": "**/*.mm", + "headerPattern": "**/*.h", + "dependencies": ["React", "ReactNativeDependencies"], + "includeDirectories": [".."] + }, + { + "type": "cpp", + "name": "rnskia_codegen_components", + "moduleName": "rnskia", + "path": ".build/codegen/build/generated/ios/ReactCodegen/react/renderer/components/rnskia", + "pattern": "**/*.cpp", + "headerPattern": "**/*.h", + "dependencies": ["React", "ReactNativeDependencies"], + "includeDirectories": ["../../../.."], + "compilerFlags": { + "common": { + "cxx": ["-fno-cxx-modules"] + } + } + }, + { + "type": "cpp", + "name": "RNSkia_cpp", + "moduleName": "rnskia", + "path": "cpp", + "pattern": "**/*.cpp", + "headerPattern": "**/*.h", + "exclude": [ + "rnskia/RNDawnContext.h", + "rnskia/RNDawnUtils.h", + "rnskia/RNDawnWindowContext.h", + "rnskia/RNDawnWindowContext.cpp", + "rnskia/RNImageProvider.h", + "rnwgpu/**", + "skia/include/**", + "skia/modules/skottie/**", + "skia/modules/skparagraph/**", + "skia/modules/sksg/**", + "skia/modules/skshaper/**", + "skia/modules/skunicode/**", + "skia/modules/svg/**", + "skia/src/**" + ], + "dependencies": [ + "React", + "ReactNativeDependencies", + "Hermes", + "libskia", + "libsvg", + "libskshaper", + "libskparagraph", + "libskunicode_core", + "libskunicode_libgrapheme", + "libskottie", + "libsksg" + ], + "includeDirectories": [ + ".", + "api", + "skia", + "../.build/codegen/build/generated/ios/ReactCodegen" + ], + "compilerFlags": { + "common": { + "c": [ + "-DSK_METAL=1", + "-DSK_GANESH=1", + "-DSK_IMAGE_READ_PIXELS_DISABLE_LEGACY_API=1", + "-DSK_DISABLE_LEGACY_SHAPER_FACTORY=1" + ], + "cxx": [ + "-fno-cxx-modules", + "-DSK_METAL=1", + "-DSK_GANESH=1", + "-DSK_IMAGE_READ_PIXELS_DISABLE_LEGACY_API=1", + "-DSK_DISABLE_LEGACY_SHAPER_FACTORY=1" + ] + }, + "debug": ["-DHERMES_ENABLE_DEBUGGER=1"] + }, + "publicHeaders": false + }, + { + "type": "objc", + "name": "RNSkia", + "path": "apple", + "pattern": "**/*.{m,mm}", + "headerPattern": "**/*.h", + "dependencies": [ + "Hermes", + "React", + "ReactNativeDependencies", + "libskia", + "libsvg", + "libskshaper", + "libskparagraph", + "libskunicode_core", + "libskunicode_libgrapheme", + "libskottie", + "libsksg", + "rnskia_codegen_modules", + "rnskia_codegen_components", + "RNSkia_cpp" + ], + "includeDirectories": [ + ".", + "../cpp", + "../cpp/rnskia", + "../cpp/jsi", + "../cpp/api", + "../cpp/utils", + "../cpp/skia", + "../.build/codegen/build/generated/ios/ReactCodegen" + ], + "linkedFrameworks": [ + "Foundation", + "UIKit", + "Metal", + "MetalKit", + "AVFoundation", + "AVKit", + "CoreMedia", + "QuartzCore", + "CoreGraphics", + "CoreText", + "CoreVideo", + "CoreImage", + "IOSurface" + ], + "compilerFlags": [ + "-include", + "Foundation/Foundation.h", + "-include", + "UIKit/UIKit.h", + "-DSK_METAL=1", + "-DSK_GANESH=1", + "-DSK_IMAGE_READ_PIXELS_DISABLE_LEGACY_API=1", + "-DSK_DISABLE_LEGACY_SHAPER_FACTORY=1" + ] } - ] + ] + } + ] } diff --git a/patches/@shopify__react-native-skia@2.6.2.patch b/patches/@shopify__react-native-skia@2.6.2.patch new file mode 100644 index 00000000000000..4dfa5292d731cc --- /dev/null +++ b/patches/@shopify__react-native-skia@2.6.2.patch @@ -0,0 +1,13 @@ +diff --git a/apple/SkiaWebGPUView.mm b/apple/SkiaWebGPUView.mm +index 2e2c142263c18eba80ca4576a1fe4023e25f477e..c334b728d270aec8e737e19b794bf300ef876179 100644 +--- a/apple/SkiaWebGPUView.mm ++++ b/apple/SkiaWebGPUView.mm +@@ -7,7 +7,7 @@ + #import + #import + +-#import "RCTFabricComponentsPlugins.h" ++#import + #import "WebGPUMetalView.h" + + using namespace facebook::react; From 5c480a2f8d8881e001fd4aee9fdc94a11f57dd2e Mon Sep 17 00:00:00 2001 From: Kudo Chien Date: Thu, 21 May 2026 21:55:01 +0800 Subject: [PATCH 18/28] [updates] fix test (#46075) --- packages/expo-updates/cli/src/__tests__/configure-test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/expo-updates/cli/src/__tests__/configure-test.ts b/packages/expo-updates/cli/src/__tests__/configure-test.ts index f8c77770132b72..d307b16e86f4f2 100644 --- a/packages/expo-updates/cli/src/__tests__/configure-test.ts +++ b/packages/expo-updates/cli/src/__tests__/configure-test.ts @@ -12,6 +12,7 @@ import path from 'path'; import { configureCodeSigningAsync } from '../configureCodeSigningAsync'; jest.mock('fs'); +jest.mock('node:fs', () => require('memfs').fs); const fsReal = jest.requireActual('fs') as typeof fs; From a71898961e6dc546db87d1ed9d6010befa01acc0 Mon Sep 17 00:00:00 2001 From: Jakub Tkacz <32908614+Ubax@users.noreply.github.com> Date: Thu, 21 May 2026 16:00:15 +0200 Subject: [PATCH 19/28] [prebuild-config] mock @expo/require-utils.resolveFrom for memfs tests (#46100) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # Why `CI=1 pnpm test` in `packages/@expo/prebuild-config` fails with `ENOENT: ... expo-updates/package.json` in `withDefaultPlugins-test.ts` and `prebuild-testing-lib.test.ts`. #45990 swapped `resolve-from` for `@expo/require-utils.resolveFrom` in `@expo/config-plugins`, but the existing setup in `prebuild-config` only had a manual mock for `resolve-from`. The new `resolveFrom` falls back to Node's native `Module._resolveFilename`, so it resolves `expo-updates/package.json` to the real on-disk path under `packages/expo-updates/`. `getExpoUpdatesPackageVersion` then calls `fs.readFileSync`, which doesn't have that path. # How Mirror the old `__mocks__/resolve-from.ts` for the new module: add `packages/@expo/prebuild-config/__mocks__/@expo/require-utils.ts` that walks `node_modules` via the mocked `fs` (memfs), so resolution stays inside the virtual test filesystem. All other exports pass through `jest.requireActual`. # Test Plan 1. `CI=1 pnpm test` in `packages/@expo/prebuild-config` — 12 suites / 69 tests pass. 2. CI # Checklist - [ ] I added a `changelog.md` entry and rebuilt the package sources according to [this short guide](https://github.com/expo/expo/blob/main/CONTRIBUTING.md#-before-submitting) - [ ] This diff will work correctly for `npx expo prebuild` & EAS Build (eg: updated a module plugin). - [ ] Conforms with the [Documentation Writing Style Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md) --- .../__mocks__/@expo/require-utils.ts | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 packages/@expo/prebuild-config/__mocks__/@expo/require-utils.ts diff --git a/packages/@expo/prebuild-config/__mocks__/@expo/require-utils.ts b/packages/@expo/prebuild-config/__mocks__/@expo/require-utils.ts new file mode 100644 index 00000000000000..46dc529ebd0b80 --- /dev/null +++ b/packages/@expo/prebuild-config/__mocks__/@expo/require-utils.ts @@ -0,0 +1,30 @@ +// Replace `resolveFrom` so it resolves via the mocked `fs` (memfs) instead of +// falling back to Node's native `Module._resolveFilename`, which reads the real +// on-disk filesystem and breaks tests that use memfs fixtures. + +const actual = jest.requireActual('@expo/require-utils'); + +function mockResolveFrom(fromDirectory: string, moduleId: string): string | null { + const fs = require('fs'); + const path = require('path'); + try { + fromDirectory = fs.realpathSync(fromDirectory); + } catch (error: any) { + if (error.code === 'ENOENT') { + fromDirectory = path.resolve(fromDirectory); + } else { + return null; + } + } + + const outputPath = path.join(fromDirectory, 'node_modules', moduleId); + if (fs.existsSync(outputPath)) { + return outputPath; + } + return null; +} + +module.exports = { + ...actual, + resolveFrom: mockResolveFrom, +}; From 97d800a16fa40f981c735d653892a322a6f06369 Mon Sep 17 00:00:00 2001 From: Phil Pluckthun Date: Thu, 21 May 2026 15:06:25 +0100 Subject: [PATCH 20/28] fix(fingerprint): Handle virtual Node modules and check file existence (#46092) ## Summary Resolves #46078 There's two problems with how Fingerprint traces config plugins: - it records them as `file`, but has no semantics for paths that may not exist, and instead hard-crashes, which seems overly strict for some cases where we're unsure about the path - it reads paths from `module._cache`, ignores `filename` and uses the IDs. Neither `module._cache` nor its keys are a representative list of real filenames in some cases For `module._cache`, while it's likely better to add a resolution hook in the future, or something similar, to move away from `module._cache`, for now, we can selectively filter out IDs that are unlikely to be filenames. This then supports `evalModule` from `@expo/require-utils` (and similar modules like `tsx` or `require-from-string`, if any introduce filename remapping) Further, we should define a new source type that allows for optional file existence. This was added in this PR as `type: 'module'`, parallel to `type: 'file'`, which only differs in the semantics that it's allowed to bail on `ENOENT`. > [!NOTE] > This essentially fixes the source bug in two ways. Comment out the `module._cache` fix to test the latter ## Set of changes - Remap `module._cache[id]` to its `filename`, if it's set - Filter out virtual modules by checking `filename === id` - Add new `type: 'module'` to allow for optional files # Checklist - [x] I added a `changelog.md` entry and rebuilt the package sources according to [this short guide](https://github.com/expo/expo/blob/main/CONTRIBUTING.md#-before-submitting) - [ ] This diff will work correctly for `npx expo prebuild` & EAS Build (eg: updated a module plugin). - [ ] Conforms with the [Documentation Writing Style Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md) --------- Co-authored-by: Kudo Chien --- packages/@expo/fingerprint/CHANGELOG.md | 2 + .../fingerprint/build/ExpoConfigLoader.js | 59 +++++++++++++-- .../fingerprint/build/ExpoConfigLoader.js.map | 2 +- .../@expo/fingerprint/src/ExpoConfigLoader.ts | 71 +++++++++++++++++-- 4 files changed, 123 insertions(+), 11 deletions(-) diff --git a/packages/@expo/fingerprint/CHANGELOG.md b/packages/@expo/fingerprint/CHANGELOG.md index 0edf82b7418c4c..2de4e9f467c2c6 100644 --- a/packages/@expo/fingerprint/CHANGELOG.md +++ b/packages/@expo/fingerprint/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- Prevent ENOENT on virtual Node module paths in `ExpoConfigLoader` and check whether module paths correspond to files on disk ([#46092](https://github.com/expo/expo/pull/46092) by [@kitten](https://github.com/kitten)) + ### 💡 Others ## 0.19.0 — 2026-05-20 diff --git a/packages/@expo/fingerprint/build/ExpoConfigLoader.js b/packages/@expo/fingerprint/build/ExpoConfigLoader.js index 988916147ab20c..d65c4b5adf64ea 100644 --- a/packages/@expo/fingerprint/build/ExpoConfigLoader.js +++ b/packages/@expo/fingerprint/build/ExpoConfigLoader.js @@ -26,15 +26,56 @@ async function runAsync(programName, args = []) { const loadedModulesBefore = new Set(Object.keys(module_1.default._cache)); const { getConfig } = require((0, resolve_from_1.default)(path_1.default.resolve(projectRoot), 'expo/config')); const config = await getConfig(projectRoot, { skipSDKVersionRequirement: true }); - const loadedModules = Object.keys(module_1.default._cache) - .filter((modulePath) => !loadedModulesBefore.has(modulePath)) - .map((modulePath) => path_1.default.relative(projectRoot, modulePath)); + const virtualModuleNames = new Set(); + const loadedModules = []; + // TODO(@kitten): Don't rely on `module._cache` for this over Node loader hooks + // The module cache isn't reflective of real files necessarily + for (const id of Object.keys(module_1.default._cache)) { + if (loadedModulesBefore.has(id)) { + continue; + } + let filename = id; + const mod = module_1.default._cache[id]; + if (mod != null && mod.filename != null) { + filename = mod.filename || id; + } + // NOTE(@kitten): Virtual modules may be placed on `module._cache` and we can't rely on the ID to be accurate + // The IDs are also not necessarily paths. We prefer `filename`, and trust they exist, but if the ID mismatches + // with the module name, we use the ID, and ignore the filename entirely + if (filename !== id) { + virtualModuleNames.add(filename); + loadedModules.push(id); + } + else { + loadedModules.push(filename); + } + } const ignoredPaths = [ ...DEFAULT_CONFIG_LOADING_IGNORE_PATHS, ...(await loadIgnoredPathsAsync(ignoredFile)), ]; - const filteredLoadedModules = loadedModules.filter((modulePath) => !(0, Path_1.isIgnoredPath)(modulePath, ignoredPaths)); - const result = JSON.stringify({ config, loadedModules: filteredLoadedModules }); + const filteredLoadedModules = loadedModules.filter((modulePath) => !virtualModuleNames.has(modulePath)); + const existingLoadedModules = (await Promise.all(filteredLoadedModules.map(async (modulePath) => { + const relativePath = path_1.default.relative(projectRoot, modulePath); + if ((0, Path_1.isIgnoredPath)(relativePath, ignoredPaths)) { + return null; + } + try { + const stat = await promises_1.default.stat(modulePath); + if (!stat.isFile()) { + return null; + } + return relativePath; + } + catch (error) { + // Filter out virtual paths / non-existent files + if (error.code === 'ENOENT') { + return null; + } + throw error; + } + }))).filter((modulePath) => modulePath != null); + const result = JSON.stringify({ config, loadedModules: existingLoadedModules }); if (node_process_1.default.send) { node_process_1.default.send(result); } @@ -100,6 +141,14 @@ const DEFAULT_CONFIG_LOADING_IGNORE_PATHS = [ '**/node_modules/@babel/**/*', '**/node_modules/@expo/**/*', '**/node_modules/@jridgewell/**/*', + '**/node_modules/cross-spawn/**/*', + '**/node_modules/isexe/**/*', + '**/node_modules/shebang-command/**/*', + '**/node_modules/shebang-regex/**/*', + '**/node_modules/semver/**/*', + '**/node_modules/slugify/**/*', + '**/node_modules/typescript/**/*', + '**/node_modules/expo/config/**/*', '**/node_modules/expo/config.js', '**/node_modules/expo/config-plugins.js', `**/node_modules/{${[ diff --git a/packages/@expo/fingerprint/build/ExpoConfigLoader.js.map b/packages/@expo/fingerprint/build/ExpoConfigLoader.js.map index b355122ad22b26..9938087d874304 100644 --- a/packages/@expo/fingerprint/build/ExpoConfigLoader.js.map +++ b/packages/@expo/fingerprint/build/ExpoConfigLoader.js.map @@ -1 +1 @@ -{"version":3,"file":"ExpoConfigLoader.js","sourceRoot":"","sources":["../src/ExpoConfigLoader.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;AAuFH,0DAEC;AAvFD,2DAA6B;AAC7B,oDAA4B;AAC5B,gEAAmC;AACnC,gDAAwB;AACxB,gEAAuC;AAEvC,uCAAiD;AACjD,uCAA6C;AAE7C,KAAK,UAAU,QAAQ,CAAC,WAAmB,EAAE,OAAiB,EAAE;IAC9D,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,UAAU,WAAW,8BAA8B,CAAC,CAAC;QACjE,OAAO;IACT,CAAC;IAED,MAAM,WAAW,GAAG,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE3D,UAAU,CAAC,aAAa,CAAC,CAAC;IAC1B,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAEvC,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAEhE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,IAAA,sBAAW,EAAC,cAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC;IACrF,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,WAAW,EAAE,EAAE,yBAAyB,EAAE,IAAI,EAAE,CAAC,CAAC;IAEjF,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAM,CAAC,MAAM,CAAC;SAC7C,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;SAC5D,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,cAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;IAE/D,MAAM,YAAY,GAAG;QACnB,GAAG,mCAAmC;QACtC,GAAG,CAAC,MAAM,qBAAqB,CAAC,WAAW,CAAC,CAAC;KAC9C,CAAC;IACF,MAAM,qBAAqB,GAAG,aAAa,CAAC,MAAM,CAChD,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAA,oBAAa,EAAC,UAAU,EAAE,YAAY,CAAC,CACzD,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,qBAAqB,EAAE,CAAC,CAAC;IAChF,IAAI,sBAAO,CAAC,IAAI,EAAE,CAAC;QACjB,sBAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED,mCAAmC;AACnC,IAAI,OAAO,CAAC,IAAI,EAAE,QAAQ,KAAK,UAAU,EAAE,CAAC;IAC1C,CAAC,KAAK,IAAI,EAAE;QACV,MAAM,YAAY,GAAG,sBAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,UAAU,CAAC,CAAC;QACzE,MAAM,WAAW,GAAG,sBAAO,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,UAAU,CAAC;QAC7D,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC,WAAW,EAAE,sBAAO,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;YACnC,sBAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;AACP,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,qBAAqB,CAAC,WAA0B;IAC7D,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,8BAAoB,CAAC;IAC9B,CAAC;IAED,MAAM,WAAW,GAAG,EAAE,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,iBAAiB,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACjE,MAAM,sBAAsB,GAAG,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7D,KAAK,MAAM,IAAI,IAAI,sBAAsB,EAAE,CAAC;YAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAChC,IAAI,WAAW,EAAE,CAAC;gBAChB,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,SAAgB,uBAAuB;IACrC,OAAO,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;AACrD,CAAC;AAED;;;GAGG;AACH,SAAS,UAAU,CAAC,IAAkC;IACpD,sBAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,sBAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC;IACpD,sBAAO,CAAC,GAAG,CAAC,SAAS,GAAG,sBAAO,CAAC,GAAG,CAAC,SAAS,IAAI,sBAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;IAEtE,+FAA+F;IAC/F,UAAU,CAAC,OAAO,GAAG,sBAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;AAC7D,CAAC;AAED,6DAA6D;AAC7D,MAAM,mCAAmC,GAAG;IAC1C,2FAA2F;IAC3F,cAAc;IAEd,6BAA6B;IAC7B,4BAA4B;IAC5B,kCAAkC;IAClC,gCAAgC;IAChC,wCAAwC;IACxC,oBAAoB;QAClB,KAAK;QACL,aAAa;QACb,cAAc;QACd,aAAa;QACb,OAAO;QACP,OAAO;QACP,QAAQ;QACR,eAAe;QACf,sBAAsB;QACtB,QAAQ;QACR,aAAa;QACb,iBAAiB;QACjB,UAAU;QACV,UAAU;QACV,aAAa;QACb,WAAW;QACX,OAAO;QACP,sBAAsB;QACtB,IAAI;QACJ,YAAY;QACZ,mBAAmB;QACnB,qBAAqB;QACrB,cAAc;QACd,cAAc;QACd,aAAa;QACb,SAAS;QACT,gBAAgB;QAChB,sBAAsB;QACtB,mBAAmB;KACpB,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ;CACpB,CAAC"} \ No newline at end of file +{"version":3,"file":"ExpoConfigLoader.js","sourceRoot":"","sources":["../src/ExpoConfigLoader.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;AA4IH,0DAEC;AA5ID,2DAA6B;AAC7B,oDAA4B;AAC5B,gEAAmC;AACnC,gDAAwB;AACxB,gEAAuC;AAEvC,uCAAiD;AACjD,uCAA6C;AAE7C,KAAK,UAAU,QAAQ,CAAC,WAAmB,EAAE,OAAiB,EAAE;IAC9D,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,UAAU,WAAW,8BAA8B,CAAC,CAAC;QACjE,OAAO;IACT,CAAC;IAED,MAAM,WAAW,GAAG,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE3D,UAAU,CAAC,aAAa,CAAC,CAAC;IAC1B,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAEvC,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAEhE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,IAAA,sBAAW,EAAC,cAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC;IACrF,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,WAAW,EAAE,EAAE,yBAAyB,EAAE,IAAI,EAAE,CAAC,CAAC;IAEjF,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC7C,MAAM,aAAa,GAAa,EAAE,CAAC;IAEnC,+EAA+E;IAC/E,8DAA8D;IAC9D,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,gBAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5C,IAAI,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAChC,SAAS;QACX,CAAC;QAED,IAAI,QAAQ,GAAG,EAAE,CAAC;QAElB,MAAM,GAAG,GAAG,gBAAM,CAAC,MAAM,CAAC,EAAE,CAAQ,CAAC;QACrC,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC;YACxC,QAAQ,GAAG,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;QAChC,CAAC;QAED,6GAA6G;QAC7G,+GAA+G;QAC/G,wEAAwE;QACxE,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;YACpB,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACjC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG;QACnB,GAAG,mCAAmC;QACtC,GAAG,CAAC,MAAM,qBAAqB,CAAC,WAAW,CAAC,CAAC;KAC9C,CAAC;IAEF,MAAM,qBAAqB,GAAG,aAAa,CAAC,MAAM,CAChD,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,CACpD,CAAC;IAEF,MAAM,qBAAqB,GAAG,CAC5B,MAAM,OAAO,CAAC,GAAG,CACf,qBAAqB,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;QAC7C,MAAM,YAAY,GAAG,cAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAC5D,IAAI,IAAA,oBAAa,EAAC,YAAY,EAAE,YAAY,CAAC,EAAE,CAAC;YAC9C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,kBAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;gBACnB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO,YAAY,CAAC;QACtB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,gDAAgD;YAChD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC5B,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CACH,CACF,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC;IAE7C,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,qBAAqB,EAAE,CAAC,CAAC;IAEhF,IAAI,sBAAO,CAAC,IAAI,EAAE,CAAC;QACjB,sBAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED,mCAAmC;AACnC,IAAI,OAAO,CAAC,IAAI,EAAE,QAAQ,KAAK,UAAU,EAAE,CAAC;IAC1C,CAAC,KAAK,IAAI,EAAE;QACV,MAAM,YAAY,GAAG,sBAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,UAAU,CAAC,CAAC;QACzE,MAAM,WAAW,GAAG,sBAAO,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,UAAU,CAAC;QAC7D,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC,WAAW,EAAE,sBAAO,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;YACnC,sBAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;AACP,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,qBAAqB,CAAC,WAA0B;IAC7D,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,8BAAoB,CAAC;IAC9B,CAAC;IAED,MAAM,WAAW,GAAG,EAAE,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,iBAAiB,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACjE,MAAM,sBAAsB,GAAG,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7D,KAAK,MAAM,IAAI,IAAI,sBAAsB,EAAE,CAAC;YAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAChC,IAAI,WAAW,EAAE,CAAC;gBAChB,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,SAAgB,uBAAuB;IACrC,OAAO,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;AACrD,CAAC;AAED;;;GAGG;AACH,SAAS,UAAU,CAAC,IAAkC;IACpD,sBAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,sBAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC;IACpD,sBAAO,CAAC,GAAG,CAAC,SAAS,GAAG,sBAAO,CAAC,GAAG,CAAC,SAAS,IAAI,sBAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;IAEtE,+FAA+F;IAC/F,UAAU,CAAC,OAAO,GAAG,sBAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;AAC7D,CAAC;AAED,6DAA6D;AAC7D,MAAM,mCAAmC,GAAG;IAC1C,2FAA2F;IAC3F,cAAc;IAEd,6BAA6B;IAC7B,4BAA4B;IAC5B,kCAAkC;IAClC,kCAAkC;IAClC,4BAA4B;IAC5B,sCAAsC;IACtC,oCAAoC;IACpC,6BAA6B;IAC7B,8BAA8B;IAC9B,iCAAiC;IACjC,kCAAkC;IAClC,gCAAgC;IAChC,wCAAwC;IACxC,oBAAoB;QAClB,KAAK;QACL,aAAa;QACb,cAAc;QACd,aAAa;QACb,OAAO;QACP,OAAO;QACP,QAAQ;QACR,eAAe;QACf,sBAAsB;QACtB,QAAQ;QACR,aAAa;QACb,iBAAiB;QACjB,UAAU;QACV,UAAU;QACV,aAAa;QACb,WAAW;QACX,OAAO;QACP,sBAAsB;QACtB,IAAI;QACJ,YAAY;QACZ,mBAAmB;QACnB,qBAAqB;QACrB,cAAc;QACd,cAAc;QACd,aAAa;QACb,SAAS;QACT,gBAAgB;QAChB,sBAAsB;QACtB,mBAAmB;KACpB,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ;CACpB,CAAC"} \ No newline at end of file diff --git a/packages/@expo/fingerprint/src/ExpoConfigLoader.ts b/packages/@expo/fingerprint/src/ExpoConfigLoader.ts index 5df7a724ce6452..510821ff02352a 100644 --- a/packages/@expo/fingerprint/src/ExpoConfigLoader.ts +++ b/packages/@expo/fingerprint/src/ExpoConfigLoader.ts @@ -28,18 +28,71 @@ async function runAsync(programName: string, args: string[] = []) { const { getConfig } = require(resolveFrom(path.resolve(projectRoot), 'expo/config')); const config = await getConfig(projectRoot, { skipSDKVersionRequirement: true }); - const loadedModules = Object.keys(module._cache) - .filter((modulePath) => !loadedModulesBefore.has(modulePath)) - .map((modulePath) => path.relative(projectRoot, modulePath)); + const virtualModuleNames = new Set(); + const loadedModules: string[] = []; + + // TODO(@kitten): Don't rely on `module._cache` for this over Node loader hooks + // The module cache isn't reflective of real files necessarily + for (const id of Object.keys(module._cache)) { + if (loadedModulesBefore.has(id)) { + continue; + } + + let filename = id; + + const mod = module._cache[id] as any; + if (mod != null && mod.filename != null) { + filename = mod.filename || id; + } + + // NOTE(@kitten): Virtual modules may be placed on `module._cache` and we can't rely on the ID to be accurate + // The IDs are also not necessarily paths. We prefer `filename`, and trust they exist, but if the ID mismatches + // with the module name, we use the ID, and ignore the filename entirely + if (filename !== id) { + virtualModuleNames.add(filename); + loadedModules.push(id); + } else { + loadedModules.push(filename); + } + } const ignoredPaths = [ ...DEFAULT_CONFIG_LOADING_IGNORE_PATHS, ...(await loadIgnoredPathsAsync(ignoredFile)), ]; + const filteredLoadedModules = loadedModules.filter( - (modulePath) => !isIgnoredPath(modulePath, ignoredPaths) + (modulePath) => !virtualModuleNames.has(modulePath) ); - const result = JSON.stringify({ config, loadedModules: filteredLoadedModules }); + + const existingLoadedModules = ( + await Promise.all( + filteredLoadedModules.map(async (modulePath) => { + const relativePath = path.relative(projectRoot, modulePath); + if (isIgnoredPath(relativePath, ignoredPaths)) { + return null; + } + + try { + const stat = await fs.stat(modulePath); + if (!stat.isFile()) { + return null; + } + + return relativePath; + } catch (error: any) { + // Filter out virtual paths / non-existent files + if (error.code === 'ENOENT') { + return null; + } + throw error; + } + }) + ) + ).filter((modulePath) => modulePath != null); + + const result = JSON.stringify({ config, loadedModules: existingLoadedModules }); + if (process.send) { process.send(result); } else { @@ -111,6 +164,14 @@ const DEFAULT_CONFIG_LOADING_IGNORE_PATHS = [ '**/node_modules/@babel/**/*', '**/node_modules/@expo/**/*', '**/node_modules/@jridgewell/**/*', + '**/node_modules/cross-spawn/**/*', + '**/node_modules/isexe/**/*', + '**/node_modules/shebang-command/**/*', + '**/node_modules/shebang-regex/**/*', + '**/node_modules/semver/**/*', + '**/node_modules/slugify/**/*', + '**/node_modules/typescript/**/*', + '**/node_modules/expo/config/**/*', '**/node_modules/expo/config.js', '**/node_modules/expo/config-plugins.js', `**/node_modules/{${[ From dd33babd813b818d80010e3816e09f07b5dd15d0 Mon Sep 17 00:00:00 2001 From: Vojtech Novak Date: Thu, 21 May 2026 17:28:34 +0200 Subject: [PATCH 21/28] [docs] add docs for react-native-pager drop-in replacement (#46057) --- .../sdk/ui/drop-in-replacements/index.mdx | 1 + .../sdk/ui/drop-in-replacements/pagerview.mdx | 110 ++++++++++++++++++ .../versions/unversioned/sdk/view-pager.mdx | 2 + .../sdk/ui/drop-in-replacements/index.mdx | 1 + .../sdk/ui/drop-in-replacements/pagerview.mdx | 110 ++++++++++++++++++ .../pages/versions/v56.0.0/sdk/view-pager.mdx | 2 + .../expo-ui/community/pager-view.json | 1 + .../v56.0.0/expo-ui/community/pager-view.json | 1 + .../pager-view/PagerView.android.d.ts.map | 2 +- .../build/community/pager-view/PagerView.d.ts | 2 +- .../community/pager-view/PagerView.d.ts.map | 2 +- .../pager-view/PagerView.ios.d.ts.map | 2 +- .../build/community/pager-view/types.d.ts | 36 +++--- .../build/community/pager-view/types.d.ts.map | 2 +- .../pager-view/PagerView.android.tsx | 3 +- .../community/pager-view/PagerView.ios.tsx | 8 +- .../src/community/pager-view/PagerView.tsx | 2 +- .../src/community/pager-view/types.tsx | 36 +++--- tools/src/commands/GenerateDocsAPIData.ts | 1 + 19 files changed, 274 insertions(+), 50 deletions(-) create mode 100644 docs/pages/versions/unversioned/sdk/ui/drop-in-replacements/pagerview.mdx create mode 100644 docs/pages/versions/v56.0.0/sdk/ui/drop-in-replacements/pagerview.mdx create mode 100644 docs/public/static/data/unversioned/expo-ui/community/pager-view.json create mode 100644 docs/public/static/data/v56.0.0/expo-ui/community/pager-view.json diff --git a/docs/pages/versions/unversioned/sdk/ui/drop-in-replacements/index.mdx b/docs/pages/versions/unversioned/sdk/ui/drop-in-replacements/index.mdx index daabe66bd69f47..841d8baf61dbdf 100644 --- a/docs/pages/versions/unversioned/sdk/ui/drop-in-replacements/index.mdx +++ b/docs/pages/versions/unversioned/sdk/ui/drop-in-replacements/index.mdx @@ -13,6 +13,7 @@ The following components provide API-compatible replacements for popular React N - **[DateTimePicker](datetimepicker)**: Compatible with `@react-native-community/datetimepicker` - **[MaskedView](maskedview)**: Compatible with `@react-native-masked-view/masked-view` - **[Menu](menu)**: Compatible with `@react-native-menu/menu` +- **[PagerView](pagerview)**: Compatible with `react-native-pager-view` - **[Picker](picker)**: Compatible with `@react-native-picker/picker` - **[SegmentedControl](segmentedcontrol)**: Compatible with `@react-native-segmented-control/segmented-control` - **[Slider](slider)**: Compatible with `@react-native-community/slider` diff --git a/docs/pages/versions/unversioned/sdk/ui/drop-in-replacements/pagerview.mdx b/docs/pages/versions/unversioned/sdk/ui/drop-in-replacements/pagerview.mdx new file mode 100644 index 00000000000000..e0f695e6a62c48 --- /dev/null +++ b/docs/pages/versions/unversioned/sdk/ui/drop-in-replacements/pagerview.mdx @@ -0,0 +1,110 @@ +--- +title: PagerView +description: A horizontally paged view compatible with react-native-pager-view. +sourceCodeUrl: 'https://github.com/expo/expo/tree/main/packages/expo-ui' +packageName: '@expo/ui' +platforms: ['android', 'ios'] +--- + +import APISection from '~/components/plugins/APISection'; +import { APIInstallSection } from '~/components/plugins/InstallSection'; +import { YesIcon, NoIcon } from '~/ui/components/DocIcons'; + +A `PagerView` component with an API compatible with `react-native-pager-view`. It wraps the platform-specific `@expo/ui` primitives: Jetpack Compose `HorizontalPager` on Android and a paged SwiftUI `ScrollView` on iOS. Each child becomes a separate page and stretches to fill the pager. + +If you need lower-level control over platform-specific paging behavior or modifiers, use the native primitives directly. On iOS, [`TabView`](../swift-ui/tabview/#page-indicator-dots) with the `page` style also renders a horizontal pager and may fit better when you want SwiftUI's built-in page indicators. + +## Installation + + + +Optionally, install [`react-native-worklets`](https://docs.swmansion.com/react-native-worklets/) if you need either of the following: + +- **Animated `setPage` on iOS.** Without worklets, iOS `setPage` falls back to a non-animated jump. Android animates regardless. +- **Per-frame `onPageScroll` callbacks that stay on the UI thread.** When your `onPageScroll` handler is itself a worklet, it runs synchronously on the UI thread every frame instead of hopping to JS. Without worklets the callback still fires — it just runs on the JS thread. + +## Migrating from `react-native-pager-view` + +Update the import statement by importing `PagerView` from `@expo/ui/community/pager-view`: + +```tsx +import PagerView from 'react-native-pager-view'; +// becomes: +import PagerView from '@expo/ui/community/pager-view'; +``` + +Before you swap, you should know what changes: + +- `orientation="vertical"`, `keyboardDismissMode`, `overdrag`, and `overScrollMode` are not supported. +- The `usePagerView` hook is not provided — use a `ref` instead. +- On iOS, `onPageScroll` and `onPageScrollStateChanged` only fire on iOS 18+. + +See [Platform behavior](#platform-behavior) for the full list. + +## Basic usage + +```tsx PagerViewExample.tsx +import { useRef } from 'react'; +import { Button, StyleSheet, Text, View } from 'react-native'; +import PagerView, { type PagerViewRef } from '@expo/ui/community/pager-view'; + +export default function PagerViewExample() { + const pagerRef = useRef(null); + + return ( + + { + console.log('selected page', event.nativeEvent.position); + }}> + + Page one + + + Page two + + + Page three + + + +