Взглянем на React Native, Flutter, Ionic, Xamarin, NativeScript и завернем в сравнительную таблицу
Лучшие фреймворки для разработки кроссплатформенных мобильных приложений
Сибирикс

Лучшие фреймворки для разработки кроссплатформенных мобильных приложений

Взглянем на React Native, Flutter, Ionic, Xamarin, NativeScript и завернем в сравнительную таблицу
Ну кто устоит перед возможностью потратить меньше, а получить больше? А вот и никто. Так и родилась идея разработки кроссплатформенных мобильных приложений, когда пишешь один код приложения, а он будет работать на разных операционных системах. Классика же — это нативная разработка, где под каждую ОС разрабатывается отдельное приложение (представляете, сколько сил, денег и нервов туда предстоит вложить?).

Сегодня мы рассмотрим пять кроссплатформенных фреймворков: React Native, Flutter, Ionic, Xamarin и NativeScript. Они сильно разные и не во всех ситуациях и не при любом вашем контексте будут одинаковы полезны (или даже нужны в принципе).

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

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

Красота же, товарищи, ну! В кроссплатформенной разработке есть все, что нужно современному динамичному миру.

Подходы к кроссплатформенности

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

Кроссплатформенные фреймворки можно разделить на две группы: Hybrid-Native (первый подход, гибридно-нативная разработка) и Hybrid-Web (второй подход, гибридная веб-разработка).
Гибридно-нативный подход объединяет фреймворки с нативным пользовательским интерфейсом и общим кодом; и фреймворки с общей кодовой базой и нативным кодом. Среди них: кроссплатформенные платформы разработки приложений React Native, Xamarin, NativeScript и Flutter. О каждом из этих фреймворков мы поговорим позже.

Гибридная веб-разработка кроссплатформенных приложений осуществляется на базе фреймворков с веб-интерфейсом и общими компонентами и с единой кодовой базой, работающей, где угодно. Примером такого кроссплатформенного фреймворка является Ionic (и о нем мы поговорим немного позже).

Плюсы и минусы гибридов

Глянем, что там у гибридов есть и нет перед нативными приложениями.

5 основных преимуществ гибридного подхода:

  1. Кроссплатформенность. Создав одно приложение, вы можете экспортировать его для любой ОС.
  2. Исходя из первого пункта — скорость разработки и масштабирования.
  3. Низкая цена. В несколько раз меньше, чем при нативном подходе, особенно с учетом дальнейшей поддержки.
  4. Использование одного языка — JavaScript (хотя вот Dart (язык для Flutter) позиционируется в качестве его альтернативы).
  5. Одинаковый интерфейс и UX. Одна команда разработчиков и один код максимально приблизят приложение к единому формату UI и UX на всех платформах (Но будут ли они соответствовать гайдам OS — другой вопрос).

Гибридная разработка крайне востребована среди крупных мировых компаний. Многие известные приложения являются кроссплатформенными (The New York Times, eBay, Aliexpress).

Теперь о недостатках. Куда же без них :)

5 основных недостатков гибридного подхода:

  • Зачастую более низкая производительность.
  • Меньше возможностей интеграции с «начинкой» устройства.
  • Работа с унифицированным стеком технологий не даст той гибкости настройки и оптимизации, какая есть у каждой ОС со своим собственным стеком технологий.
  • Публикация в сторы может быть еще тем челенджем. Прохождение проверки приложения на соответствие правилам в Apple App Store и в Google Play Store будет отличаться, т.к. требования к приложениям у них отличаются.
  • Ограниченная реализация визуальных и графических элементов в приложениях, особенно анимации.

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

Нативное будущее кроссплатформенной разработки приложений

Итак, гибридные кроссплатформенные платформы приложений можно использовать, когда:

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

