Xamarin-приложение в RuStore: 4 шага миграции на .NET MAUI до релиза
Старое Xamarin-приложение выходит в RuStore в четыре этапа: перенос проекта на .NET MAUI, замена сервисов Google (push, карты, аналитика) на российские, сборка подписанного AAB или APK и модерация магазина. Дольше всего уходит на поиск зависимостей, которые не работают без Google Play Services.
Ноутбук прежнего подрядчика и ключ без пароля 🧳
Так выглядит типичный старый проект. Приложение для торговых агентов собирается на единственном ноутбуке, оставшемся от прежней команды. Ключ подписи лежит на том же диске, а пароль от него знал сотрудник, которого в компании больше нет. Внутри Xamarin.Forms 4.x и десяток NuGet-пакетов, которые никто не обновлял.
Microsoft прекратила поддержку Xamarin 1 мая 2024 года, поэтому исправлений безопасности и совместимости с новыми версиями Android больше не будет. Но агентам приложение нужно каждый день, и о проблеме компания узнаёт в тот момент, когда очередное обновление Android ломает отправку заказа.
Ставка понятная. Пока проект не перенесён, любая правка превращается в раскопки старой сборки. Потеряете ключ, и опубликованное приложение нельзя будет обновить: Android принимает обновление только с той же подписью. Агенты вернутся к звонкам и Excel, а заказы снова придётся вбивать в 1С руками.
У RuStore есть и практическая причина. Магазин работает на устройствах без сервисов Google, и сотрудникам не придётся скачивать APK-файлы из мессенджера.
Четыре пути для старого проекта
Прежде чем трогать код, выберите путь. У каждого своя цена ошибки.
| Вариант | Что делаем | Когда подходит | Главный риск |
|---|---|---|---|
| Оставить Xamarin | Поднимаем уровень API, собираем как есть | Приложение нужно на пару месяцев, замена уже запланирована | Сборка ломается при обновлении Visual Studio и Android SDK, помощи ждать неоткуда |
| Миграция на .NET MAUI | Переносим общий код, переписываем рендереры, меняем зависимости | Бизнес-логика на C# рабочая, интерфейс на Xamarin.Forms | Библиотеки без MAUI-версии придётся заменять или оборачивать |
| Нативный Android на Kotlin | Пишем приложение заново, обмен с сервером сохраняем | Старый код в плохом состоянии, iOS не нужен | Самый долгий путь до первого релиза, нужна другая команда |
| 1С:Мобильная платформа | Пересобираем приложение средствами 1С | Приложение показывает и вводит данные 1С, нестандартной логики мало | Ограничения по интерфейсу и доступу к функциям телефона |
Правило выбора простое. Если логика на C# работает и приложению жить дольше года, берите миграцию. Если экранов мало и все они повторяют формы 1С, посчитайте четвёртый вариант: как он устроен, описано на странице про разработку на 1С:Мобильной платформе. Первый вариант оправдан только как временная мера с датой окончания.
Дальше разбираем миграцию на MAUI: C#-логика обычно остаётся самой ценной частью старого проекта, и выбрасывать её жалко.
Шаг 1. Инвентаризация до первой строки кода 🔍
Откройте решение и составьте список. Именно он определяет срок и стоимость переноса.
- ✓версия Xamarin.Forms и все NuGet-пакеты; для каждого проверьте, есть ли версия под .NET MAUI;
- ✓кастомные рендереры: каждый нужно переписать в handler, и это самая трудоёмкая часть;
- ✓пакеты Xamarin.Firebase.* и Xamarin.GooglePlayServices.*, которые тянут за собой сервисы Google;
- ✓Microsoft App Center, если в нём собирались краши и аналитика: сервис закрыт с 31 марта 2025 года;
- ✓ключ подписи, пароль к нему и идентификатор пакета, если приложение уже где-то опубликовано.
На выходе получается таблица «пакет, чем заменить, сколько работы». Без неё оценка превращается в гадание.
Шаг 2. Перенос на .NET MAUI
Создайте новый MAUI-проект на актуальной LTS-версии .NET и переносите код в него, а не обновляйте старое решение на месте. В MAUI один проект с папкой Platforms/Android вместо отдельных проектов под каждую платформу, поэтому структура меняется целиком.
- ✓пространства имён Xamarin.Forms меняются на Microsoft.Maui.Controls, а Xamarin.Essentials уже входит в состав MAUI;
- ✓рендереры лучше переписать в handlers; слой совместимости позволяет оставить часть старых на время переноса;
- ✓картинки и шрифты переезжают в папку Resources, а регистрация шрифтов задаётся в MauiProgram.cs;
- ✓навигацию проверьте отдельно: Shell и привычные страницы ведут себя по-разному.
Поднимите targetSdk до уровня, которого требует магазин, и перепроверьте разрешения. Начиная с Android 13 разрешение на уведомления запрашивается в рантайме, и старые проекты часто рассчитывали на прежнее поведение.
Критерий готовности шага простой: приложение собирается, запускается на эмуляторе Android, а экраны и обмен с сервером ведут себя как раньше. Новые функции в этот момент не добавляйте. Пока идёт перенос, любое новое поведение маскирует регрессии.
Шаг 3. Сервисы Google заменяем на российские 🔌
Этот шаг прячет больше всего сюрпризов. Приложение установится на телефон без Google Play Services, но push не придёт, карта останется серой, а аналитика промолчит. Обычно это выясняется уже после релиза, на чьём-нибудь корпоративном планшете.
- ✓push-уведомления: Firebase Cloud Messaging заменяется на RuStore Push SDK;
- ✓карты: вместо Google Maps подойдут Яндекс Карты (MapKit) или OpenStreetMap;
- ✓аналитика и краши: вместо App Center и Firebase Analytics ставят AppMetrica;
- ✓встроенные платежи, если они есть: платёжный SDK RuStore.
SDK RuStore написаны под нативный Android, поэтому в MAUI их подключают через Android Binding Library: делают обёртку над AAR-библиотекой и вызывают её из C#. Работа несложная, но отладка занимает время, потому что часть ошибок биндинга видна только при запуске на устройстве. Прежде чем писать свою обёртку, проверьте, не появился ли готовый пакет. Если у части сотрудников сервисы Google есть, можно держать оба канала push и выбирать нужный при запуске.
Заблуждение: «готовый APK из Google Play подойдёт»
Формально его можно загрузить в RuStore. Работать на части устройств он не будет. Проверьте приложение на телефоне без сервисов Google или на образе эмулятора без Google Play: вход, заказ, фото накладной, push. Каждый сломанный сценарий пополняет список из шага 1.
Шаг 4. Подпись, сборка, консоль и модерация 🚀
RuStore принимает APK и AAB. Подписывайте релиз тем же ключом, которым подписана любая ранее опубликованная версия, и храните ключ минимум в двух местах: в защищённом хранилище компании и в резервной копии. Пароль от него не должен жить в голове одного человека. Номер версии (versionCode) растёт с каждым релизом, а идентификатор пакета после первой публикации не меняют: по нему магазин узнаёт приложение.
В консоли разработчика заполните карточку: описание, скриншоты, возрастной рейтинг и ссылку на политику конфиденциальности. Если приложение собирает персональные данные сотрудников или клиентов, сверьтесь с 152-ФЗ: первичная запись данных граждан РФ должна идти в базы на территории России. Для приложения, которое обменивается данными с 1С, это обычно вопрос расположения сервера с базой.
Затем приложение проходит модерацию. Сроки зависят от магазина, поэтому заложите время на замечания и повторную отправку и назначайте дату запуска для сотрудников после одобрения.
Последнее действие перед релизом: настройте сборку на сервере (CI), чтобы проект перестал жить на чьём-то ноутбуке. Иначе через год история повторится.
Что делаем мы и сколько это стоит
Мы берём такие проекты целиком. Сначала аудит: смотрим решение, составляем список из шага 1 и считаем, что выгоднее для вашего случая: миграция, нативная переписка или 1С:Мобильная платформа. Затем переносим код, подключаем сервисы RuStore, настраиваем сборку и ведём публикацию до одобрения. На выходе вы получаете исходники в своём репозитории, описанную сборку и ключ подписи, который хранится у вас.
Отличие в том, что мобильная часть и обмен с 1С у нас в одной команде. Когда агент не может отправить заказ, не нужно выяснять между двумя подрядчиками, чья это сторона: приложения или интеграции приложения с 1С. Если приложение нужно и клиентам, и агентам, посмотрите страницу про B2B-приложение с 1С.
Разработка мобильных приложений у нас начинается от 500 000 ₽, подробности на странице разработки мобильных приложений, а общие тарифы компании собраны в разделе цены и тарифы. Стоимость миграции существующего проекта считаем после аудита: её задают число кастомных рендереров, библиотек без замены и объём обмена с 1С. Пришлите исходники или описание проекта, и мы назовём подходящий путь и цену по вашему случаю.
❓ Частые вопросы
Можно ли выложить в RuStore приложение на Xamarin без миграции?
Технически можно, если подписанный APK или AAB проходит модерацию. Но поддержку Xamarin закрыли 1 мая 2024 года, сборка может ломаться на новых версиях Android SDK, а зависимости от сервисов Google оставят часть устройств без push и карт. Для приложения, которое проживёт дольше пары месяцев, миграция на .NET MAUI надёжнее.
Подойдёт ли RuStore для iOS-версии приложения?
Нет, RuStore распространяет только приложения для Android. Проект на .NET MAUI собирается и под iOS из общего кода, но публикация iOS-версии идёт через другие каналы, и её планируют отдельно: со своим сроком, учётной записью разработчика и проверкой. Android-релиз в RuStore при этом никак от неё не зависит.
Чем заменить Firebase Cloud Messaging при публикации в RuStore?
Для push в RuStore используют RuStore Push SDK. В MAUI он подключается через Android Binding Library, потому что написан под нативный Android. Если у части сотрудников есть сервисы Google, можно оставить оба канала и выбирать нужный при запуске приложения по наличию этих сервисов.
Что делать, если потерян ключ подписи опубликованного приложения?
Android принимает обновление только с той же подписью, что у установленной версии. Уточните у поддержки RuStore, можно ли восстановить подпись для вашей публикации. Если нельзя, придётся выпускать приложение под новым идентификатором, а пользователям ставить его заново. Поэтому ключ и пароль храните в двух местах.
Сколько стоит миграция Xamarin-приложения на .NET MAUI?
Цену задают число кастомных рендереров, библиотек без замены и объём обмена с 1С, поэтому точную сумму называем после аудита проекта. Для ориентира: разработка мобильного приложения у нас начинается от 500 000 ₽. Если приложение по сути окно в 1С, смету сравнивают с вариантом на 1С:Мобильной платформе.
Или позвоните: +7 906 045-28-27 — в рабочее время с 9:00 до 19:00
Читайте также
Остались вопросы? Нужна помощь?
Менеджеры компании с радостью ответят на ваши вопросы, произведут расчет стоимости услуг и подготовят индивидуальное коммерческое предложение.
Бесплатная консультация

