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 Sync Queue on an iPhone: everything is synced and the queue is clear, the phone is online and ready to sync but not signed in, and a Local Storage card notes that queued drafts stay on the device until they sync.
Adventure Cache's offline sync queue, from its current App Store listing.

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.

More case studies

Start a project