Или: .NET MAUI, Flutter, React Native, Ionic Framework, CodeNameOne, NativeScript, Kotlin Multiplatform, Unity, о боже…

У меня есть идея относительно простого приложения. Я хочу иметь возможность запускать его на как можно большем количестве платформ с минимальными вложениями для каждой платформы. Я какое-то время ходил по этому поводу кругами. На данный момент существует так много различных опций WORA (Write Once, Run Anywhere) или LOWA (Learn Once, Write Anywhere) для приложений, что я впал в паралич анализа, какой из них использовать.

Много лет назад друг предложил мне придумать идею для небольшого приложения, которое я мог бы портировать на разные платформы, чтобы понять плюсы и минусы разработки для каждой платформы. В то время мы работали в Microsoft, поэтому я начал с приложения для Windows Phone (да, это было тогда, когда они хотя бы пытались быть чем-то особенным). А потом произошли другие вещи, и я остановился на этом конкретном упражнении.

Но это все равно отличная идея. Так что я попробую несколько мультиплатформенных решений с еще более минимальной версией моей идеи приложения и посмотрю, что из этого получится. Этот проект является хорошим кандидатом для ограниченной серии сообщений в блоге, поэтому я создам сцену в этом сообщении, а затем опубликую сообщение для каждого решения для моих лучших кандидатов. Чтобы это работало, я намеренно ограничу этот первый проход очень маленьким приложением с очень небольшим количеством требований. Затем я могу решить, в каком направлении двигаться дальше (надеюсь, с вашими отзывами).

Приложение

Браузерная и относительно полнофункциональная версия приложения, которое я имею в виду, доступна на моем веб-сайте music4dance.net. Это простой счетчик ударов, который позволяет вам отстукивать ритм песни и показывает виды танцев с партнером, которые вы можете танцевать под песню. Кроме того, он показывает такие вещи, как темп, который вы считали в ударах в минуту, и такты в минуту.

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

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

Приложение будет иметь кнопку вверху, которая предлагает пользователю подсчитывать удары или такты. Метка будет меняться в зависимости от состояния остальной части приложения. Затем будут метки, показывающие темп в ударах в минуту и ​​тактах в минуту. Наконец, будет два набора переключателей. Один из них — указать метр или то, что пользователю все равно на метр и он хочет думать битами. Другой — указать, хочет ли пользователь отсчитывать доли или такты. Экран «Количество ударов в минуту» и элементы управления «Подсчет ударов/счет тактов» исчезнут, если приложение находится в режиме «такт».

Ограничения

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

Например, исходное приложение будет только одной страницей без постоянного состояния, а внутреннее состояние чрезвычайно простое. Я не собираюсь пытаться ориентироваться на конкретную тематику приложения, например, если приложение имеет материальный дизайн или ощущение Windows на iOS, я готов с этим смириться. Я также не рассматриваю тестирование, простоту развертывания, монетизацию, доступ к службам, специфичным для телефона, или какое-либо взаимодействие с серверным кодом. Все эти ограничения являются кандидатами на будущие проходы, и я подозреваю, что некоторые из них потребуются для разработки точного сравнения между платформами.

Метод

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

Флаттер от Google

Майкрософт .NET MAUI

Реагировать нативно

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

Я также мог бы рассмотреть возможность написания приложений в собственных наборах инструментов для iOS и Android.

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

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

Почему я?

Около половины своей карьеры я провел в Microsoft, создавая инструменты для разработчиков, которые были предшественниками текущего набора инструментов Microsoft и которые я буду использовать для создания версии приложения .NET MAUI. Другую половину времени я работал в стартапах и небольших компаниях, которые используют эти инструменты, в основном для веб-приложений. Так что у меня есть некоторая глубина в проведении такого рода анализа для других фреймворков и некоторая глубина в том, что могут делать инструменты. Но я никогда не писал приложения для телефона (кроме упомянутого выше приложения для Windows Phone), поэтому я надеюсь привлечь ум новичка к решению проблемы.

Почему сейчас?

Сейчас самое время окунуться в мир мультиплатформенных инструментов. Есть много очень разных решений проблемы, и мне еще предстоит найти отличный ресурс для их сравнения и сопоставления. Эта пустота может быть связана с тем, что для многих разработчиков и компаний существуют разумные значения по умолчанию. Если у вас есть опыт работы с веб-интерфейсом, используйте React Native или даже одно из решений, где вы размещаете браузер в приложении, например Ionic. Если вы являетесь магазином Microsoft, используйте MAU и т. д.

Но я решил попробовать этот проект, потому что ранее в этом году я возглавил команду студентов, которые внесли свой вклад во Flutter framework в качестве завершающего проекта в рамках моей волонтерской работы с Mentors In Tech. Хотя от меня не ожидали, что я стану экспертом по Flutter, чтобы стать их менеджером, я не мог не погрузиться в работу. полезный. Я смог помочь студентам преодолеть некоторые технические барьеры, поскольку они исправили ошибки во Flutter. И это возродило мой давний интерес к идее возможности написать код один раз и запустить его во многих средах.

Следующие шаги

В ближайшие недели ожидайте новых сообщений в блоге с подробным описанием моего опыта работы с каждой из трех лучших платформ. Я могу также опубликовать информацию о своей истории работы с кроссплатформенными и мультиплатформенными средами разработки. Мне очень интересны ваши отзывы. Вы бы предпочли увидеть первый уровень анализа для разных фреймворков? Или одно из ограничений, которые я перечислил выше, достаточно существенно для вашей работы, и вы хотите, чтобы я атаковал его в следующий раз?