React Native

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

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

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

  1. Кросс-платформенность. Приложение будет работать на всех платформах: почти весь код написан на JavaScript, общем языке для всех платформ, и этот код взаимодействует с нативными компонентами ОС. Но учтите, что, например, приведение приложения в соответствие с формальными требованиями разных ОС надо будет делать отдельно.

  2. Простота и легкость создания. Кросс-платформенный фреймворк React Native достаточно прост и удобен (конечно, если разработчик понимает, что делает и что хочет получить в итоге).

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

  4. Сходство с нативными приложениями. Приложения, созданные с помощью React Native, по поведению и внешнему виду близки к нативным. React Native идеально подходит, если вам нужна скорость нативного приложения, но не нужна сложность.

Из существенных минусов:

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

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

  • при верстке элементов разработчики iOS пригрустнут — визуального редактора интерфейса нет и все делается в коде с помощью JSX-разметки (не то, чтобы она обязательна, но так можно хотя бы увидеть иерархию компонентов). Для тех, кто по Android'у заметят сходство с XML и выдохнут.

Приложения, написанные на платформе React Native, находятся где-то посередине между нативными и гибридными. Можно сказать, что этот фреймворк представляет будущее разработки мобильных приложений и делает границу между нативной и гибридной разработкой более прозрачной.

Flutter

Позволяет создавать приложения на языке Dart. Flutter предлагает множество элементов интерфейса, которые выглядят нативными для ОС, но не являются таковыми. Этот фреймворк может подойти для создания унифицированного UX, и он придерживается иного подхода, чем React Native.

Flutter не превращает исходный код в нативный, который выполняется платформой. Фактически он рисует окно на экране телефона и выводит все элементы сам.

А теперь подробнее о плюсах:

1. Язык Dart
Изначально он задумывался как инструмент для разработки клиентских приложений, был оптимизирован и создан для разработки пользовательского интерфейса. Этот язык предоставляет отличные возможности для разработки кроссплатформенных мобильных приложений. Кроме того, Dart был создан Google как расширенная версия JavaScript.

2. Массовый переход на Flutter
Flutter потребовался всего год, чтобы превзойти React Native по популярности (хотя React Native была самой востребованной платформой в свое время). Сегодня с Flutter вы получаете мощный источник ресурсов для обучения и более квалифицированных разработчиков для создания приложения.

3. Легкость обучения
Кажется, что не существует такого языка или набора инструментов разработки, которые просты в освоении. Однако есть большая разница между тем, когда есть четкая документация и стандартные шаблоны проектирования, и когда можно найти только разнородную документацию и противоречивые способы решения, казалось бы, простых проблем. Flutter — это первый случай!

4. Высокая скорость
Приложения Flutter компилируются в машинный код с использованием графики и движков рендеринга, встроенных в C/C++. Вот почему такие приложения быстрые и надежные. В сфере кроссплатформенных технологий это дает очевидное преимущество Flutter перед конкурентами.

5. Крутая разработка
Flutter создан с отличным языком и быстрым движком рендеринга (Skia).

Платформа стремительно развивается, и Google вкладывает в нее много сил и денег. Также приложение нашего хаос-менеджмент планировщика Singularity App написано на Flutter.
В целом — довольны, получилось очень неплохо. Но есть минусы:

1. Сырой API. Могут поменять спецификацию «на лету».

2. Не работают некоторые нативные вещи, которые должны работать из коробки. Например, до сих пор есть глюки в текстовых полях на некоторых моделях телефонов (задваивается текст). Решается костылями. А очень неприятно решать костылями то, что ожидаемо должно правильно работать из коробки.

3. Нет НОРМАЛЬНОГО WYSIWYG-редактора (проект зефир скорее мертв, чем жив).

4. Виджеты. Пришлось писать на нативе. В итоге довольно сложная архитектура, т.к. виджет должен работать в паре с основным приложением, а поднимать дартовское приложение в фоне для виджета — это сразу большой расход памяти (напомню, у виджетов например на айфонах есть ограничение в 24 мегабайта). Выкрутиться можно, но архитектура получается довольно дремучая.
обзор кроссплатформенных фреймворков
Владимир
CEO «Сибирикс»

Ionic

