Унаследованный Xamarin-проект требует либо поддержки, либо миграции на современный стек. Xamarin.iOS и Xamarin.Android предоставляют прямые биндинги к нативным SDK — без bridge, без промежуточного рантайма кроме Mono. Это отличает их от React Native или Cordova: вы работаете с теми же UIViewController, UITableView, RecyclerView, ConstraintLayout, что и при нативной разработке, просто на C# вместо Swift/Kotlin. Xamarin.Forms добавляет общий UI-слой поверх, но за счёт потери прямого контроля над каждым нативным виджетом.
Xamarin больше не получает обновлений от Microsoft, поэтому поддержка и миграция требуют специализированного опыта. Наша команда сопровождает Xamarin-проекты и проводит миграцию на .NET MAUI с документацией каждого этапа и гарантией 30 дней. Опыт — 30+ проектов на Xamarin за 5 лет работы, что позволяет экономить клиентам до 40% по сравнению с содержанием двух нативных команд.
Как поддерживать существующие Xamarin-проекты?
Сопровождение Xamarin-приложения сейчас — специфическая задача. Основные проблемы:
Устаревшие NuGet-пакеты. Часть пакетов более не обновляется под Xamarin.iOS 16+ и Android API 33+. Типичный пример — Xamarin.Forms.GoogleMaps: последний стабильный релиз был выпущен до прекращения активной поддержки, и на Android 13 возникают runtime crashes из-за изменений в разрешениях геолокации. Приходится форкать, патчить или заменять альтернативой.
iOS breaking changes. Apple продолжает ужесточать требования к privacy manifests — любое приложение, использующее NSUserDefaults, FileTimestamp, SystemBootTime и ряд других API без PrivacyInfo.xcprivacy, получает предупреждения при загрузке в App Store Connect, а затем отклонение. В Xamarin.iOS PrivacyInfo.xcprivacy добавляется вручную как BundleResource.
Mono рантайм и ARM64. Xamarin.iOS компилирует в нативный ARM64 через AOT — здесь всё хорошо. Xamarin.Android использует Mono runtime с JIT на ARM, что означает больший размер приложения и медленный cold start — на 30–40% медленнее, чем в .NET MAUI на .NET 8 AOT.
Что входит в поддержку Xamarin-приложения?
При заказе поддержки мы предоставляем:
- Обновление целевых SDK (
TargetFramework,minSdkVersion/targetSdkVersion) - Патчинг зависимостей и форки устаревших пакетов
- Добавление
PrivacyInfo.xcprivacyдля iOS - Исправление deprecated API (например,
UIWebView→WKWebView) - Аудит разрешений под Android 13/14 с новой моделью
READ_MEDIA_IMAGES,POST_NOTIFICATIONS - Настройка CI для Xamarin:
msbuild/xcodebuildчерез Azure DevOps или GitHub Actions с Fastlane - Документирование всех изменений и предоставление отчёта
Мы обучаем вашу команду работе с обновлённым кодом. После первого года поддержки затраты на обслуживание снижаются в среднем на 25%. Свяжитесь с нами для бесплатного аудита вашего проекта.
Как происходит миграция на .NET MAUI?
Миграция — это не просто запуск dotnet-upgrade-assistant. Да, Microsoft предоставила инструмент с командой upgrade-assistant upgrade --non-interactive — он переписывает csproj, обновляет namespace с Xamarin.* на Microsoft.Maui.*, но требует ручной правки в 30–50% случаев.
Процесс миграции состоит из пяти этапов:
- Аудит кода – оценка объёма работ, выявление кастомных рендереров, DependencyService, Xamarin.Essentials.
- Запуск upgrade-assistant – автоматическое обновление файлов проекта и начальный рефакторинг.
- Ручная доработка – замена Renderer на Handler, перевод платформозависимого кода, обновление конфигураций сборки.
- Тестирование – проверка на реальных устройствах (iOS 16+, Android 13+), в том числе сценариев push, deep linking, in-app purchase.
- Деплой – публикация в TestFlight и Google Play Console, настройка мониторинга.
Наиболее трудоёмкие части миграции:
- Замена
RendererнаHandler - Перевод Xamarin.Essentials на MAUI Essentials (API совместимы, но пространства имён изменились)
- Работа с платформозависимым кодом в
DependencyService— в MAUI это заменяетсяpartial classили нативнымиMauiProgram.csхуками.
Сравнение Xamarin и .NET MAUI
| Параметр | Xamarin | .NET MAUI |
|---|---|---|
| UI-фреймворк | Forms (общий) + нативные | Единый MAUI с Handler |
| Производительность | Mono JIT (Android) | .NET 8 AOT (оба) |
| Размер приложения | Больше (Mono runtime) | Меньше (NativeAOT) |
| Поддержка | Завершена | Активная, LTS |
| Инструменты миграции | — | dotnet-upgrade-assistant |
| Скорость холодного старта | Медленнее на 30–40% | Быстрее |
Xamarin.Forms проигрывает .NET MAUI по скорости холодного старта на 30–40% на Android, что критично для пользователей.
Основные этапы миграции
| Этап | Длительность | Описание |
|---|---|---|
| Аудит | 1–2 недели | Проверка кодовой базы, выявление зависимостей и рисков |
| Автоматическое обновление | 1–2 дня | Запуск upgrade-assistant, обновление csproj |
| Ручная доработка | 2–8 недель | Замена рендереров, адаптация платформного кода |
| Тестирование | 1–2 недели | Regression-тесты, UI-тесты, ручное тестирование на устройствах |
| Деплой и документация | 3–5 дней | Публикация, передача кода заказчику, инструкция по дальнейшей поддержке |
Сроки миграции — от 4 недель (небольшое приложение без кастомных рендереров) до 3–4 месяцев (крупный продукт с глубокой нативной интеграцией). Стоимость рассчитывается индивидуально после аудита существующего кода и оценки объёма изменений.
Типичные ошибки при миграции Xamarin на MAUI
- Забывают обновить все
DependencyServiceнаpartial class— приложение падает при первом доступе к платформенному сервису. - Не добавляют
PrivacyInfo.xcprivacy— отклонение в App Store. - Оставляют устаревшие пакеты вроде
Xamarin.Essentials— их нужно заменять наMicrosoft.Maui.Essentials. - Не обновляют конфигурацию сборки ProGuard/R8 (Android) — могут возникнуть ошибки shrink-удаления классов.
Получите консультацию по вашему Xamarin-проекту. Оценим объём работ, риски и сроки. Свяжитесь с нами — мы бесплатно проведём аудит кода и предложим варианты: поддержка или миграция под ключ.







