Flutter VS Xamarin: что выбрать для кросс-платформенной разработки

Автор:

surf.dev

Если вы решили разрабатывать мобильное приложение, то наверняка слышали о кроссплатформенных фреймворках, которые позволяют разработчикам писать код один раз для приложений на iOS и Android. В статье мы покажем различия между двумя технологиями: Flutter или Xamarin, чтобы вы могли понять, какая из них больше подходит для вашего приложения.

Обзор Flutter

Flutter был создан компанией Google в 2017 году. Фреймворк работает на языке Dart, также разработанном Google. Flutter известен тем, что справляется с тяжелой графикой и анимацией, обеспечивая практически нативную производительность приложений. Среди популярных приложений, созданных с использованием Flutter, – несколько приложений Google, Alibaba, My BMW и многие другие.

Обзор Xamarin

Кроссплатформенный фреймворк Xamarin разработан одноименной американской компанией, основанной в 2011 году. Технология основана на проекте с открытым исходным кодом Mono и включает в себя инструменты для создания приложений на Android, iOS и других платформах. В 2016 году Xamarin был приобретен компанией Microsoft и стал частью фреймворка .NET. Xamarin работает на языке C#. Среди примеров приложений на Xamarin – BBC Good Food, UPS Mobile, Alaska Airlines и другие.

Flutter или Xamarin: стоимость

Flutter – это набор инструментов для разработки программного обеспечения с открытым исходным кодом, который доступен совершенно бесплатно для всех разработчиков как для некоммерческого, так и для коммерческого использования.

Xamarin также является проектом с открытым исходным кодом и может свободно использоваться как частными лицами, так и небольшими предприятиями. Однако, поскольку Xamarin тесно интегрирован с Visual Studio, крупным компаниям необходимо приобретать годовую подписку на Visual Studio Enterprise.

Архитектура и повторное использование кода

Xamarin работает на языке C#, а поскольку C# является одним из языков .NET framework, это открывает широкие возможности для использования таких функций .NET, как синтаксис запросов LINQ, асинхронное программирование и др. Благодаря API Xamarin.Forms и стандартным элементам интерфейса коэффициент повторного использования кода на разных платформах может достигать 96%. Кроме того, Xamarin предоставляет инструменты Xamarin.Android и Xamarin.iOS для создания специфических для каждой платформы приложений с коэффициентом повторного использования кода до 75%. Код, написанный на Xamarin, может быть повторно использован только в рамках технологического стека .NET.

Flutter использует язык Dart, и большинство его компонентов являются встроенными, предоставляя все необходимые инструменты для кроссплатформенной разработки. Приложения на Flutter строятся с помощью виджетов, которые хорошо настраиваются и по внешнему виду соответствуют нативным пользовательским интерфейсам. Для рендеринга фреймворк использует мощный движок Skia C++. Возможность повторного использования кода Flutter достигает 80%.

Проводя сравнение Flutter VS Xamarin, отметим, что оба фреймворка имеют прочную архитектуру и получают большую технологическую поддержку от Microsoft (Xamarin) и Google (Flutter).

Кто победит: однозначного победителя нет.

Разработка и тестирование

Flutter поставляется с большим количеством виджетов и API для оптимизации процесса разработки, а также функцией Hot Reload, позволяющей разработчику мгновенно видеть изменения в коде без необходимости перезагрузки всего приложения. Кроме того, фреймворк поддерживает тестирование на интеграционном (все приложение или его часть), виджетном (отдельный компонент) или юнитном (отдельная функция или класс) уровнях, а Google предоставляет исчерпывающую документацию по тестированию Flutter.

В Xamarin есть функция, очень похожая на Hot Reload во Flutter, - Live Reload, которая позволяет разработчикам видеть изменения кода вживую, без компиляции и развертывания. Фреймворк имеет свою среду Test Cloud и поддерживает модульное и UI-тестирование в Visual Studio, а также сторонние инструменты тестирования, такие как Appium, XCUITest или Expresso.