Это фреймворк типа Hybrid-Web, где приложение на телефоне выполняются в специальной оболочке (UIWebView для iOS и WebView для Android), а она уже позволяет показывать HTML и выполнять JavaScript. Получается, приложение работает как бы в веб-браузере :)

Нет необходимости в глубоких познаниях в каком-либо из фреймворков. У Ionic огромная встроенная библиотека общих инструментов и большое количество плагинов и модулей, которые обеспечивают доступ к нативным функциям.

И еще немного о преимуществах этого фреймворка:

  1. Используется инструментарий, хорошо известный всем разработчикам.
  2. Разработка на фреймворке Ionic происходит намного быстрее, чем на остальных. Он основан на Angular, а это значит, что во время разработки приложение можно запускать в браузере и смотреть, как оно выглядит.
  3. Есть готовые шаблоны приложений и встроенные пресеты, так что начать разработку — проще простого.
  4. Концепция: «Создай один раз, используй всегда и везде».
  5. Доступны несколько компонентов пользовательского интерфейса.

Из минусов:

  • по отзывам разработчиков тестирование приложения может быть довольно сложным. Протестировать встроенные функции устройства (например, камера, вибрация, мигание), которые есть в документации Ionic, нельзя, ведь эти функции просто не могут быть выполнены в браузере;
  • различные нативные «фишки» сложно совместить друг с другом;
  • работать приложения на Ionic будут работать плохо на старых устройствах Android: чтобы запуститься приложение на Ionic будет использовать браузер, установленный по умолчанию на устройстве. Устройства со старыми версиями Android (4.0−4.3) по дефолту используют браузер Android, а не Chrome;
  • если на проекте сложная графика, то Ionic не подойдет.

Xamarin

Сравнительно новый кроссплатформенный фреймворк Hybrid-Native, основанный на принципах основ Microsoft. Совместим абсолютно с любой ОС. Xamarin дает возможность создавать приложения, которые почти невозможно отличить от их нативных аналогов.

Фреймворк состоит из нескольких основных частей:

  • Xamarin. IOS — библиотека классов для C# с доступом к iOS SDK);
  • Xamarin. Android — библиотека классов для C# с доступом к Android SDK;
  • компиляторы для iOS и Android;
  • среды разработки: IDE Xamarin Studio (родная) или Visual Studio.

