Куб из сфер — знак студии

12 лет в заказной разработке

Разработка мобильного приложения, которое остаётся на главном экране

Маркетплейсы, сервисы и деньги, которые ходят между двумя сторонами. Наше собственное приложение несёт 30 сценариев, которые гоняют его на живом устройстве, — откройте демо и попробуйте сломать.

Смотреть работы
Мобильная разработка//Мобильная разработка//Мобильная разработка//Мобильная разработка//Мобильная разработка//Мобильная разработка//Мобильная разработка//Мобильная разработка//Мобильная разработка//Мобильная разработка//Мобильная разработка//Мобильная разработка//Мобильная разработка//Мобильная разработка//
Узнаёте?

Разговор про мобильное приложение на заказ обычно начинается так

  • «Клиенты просят приложение, а мы не уверены, что они им будут пользоваться.»

    Просьба про приложение обычно значит, что на сайте что-то неудобно. Стоит понять, что именно, до того как платить за присутствие в сторах.

  • «Нам посчитали iOS и Android отдельно, и сумма удвоилась.»

    Иногда два нативных приложения действительно правильный ответ. Гораздо чаще это две кодовые базы и два набора багов на один продукт.

  • «Прошлый подрядчик сдал то, что работало на его телефоне.»

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

  • «Оно в сторе, но каждый релиз — неделя паники.»

    Ревью превращает маленькую правку в многодневное событие, если релиз не автоматизирован и не покрыт тестами. Паника здесь про процесс, а не про платформу.

Первый релиз

Один сценарий, обе платформы, в сторах за восемь недель

от 800 000 ₽
Фиксированная за объём, который согласуем первым делом. Дороже веба намеренно: это две платформы, два ревью и прогоны на живых устройствах, а не «часы дороже».
Восемь недель
От первого созвона до сборки, которую ваши клиенты могут установить, а не до видео с демонстрацией.

Что вы получаете

  • Один сценарий, который работает от начала до конца на iOS и Android
  • Кроссплатформа по умолчанию — и прямой ответ, когда честнее нативно
  • Аккаунты, вход и состояния вокруг них: протухшая сессия, блокировка, восстановление пароля
  • Бэкенд, который ему нужен, или интеграция с тем, что у вас есть
  • Пуши, разрешения и платёжная шторка — то, что живёт за пределами вашего приложения
  • Интеграционные тесты, которые гоняют настоящее приложение на настоящем устройстве
  • Публикация в обоих сторах, аккаунты и ключи подписи — на ваше имя

Что не входит

  • Всё, что умеет веб-версия. Первый релиз — это один сценарий, и это осознанно
  • Дизайн-система для продукта, который ещё не встречался с пользователями
  • Продвижение в сторах, скриншоты и рекламные кампании
  • Игры, AR и всё, что живёт частотой кадров, — не наш профиль
  • Гарантированные сроки ревью: их назначают Apple и Google, и кто обещает иначе — гадает
30
интеграционных тестов гоняют наше приложение на устройстве
173
теста бэкенда проверяют те же сценарии со стороны сервера
4 месяца
от старта до маркетплейса с настоящими деньгами внутри
Что заработает

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

Приложение — это не один продукт, а один продукт на двух платформах и сервер между ними. Ниже форма первого релиза; выключите платформу, которая вам не нужна, и список ответит под ваш случай.

Ваш продукт живёт на
Какие сценарии покрыты и на каких средах
СценарийiOSAndroidБэкенд
Вход, сессии и восстановление пароляВместе с токеном, который протух посреди работы, и блокировкой после неудачных попыток.Покрыто · iOSПокрыто · AndroidПокрыто · Бэкенд
Главный сценарий, ради которого продукт существуетЗаказ оформлен, работа принята, услуга оказана — то, ради чего приложение ставят.Покрыто · iOSПокрыто · AndroidПокрыто · Бэкенд
Платежи и деньги между двумя сторонамиПлатёжная шторка живёт вне вашего приложения — именно поэтому её нужно тестировать снаружи.Покрыто · iOSПокрыто · AndroidПокрыто · Бэкенд
Пуши и разрешенияСистемное окно не часть вашего приложения, и изнутри его не проверить.Покрыто · iOSПокрыто · AndroidПокрыто · Бэкенд
Чат и статусы доставки сообщенийДва устройства, один разговор и сообщение, которое не должно молча пропасть.Покрыто · iOSПокрыто · AndroidПокрыто · Бэкенд
Плохая сеть и приложение, убитое в фонеAndroid убивает фоновые приложения охотно. Вернуться на рабочий экран — это функция.Покрыто · iOSПокрыто · AndroidНе покрыто · Бэкенд
Публикация и подписьАккаунты и ключи на ваше имя с самого начала: иначе однажды вы окажетесь заперты вне своего продукта.Покрыто · iOSПокрыто · AndroidНе покрыто · Бэкенд
Админка: модерация, споры, возвратыЖивёт в браузере. Разбирать спор с телефона не хочет никто.Не покрыто · iOSНе покрыто · AndroidПокрыто · Бэкенд
20 проверок — 8 сценариев в разрезе: ios, android, бэкенд
под тестомнет на этой среде

