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

Нативное или кроссплатформенное приложение: в чём разница

Нативное приложение пишут отдельно под каждую платформу на её родном языке. Для iOS это Swift — Apple называет его языком для всех своих платформ. Для Android — Kotlin: Google с 2019 года ведёт разработку под Android по принципу «сначала Kotlin» и советует начинать новое приложение с него. Нативная разработка — это две кодовые базы, а значит, обычно и два набора специалистов.

Кроссплатформенное приложение пишут один раз и собирают из одного кода под обе платформы. Два самых частых способа устроены по-разному:

  • Flutter. Код на Dart заранее компилируется в машинный код телефона, а интерфейс рисует собственный движок Flutter, а не системные элементы платформы. Из того же кода собираются и веб- и десктоп-версии.
  • React Native. Интерфейс описывается на JavaScript, а во время работы React Native создаёт настоящие системные элементы Android и iOS.

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

Что даёт кроссплатформа

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

Для подавляющего большинства продуктов вопрос на этом закрывается.

Когда правильный ответ — нативно

Продукт живёт на возможностях платформы. Тяжёлая работа с камерой прямо во время съёмки, обработка звука, фоновая геолокация как основа продукта, системные виджеты и глубокие интеграции с ОС.

Частота кадров решает. Игры, AR, всё, что должно быть идеально плавным. Это не наш профиль, и мы скажем это прямо.

У вас уже есть нативная команда. Технически правильный выбор, который развалит процесс, — плохой выбор.

Чего кроссплатформа НЕ означает

Не означает, что можно не тестировать на обеих платформах. Android убивает фоновые приложения охотнее, разрешения ведут себя иначе, платёжные шторки выглядят по-разному. Одна кодовая база — не одна среда.

Не означает экономию на бэкенде: он тот же самый и часто дороже клиента.

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

Что это значит для сроков и денег

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

Экраны и логика пишутся один раз вместо двух — это основная экономия, и она заметна сразу.

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

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

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

Что делать, если вы уже начали нативно

Частый случай: есть iOS-приложение, теперь нужен Android, и вопрос звучит как «переписать всё или добавить вторую нативную команду».

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

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

Если нужна только одна платформа

Бывает, что вторая платформа на старте не нужна вовсе: например, все ваши клиенты ходят с iPhone. Где на самом деле ваши пользователи, видно по вашей же статистике, и это решается за один разговор. Тогда разработка приложения для iOS без Android — нормальный первый релиз, и вопрос «нативное или кроссплатформенное приложение» звучит иначе.

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

Как решить за один разговор

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

У нас разработка мобильного приложения до первого релиза на обеих платформах стоит от 800 000 ₽ и занимает восемь недель. Если после разговора окажется, что вам нужно нативно, мы так и скажем — даже когда это значит, что заказ не наш.

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

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