Пять аргументов в пользу Xamarin:

  1. Универсальный набор технологий для разработки на всех платформах.
  2. Производительность максимально близка к той, что у нативных приложений.
  3. Хорошая совместимость с устройствами и оптимальные условия тестирования (как минимум для теста можно использовать Xamarin UI Tests — при помощи этого фреймворка можно написать свои автотесты на C# и запустить их как локально, так в App Center Test Cloud).
  4. Прекрасная совместимость с устройствами IoT (концепция «интернета вещей») и безупречная интеграция с Microsoft Windows.
  5. Технологии с открытым исходным кодом и полный инструментарий.

Бизнес-логика приложения редко меняется при смене платформы. Ваш интернет-банк совершает платежные операции и сообщает о балансе, независимо от того, используете ли вы смартфон или ноутбук. Такие приложения со сложным бизнес-алгоритмом, но стандартным интерфейсом — заслуга фреймворка Xamarin.

Из минусов:

  • задержки с обновлениями платформ;
  • ограниченная экосистема;
  • ограниченный доступ к open-source библиотекам: все, что остается — это пользоваться компонентами, которые предоставляет платформа, и некоторыми .NET ресурсами;
  • не подходит для приложений с высокопроизводительной графикой;
  • обычно приложения на Xamarin весят в 2 раза больше, чем нативные;
  • может случиться так, что вам понадобится какая-то функция или интеграция в приложении, а она платформой не предоставляется.

Если вам интересно, подходит ли вам Xamarin, просто ответьте на эти три вопроса, и все станет ясно:

  • Вам нужен интерфейс приложения без сложной логики взаимодействия и нестандартных элементов управления?
  • Есть ли в вашей команде мобильные разработчики?
  • Планируете ли вы в ближайшее время другие кроссплатформенные разработки?
Если на все вопросы ответ «да», среда Xamarin станет отличным вложением в ваши разработки в долгосрочной перспективе.

NativeScript

Этот фреймворк использует нативные средства рендеринга каждой платформы — то есть фактически предоставляет нативный пользовательский интерфейс.

И вот пять основных плюса этого фреймворка:

  1. Открытый исходный код и это бесплатно.
  2. Возможность создавать нативные приложения для устройств на любой ОС.
  3. Доступ к API-интерфейсам нативной платформы через код JavaScript и возможность интеграции абсолютно любой библиотеки JavaScript.
  4. в менеджере пакетов обширная библиотека плагинов NativeScript (это NODE-пакеты, которые реализуют межплатформенные функции).
  5. Подробная документация: все о том, как что использовать, с изложением основных понятий и технологий.

Более того, кроссплатформенная среда NativeScript поддерживает все компоненты из репозиториев AndroidArsenal и Cocoapods, а также обращается к нативным методам из нативных библиотек. Но справедливости ради стоит сказать, что эти обращения нужно будет еще и декларировать — то есть описать библиотеку (обычно в этом нет необходимости, достаточно описать только те методы, к которым вы обращаетесь).

Сравнительная таблица

React Native Flutter Ionic Xamarin NativeScript
Язык JavaScript + React Dart JavaScript, HTML, CSS + Angular, React, Vue C# + .NET JavaScript, TypeScript
Разрабатываемые приложения Кроссплатформенные Гибридно-нативные Кроссплатформенные Гибридно-нативные Кроссплатформенные Гибридная веб-разработка Кроссплатформенные Гибридно-нативные Кроссплатформенные Гибридно-нативные
Первый релиз 2015 2017 2013 2011 2015
Разработчик Facebook Google Drifty Co. Microsoft Telerik
Платформы Android, iOS, UWP Android, iOS, Google, Fuchsia, Web, Desktop Android, iOS, Web Android, iOS, UWP Android, iOS
Открытый ресурс да да да + платные пакеты да + платные пакеты да
Инструменты фронтенда Native + Declarative UI components Built-in widgets HTML, CSS + widgets Xamarin. iOS/Android or Xamarin.Forms полностью собственный интерфейс
Производительность Высокая, близкая к нативной Очень высокая Средняя из-за веб технологий iOS / Android: высокий, близкая к нативной Высокая; уменьшается при запуске приложений

Так что же выбрать?

  • Отдайте предпочтение React Native, если вам нужна поддержка зрелого сообщества, разработка на JavaScript и проверенное временем решение.
  • Выберите Flutter, если вы знакомы с Dart и хотите добиться высокой производительности.
  • Выбирайте Ionic, если вам нужно ускорить цикл разработки и тестирования вашего приложения за счет полной кроссплатформенной адаптации.
  • Xamarin — идеальное решение для тех, кто хочет писать на C# (еще один язык из семейства C-подобных — C Sharp), получить хорошую производительность и испытать преимущества нативных инструментов.
  • Используйте NativeScript для 100% нативных API-интерфейсов, которые предоставляются как часть набора инструментов.
Для Singularity App мы выбрали Flutter, т.к. мне понравился и язык, и типизация, и портабельность и скорость работы. Мы делали десктоп и PWA-версию на React (не Native, но все же…) и мобильную разработку на Dart. Код мобильной версии получился в разы проще (в основном конечно не из-за языка, а, из-за того, что не нужно было делать типовые десктопные штуки, типа обработку хоткеев и всякие прелести, типа Command+Z.

Плюс паттерн BLOc, который проповедуют в мире Flutter, в итоге дает более понятный код и меньше слоев абстракции, чем Redux (тут очень спорно и холиварно, и все зависит от задачи, но в нашем случае это оказалось так; впрочем никто не мешает его использовать MOBx, но в больших приложениях есть риск утонуть в отладке обзерверов).

Итог такой, что лично я доволен Flutter. А минусы — везде есть :)
обзор кроссплатформенных фреймворков
Владимир
CEO «Сибирикс»