И Xamarin, и Flutter обладают широкими возможностями тестирования и поддерживают автоматизацию самого процесса, но многоуровневое тестирование выводит Flutter вперед.

Кто победил: Flutter.

Flutter VS Xamarin: производительность и пользовательский интерфейс

Приложения, созданные с помощью Xamarin, в целом демонстрируют хорошую производительность, однако она сильно зависит от типа используемого фреймворка Xamarin. Если инструменты Xamarin.Android и Xamarin.iOS обеспечивают производительность, сравнимую с «родными» приложениями, благодаря использованию «родных» компонентов (и более специфичного для каждой платформы кода), то производительность Xamarin.Forms (разделяющего большую часть кода между платформами) ниже, особенно когда речь идет об обработке тяжелой графики. Несмотря на то, что Xamarin.Forms разделяет некоторые компоненты пользовательского интерфейса между платформами, многие компоненты приходится разрабатывать отдельно для iOS и Android, что означает, что фреймворк может быть не лучшим выбором для приложений с тяжелым пользовательским интерфейсом.

Поскольку Flutter не требует паттерн JavaScript для взаимодействия с нативными компонентами и использует мощный движок рендеринга Skia, фреймворк обеспечивает высочайшую производительность среди кроссплатформенных технологий, с меньшим количеством замираний и выпадающих кадров. Фреймворк не использует нативные элементы пользовательского интерфейса, обновляя внешний вид (иконки, шрифты) и характеристики (прокрутка, навигация) виджетов для соответствия визуальному стилю платформы с помощью Material Design и стилевых систем Cupertino.

Кто победил: Flutter.

Кривая обучения

Для создания приложений на Flutter разработчику необходимо знать Dart, который является относительно новым языком кодирования и имеет ограниченное применение за пределами фреймворка Flutter. Поэтому большинству разработчиков, за исключением тех, кто знаком с Dart по другим проектам Google, придется изучать новый язык до начала разработки на Flutter. Хорошая новость заключается в том, что, по мнению многих программистов, изучение Dart достаточно просто для тех, кто знаком с JavaScript, C++ и другими объектно-ориентированными языками программирования, но все же требует времени и определенной степени самоотдачи.

Xamarin работает на C#, который входит в пятерку самых популярных языков программирования. Он относится к языкам .NET, поэтому всем, кто работал в экосистеме Microsoft, будет несложно начать разработку на Xamarin. Опыт работы с Visual Studio Code будет еще одним большим плюсом, поскольку Xamarin интегрирован с IDE Visual Studio. В общем, широко используемый язык сокращает кривую обучения для многих программистов.

Кто победил: Xamarin.

Популярность среди разработчиков и поддержка сообщества

Согласно исследованию, в 2020 году Flutter стал вторым по популярности кроссплатформенным фреймворком, а Xamarin занял пятое место. Доля разработчиков, выбирающих Flutter, за период 2019-2020 годов выросла с 30% до 39%, в то время как число сторонников Xamarin сократилось с 26% до 14%. Снижение популярности может замедлить разработку, поскольку становится меньше людей, которые могут помочь в решении возникающих вопросов, и меньше сторонних библиотек. В любом случае, поскольку обе технологии поддерживаются такими технологическими гигантами, как Google и Microsoft, разработчиков, знакомых с обоими фреймворками и использующих их в настоящее время, достаточно много. Таким образом, в нашем сравнении Flutter VS Xamarin побеждает первый, но второй также пользуется популярностью.

Заключение

Оба фреймворка предлагают сопоставимые инструменты и возможности для разработки как простых, так и сложных кроссплатформенных приложений. Однако Xamarin не является бесплатным для крупномасштабного коммерческого использования, а его поддержка сообществом в последнее время сократилась. Фреймворк может оказаться более удачным выбором для тех, кто уже работает в экосистеме Microsoft, или, когда остальная часть технологического стека написана на языках .NET. Кроме того, если простые приложения, созданные с помощью Xamarin, демонстрируют практически «родную» производительность, то приложения с тяжелым пользовательским интерфейсом могут страдать от снижения FPS.

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

Материалы по теме