Пустые клетки намеренные. Приложение, которое обещает каждый сценарий на каждой платформе, обычно не гоняли ни на одном живом телефоне.

Кроссплатформа или нативно — и когда мы говорим «нативно»

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

Разработка приложения для Android и для iOS — это разные счета за одну работу

Один сценарий, но две очереди на публикацию и два набора правил. Apple проверяет вручную и разворачивает за то, чего нет в документации: за оплату мимо своей комиссии, за пустой демо-аккаунт для проверяющего, за разрешение, назначению которого не поверили. Google пускает быстрее, зато агрессивно убивает фоновые процессы: приложение, «просто открытое через три дня», на Android — отдельный сценарий, а не мелочь. Поэтому обе платформы стоят в одном сроке, но проверяются порознь и на живых устройствах, а не в эмуляторе.

Создание мобильного приложения у нас — не первый заход

Десять мобильных приложений на четырёх стеках: семь на Flutter, по одному нативному под iOS и Android, одно на React Native. Это ответ на вопрос, который задают вторым, — «а вы умеете только на одном?». Среди них двусторонняя площадка, где под каждую сторону сделки отдельное приложение: заказчик и исполнитель видят разные экраны одного и того же заказа. Наше собственное приложение маркетплейса — 24 экрана и 16 174 строки на Dart, одна кодовая база и сборки под Android, iOS, веб и десктоп.

Открыть демо этого приложения

Деньги в приложении — самая недооценённая часть

Взять оплату просто. Удержать её между двумя сторонами, отпустить по условию, вернуть часть и выплатить сотням исполнителей — это месяцы. Мы это уже строили: депозит между покупателем и исполнителем, арбитраж при споре, водяной знак на работе до оплаты. Ключевое правило: заказ начинается не тогда, когда экран сказал «успешно», а когда провайдер прислал вебхук на сервер.

Разбор: маркетплейс, где деньги посередине

Тестируем то, что живёт вне приложения

Системное окно разрешений, платёжная шторка, пуш на заблокированном экране, приложение, убитое в фоне и открытое через три дня, — это не ваш код, и именно он ломает продукт. Мы используем Patrol, который умеет дотянуться до этих частей телефона; наше приложение несёт 30 таких сценариев.

Автотесты как отдельная услуга

И чего мы не делаем

  • Не делаем игры и всё, что живёт частотой кадров
  • Не обещаем сроки прохождения ревью — они не в нашей власти
  • Не тянем в первый релиз всё, что умеет веб-версия
  • Не оформляем аккаунты разработчика на себя: продукт должен оставаться вашим
Как идут восемь недель

Сборку можно поставить себе на телефон задолго до релиза

Вы видите приложение на своём устройстве с третьей недели, а не на скриншотах в переписке.

  1. Неделя 1

    Выбираем сценарий и платформы

    Решаем, какой один сценарий несёт ценность, и честно отвечаем на вопрос про нативность. Заводим аккаунты разработчика на вас.

    Вы видитеСогласованный объём первого релиза и доступы, оформленные на вашу компанию.

  2. Недели 2–4

    Собираем каркас и бэкенд

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

    Вы видитеТестовая сборка на вашем устройстве, обновляется сама.

  3. Недели 5–7

    Доводим до боя

    Платежи, пуши, разрешения, поведение при плохой сети и после убийства в фоне. Интеграционные тесты на живом устройстве.

    Вы видитеСборка, на которой можно провести настоящий сценарий с деньгами.

  4. Неделя 8

    Публикуем и передаём

    Готовим страницы в сторах, отправляем на ревью, показываем, как выпускать обновления самим.

    Вы видитеПриложение в обоих сторах, ключи и аккаунты у вас, инструкция по релизу.

Встраивается в то, чем вы уже пользуетесь
  • Flutter
  • Dart
  • Patrol
  • NestJS
  • PostgreSQL
  • Firebase
  • GitHub Actions
Что остаётся у вас

Не только сборка в сторе

Настоящие снимки из нашего приложения, а не иллюстрации к обещаниям.

Файл интеграционного теста Patrol с описанием сценария

Интеграционный тест, который читается как сценарий

Файл теста назван по пути, который он защищает, и описывает его человеческим языком: пополнение картой при пустом кошельке.

integration_test из репозитория нашего приложения

Листинг тридцати файлов интеграционных тестов

Тридцать сценариев, названных по делу

Список файлов — это и есть честная карта того, что проверяется: арбитраж, обновление токена, блокировка, чеки в чате.

Каталог integration_test нашего Flutter-приложения

Файл воркфлоу этого сайта: что запускается на каждый пуш в main

