
Релиз нельзя откатить с телефона пользователя. Эдуард Оболенский об особенностях мобильной инфраструктуры в бигтехе
У Яндекса более 250 мобильных приложений, которыми занимаются около тысячи разработчиков. Эдуард Оболенский рассказывает, как создаются приложения, как они тестируются на телефонных фермах и что должна успеть команда до того, как пользователи скачают апп.
Команда нашей платформы строит процессы так, чтобы маневрировать между целями развития мобильной инфраструктуры и горящими задачами. Приоритеты определяем самостоятельно, учитывая потребности мобильных команд Яндекса и фидбэк Мобильного комитета — представителей крупных направлений и продуктов.
Задачи команды: предоставить удобные инструменты и оградить разработчиков от необходимости погружаться в детали отдельных систем, а также оперативно выявлять и устранять проблемы в работе приложений.
Как устроена мобильная разработка в Yandex Infrastructure
В идеальном мире SDLC‑цикл в мобильной разработке выглядит как последовательность следующих этапов:

На деле мобильная разработка в бигтехе — сложная вещь со своими сценариями, множеством мелких связей и нюансов. Процесс разработки пересобирается под каждую фичу и специфику проекта: всё это больше похоже на спиральную модель, предложенную Боэмом.

Как происходит сборка мобильного приложения
Сборке приложения предшествует большая подготовительная работа. Вот лишь часть того, что нужно иметь на сборочном агенте:
- Android SDK/NDK версии X
- Xcode версии Z
- Ruby, Python, Jq, Curl, Wget, Brew
- Emulator/Simulator
- VirtualBox
- Docker и многое другое
В целом флоу сборки выглядит так:

Когда рабочая версия аппа готова, переходим к этапу тестирования.
Тестирование приложения
Моделей мобильных устройств очень много, а значит, универсальные автоматические тесты не могут выявить все типы проблем. Тестирование в бигтехе включает как ручные, так и автоматизированные проверки.
Наша команда работает с фермами реальных мобильных устройств: здесь размещаются самые популярные устройства в разных ценовых категориях.

Железо оркестрируется с учётом особенностей приложения. Весь кластер железа нужно поддерживать: регулярно обновлять ОС и софт до актуальных версий, контролировать стабильность работы оборудования и при необходимости менять комплектующие.
В процессе тестирования нам помогает Гиперкуб — ящик‑склад, в котором все смартфоны, планшеты подключены в один общий USB‑хаб. Система позволяет предналивать приложения на устройства по своему сетапу. Всё это управляется централизованно с бэкенда. После тестирования пользовательские данные удаляются.

Сам процесс развёртывания автотестов на мобильных устройствах можно представить так:

Длительность тестирования зависит от специфики приложения. Если в одном случае достаточно 1–7 часов, то в другом может потребоваться 24 часа. Важно убедиться, что во время тестирования все мобильные устройства отработали корректно.
Почему нельзя всё тестирование перевести на автоматику, ведь порой мы имеем дело с тысячами устройств?
Во‑первых, есть вендор‑специфика каждого проекта (не только баги).
Во‑вторых, писать тесты для автоматики дорого и долго (особенно UI), а в графике и анимации тоже бывают баги.
Стоит учитывать и сложность интеграционных сценариев.
Подписатор (Signer) — между сборкой и дистрибуцией
Перед тем как выкатить приложение, требуется его подписать: это нужно для валидации аппа между стором и девайсом. Пользователь должен нам доверять, а мы — ему. Магазин сверяет подписи при установке, а наши бэкенды валидируют подпись в запросах от приложения. Подпись может быть одна на все приложения или индивидуальная у каждого.
На этом этапе есть много нюансов. Главное — следовать требованиям безопасности: например, нельзя хранить подпись вместе с исходным кодом приложения.
Разработку могут украсть — и тогда велик риск утечки пользовательских данных. Ещё одна проблема — плагиат: кто угодно может собрать и выложить приложение от имени вашего сервиса, перетянуть аудиторию и собрать данные пользователей. В итоге аккаунт разработчика в сторах могут заблокировать.
Дистрибуция и релизы приложения
Приложение протестировано, но прежде чем отправить его в сторы, нужно снова проверить, всё ли работает корректно.
Этапы релиза в мобильном мире выглядят так:

Всегда нужно помнить о том, что релиз нельзя откатить с телефона пользователя. Важно доработать апп до того состояния, когда всё будет функционировать должным образом. Поэтому возникают новые этапы действий:

А затем — такие:

И такие.

Отправка приложения в сторы
Перед выходом приложение попадает в сторы на ревью. Проверка может занимать часы и дни, и только потом релиз постепенно катится на девайсы пользователей.
Наша команда отвечает за представление приложений в Apple App Store Connect, Google Play Market, RuStore, в Galaxy Store, Huawei Store, Xiaomi Store и других магазинах. При публикации аппов мы учитываем нюансы сторов. Например, в каждом сторе — разные API. В Play Market часто используем API фронтенда, в App Store Connect — свой менеджмент сертификатов, девайсов и свойств приложений. RuStore делает хороший API, но здесь тоже есть своя специфика.
Метрики и планирование
Итак, приложение выпустили. Что дальше? Нужна realtime‑аналитика, чтобы отслеживать стабильность работы приложения. Только один апп может создавать 35 млрд событий в сутки. Как оперативно контролировать такой масштаб?
Для получения объективной картины мы диверсифицируем источники сбора данных о работе приложения, в том числе получаем информацию из сторов.
Среди инструментов сбора аналитики:
- AppMetrica — наша внутренняя аналитика
- Firebase — платный доступ к SQL
- Tracer — от коллег из ВКонтакте
Также для мониторинга мы используем систему алертов, агрегируем статистику и пользовательские ошибки.

Конечно, метрики дают много полезной информации, но могут ухудшать производительность приложения. Поэтому нам помогает штат инженеров: они следят за тем, чтобы работоспособность приложения не пострадала.
Какие инструменты помогают нам в работе над приложениями
Инструментов множество, но есть сервисы, без которых наша стабильная работа невозможна.
-
Signer — для подписи приложений (Android, iOS, IoT и Linux)
-
Mobile Market Manager
- Управляет ролями и доступами к аккаунтам
- Предоставляет отдельный фронтенд для доступов
- Оркестрирует все магазины с единым внешним API для пользователей
- Трекает статусы приложений
-
Системы управления зависимостями Mobile Registry — централизованный общий подход к работе с внешними и внутренними пакетами, политика карантина и паблишинг новых пакетов
-
EventBus — для отслеживания статуса приложения в сторах по версиям из продуктовых бэкенд‑сервисов
-
Release Train
- Стейтфул‑бэкенд и CLI к нему
- Управляет поведением релизов
- Объединяет релизы в разных сторах в единый флоу
- Плотная интеграция с CI/CD‑пайплайнами
Занимаетесь мобильной разработкой? Приходите в нашу команду: откликайтесь на вакансии разработчика бэкенда в команду Hyperenv и разработчика на Kotlin в мобильную платформу DevTools.
В этой статье:
- Как устроена мобильная разработка в Yandex Infrastructure
- Как происходит сборка мобильного приложения
- Тестирование приложения
- Подписатор (Signer) — между сборкой и дистрибуцией
- Дистрибуция и релизы приложения
- Отправка приложения в сторы
- Метрики и планирование
- Какие инструменты помогают нам в работе над приложениями


