Comments 43
Иногда нативная разработка бывает более прогнозируема.
Отличная статья, спасибо что разобрали Qt и сослались на мой очерк!
Есть несколько дополнений/комментариев:
- К минусам Qt'а я бы добавил падения на некоторых Android-девайсах (в консоли разработчика отчеты о фэйлах с повторящихся марок китайских брендов). Их вообще непонятно как лечить, на каких багтрекерах искать баги и когда ждать фиксы :|
- Nokia не такую уж и плохую роль сыграла, насколько я помню с их подачи появился QML. Без оного в мобильной разработке шансы были бы околонулевые, как у того же Tizen. А QML хорош, пишу Вам с KDE, прекрасный пользовательский опыт
- Разработка на Qt все же отличается от разработки на чистом C++ в лучшую сторону. Но порог вхождения намного выше, чем в большинство универсальных решений, тут не поспоришь
Понятно, что у React Native есть минусы и ограничения. Например, видеоредактор я на нем делать в жизни бы не стал. Но для большинства приложений, являющихся простеньким UI для взаимодействия с сервером, его возможностей более, чем достаточно.
Стандарт или не стандарт это спорный вопрос. Вернее, даже, вопрос статистики. Ибо только достаточно популярный подход имеет право стать так называемым стандартом де-факто. У вас есть статистика показывающая, что реакт в вебе или нейтив достаточно популярен чтобы считать его стандартом де-факто?
А во-вторых, тут играет на руку «родной» для Android язык: он уже знаком половине мобильных разработчиков, и такого в кроссплатформе раньше не возникало.
Ну вот нет. Как .NET разработчик я ковырнул WinPhone. А потом, как фрилансер, столкнулся, что хотят мобильные приложения. Теоретически, мог бы в Джаву и Свифт. но зачем? Есть какой-никакой Ксамарин. Он работает. Я попробовал. Четвертый год с ним. Плююсь, ругаюсь матом. Но заказчикам достаточно. И мысли об отдельном котлине и что там сейчас на айосе, не радуют. Энтерпрайз готов терпеть отсутствие красот, если работает. А для меня, с беком на дотнете, дотнет ещё и в мобилке — это счастье.
Не увидел в статье электрон. ООн за кроссплатформу не сойдет?
На андроиде он есть. И на IOS, как я слышал, урезан, но не запрещен. Или его вообще в магазин не пускают?
Говоря об ограничениях я вспоминал эту статью. Не знаю, что там с тех пор поменялось.
Кроссплатформенная разработка это специфичный инструмент, есть сегменты рынка где это очень хорошо подходит, есть где не очень.
Например, для корпоративной разработки (приложения для внутреннего использования) кроссплатформенный подход ложится просто отлично, ведь обычно нужно очень много "формочек" + довольно обширная "бизнес-логика". Для b2c уже не столь идеально.
Я не согласен с оценками автора:
Qt на мобилках конечно никакос, но зато для настольных, особенно для различных Linux, или импортозамещающих настольны ОС(те же Linux) и мобильных (Аврора) это номер один.
React Native и Xamarin — очень популярны
Flutter подает большие надежды (ведь за ним стоит Гугл)
Гибридные в корпоративном секторе весьма популярны, да и на настолках Electron активно используется.
Актуальна кроссплатформенная разработка в импортозамещении — сейчас довольно быстрорастущий сектор на рынке.
Про кроссплатформенную разработку для Российских ОС (включая мобильную) я в декабрьском номере журнала "Системный администратор" опубликовал статью на основе доклада на конференции OS Day 2020 — http://files.tau-platform.com/Documents%20/SAM_2020_12_article_Crossplatform_solutions_for_Russian_OS.pdf
для корпоративной разработки кроссплатформенный подход ложится просто отлично, ведь обычно нужно очень много «формочек» + довольно обширная «бизнес-логика»
Добавлю: и ещё в корпоративной разработке не настолько критично выверять всё до пикселя, поэтому менее страшны «шероховатости» кроссплатформы. Конечно, я не призываю делать внутренние приложения по принципу «и так сойдёт, сотрудники пользоваться всё равно будут, куда они денутся», но даже когда заботишься о сотрудниках и их UX, требования тут отличаются от рыночных.
Я не согласен с оценками автора: Qt на мобилках конечно никакос, но зато для настольных номер один
Так у поста в заголовке написано «мобильная разработка», в первом предложении — «Android+iOS». То есть успехи Qt на десктопе — это просто за пределами скоупа текста.
Какое-то время (5-6 лет) назад это был чуть ли не единственный инструмент для более-менее безболезненного создания простых проектов как под десктопные, так и под мобильные системы с общей кодобазой. Понятно, что маркетинговая политика у нынешнего владельца была несколько странная, но сейчас там есть и Community версия… Может, пробовал кто?
Смотрели https://www.lazarus-ide.org/ ?
Вы забыли про одну весьма существенную нишу: Энтерпрайз-приложения для сотрудников и контрагентов. Там кроссплатформу сам бог велел: интерфейсы, насыщенные данными, при этом слабо интерактивные (формы, вьюхи, гриды). Работать должны на обеих платформах, огромное число бизнес-правил поддерживать в двух кодовых базах — эпик фейл, и как всегда нужно побыстрее и подешевле.
Поэтому разрабатываем такие приложения и на React Native и даже на Ionic (реинкарнация Кордовы), заказчики более чем довольны.
А вот про Kotlin Multiplatform Mobile сделать выводы по прошлому у меня не получилось, потому что у него нетипичная ситуация, отличающаяся от предшественников. Во-первых, идея «кроссплатформа годится не для всего» тут заложена прямо в фундамент: «а мы и не предлагаем объединять всё, реализуйте общую бизнес-логику, а остальное на Android и iOS делайте раздельно».
Вот вы напрасно не упомянули, что исторически в Xamarin был принят тот же самый подход. Кроме Xamarin.Forms там присутствует полноценное проксирование нативных API в С#, когда разработчик ручками пишет Activity для Android, ViewController для iOS, и в отдельном модуле — общую логику (а-ля «бекенд») для обоих.
По моему мнению, это самый архитектурно корректный подход из всех возможных. UI зачастую должен быть разным на разных платформах. Аналогично, жизненный цикл приложений, системные API на разных платформах отличаются, и это нормально. А вот запросы к серверу и «логика расчета стоимости заказа» обычно не зависят от того, на каком телефоне сидит юзер, поэтому их логично выносить в общий код.
Kotlin Multiplatform в этом отношении выглядит обнадеживающе. Но там пока что API, доступный в «общих модулях», ну слишком уж урезанный.
История усугубилась после того, как Xamarin был куплен майкрософтом — они отказались от поддержки Linux в Xamarin Studio. Т.е. теперь, даже если я захочу выступать в кроссплатформенном Xamarin-проекте на стороне Android, мне нужно позарез ставить винду (ну или покупать Mac).
А чтобы делать для windows — надо иметь windows.
Под android и linux вот компилируется везде :)
Использую KMM. Писать интерфейсы для Windows это адская боль — интеропта с .NET нет и не планируется (приоритет мобилкам, а там Микрософт стал Некрософтом), а делать UI на Win32 API это жёстко.
Зато в платформенно-зависимой части кода можно ковыряться в системе сколько хочешь — тут тебе и реестр и прочие системные запросы.
Вот сейчас пробуем ReactNative натянуть на KMM- посмотрим, что выйдет…
Был опыт использования Xamarin 3 года назад. Идея красивая, но основные проблемы были со скоростью загрузки приложения. И google-консоль много рапортовала о ANR, что свело на нет идею его использования. Может сейчас уже поправили, конечно, но слабо верится.
Сколько пользователей у приложения? И каков процент ANR, крешей?
Сделал на Xamarin.Forma 4 разных приложения для аудитории в 3-5к пользователей и продолжаю делать. Это читалки, слушалки, тесты, апп для банка. Специфичный для платформы UI выношу в отдельный проект. В остальном — проблем нет.
Возможно только время компиляции и запуска удручает при росте проекта. Тогда разбиваю функционал/UI на модули и запускаю отдельно.
Как уже писали выше — xamarin на самом деле популярен. Среди заказных приложений. И react native тоже был, но Facebook сам от него отказался.
Первые версии xamarin были багованные, особенно я помню как я играл в игру — оттебаж за 5 секунд.
Но плюс xamarin всегда был в том, что он позволял писать и отдельно под каждую платформу и что-то объединять при этом. И это на самом деле удобно, и не сильно сложно.
Я конечно не пользуюсь xamarin сейчас, но ребята из KMM идут близко к его пути. И мне кажется нишу они займут туже, что и xamarin.
А как я говорю лучшая кроссплатформа это С++, если не одно но — С++. Способ интеграции и взаимодействия достаточно удобен (особенно если djinni), код можно дебажить, нет багов. Один минус — ну писать бизнес логику на С++ в 21 веке… Ну уж нет — язык сложный, ещё и буковок много.
Кроссплатформенная мобильная разработка: история вопроса