Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
87 commits
Select commit Hold shift + click to select a range
7c7511a
chore: migrate RN patches
war-in Jan 16, 2026
e609f08
Merge branch 'main' into war-in/rn-83
war-in Jan 16, 2026
f9204b2
chore: update more libraries
war-in Jan 16, 2026
dfcd6d7
wip
war-in Jan 19, 2026
49310f3
fix: clean-up lottie patch
war-in Jan 19, 2026
10568ff
fix: InteractionManager patch
war-in Jan 19, 2026
023cb49
chore: bump rock
war-in Jan 19, 2026
54fdf07
Merge branch 'main' into war-in/rn-83
war-in Jan 19, 2026
e167025
first steps into iOS
war-in Jan 19, 2026
bbb7ee9
Merge branch 'main' into war-in/rn-83
war-in Jan 20, 2026
f2350a4
Merge branch 'war-in/bump-reanimated-421' into war-in/rn-83
war-in Jan 23, 2026
7d45777
Merge branch 'main' into war-in/rn-83
war-in Jan 26, 2026
5a5566b
fix: android build
war-in Jan 27, 2026
3fdbd5e
fix: ios build
war-in Jan 27, 2026
9841778
chore: revert unnecessary rock bump
war-in Jan 27, 2026
7cc263c
chore: rename patches
war-in Jan 27, 2026
4fe581e
fix: remove unnecessary `react-native-nitro-modules` bump
war-in Jan 28, 2026
62b3543
Merge branch 'main' into war-in/rn-83
war-in Jan 28, 2026
1a2a4d9
chore: post-merge fixes
war-in Jan 28, 2026
64a081a
fix: standalone builds
war-in Jan 28, 2026
c9c3615
Merge branch 'main' into war-in/rn-83
war-in Feb 4, 2026
97f608d
chore: post-merge fixes
war-in Feb 4, 2026
8cd82ac
fix: android build
war-in Feb 4, 2026
8b850c4
Merge branch 'main' into war-in/rn-83
war-in Feb 6, 2026
76c1f78
fix: make iOS work
war-in Feb 6, 2026
ca408a5
Merge branch 'refs/heads/main' into war-in/rn-83
war-in Feb 12, 2026
c8d2797
chore: remove outdated patch
war-in Feb 12, 2026
91262cb
fix: iOS crash when switching experiences
war-in Feb 12, 2026
9d07843
Merge branch 'refs/heads/main' into war-in/rn-83
war-in Feb 13, 2026
107729d
fix: add patches to details
war-in Feb 13, 2026
c22f696
chore: update podfile
war-in Feb 13, 2026
c2dadc8
fix: typechesk
war-in Feb 16, 2026
2b86344
Merge branch 'main' into war-in/rn-83
war-in Feb 16, 2026
cba8917
fix: typecheck
war-in Feb 16, 2026
b60293f
fix: tests
war-in Feb 16, 2026
5c25f44
fix: patches
war-in Feb 16, 2026
11fac92
fix: remove outdated patch
war-in Feb 16, 2026
ac0f5ef
chore: update podfile.lock
war-in Feb 16, 2026
125e351
fix: jest setup
war-in Feb 16, 2026
756fb4d
fix: revert unrelated changes
war-in Feb 16, 2026
29c3a64
fix: prettier
war-in Feb 16, 2026
8be492c
fix: podfile
war-in Feb 16, 2026
872c74f
fix: update `expo-image` to fix android release build error
war-in Feb 17, 2026
7716f14
Merge branch 'main' into war-in/rn-83
war-in Feb 17, 2026
2036850
chore: update patch
war-in Feb 17, 2026
4d22ada
Merge branch 'main' into war-in/rn-83
war-in Feb 17, 2026
55557e5
fix: android release build by updating firebase-crashlytics-gradle ve…
war-in Feb 17, 2026
1cc6eff
Merge branch 'main' into war-in/rn-83
war-in Feb 20, 2026
c5896b4
Merge branch 'main' into war-in/rn-83
war-in Feb 20, 2026
cef0ee8
Merge branch 'main' into war-in/rn-83
war-in Feb 23, 2026
5106918
Merge branch 'main' into war-in/rn-83
war-in Feb 25, 2026
f89c378
fix: fetching files on Android
war-in Feb 25, 2026
6223687
chore: update expo to 55
war-in Feb 25, 2026
22bc02d
chore: update Podfile.lock
war-in Feb 25, 2026
8104eef
Merge branch 'main' into war-in/rn-83
war-in Feb 26, 2026
e7b1496
fix: navigation to concierge
war-in Feb 26, 2026
e0f5d75
Merge branch 'main' into war-in/rn-83
war-in Feb 27, 2026
df72486
Merge branch 'refactor/replace-SelectionListWithSections-with-new-Sel…
war-in Feb 27, 2026
b0011ad
fix: textInput autofocus when navigating back
war-in Mar 2, 2026
a9b2bb6
Merge branch 'refs/heads/main' into war-in/rn-83
war-in Mar 2, 2026
c2f1803
chore: rename patches
war-in Mar 2, 2026
1973b6e
chore: update @expo/metro-runtime
war-in Mar 2, 2026
d35ec89
fix: prettier
war-in Mar 2, 2026
81f3735
fix: rename patches
war-in Mar 2, 2026
c327886
Merge branch 'main' into war-in/rn-83
war-in Mar 3, 2026
a579a92
fix: lazy loading illustrations on Android dev
war-in Mar 3, 2026
fd2730f
fix: package-lock.json
war-in Mar 3, 2026
e4ce62f
chore: add RN patch details
war-in Mar 4, 2026
f36ce97
Merge branch 'main' into war-in/rn-83
war-in Mar 4, 2026
f775082
Merge branch 'main' into war-in/rn-83
war-in Mar 5, 2026
6e4cc21
fix: wrong avatar image orientation
war-in Mar 5, 2026
7bace85
merge
war-in Mar 5, 2026
7908891
chore: post-merge fixed
war-in Mar 5, 2026
dd674aa
chore: fix patch
war-in Mar 5, 2026
84cc794
chore: fix typecheck
war-in Mar 5, 2026
f6a5af7
chore: add upstream PR
war-in Mar 5, 2026
4a51d12
fix: gh actions check
war-in Mar 5, 2026
3e1e3fd
fix: lint
war-in Mar 5, 2026
ef42da2
Merge branch 'main' into war-in/rn-83
war-in Mar 9, 2026
dc6a4e1
chore: fix locks
war-in Mar 9, 2026
73291f9
Merge branch 'main' into war-in/rn-83
war-in Mar 10, 2026
681fa9e
chore: add upstream PRs
war-in Mar 11, 2026
71d1ac7
Merge branch 'main' into war-in/rn-83
war-in Mar 13, 2026
b074b92
chore: post-merge fixes
war-in Mar 13, 2026
68b4b1d
Merge branch 'refs/heads/main' into war-in/rn-83
war-in Mar 16, 2026
6bc063f
Merge branch 'main' into war-in/rn-83
war-in Mar 18, 2026
83089bb
Merge branch 'main' into war-in/rn-83
war-in Mar 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,968 changes: 922 additions & 1,046 deletions .github/actions/javascript/authorChecklist/index.js