Пайплайн, который собирает релиз

Сборка, проверки и выкатка запускаются от пуша — вместе с приложением вы получаете процесс его выпуска.

.github/workflows/ci.yml из репозитория этого сайта

Кому это

Одним приложение нужно вчера, другим не нужно вовсе

Берите, если

  • Продуктом пользуются регулярно и в движении, а не раз в квартал за столом
  • Внутри есть деньги: оплата, депозит, выплаты исполнителям
  • Нужны пуши, камера, геолокация — то, чего браузер не умеет
  • Есть веб-версия, и она уже доказала, что людям это нужно

Не берите, если

  • Продукт открывают раз в месяц — сайт справится лучше и дешевле
  • Идея ещё не проверена ни на ком, кроме основателя
  • Нужны игры, AR или тяжёлая графика
  • Приложение нужно «чтобы было», а сценарий никто не может назвать

Если сценарий пока непонятен, начните с веб-версии: она дешевле, выходит быстрее и покажет, нужно ли приложение вообще.

Что спрашивают про разработку мобильного приложения

Шесть вопросов, которые задают почти на каждом первом созвоне.

Первый релиз с одним рабочим сценарием на обеих платформах — от 800 000 ₽ и восемь недель. Дальше цену определяют деньги внутри (депозиты, выплаты, возвраты), количество ролей и интеграции, а не количество экранов. Мы фиксируем объём и цену до старта и пишем, что в него НЕ входит, — это честнее, чем ставка за час, которую потом сравнивают построчно.

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

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

Чаще да, потому что при кроссплатформе вторая платформа стоит немного, а отсутствие приложения на половине телефонов объяснять клиентам неудобно. Если бюджет жёсткий, начинаем с той платформы, где реально ваши пользователи, — это решается за один разговор и по вашей же статистике.

Через платёжного провайдера, и правило одно: заказ начинается, когда провайдер прислал вебхук на сервер, а не когда экран показал «успешно». Телефон может быть выключен, убит в фоне или без сети в момент оплаты. Если деньги удерживаются между двумя сторонами, добавляются состояния заказа, возвраты и арбитраж — это отдельная и самая ответственная часть работы.

С разговора на час, где вы рассказываете задачу, а мы говорим, сколько это стоит и что придётся решить до кода. Дальше — короткий документ: экраны, интеграции, границы первой версии и срок. Он и становится предметом договора, чтобы «мы думали, это входит» не всплыло на середине. Аванс берём после этого документа, а не до него: до него мы ещё не знаем, за что берём деньги.

На вас, с самого начала. Аккаунты Apple и Google, ключи подписи и сертификаты — ваши, мы получаем доступ как подрядчик. Это скучная деталь ровно до того дня, когда приложение нужно обновить, а подрядчик недоступен.

Избранные работы

Приложение, которое мы построили и продолжаем вести

Не логотип клиента на стене: это наш собственный маркетплейс, протестированный так, как описано выше, с демо, которое открывается прямо сейчас.

Двусторонний маркетплейс · Экономика авторов

Маркетплейсы, где деньги лежат посередине

Маркетплейс с двумя сторонами, платежом, удержанным между ними, и ИИ-студией, которая берёт деньги за каждую генерацию. Сложное здесь не каталог, а решение — в коде, — в какой именно момент деньги и файлы меняют владельца.

Flutter на обеих платформах, четыре месяца до работающего продукта с деньгами, удержанными между сторонами, — и 30 интеграционных тестов, которые гоняют настоящее приложение через пополнения, обновление токена, блокировки и две ветки арбитража.

4 месяца
от старта до работающего продукта
173
сквозных теста в 24 сьютах
21
модель данных под этим
Внутри живое демоЧитать разбор
Creator feed in the marketplace app, with an order button
Система для позаказного производства · Медицинское производство

Системы для производства, где каждый заказ единственный в своём роде

У позаказного производства нет каталога и нет кнопки «повторить». Каждое изделие делается для одного человека по меркам, которые компьютер снимает со скана, и система обязана удержать эту нить от первого приёма через изготовление, доставку и переделку через полтора года.

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

8 месяцев
и продолжается — самая большая система, которую мы ведём
13
семейств потоков, от приёма до переделки
2053
автопроверки в трёх репозиториях
Внутри живое демоЧитать разбор
Order board in the operations platform, with production stages

Что почитать перед тем, как заказывать приложение

Все статьи
Мобильная разработка

Сколько стоит разработка мобильного приложения и что двигает эту цифру

Приложение — это не набор экранов, а продукт на двух платформах и сервер между ними. Разбираем, что реально двигает цену и где экономия оборачивается переделкой.

5 мин чтения

Поговорим про то, что вам нужно: мобильная разработка

Расскажите, что нужно сделать

Ответим в течение одного рабочего дня — диапазоном цены и допущениями, из которых он посчитан, а не приглашением на созвон.