Case study
Moving a live app from Xamarin.Forms to .NET MAUI
Adventure Cache, our geocaching and exploration companion, began as a Xamarin.Forms app with separate Android and iOS projects, and we rebuilt it as a single .NET MAUI project without giving up its identity in either store.
.NET 10 .NET MAUI SQLite iOS & Android
The problem
The app was already live on Google Play and the App Store. It was a Xamarin.Forms 5 application with production listings, a package identity, local data, and API behavior, so the migration could not be treated as a clean rewrite.
The package and bundle identifier, signing continuity, store update paths, offline field records, the synchronization queue, and the map-first behavior all had to survive, while Android and iOS kept their own release risks.
Our approach
We made the .NET MAUI single project the active target and kept the legacy projects as parity references. Local state was centralized around SQLite and a queued synchronization path, so field records stay on the device until they sync. Signed builds and the artifacts the stores deliver were validated separately, on physical Android and iOS devices.
It was not a transparent framework swap. Production rounds exposed Android startup, ahead-of-time compilation, and first-install database issues, followed by an iOS first-launch failure in App Store version 20.1.
The result
The Android corrections shipped through Google Play, and App Store version 20.2 fixed the iOS first-launch crash with linker and startup hardening. Adventure Cache remains live on both stores with its original production identity.
The lasting change is the release process. Debug builds and checks against an existing database were not enough, so fresh installation, first launch, inspection of the signed artifact, and validation of the store-delivered build on physical devices are now release gates of their own.
The product
Adventure Cache
iOS Android Live
Geocaching and exploration companion โ create adventures, hide caches, log finds, and earn badges.
Start a project
Have something to build?
Tell us what you're building. We reply personally with a few questions, then send a written scope before any work starts.