← Все статьи
Кейсы

Миграция на .NET MAUI и публикация в RuStore: практический разбор для ритейл-ИТ

25.10.2026 · 6 мин чтения

По данным Habr, команда разработчиков успешно завершила миграцию крупного унаследованного проекта с Xamarin.Forms на .NET MAUI и осуществила первую публикацию приложения в RuStore. Этот кейс представляет значительный интерес для российских ритейл-компаний, которые управляют парком мобильных устройств для сотрудников и сталкиваются с необходимостью поддержки или замены legacy-приложений. Переход на современные кроссплатформенные фреймворки напрямую влияет на стоимость владения мобильным парком, скорость вывода новых функций и соответствие требованиям безопасности.

Что произошло

Технический процесс, описанный в источнике, охватывает полный жизненный цикл трансформации мобильного продукта. Изначально проект представлял собой монолит на базе Xamarin.Forms с накопленным техническим долгом, измеряемым десятками тысяч строк кода. Попытки полного переписывания с нуля оказались неэффективными, что является классической проблемой для enterprise-сегмента. Ключевым решением стала инкрементальная миграция на .NET MAUI, которая позволила переиспользовать значительную часть бизнес-логики, написанной на C#, и постепенно обновлять UI-слой.

Основные технические этапы, которые прошла команда:

Отдельно отмечается, что миграция не ограничилась Android. Команда уже планирует следующий этап — адаптацию кодовой базы для работы на iPad, что подчеркивает долгосрочную стратегию ухода от зоопарка технологий к единой .NET-экосистеме.

Почему это важно

Для ИТ-руководителя в ритейле этот кейс — не просто история успеха разработчиков, а дорожная карта по снижению рисков и затрат. В условиях, когда западные магазины приложений могут вводить ограничения, а парк устройств включает как глобальные бренды, так и устройства с предустановленным RuStore, наличие собственного канала дистрибуции становится критическим.

Бизнес-импликации и риски:

1. Стоимость владения (TCO) и скорость (Time-to-Market): Поддержка двух нативных команд (Android/Kotlin и iOS/Swift) обходится значительно дороже, чем единая команда на .NET MAUI. Миграция с устаревшего Xamarin, поддержка которого прекращается, — это вопрос выживаемости приложения. Задержка с миграцией ведет к экспоненциальному росту стоимости внесения даже мелких изменений.

2. Импортозамещение и 152-ФЗ: Публикация в RuStore — это не только альтернатива Google Play. Это интеграция с локальной экосистемой, которая лучше адаптирована под российские платежные методы и требования по обработке данных. При использовании корпоративных устройств (COPE — Corporate Owned, Personally Enabled) важно, чтобы приложение корректно работало с отечественными удостоверяющими центрами и средствами криптозащиты. Решения, подобные Komendant MDM, позволяют централизованно проверять, что установленная из RuStore версия приложения соответствует внутренним политикам безопасности и не имеет root-доступа на устройстве, что является частым требованием при работе с персональными данными клиентов в соответствии с 152-ФЗ. Подробнее о настройке политик для compliance можно узнать в /docs/152-fz.

3. Риски производительности: .NET MAUI использует механизм AOT-компиляции для Android. Неправильная конфигурация может привести к увеличению размера APK и времени холодного старта. Для ритейл-приложений, где кассир или мерчандайзер не должны ждать лишние 3–5 секунд при запуске софта, профилирование Startup-тайма после миграции является обязательным этапом.

4. Зависимость от вендоров: Переход на проприетарные SDK RuStore (Billing, Push) создает зависимость. Необходимо архитектурно изолировать этот код, чтобы в случае необходимости смены магазина приложений (например, на NashStore или прямой enterprise-дистрибутив) не пришлось переписывать ядро приложения.

Что делать

Для руководителей, чей парк устройств состоит из Android-терминалов сбора данных (ТСД), смартфонов для курьеров и планшетов для торгового зала, действия должны быть следующими:

1. Провести аудит текущего Xamarin-парка

Необходимо инвентаризировать все приложения. Если они собраны на версиях Xamarin.Forms старше 5.0 или используют устаревшие компоненты (например, HttpClient на базе AndroidClientHandler без настройки TLS 1.2), они находятся в зоне риска. Проверьте packages.config или PackageReference на наличие библиотек, помеченных как deprecated.

2. Настроить стратегию инкрементальной миграции

Не пытайтесь переписать всё сразу. Используйте механизм Handlers в .NET MAUI для постепенной замены нативных контролов.

* Создайте новый проект .NET MAUI.

* Перенесите туда Models, ViewModels и бизнес-логику (Shared Code).

* Оставьте старый Xamarin-проект для платформы-специфичного кода, используя partial classes для связи.

* Практический шаг: Включите в MDM-политику (например, через /docs/policies) запрет на установку приложений с targetSdkVersion ниже 33 для новых устройств, чтобы стимулировать разработчиков к обновлению.

3. Подготовить CI/CD пайплайн под RuStore

Стандартные шаблоны Azure DevOps или GitHub Actions для Google Play не подойдут.

* Сборка: Используйте dotnet publish -f net8.0-android -c Release /p:AndroidPackageFormat=apk. Учтите, что для RuStore может потребоваться именно APK, а не AAB.

* Подпись: Внедрите в пайплайн шаг подписи apksigner. Ключи должны храниться в секрет-менеджере (HashiCorp Vault, Azure Key Vault).

Пример команды:

apksigner sign --ks keystore.jks --ks-key-alias alias_name --out signed.apk unsigned.apk

* API доступа: Зарегистрируйте приложение в консоли разработчика RuStore, получите client_id и client_secret для API и настройте автоматическую загрузку релиза через их CLI или REST API.

4. Адаптировать политики MDM для нового приложения

После публикации в RuStore приложение будет устанавливаться на корпоративные устройства.

* Разрешенные источники: Убедитесь, что в политиках MDM разрешена установка из RuStore (пакет com.ru.store и его сервисы).

* AppConfig: Если ваше MAUI-приложение поддерживает Remote Config, настройте в MDM передачу параметров (URL серверов, флаги функционала) через AppConfig. Это избавит от необходимости выпускать новую сборку при смене адреса API.

* Безопасность: Обязательная проверка на наличие прав root или adb перед запуском критичных экранов (оплата, доступ к складу). В коде MAUI это можно сделать через DependencyService или Handler, вызвав проверку из нативного слоя Android.

5. Планирование перехода на iOS/iPad

Поскольку в планах команды есть iPad, архитектуру MAUI нужно сразу строить с учетом этого.

* Выносите всю логику работы с оборудованием (сканеры ШК, принтеры) в отдельные интерфейсы (интерфейсы C#), реализуя их нативно для Android и iOS.

* Заранее изучите ограничения entitlements для enterprise-распространения iOS-приложений, если публикация планируется не только в App Store.

Миграция на .NET MAUI и RuStore — это своевременный шаг, который переводит мобильное направление ритейла из режима "поддержания жизни в legacy" в режим масштабируемой разработки. Успех зависит не только от качества кода, но и от того, насколько плотно процессы сборки, подписи и дистрибуции интегрированы с системами управления устройствами.

Источник: https://habr.com/ru/articles/1098426/?utm_campaign=1098426&utm_source=habrahabr&utm_medium=rss

← Вернуться ко всем статьям