Разработка мобильных приложений для iOS и Android — это создание программ для двух разных операционных систем, у каждой из которых свой язык, свои инструменты и свой магазин приложений. Сделать приложение под обе платформы можно двумя путями: написать два отдельных нативных приложения (Swift для iOS, Kotlin для Android) или взять кроссплатформенный инструмент (Flutter, React Native, Kotlin Multiplatform) и вынести в общий код все или часть приложения.
Содержание
- Три термина, которые часто смешивают
- На чем разрабатывают мобильные приложения
- Сравнение подходов
- Что не зависит от выбранного подхода
- Проблемы разработки мобильных приложений под две платформы
- Как выбрать подход: порядок рассуждений
- С чего начать новичку
- Выводы
- Где применяется / связь с практикой
- FAQ
Ниже — чем эти пути отличаются технически, сравнение пяти инструментов в таблице, типичные проблемы разработки под две платформы и порядок, по которому выбирают подход под конкретный проект.
Три термина, которые часто смешивают
- Нативная разработка — приложение пишется на языке и инструментах самой платформы: Swift и Xcode для iOS, Kotlin и Android Studio для Android. Кодовых баз две.
- Кроссплатформенная разработка — один код (целиком или частично) собирается в приложения для обеих платформ. На выходе все равно два установочных пакета, по одному на каждый магазин.
- Гибридное приложение — веб-страница внутри встроенного браузера (WebView), упакованная как приложение: Cordova, Capacitor, Ionic. Это частный случай кроссплатформенности, и его не стоит путать с Flutter или React Native, которые WebView для интерфейса не используют.
Граница между первыми двумя не жесткая. В реальных проектах подходы смешивают: например, общая бизнес-логика на Kotlin Multiplatform и нативный интерфейс на каждой платформе.
На чем разрабатывают мобильные приложения
Нативно под iOS. Основной язык — Swift, интерфейс описывают на SwiftUI или на более старом UIKit. Objective-C остался в давно существующих проектах, новые приложения на нем обычно не начинают. Среда разработки Xcode работает только на macOS. С версии Swift 6.3 (март 2026 года) у языка есть официальный Swift SDK for Android: код на Swift можно собирать и под Android, но это способ переиспользовать логику, а интерфейс Android-приложения по-прежнему пишут на Kotlin.
Нативно под Android. Основной язык — Kotlin: Google с 2019 года называет его предпочтительным для Android. Интерфейс строят на Jetpack Compose, в старом коде встречается верстка на XML. Java по-прежнему поддерживается и жива в legacy-проектах. Android Studio работает на Windows, macOS и Linux.
Flutter. Фреймворк от Google, язык — Dart. В релизной сборке код компилируется в машинный код платформы, а интерфейс Flutter рисует сам, собственным графическим движком Impeller, не используя системные кнопки и списки. Поэтому экран выглядит одинаково на обеих платформах, а «родной» вид элементов достигается имитацией.
React Native. Фреймворк от Meta, язык — JavaScript или TypeScript, подход React. Логика выполняется в JavaScript-движке (по умолчанию Hermes), а на экране отображаются настоящие системные элементы платформы. Удобен командам, которые уже пишут веб на React.
Kotlin Multiplatform (KMP). Технология JetBrains: общий код на Kotlin компилируется под Android в обычный байт-код, под iOS — в нативный фреймворк, который подключается к проекту в Xcode. Общей обычно делают логику (сеть, хранение, правила), а интерфейс оставляют нативным. Если нужен и общий интерфейс, к KMP добавляют Compose Multiplatform: его версия для iOS объявлена стабильной в мае 2025 года (выпуск 1.8.0).
Старые инструменты из обзоров прошлых лет сегодня для нового проекта не рекомендуют: Xamarin снят с поддержки Microsoft в мае 2024 года (преемник — .NET MAUI), Cordova применяют в основном для сопровождения существующих гибридных приложений.
Сравнение подходов
| Критерий | Нативно (Swift + Kotlin) | Flutter | React Native | Kotlin Multiplatform |
|---|---|---|---|---|
| Язык | Swift и Kotlin | Dart | JavaScript / TypeScript | Kotlin (плюс Swift для интерфейса iOS) |
| Что общее | ничего, две кодовые базы | интерфейс и логика | интерфейс и логика | логика; интерфейс — по желанию |
| Чем рисуется интерфейс | системные элементы | собственный движок Flutter | системные элементы | системные элементы или Compose Multiplatform |
| Доступ к новым API платформы | сразу, в день выхода | через плагины или свой нативный код | через модули или свой нативный код | на Android напрямую, на iOS — через Swift-часть или interop |
| Состав команды | iOS- и Android-разработчики | Flutter-разработчики, нативная экспертиза точечно | React-разработчики, нативная экспертиза точечно | Android-разработчики плюс iOS-разработчик |
| Типичный сценарий | сложная работа с железом, долгоживущий продукт с большой командой | приложение с собственным дизайном, быстрый запуск на двух платформах | команда с опытом React, общий код с вебом | есть нативные приложения, надо убрать дублирование логики |
Таблица описывает типичную картину, а не закон. Производительность в ней не указана намеренно: для обычных экранов со списками, формами и сетевыми запросами разница между подходами чаще всего незаметна пользователю. Она проявляется в тяжелых сценариях — сложная анимация, обработка видео, большие списки на слабых устройствах — и ее нужно измерять на своем приложении, а не брать из чужих тестов.
Что не зависит от выбранного подхода
Кроссплатформенный инструмент сокращает объем кода, но не отменяет саму платформу. В любом варианте остается следующее.
- Сборка под iOS требует macOS. Xcode существует только для Mac. Писать код на Flutter или React Native можно на Windows и Linux, но собрать и подписать iOS-приложение получится на Mac — своем или облачном (сервисы CI со сборочными машинами на macOS).
- Два магазина, два набора правил. Аккаунт разработчика в Google Play стоит 25 долларов один раз, участие в Apple Developer Program — 99 долларов в год. Приложения проходят проверку в обоих магазинах, у каждого свои требования к содержимому, платежам и описанию.
- Нативный код все равно понадобится. Разрешения, push-уведомления, встроенные покупки, фоновые задачи, виджеты настраиваются по-разному на iOS и Android. Если готового плагина нет или он устарел, мост к платформе пишут сами — на Swift и Kotlin.
- Тестировать нужно на обеих платформах. Общий код не гарантирует одинакового поведения: различаются жесты, клавиатура, системные диалоги, работа в фоне.
Проблемы разработки мобильных приложений под две платформы
Фрагментация Android. Устройств тысячи: разные экраны, версии системы, оболочки производителей. Приложение проверяют на наборе реальных устройств и эмуляторов, а минимальную поддерживаемую версию Android выбирают осознанно. У iOS набор устройств компактнее, а пользователи обновляют систему быстрее.
Расхождение двух кодовых баз. При нативной разработке одну и ту же функцию делают дважды, и со временем версии начинают вести себя по-разному: где-то другая валидация, где-то иначе считается скидка. Это главный аргумент в пользу общего кода хотя бы для бизнес-логики.
Зависимость от фреймворка и плагинов. Кроссплатформенный проект зависит от чужих пакетов. После крупного обновления iOS или Android плагин может перестать работать, и придется ждать исправления или чинить самому. Сам фреймворк тоже периодически требует миграции: в React Native с версии 0.82 (октябрь 2025 года) старая архитектура отключена совсем, и проекты с несовместимыми библиотеками не могли обновиться без переделок.
Интерфейс «как на платформе». Пользователи iOS и Android привыкли к разной навигации и разным элементам управления. Единый дизайн для обеих платформ проще в разработке, но может ощущаться чужеродным; раздельный — возвращает часть двойной работы.
Размер и время запуска. Кроссплатформенное приложение несет с собой среду выполнения или графический движок, поэтому минимальное приложение обычно крупнее нативного. Для большого продукта эта добавка теряется на фоне ресурсов, для маленькой утилиты может быть заметной.
Как выбрать подход: порядок рассуждений
- Что приложение делает с устройством. Если основа продукта — камера с обработкой в реальном времени, Bluetooth-устройства, дополненная реальность, виджеты, часы, CarPlay или Android Auto, начинайте с нативной разработки: большая часть кода все равно окажется платформенной.
- Кто будет писать. Команда с опытом React быстрее стартует на React Native. Android-разработчикам на Kotlin ближе KMP. Если команды еще нет и людей набирают под проект, Flutter дает один язык и один набор инструментов на оба приложения.
- Есть ли уже готовые приложения. Переписывать работающие нативные приложения целиком на кроссплатформенный фреймворк рискованно. KMP позволяет выносить логику в общий модуль постепенно, экран за экраном.
- Насколько дизайн завязан на платформу. Собственная фирменная дизайн-система одинаково ложится на обе платформы — аргумент за Flutter или Compose Multiplatform. Требование строго следовать системному виду — аргумент за нативный интерфейс или React Native.
- Срок жизни продукта. Для прототипа, который проверяет идею, важнее скорость выхода на две платформы. Для продукта на годы оценивайте, кто будет сопровождать код и насколько легко найти таких разработчиков на вашем рынке.
Короткий пример. Стартап из трех человек делает сервис записи к мастерам: каталог, расписание, оплата, уведомления. Глубокой работы с железом нет, дизайн свой, сроки сжатые — разумен Flutter или React Native, в зависимости от того, что знает команда. Банк с двумя нативными приложениями и отдельными командами хочет перестать дублировать расчеты и работу с сетью — это сценарий для Kotlin Multiplatform без замены интерфейса.
С чего начать новичку
Если цель — профессия, выбирайте не «лучшую технологию», а один стек и доводите его до опубликованного приложения.
- Выберите направление по доступной технике и вакансиям в вашем регионе: без Mac нативный iOS недоступен, Android и Flutter (для Android-сборок) работают на любом компьютере.
- Освойте язык: Kotlin, Swift или Dart — включая асинхронность и работу с коллекциями.
- Соберите приложение из трех-четырех экранов, которое ходит в сеть по HTTP, разбирает JSON и сохраняет данные локально.
- Добавьте навигацию, обработку ошибок сети и пустых состояний, тесты на логику.
- Соберите релизную версию и пройдите публикацию хотя бы в одном магазине или во внутреннем тестировании.
Что входит в обязанности специалиста и как устроены грейды, разобрано в статье про профессию мобильного разработчика, а нативный путь под технику Apple — в материале о программировании для iOS.
Выводы
- Приложение под iOS и Android делают либо двумя нативными кодовыми базами (Swift и Kotlin), либо кроссплатформенно: Flutter, React Native, Kotlin Multiplatform.
- Инструменты различаются тем, что именно становится общим: Flutter и React Native объединяют интерфейс и логику, KMP по умолчанию — только логику.
- Кроссплатформенность не избавляет от платформы: нужны Mac для сборки под iOS, два магазина, тесты на обеих системах и иногда нативный код.
- Выбор зависит от задач приложения, состава команды, наличия готового кода и требований к интерфейсу, а не от рейтинга технологий.
- Нативная разработка оправдана при глубокой работе с возможностями устройства; для типовых сервисных приложений общий код экономит силы команды.
Где применяется / связь с практикой
Освойте тему на практике
Кроссплатформенный подход удобно осваивать на проекте, который собирается сразу под обе системы: одна кодовая база, два приложения, реальные плагины и публикация. На курсе Flutter-разработчик разбирают язык Dart, построение интерфейса, архитектуру приложения и взаимодействие с нативной частью платформы.
Освойте тему на практике
Посмотреть, как выглядят занятия и задачи по мобильной разработке, можно на открытых уроках Otus.
FAQ
Можно ли разрабатывать под iOS без Mac?
Писать код на Flutter, React Native или общий модуль KMP можно на Windows и Linux. Для сборки, подписи и отправки iOS-приложения в App Store нужен Xcode, то есть macOS — на своем компьютере или на облачной сборочной машине.
Кроссплатформенное приложение всегда дешевле двух нативных?
Нет. Экономия заметна, когда большая часть приложения — типовые экраны и логика. Если много платформенных функций, значительную часть все равно пишут отдельно под каждую систему, и выигрыш сокращается.
Можно ли сделать одно приложение сразу для телефона и для веба?
Flutter собирается под веб штатно, React Native — через отдельную библиотеку React Native for Web, которая в сам фреймворк не входит. В обоих случаях веб-версия — отдельная цель со своими ограничениями по загрузке, поисковой индексации и поведению в браузере. Планировать ее стоит как самостоятельный продукт, а не как бесплатное дополнение.
Нужно ли кроссплатформенному разработчику знать Swift и Kotlin?
Для старта — нет, но базовое чтение нативного кода и понимание сборки в Xcode и Android Studio понадобятся довольно быстро: при настройке разрешений, подключении плагинов и разборе ошибок сборки.



