Кейс: Разработка мобильных приложений и повышение рейтинга в App Store с 2.0 до 4.8.
☰ Содержание:
Введение: Точка невозврата
В сфере профессиональной разработки мобильных приложений рейтинг 2 звезды — это барьер, отсекающий до 80% органического трафика, и приговор для маркетингового бюджета. Это «черная метка», цифровая пустошь, где умирают маркетинговые бюджеты, а стоимость привлечения пользователя (CAC) стремится в стратосферу.
Когда клиент — крупный ритейлер электроники — пришел к нам, их приложение было не просто "багованным". Оно было памятником техническому долгу. Пользователи не просто удаляли приложение, они ненавидели его. Отзывы в App Store напоминали стену плача:
"Вылетает при попытке оплатить. Спасибо, купил у конкурентов." — 1 звезда.
"Греет телефон так, что можно жарить яичницу. Батарея улетает за 15 минут." — 1 звезда.
"Разработчики, верните старую версию!" — 1 звезда.
Клиент стоял перед выбором: похоронить проект и начать с чистого листа под новым брендом или совершить невозможное — реанимировать текущий продукт через комплексное исправление багов.
Мы выбрали второе. Это история о том, как за 6 месяцев мы переписали 90% кода, изменили архитектуру и вернули любовь пользователей.
Часть 1: Аудит. Почему обновление мобильного приложения стало неизбежным
Технический ужас
Открыв исходный код (iOS — Objective-C вперемешку с ранним Swift, Android — Java с вкраплениями Kotlin), мы увидели классический "спагетти-код".
- Отсутствие архитектуры: Логика переходов, сетевые запросы, обработка данных и UI — всё находилось внутри гигантских контроллеров (Massive View Controller). Один файл экрана корзины занимал 4000 строк кода.
- Утечки памяти: Приложение "текло" как дуршлаг. Профилирование показало, что при скролле каталога объекты ячеек не освобождались, забивая оперативную память до критического уровня. Итог — гарантированный краш (OOM - Out of Memory).
- Сетевой слой: Запросы к API дублировались. При открытии главной страницы приложение отправляло 18 запросов, 6 из которых были идентичны. Бэкенд стонал, приложение висело.
- Зависимости: Проект кишел заброшенными библиотеками, которые не обновлялись с 2019 года.
UX/UI Катастрофа
Дизайн застрял в 2017 году. Но хуже было то, что пользовательские сценарии (CJM) были сломаны. Чтобы оформить заказ, пользователю нужно было пройти 9 экранов.
Вердикт: Частичный мобильный рефакторинг невозможен. Пытаться чинить этот дом — значит менять фундамент, не выселяя жильцов, пока дом горит. Мы приняли решение писать с нуля, сохраняя только bundle ID для обновлений.
Часть 2: Стратегия исправления ошибок. "Операция Феникс"
План действий:
- Code Freeze текущей версии: Мы перестали пилить новые фичи в старом приложении. Только критические хотфиксы (если падает оплата — чиним).
- Параллельная разработка: Команда делится на две части. Группа быстрого реагирования поддерживает "зомби" (старую версию), основной спецназ пишет новую версию (v2.0).
- Архитектурный диктат: Внедрение Clean Architecture + MVVM (на iOS) и MVI (на Android). Жесткий код-стайл, 100% покрытие Unit-тестами бизнес-логики.
Часть 3: Нативная iOS и Android разработка. Архитектура Возрождения
iOS: Swift и Модульность
Мы разбили монолит на независимые модули (CocoaPods dev pods, позже переехали на SPM).
- Core: Сеть, базы данных, утилиты.
- DesignSystem: Все кнопки, шрифты, цвета вынесли в отдельный пакет. Это позволило дизайнерам менять стиль во всем приложении, правя одну строчку кода.
- Features: Каталог, Корзина, Профиль, Чекаута — каждый раздел стал отдельным микро-приложением. Время сборки проекта упало с 15 минут до 40 секунд.
Мы использовали SUI (SwiftUI) для новых экранов, но обернули их в UIKit контейнеры там, где нужна была сложная навигация.
Android: Jetpack Compose и Coroutines
В рамках Android разработки мы сделали ставку на Jetpack Compose. Декларативная верстка позволила сократить объем UI-кода в 3 раза. Вместо XML-портянок и адаптеров для RecyclerView мы получили лаконичные функции. Асинхронщину перевели на Coroutines + Flow.
Единый источник правды
Самая большая боль старого приложения — рассинхрон данных. В корзине товар есть, на чекауте его нет. Мы внедрили Reactive Repository Pattern. Приложение подписывается на изменения в базе данных. Неважно, откуда пришло изменение — UI обновляется автоматически и мгновенно.
Часть 4: Битва за UX. Сделать удобно, а не «красиво»
- Проблема: "Долго оформлять заказ".
Решение: Чекаут в один экран. Мы внедрили Apple Pay и Google Pay. Время оформления заказа сократилось с 3 минут до 25 секунд. - Проблема: "Не могу найти товар".
Решение: Умный поиск с подсказками (Elasticsearch на бэкенде) и фильтры, которые не перезагружают страницу, а работают мгновенно на клиенте. - Проблема: "Приложение слепит ночью".
Решение: Полноценная Dark Mode. Это дало огромный буст лояльности гиков.
Скелетон-лоадеры и «Оптимистичный UI»: Раньше при нажатии кнопки "В корзину" появлялся спиннер. Мы внедрили Optimistic UI updates. При нажатии товар мгновенно летит в корзину с красивой анимацией. Запрос уходит в фоне.
Готовы обсудить ваш проект
Часть 5: Культура качества. QA как религия
- Автотесты: Мы написали UI-тесты (XCUITest / Espresso), которые покрывали критический путь: Главная -> Поиск -> Карточка -> Корзина -> Оплата.
- Dogfooding: Мы заставили всю команду клиента (от топ-менеджмента до курьеров) установить бета-версию. За каждый найденный баг мы давали бонусы.
- Network Throttling: Мы тестировали приложение не на офисном Wi-Fi, а в лифтах, в метро, в режиме Edge.
Часть 6: Релиз и рост рейтинга приложения
Мы использовали Phased Release (поэтапное внедрение):
- День 1: 1% пользователей. Тишина. Краш-фри 99.9%.
- День 3: 5% пользователей. Пошли первые отзывы: "Оно живое!", "Наконец-то темная тема!".
- День 7: 20% пользователей. Нагрузка на бэкенд снизилась благодаря оптимизации.
- День 14: 100% раскатка.
Работа с негативом
Старый рейтинг 2.0 висел мертвым грузом. Чтобы обеспечить повышение рейтинга в App Store, мы внедрили умный запрос отзыва.
Алгоритм:
- Пользователь успешно оформил заказ?
- Заказ доставлен вовремя?
- Пользователь зашел в приложение снова? Только тогда мы показываем плашку: "Вам нравится наше новое приложение?". — Если "Да" -> Ведем в App Store. — Если "Нет" -> Открываем форму обратной связи, перехватывая негатив.
Часть 7: Результаты. Цифры, которые говорят громче слов
Метрики продукта:
- Crash-free rate: Вырос с 92% до 99.95%. Приложение стало скалой.
- Время холодного старта: Сократилось с 4.5 сек до 0.8 сек.
- Конверсия в покупку (CR): Выросла на 45%.
- Retention Day 30: Вырос в 2.5 раза.
Рейтинг:
Это было самое сложное. Математика App Store инертна. Но новый качественный продукт спровоцировал "сарафанное радио". Мы также попросили поддержку отвечать на старые негативные отзывы, приглашая обновиться.
Итог через полгода: Текущий рейтинг версии — 4.8. Общий рейтинг подтянулся до 4.6.
Заключение: Философия качественной разработки
Рейтинг 2.0 — это не проблема кода, это проблема отношения. Рецепт воскрешения прост:
- Бескомпромиссная честность: Признайте, что старый продукт плох.
- Смелость снести всё: Не бойтесь переписывать с нуля, если технический долг мешает обновлению приложения.
- Одержимость деталями: Пользователь чувствует заботу через микро-взаимодействия.
Сегодня приложение нашего клиента — бенчмарк в своем сегменте. А мы в команде вынесли главный урок: любовь пользователя нельзя купить маркетингом, но её можно заслужить качественным кодом.
IT агенство MapNT
Центральный офис: г. Калининград
Почта: m-n-te@yandex.ru
Телефон: +7 911 484-06-31
Работаем по всей России
Мы в соц сетях:
telegram | вконтакте | сетка
mapnew.tech