Large diffs are not rendered by default.

41 changes: 15 additions & 26 deletions android/app/src/main/java/com/expensify/chat/MainApplication.kt
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import com.expensify.chat.shortcutManagerModule.ShortcutManagerPackage
import com.facebook.react.PackageList
import com.facebook.react.ReactApplication
import com.facebook.react.ReactHost
import com.facebook.react.ReactNativeHost
import com.facebook.react.ReactPackage
import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load
import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost
Expand All @@ -22,37 +21,27 @@ import com.facebook.react.modules.i18nmanager.I18nUtil
import com.facebook.react.soloader.OpenSourceMergedSoMapping
import com.facebook.soloader.SoLoader
import expo.modules.ApplicationLifecycleDispatcher
import expo.modules.ReactNativeHostWrapper
import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative

class MainApplication : MultiDexApplication(), ReactApplication {
companion object {
private const val APP_START_TIME_PREFERENCES = "AppStartTime"
}
override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper(this, object : DefaultReactNativeHost(this) {
override fun getUseDeveloperSupport() = BuildConfig.DEBUG

override fun getPackages(): List<ReactPackage> =
PackageList(this).packages.apply {
// Packages that cannot be autolinked yet can be added manually here, for example:
// add(MyReactNativePackage());
add(ShortcutManagerPackage())
add(BootSplashPackage())
add(ExpensifyAppPackage())
add(RNTextInputResetPackage())
add(NavBarManagerPackage())
}

override fun getJSMainModuleName() = ".expo/.virtual-metro-entry"

override val isNewArchEnabled: Boolean
get() = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
override val isHermesEnabled: Boolean
get() = BuildConfig.IS_HERMES_ENABLED
})

override val reactHost: ReactHost
get() = getDefaultReactHost(applicationContext, reactNativeHost)
override val reactHost: ReactHost by lazy {
getDefaultReactHost(
context = applicationContext,
packageList =
PackageList(this).packages.apply {
// Packages that cannot be autolinked yet can be added manually here, for example:
// add(MyReactNativePackage())
add(ShortcutManagerPackage())
add(BootSplashPackage())
add(ExpensifyAppPackage())
add(RNTextInputResetPackage())
add(NavBarManagerPackage())
},
)
}

override fun onCreate() {
super.onCreate()
Expand Down
Binary file modified android/gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
2 changes: 1 addition & 1 deletion android/gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -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.0.0-bin.zip
Copy link
Contributor

Choose a reason for hiding this comment

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

Sounds like bumping to gradle 9.0.0 gives us some tasks to do:

  1. The applicationVariants API is now deprecated (replaced by applicationComponents API). Looks like we're using this in our build.gradle.
  2. kotlin-android plugin is now built-in, and we can/should remove apply plugin: 'kotlin-android'
  3. There's an implicit runtime dependency on kotlin 2.2+. We're currently set to 2.1.20, so we should bump that at least to 2.2
  4. Gradle 9 makes the configuration cache the preferred execution mode. Gradle Tasks that are incompatible with the configuration cache will cause cache entries to be discarded. Any custom Gradle tasks in your build scripts or local plugins need to be configuration-cache-compatible.

AI list for next steps:

  1. Run ./gradlew help --warning-mode=all on your Gradle 8 build first — this surfaces all deprecation warnings that will become errors in Gradle 9.
  2. Update AGP to 9.x and Gradle wrapper to 9.x together (they're tightly coupled).
  3. Remove kotlin-android plugin declarations from your android/ build files.
  4. Search all build.gradle files for jcenter() and replace it.
  5. Check every native module in package.json for an AGP 9-compatible release. If you're blocked by a plugin, add android.newDsl=false to gradle.properties as a temporary bridge — but plan to remove it before mid-2026.
  6. Run ./gradlew build --scan to get a detailed deprecation view after upgrading.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Thank you for the review! I agree that we should put some love into our gradle setup but I don't think we should update AGP to v9

I'm usually using React Native Upgrade Helper when upgrading RN and it suggested upgrading gradle to v9. However, when I tried upgrading AGP through Android Studio I saw this information

Upgrade Gradle version to 9.2.1
Version 9.2.1 is the minimum version of Gradle compatible
with Android Gradle Plugin version 9.0.0.

So, I'd rather stay on gradle v9 until the helper recommends the update.
What we can do is run ./gradlew help --warning-mode=all on main and fix project-related warnings. But I think this can be done in a separate issue

How do you feel about it? Do you have any additional thoughts?

Copy link
Contributor

Choose a reason for hiding this comment

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

I suppose if everything's working, that's fine

networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
Expand Down
14 changes: 12 additions & 2 deletions android/settings.gradle
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
pluginManagement { includeBuild("../node_modules/@react-native/gradle-plugin") }
plugins { id("com.facebook.react.settings") }
pluginManagement {
includeBuild("../node_modules/@react-native/gradle-plugin")
includeBuild("../node_modules/expo-modules-autolinking/android/expo-gradle-plugin")
}
plugins {
id("com.facebook.react.settings")
id("expo-autolinking-settings")
}
apply from: "${rootDir}/../gradleUtils/PatchedArtifactsSettings.gradle"

extensions.configure(com.facebook.react.ReactSettingsExtension){ ex -> ex.autolinkLibrariesFromCommand(['npx', 'rock', 'config', '-p', 'android']) }
Expand Down Expand Up @@ -33,3 +39,7 @@ if(settings.extensions.patchedArtifacts.buildFromSource) {

apply from: new File(["node", "--print", "require.resolve('expo/package.json')"].execute(null, rootDir).text.trim(), "../scripts/autolinking.gradle")
useExpoModules()
expoAutolinking {
projectRoot = file(rootDir)
useExpoModules()
}
1 change: 1 addition & 0 deletions gradleUtils/PatchedArtifactsSettings.gradle
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import groovy.xml.XmlSlurper
import groovy.json.JsonSlurper
import java.util.concurrent.TimeUnit

Expand Down
44 changes: 22 additions & 22 deletions ios/NewExpensify.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -673,25 +673,6 @@
shellPath = /bin/sh;
shellScript = "if [ \"$CONFIGURATION\" != \"DebugDevelopment\" ]; then\n \"${PODS_ROOT}/FullStory/tools/FullStoryCommandLine\" \"${CONFIGURATION_BUILD_DIR}/${WRAPPER_NAME}\"\nelse\n echo \"Skipping FullStory Asset Uploader phase for DebugDevelopment scheme.\"\nfi\n";
};
87174A5CC3CF40CC94B76870 /* Strip Debug Symbols */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
);
name = "Strip Debug Symbols";
outputFileListPaths = (
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "bash \"${PROJECT_DIR}/../scripts/strip-ios-debug-symbols.sh\"\n";
};
5124824122A346BD617AD428 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
Expand All @@ -710,7 +691,7 @@
"${PODS_XCFRAMEWORKS_BUILD_DIR}/group-ib-fp/GIBMobileSdk.framework/GIBMobileSdk",
"${PODS_XCFRAMEWORKS_BUILD_DIR}/group-ib-fp/FPAppsCapability.framework/FPAppsCapability",
"${PODS_XCFRAMEWORKS_BUILD_DIR}/group-ib-fp/FPCallCapability.framework/FPCallCapability",
"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes",
"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermesvm.framework/hermesvm",
);
name = "[CP] Embed Pods Frameworks";
outputPaths = (
Expand All @@ -725,7 +706,7 @@
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GIBMobileSdk.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FPAppsCapability.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FPCallCapability.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermesvm.framework",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
Expand Down Expand Up @@ -756,6 +737,25 @@
shellPath = /bin/sh;
shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-NewExpensify/expo-configure-project.sh\"\n";
};
87174A5CC3CF40CC94B76870 /* Strip Debug Symbols */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
);
name = "Strip Debug Symbols";
outputFileListPaths = (
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "bash \"${PROJECT_DIR}/../scripts/strip-ios-debug-symbols.sh\"\n";
};
87667FE2684C0D1946DE7329 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
Expand Down Expand Up @@ -791,7 +791,7 @@
"${PODS_CONFIGURATION_BUILD_DIR}/AppAuth/AppAuthCore_Privacy.bundle",
"${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/EXConstants.bundle",
"${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/ExpoConstants_privacy.bundle",
"${PODS_CONFIGURATION_BUILD_DIR}/EXTaskManager/ExpoTaskManager_privacy.bundle",
"${PODS_CONFIGURATION_BUILD_DIR}/ExpoTaskManager/ExpoTaskManager_privacy.bundle",
"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore_Privacy.bundle",
"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreInternal/FirebaseCoreInternal_Privacy.bundle",
"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations/FirebaseInstallations_Privacy.bundle",
Expand Down
Loading
Loading