Why migrating from Xamarin to .NET MAUI is inevitable?
Imagine: your mobile app on Xamarin.Forms suddenly stops launching on iOS 17 — the system reports incompatibility with the new SDK. Support for Xamarin.iOS, Xamarin.Android, and Xamarin.Forms has been officially discontinued by Microsoft: no security updates, bug fixes, or compatibility with new APIs. An app on Xamarin is accumulating technical debt with a clear deadline. .NET MAUI is the only successor, stable for production. Our team with 8 years of experience in the .NET ecosystem has performed 20+ successful migrations. We minimize risks at every stage and guarantee your app will work on the latest iOS and Android versions.
Our Xamarin to .NET MAUI migration service converts your Xamarin.Forms app to .NET MAUI, rewriting custom renderers as Handlers for iOS and Android compatibility. We handle all aspects of the transition, ensuring your app leverages the latest SDKs.
What specifically breaks during migration?
Project structure
In Xamarin.Forms, there are three separate projects: a common PCL/Shared, iOS head, and Android head. In MAUI, it's a single multi-target project: one .csproj with <TargetFrameworks>net8.0-ios;net8.0-android</TargetFrameworks>. Native resources (icons, fonts, Assets) are moved to Resources/ in the root. AppDelegate.cs and MainActivity.cs are rebuilt automatically but require verification.
Namespaces and APIs
Xamarin.Forms → Microsoft.Maui. This applies to every using statement. A simple find & replace works only partially: Device.BeginInvokeOnMainThread → MainThread.BeginInvokeOnMainThread, Application.Current.MainPage → Application.Current?.Windows[0].Page. Renderers are entirely replaced by Handlers — a fundamentally different model for customizing native controls.
Renderers → Handlers
This is the most challenging aspect. Each custom renderer for an Entry is a class inheriting EntryRenderer with an override of OnElementChanged. In MAUI, a Handler uses property mapping via PropertyMapper and CommandMapper. On a project with 5–10 custom renderers, this means 2–3 weeks of pure work. We rebuild them from scratch using built-in MAUI Handlers, which often reduces code volume by 30–50%.
Dependencies and plugins
Some Xamarin plugins (e.g., from Xamarin.Essentials — now built into MAUI) have simply disappeared. We check third-party packages on NuGet for compatibility with net8.0-ios and net8.0-android. Incompatible ones are replaced with alternatives or we write wrappers.
How we perform the migration?
The process consists of the following stages:
- Dependency and renderer audit — collect a full list of NuGet packages, check each for MAUI compatibility; create a register of custom renderers with estimated effort to migrate to Handlers.
-
Automatic conversion using Upgrade Assistant — the tool mechanically updates
.csproj, target frameworks, moves resources. This covers ~30–40% of the work. -
Manual rework — fix renderers, navigation, DI, update XAML markup. For Shell navigation, MAUI is conceptually identical to Xamarin.Forms, so
AppShell.xamlmigrates with minimal changes. Dependency Injection is moved to the built-inMauiAppBuilderonMicrosoft.Extensions.DependencyInjection. - Testing — cover business logic with unit tests (xUnit, NUnit) before migration; after migration, UI tests using Appium + MAUI UI Testing and manual testing on physical iOS and Android devices. Builds are distributed via TestFlight and Firebase App Distribution.
- Deployment to stores — configure CI/CD (Azure DevOps, GitHub Actions), deploy to App Store Connect and Google Play Console, set up push notifications (APNs/FCM) and deep linking (Universal Links / App Links).
Why MAUI is better than Xamarin?
MAUI speeds up build time by 2x and reduces installation file size by 30% compared to Xamarin.Forms. Here are the key differences:
| Feature | Xamarin.Forms | .NET MAUI |
|---|---|---|
| Project architecture | 3 separate head projects | Single multi-target project |
| Rendering model | Renderers (inheritance) | Handlers (PropertyMapper) |
| Dependency Injection | Third-party DI containers | Built-in MauiAppBuilder |
| Startup performance | ~2–4 seconds | ~1–2 seconds |
| IPA/APK size | ~30 MB iOS, ~20 MB Android | ~25 MB iOS, ~15 MB Android |
Typical mistakes when migrating on your own include: forgetting to check all using statements, not replacing Device.BeginInvokeOnMainThread with MainThread.BeginInvokeOnMainThread, trying to run an old Xamarin plugin without checking compatibility, and using the deprecated Application.Current.MainPage instead of Application.Current?.Windows[0].Page.
Deliverables
- Full documentation of migration steps and code changes.
- Access to CI/CD pipeline and build artifacts.
- Audit of the current app: .csproj, NuGet, renderers, navigation, custom libraries.
- Migration plan with a step-by-step schedule and risk assessment.
- Automatic conversion via Upgrade Assistant followed by manual finishing.
- Rewriting all custom renderers as Handlers.
- Updating DI, navigation, services, resources.
- Setting up CI/CD (Azure DevOps, GitHub Actions) for iOS and Android builds.
- Testing: unit, integration, UI, manual on devices.
- Deployment to App Store Connect and Google Play Console, including push notifications and deep linking.
- Training your team on MAUI (1–2 day workshop).
- Post-migration support for one month.
Timelines and estimates
| Project size | Custom renderers | Estimated timeline |
|---|---|---|
| Up to 20 screens | None / 1–3 | 3–5 weeks |
| 20–50 screens | 3–10 | 6–10 weeks |
| 50+ screens | 10+ | 12+ weeks |
Typical project cost: $8,000–$25,000 depending on complexity. MAUI also reduces ongoing maintenance costs by up to 30% — potentially saving $2,000–$7,500 per year.
Cost is calculated individually after an audit of your project. Order a free audit of your Xamarin app — we will assess the scope of work and select the optimal collaboration format.
Our experience: 8+ years of mobile app development on .NET, 20+ successful migrations from Xamarin to MAUI. We guarantee results — your app will work on new iOS and Android versions without loss of functionality.
Contact us to discuss the details.







