Чому міграція з Xamarin на .NET MAUI неминуча?
Уявіть: ваш мобільний додаток на Xamarin.Forms раптово перестає запускатися на iOS 17 — система повідомляє про несумісність з новим SDK. Підтримка Xamarin.iOS, Xamarin.Android та Xamarin.Forms офіційно припинена Microsoft: немає оновлень безпеки, виправлень багів, сумісності з новими API. Додаток на Xamarin — це накопичуваний технічний борг із чітким крайнім терміном. .NET MAUI — єдиний наступник, стабільний для продакшену. Наша команда з 8-річним досвідом у .NET-екосистемі провела 20+ успішних міграцій. Ми мінімізуємо ризики на кожному етапі та гарантуємо, що ваш додаток працюватиме на останніх версіях iOS та Android. Міграція неминуча — відкладене рішення призводить до втрати часу та грошей. Вартість міграції починається від $5,000 для невеликих проєктів. Перехід з Xamarin на MAUI вимагає ретельного планування.
Що конкретно ламається при міграції?
Структура проєкту
У Xamarin.Forms три окремі проєкти: загальний PCL/Shared, iOS head та Android head. У MAUI — єдиний multi-target проєкт: один .csproj з <TargetFrameworks>net8.0-ios;net8.0-android</TargetFrameworks>. Нативні ресурси (іконки, шрифти, Assets) переносяться до Resources/ в корені. AppDelegate.cs та MainActivity.cs перезбираються автоматично, але потребують перевірки.
Namespace та API
Xamarin.Forms → Microsoft.Maui. Це стосується кожного using-а. Простий find & replace спрацює лише частково: Device.BeginInvokeOnMainThread → MainThread.BeginInvokeOnMainThread, Application.Current.MainPage → Application.Current?.Windows[0].Page. Renderers повністю замінюються на Handlers — принципово інша модель кастомізації нативних контролів.
Renderers → Handlers
Найболючіша ділянка. Кожен кастомний рендерер для Entry — це клас, що наслідує EntryRenderer з перевизначенням OnElementChanged. У MAUI Handler — маппінг властивостей через PropertyMapper та CommandMapper. На проєкті з 5–10 кастомними рендерерами це 2–3 тижні чистої роботи. Ми переписуємо їх з нуля, використовуючи вбудовані Handler’и MAUI, що часто зменшує обсяг коду на 30–50%.
Залежності та плагіни
Частина Xamarin-плагінів (наприклад, з Xamarin.Essentials — тепер вбудована в MAUI) просто зникла. Сторонні пакети перевіряємо на NuGet на сумісність з net8.0-ios та net8.0-android. Несумісні замінюємо аналогами або пишемо обгортки.
Як ми проводимо міграцію?
Процес складається з наступних етапів:
- Аудит залежностей та рендерерів — збираємо повний список NuGet-пакетів, перевіряємо кожен на MAUI-сумісність; складаємо реєстр кастомних рендерерів з трудомісткістю переходу на Handlers.
- Автоматична конвертація за допомогою Upgrade Assistant — інструмент механічно оновлює
.csproj, target frameworks, переносить ресурси. Це ~30–40% роботи. - Ручна доробка — правка рендерерів, навігації, DI, оновлення XAML-розмітки. Для Shell-навігації MAUI концептуально ідентичний Xamarin.Forms, тому
AppShell.xamlпереїжджає з мінімальними правками. Dependency Injection переноситься на вбудованийMauiAppBuilderнаMicrosoft.Extensions.DependencyInjection. - Тестування — покриття бізнес-логіки unit-тестами (xUnit, NUnit) до міграції; після — UI-тести на Appium + MAUI UI Testing та ручне тестування на фізичних пристроях iOS та Android. Збірки поширюємо через TestFlight та Firebase App Distribution.
- Деплой у стори — налаштування CI/CD (Azure DevOps, GitHub Actions), розгортання в App Store Connect та Google Play Console, налаштування push-сповіщень (APNs/FCM) та deep linking (Universal Links / App Links).
Чому MAUI кращий за Xamarin?
MAUI прискорює збірку в 2 рази та зменшує розмір інсталяційного файлу на 30% порівняно з Xamarin.Forms. Крім того, MAUI запускається в 2 рази швидше. Ось ключові відмінності:
| Характеристика | Xamarin.Forms | .NET MAUI |
|---|---|---|
| Архітектура проєкту | 3 окремі head-проєкти | Єдиний multi-target проєкт |
| Модель рендерингу | Renderers (наслідування) | Handlers (PropertyMapper) |
| Dependency Injection | Сторонні DI-контейнери | Вбудований MauiAppBuilder |
| Продуктивність при запуску | ~2–4 секунди | ~1–2 секунди |
| Розмір IPA/APK | ~30 MB iOS, ~20 MB Android | ~25 MB iOS, ~15 MB Android |
Що входить у наш сервіс?
- Аудит поточного додатку: .csproj, NuGet, рендерери, навігація, кастомні бібліотеки.
- План міграції з покроковим розкладом та оцінкою ризиків.
- Автоматична конвертація через Upgrade Assistant з подальшою ручною доробкою.
- Переписування всіх кастомних рендерерів на Handlers.
- Оновлення DI, навігації, сервісів, ресурсів.
- Налаштування CI/CD (Azure DevOps, GitHub Actions) для збірки під iOS та Android.
- Тестування: unit, integration, UI, ручне на пристроях.
- Розгортання в App Store Connect та Google Play Console, включаючи push-сповіщення та deep linking.
- Навчання вашої команди роботі з MAUI (1–2 дні воркшопу).
- Пост-міграційна підтримка 1 місяць.
Терміни та орієнтири
| Розмір проєкту | Кастомні рендерери | Орієнтир |
|---|---|---|
| До 20 екранів | Немає / 1–3 | 3–5 тижнів |
| 20–50 екранів | 3–10 | 6–10 тижнів |
| 50+ екранів | 10+ | 12+ тижнів |
Вартість розраховується індивідуально після аудиту вашого проєкту. Замовте безкоштовний аудит вашого Xamarin-додатку — ми оцінимо обсяг робіт і підберемо оптимальний формат співпраці.
Наш досвід: 8+ років розробки мобільних додатків на .NET, 20+ успішних міграцій з Xamarin на MAUI. Гарантуємо результат — ваш додаток працюватиме на нових версіях iOS та Android без втрати функціональності.
Зв'яжіться з нами, щоб обговорити деталі.







