Когда заказчик спрашивает, на каком языке писать приложение, ему на самом деле важно другое: сколько это будет стоить, когда приложение появится в магазине и что делать через год, если программист пропадёт. Сам язык здесь вторичен, а вот выбор подхода решает многое. Под iPhone пишут на Swift, под Android на Kotlin, а если нужно одно приложение сразу для обеих платформ, берут Flutter (язык Dart) или React Native (JavaScript и TypeScript). Дальше по порядку: чем эти пути отличаются в рублях и неделях, когда какой оправдан и что выбираю я сам.
На чём пишут приложения: три подхода
Первый называют нативным: под каждую платформу делается своё приложение. Для iPhone это Swift, для Android – Kotlin (раньше писали на Java, и многие приложения, которым несколько лет, живут на нём до сих пор). Получаются две программы, похожие только снаружи: у каждой свой код, свои проверки и свои обновления.
Второй путь – Flutter, разработка Google. Приложение пишут один раз на языке Dart, и из него собираются версии для iPhone и Android. Экраны Flutter рисует сам, поэтому на обеих платформах они выглядят одинаково, вплоть до мелочей.
Третий – React Native. Код тоже один, на JavaScript или TypeScript (на них же пишут сайты), а кнопки, списки и переключатели на экране настоящие, системные. Поэтому приложение ведёт себя так, как привык пользователь iPhone или Android.
Что меняется в цене и сроках
Лучше всего разницу видно в одном: сколько раз вы платите за одно и то же. Экран входа, каталог, оформление заказа, личный кабинет при нативной разработке делают дважды, для iPhone и для Android. Если код общий (то есть из одной программы собираются обе версии), экран делают один раз. В моей практике это экономит порядка трети бюджета, а первая версия, которую я собираю за два-три месяца и от 350 000 ₽, выходит к пользователям раньше, чем две отдельные программы.
Язык программирования редко решает судьбу приложения. Её решает то, сколько раз вы оплачиваете один и тот же экран.
Вторая статья расходов приходит после публикации. Раз в год выходят новые версии iOS и Android, магазины меняют правила, и приложение приходится подгонять; ориентир – 10–15% стоимости разработки в год, подробнее я считал это в разборе «Сколько стоит мобильное приложение». При двух отдельных программах каждую такую подгонку делают дважды, при общем коде один раз, хотя что-то под конкретную платформу приходится дорабатывать и там.
Между Flutter и React Native разница в деньгах обычно небольшая, решает другое: кто будет приложение поддерживать. Если рядом уже есть программисты, знающие JavaScript (обычно это те, кто делает ваш сайт), React Native им ближе. Dart встречается реже, и сменить исполнителя на проекте с Flutter бывает сложнее.
Когда нужен натив
Нативная разработка оправдана там, где приложение работает с самим телефоном больше, чем с экранами и формами: тяжёлая графика и игры, дополненная реальность, видео в реальном времени, постоянная связь с устройствами по Bluetooth, определение геопозиции в фоне. В таких задачах общая программа начинает мешать: каждую возможность телефона приходится подключать через дополнительный слой, а часть кода всё равно пишется на Swift и Kotlin.
Второй случай – когда у вас уже есть своя команда, отдельно iOS-программист и отдельно Android-программист. Им нативная разработка обойдётся дешевле любой другой, потому что они в ней сильны.
Если же приложение – это каталог, запись, заказы, личный кабинет, подписка и уведомления, общей программы хватает, и платить за две смысла нет.
Что выбрал я и почему
В «Индексе жизни» клиентке нужно было приложение с подпиской для iPhone и Android при бюджете заметно ниже сметы студии. Я выбрал React Native и собственную серверную часть на Supabase. Через три месяца приложение с офлайн-режимом и 18 языками вышло в RuStore, App Store и Google Play: 30 000 строк кода, одна программа на обе платформы. В CRM для выездных менеджеров, которые работают с салонами красоты без интернета, тоже React Native: на приложение для iPhone и Android ушло шесть недель, а обновления ставятся на телефоны сотрудников напрямую.
Нативный код я тоже пишу: диспетчерская автобусного парка для macOS целиком сделана на SwiftUI. Но для бизнес-приложения, где поджимают и бюджет, и срок, начинаю обычно с одной общей программы. Flutter в этом смысле не хуже, его стоит брать, если у вас уже есть программисты на Dart или экраны должны совпадать на обеих платформах до мелочей.
Кейс: «Индекс жизни» – от методики до приложения в сторах за 3 месяца
Чего лучше не брать
Два варианта иногда предлагают как «дёшево и быстро». Первый – обёртка сайта в оболочку приложения: сторы всё чаще отклоняют такие приложения, и время уходит впустую. Второй – конструктор: он выручает, пока ваша задача совпадает с шаблоном, а первая нестандартная кнопка стоит как новая разработка. А если пользователь будет заходить реже раза в месяц, приложение не нужно вовсе, хватит сайта с удобной мобильной версией.
Как выбрать за один разговор
Чтобы назвать вам технологию и вилку, мне нужно знать четыре вещи: для кого приложение и на каких телефонах сидит эта аудитория (если все ваши клиенты с iPhone, разговор о двух платформах уже другой), что оно должно уметь кроме экранов и форм (камера, Bluetooth, геопозиция в фоне, работа без интернета), кто будет поддерживать его через год и какой бюджет на первую версию. Выбор я объясняю до начала работы вместе с компромиссами, а исходники и аккаунты в сторах оформляются на вас, поэтому код можно передать другой команде. Состав работ и этапы проекта – на странице про разработку мобильных приложений.
Частые вопросы
На каком языке пишут приложения для iPhone и Android?
Для iPhone на Swift, для Android на Kotlin. Если приложение одно на обе платформы, пишут на Dart (Flutter) или на JavaScript и TypeScript (React Native).
Что лучше для бизнеса, Flutter или React Native?
По деньгам и срокам они обычно близки, поэтому выбирают по людям: React Native удобнее там, где рядом есть программисты на JavaScript, Flutter подходит, если нужны одинаковые экраны на обеих платформах. Что взять под вашу задачу, скажу после разговора о сценариях.
Можно ли сделать приложение на HTML и JavaScript, как сайт?
Сайт можно упаковать в оболочку, но сторы всё чаще отклоняют такие приложения. Если нужно настоящее приложение на привычном JavaScript, подойдёт React Native.
Можно ли потом перейти с одной технологии на другую?
Экраны и программный код придётся писать заново, а макеты, сценарии и обычно серверная часть остаются. Поэтому технологию лучше выбрать до начала работы.
Насколько нативная разработка дороже общей?
В моей практике одна общая программа экономит порядка трети бюджета по сравнению с двумя отдельными. Точную вилку под вашу задачу называю после разбора сценариев.