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

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

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

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

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

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

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

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

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

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

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

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

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

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

Первый релиз

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

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

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

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

Что не входит

  • Всё, что умеет веб-версия. Первый релиз — это один сценарий, и это осознанно
  • Доработка приложения, которое делали не мы: это не пакет первого релиза, её считаем отдельно после разбора кода
  • Дизайн-система для продукта, который ещё не встречался с пользователями
  • Продвижение в сторах, скриншоты и рекламные кампании
  • Игры, 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 — и когда мы говорим «нативно»

По умолчанию 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 или тяжёлая графика
  • Приложение нужно «чтобы было», а сценарий никто не может назвать

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

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

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

Один рабочий сценарий от начала до конца на iOS и Android, бэкенд под него, публикация в сторы на ваши аккаунты и автотесты на настоящем устройстве — от 800 000 ₽ за восемь недель, с оплатой по этапам. Хотите заказать приложение — цену первого релиза под вашу задачу назовём по описанию на одну страницу. Что двигает итоговую сумму и на чём можно сэкономить без вреда, разобрано в статье о том, сколько стоит создать приложение.

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

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

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

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

Заказать разработку приложения можно с описания задачи на одну страницу: за 12 часов пришлём расчёт стоимости разработки — цену от и до, состав первой версии и то, что её двигает. Дальше разговор на час и короткий документ — экраны, интеграции, границы первой версии и срок; он и становится предметом договора, чтобы «мы думали, это входит» не всплыло на середине. Нужен отдельный этап «ТЗ и прототип» — он платный, результат ваш, а стоимость идёт в зачёт проекта, если продолжаем.

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

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

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

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

Приложения и системы, которые мы построили

Не логотипы клиентов на стене: Android-приложение для цеха, которое мы сделали заказчику, и наш собственный маркетплейс, протестированный так, как описано выше. Демо каждой работы ниже открывается прямо сейчас.

Мобильное приложение для цеха с обменом с 1С · Электротехническое производство

Приложения для цеха, где каждое нажатие доходит до 1С ровно один раз

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

Android-приложение для цеха, которое держит обмен с 1С через очередь без сети и не даёт часам телефона спорить с 1С о времени.

4 этапа
по договору, каждый сдаётся по акту с чек-листом
88 из 88
тестов заглушки 1С проходят — на ней идут тесты и показы
91 пункт ТЗ
к ним привязаны 508 модульных тестов и 84 теста на устройстве, по исходникам
Внутри живое демоЧитать разбор
Экран «Мои задачи»: задача из 1С раскрыта вместе со спецификацией
Двусторонний маркетплейс · Экономика авторов

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

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

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
Приложение для онлайн-консультаций · Услуги специалистов

Приложения для видеоконсультаций, где звонок открывает оплаченная запись, а не ссылка

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

Приложение на Flutter для двух ролей в одном аккаунте: клиент записывается и платит по ссылке, специалист ведёт часы и выплаты, а живой чат и видеозвонок на WebRTC идут по одному сокету записи, который открывается только для начатой консультации.

1 сокет
на запись: по нему идут и чат, и сигналинг видеозвонка
6 статусов
у записи — от них зависят доступ к чату и звонку и движение денег
7 ступеней
реферальной ставки: от 2 до 5 % по числу приглашённых
Внутри живое демоЧитать разбор
Запись к психологу: свободные часы, занятые серым и выбранный час 15:00

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

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

Договор на разработку мобильного приложения: пункты, которые защищают заказчика

Договор с мобильной студией решают не юридические формулировки, а приложения к нему: что строится, как платится и принимается, чьи код и аккаунты. Разбираем пункты по одному и объясняем, от какого сбоя защищает каждый.

9 мин чтения
Мобильная разработка

Этапы разработки мобильного приложения: что происходит каждую неделю

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

9 мин чтения
Мобильная разработка

MVP мобильного приложения: что проверить первым и что оставить на потом

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

8 мин чтения

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

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

Расчёт придёт за 12 часов: цена от и до, из чего она сложилась и что её двигает. Не хватит данных — вопросы придут в те же 12 часов.