Xamarin — А стоит ли? Дайте совет

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

Здравствуйте!

Полазил по интернету. Прочитал статью.
dou.ua/...​articles/xamarin-project

И вот думаю что Xamarin — хорошая штука, для разработки cross платформенных приложений.

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

Немного о продукте:
Планируемое приложение не требовательное к производительности (которая нужна например для игр). Но требовательна к полноценной поддержке функционала мобильных устройств: камеры, GPS, светодиодные индикаторы, PUSH нотификации.

Вопросы:
1. Что в целом вы можете сказать про фреймворк? Стоит ли его использовать в мобильных начинаниях?
2. Подерживаются ли полностью такие штуки как: работа с встроенными видеокамерами, работа с GPS и картами?

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Я когда-то искал фреймворк для написание полностью кроссплатформенного мобильного приложения с кастомным UI — т.е. именно полностью, чтобы ни строчки ios- или android- specific кода, не забивать себе голову активити итд. Так вот из того, что я прочитал по Ксамарину, мою проблему он не решал — да, часть кода могла бы быть переиспользована, но вот остальная масса гуй-логики как раз должна была использовать специфичные компоненты для каждой из ОС.

В итоге взял Unity3D, используя её чисто гуи-возможности. Да, несколько костыльно получилось, но всё же исходному ТЗ соответствует.

а в 2020 это всё делается на flutter

Спасибо за наводку, но смущает необходимость учить Dart.

попробуйте поднять у себя тулчейн и запустить пару демок. особенно flutter.github.io/...​ples/platform_design.html
оно того стоит, имхо.

Вот уже 2020 год.
Даже по сравнению с 2018 многое изменилось.
Появился новый шаблон проектирования интерфейса Shell. Там и гибкие настройки интерфейса и навигация по uri, и много всяких мелочей, которых раньше так не хватало.
Появился компонент CollectionView. Там есть возможность настраивать гибкий макет списка, делать ленивую загрузку, настраивать ориентацию, множественный выбор и т. д.
Появилась библиотека Xamarin.Essentials для доступа к нативным штукам.
Стало удобнее работать с картинками (можно загружать из файла, из веб-сервиса, из байтов, из шрифта, есть кастомная реализация для svg, появились настройки кеширования).
Удобно создаются кастомные ui-компоненты. Очень нравится использовать bindable properties в них.

Появился компонент CollectionView.

Этим достижением C# мог бы похвастать лет 15 назад, когда html5 не было. Под Vue.js можно задизайнить любой абсолютно компонент, с раскраской и анимацией на стороне css.

Стало удобнее работать с картинками (можно загружать из файла, из веб-сервиса, из байтов

Тут по крайней мере должен читать jpeg, png, gif, иначе хвастать нечем. Ещё не помешает поддержка webp. tga и bmp можно и самому реализовать если что. Кроме того, тут же следом идёт потребность в чтении exif-метаданных, ну и метаданных для tiff, чтоб например получать gps-теги.

есть кастомная реализация для svg

Рендер svg — это очень крутая вещь, при условии полной реализации, с поддержкой css.

Кстати, читает gif и png, jpeg не пробовал. Но намного удобнее использовать шрифты или svg. Их можно ресайзить как угодно.
Кстати, они добавили css-подобные стили. Но я предпочитаю родные ксамариновские стили, они очень удобны в использовании.

Вообще-то на svg есть стандарт от w3c, вот описание для девелоперов developer.mozilla.org/en-US/docs/Web/SVG там же ссылка на примеры есть.
Ну а в использовании векторных шрифтов нет ничего нового, их можно было юзать под WinAPI самых первых версий, когда венда ещё из-под DOS загружалась. Более того, это одна из главных фишек венды была лет 30 назад. Ну и кроме того, под веб они и так юзаются повсеместно для иконок, всем известный awesome и material icons от гугла. Там есть несколько форматов этих шрифтов, eot, tff, woff, woff2, и сшитый svg.

В Xamarin многое изменилось с 2016 года. Он хотя бы запускается с первого раза =) Багов становится меньше. Использую Xamarin Forms для создания клиентского приложения для бизнеса (с клиент-серверной архитектурой). Очень нравится MVVM, ничего лучшего не встречал. Можно работать с камерами, GPS, картами и т. д. Главное, чтоб разработчик был грамотный. Платформа подходит почти под любые цели

Я не работал с React Native, поэтому не могу сказать, что лучше, а что хуже. Но лично я предпочитаю Xamarin, потому что это C#. Я не очень люблю динамически типизированные языки, мне трудно ориентироваться в JavaScript-коде, я совсем не понимаю Python. Мне комфортно в C#, в Java, в VB.NET. А по поводу популярности платформ могу сказать так: скорее всего не React Native популярнее Xamarin`a, а JavaScript популярнее си шарпа. Почему? Потому что JavaScript имеет низкий порог вхождения, очень много людей идут на курсы по нему, в вебе без него никуда и т. д. А заказчику вообще есть разница? Если на обоих платформах два опытных программиста выпустят одно и то же приложение, он даже разницы не заметит. Заказчику главное, чтоб приложение работало быстро и выглядело хорошо, а на чём оно написано он даже и близко не поймёт.
По поводу работы, ради интереса сравнил количество вакансий по Украине: React Native 12 вакансий, Xamarin 14 вакансий. По Киеву и там 6, и там 6. Так что сложно сказать о том, что популярнее, вакансии есть везде. Тем более, что для талантливого разработчика нет разницы на чём писать (кроме личных предпочтений), он сделает свою работу на отлично.

По поводу работы, ради интереса сравнил количество вакансий по Украине: React Native 12 вакансий, Xamarin 14 вакансий. По Киеву и там 6, и там 6. Так что сложно сказать о том, что популярнее, вакансии есть везде.

Как раз не сложно. Если на всю украину не набралось даже 50 вакансий, то не сложно :)

react+native(почему-то с плюсом в запросе возвращает больше) и «искать в описании» дают 77 вакансий
у xamarin по-прежнему 26

Все зависит от зрелости команды или разработчика. Кроссплатформенные приложения сами по себе сложно писать, утечки абстракции которые не заметны при написании приложения под одну платформу тут будут выстреливать в ногу по поводу и без повода. Xamarin Forms я бы использовал только для прототипов или чего то уж очень простого. Ну и если нет опыта с Xamarin первое время вы будете только терять, а не получать.

Александр, спасибо Вам за ваш исчерпывающий пост.
Немного раскрою завесу. Xamarin нужен для того что бы написать кроссплатформенное приложение. Которое буду писать я сам (нужно написать MVP/прототип).

Вопросы:
1. Можно ли на Xamarin писать код в стиле подобном в Qt когда используешь QWidgets и можешь быть уверен что это на всех платформах скомпилится без дополнительных усилий?
2. Почему Xamarin.Forms плох? Я смогу на нем сделать функционал для соц сети (списки, аватарки, лайки, посты), что бы это соответствовало принципу пишем 1 раз — используем везде?
3. Что такое «утечки абстракции»?

1) В QT ты пишешь единожды работает везде, это касается всего в том числе и UI? Никогда на нем не писал) Голый ксамарин даёт возможность создать платформонезависимый проект PCL где будет расспологаться платформонезависимая логика и нативные проекты под каждую платформу где можно писать на C# используя все библиотеки и элементы доступные в платформе. Xamarin никак не контролирует как вы реализуете коммуникацию UI с логикой, сколько будет логики обще и сколько платформоспецифической. Тут нам приходят на помощ MVVM фреймверки позволяющие реализовать ViewModel в PCL и View в нативном проекте, тем самым оторвав пласт логики из UI проекта и подняв в PCL. Но многое из этих фреймверков страдают от внутренних зависимостей что не позволяет в легкую писать юнит тесты на viewmodel (к примеру MvvMCross), это не плохо когда не планируется написание тестов.
2) Xamarin Forms перманентно сырой Фреймворк, на протяжении последних 2х лет у них много багов и их количество не меняется. Так же у них большие проблемы с UI перфомансом под различными платформами. Часто прийдется писать нативные рендеры, что бы сделать поведение хоть сколь нибудь сносным. Так что я рекомендую использовать XF только в самых простых случаях и для прототипа (хотя сама идея фреймверка мне оч. нравится).
3) Это может случится только на проекте без XF. К примеры хаки для одной платформы которые попадают в PCL проект или даже когда твоя платформонезависимая логика становится ориентированной только под одну платформу. Что бы этого избежать надо думать головой и следовать принципу инверсии зависимости из SOLID.
4) По поводу MVP — я бы все же использовал MVVM с некоторыми идеями из VIPER , такие как Router и Interactor

З плюсів С# і все, вам всеодно потрібно знати як працюють андроїд та іос, просто будете працювати з актівіті і контролкрами написаними не на джаві і обжектівС/с свіфті а на шарпі, набагато менше сторонніх бібліотек, студія ще дуже сира для ксамаріна. Якщо в вас С# головного мозку і в дома весить портрет Біла то рекомендую, в противному випадку продуктивнішн писати на натівних платформах, хочите синтаксис як в шарпа пишіть на Kotlin(Android), Swift(iOS).

Когда-то пробовал работать с ним, заманил тем, что кросс-платформенный, ну и C#, XAML (+MVVM)
Очень долго мучился с настройкой, миллионы непонятных ошибок при создании проекта :|
Тогда Xamarin еще не принадлежал MS и был платным, использовал студенческую годовую подписку знакомого
В итоге после нескольких недель мучений, наконец-то всё настроил, пришлось даже 10-ю Винду ставить (рукалицо)
Что могу сказать — как для собственного мини-пет-проекта хорошо подойдёт, но реализовывать что-то серьёзное я бы не брался.
Сугубо моё личное мнение
Ну и есть куча полезной информации на Хабре по этому поводу, советую почитать

Только сегодня в офис заходил знакомый, который пользуется этим (насколько я понял фриланс проект). Знакомый был очень недоволен — говорил, что для хеллоу ворлда в платформе все есть, но на каждый чуть нестандартный чих надо все-равно лезть в нативные апи платформ или искать плагины, где кто-то это уже сделал. И делать это по словам знакомого приходится очень часто. А еще он говорил что даже нативные апи приходится использовать через прослойки в которых все-равно не все есть (особенно что касается новых фичей платформ). Просто пересказываю, что сказал знакомый.

Привіт,

У нашому світі все відносно. Тому чи ти хочеш працювати із платформою чи ні це вже твій вибір :)

Перевага це:
— Розробка на C#. Так як я .net девелопер, для мене це дуже добре, бо використовую знайомий синтаксис і синтаксичний цукор до якого я звик.
— Основний плюс це шарінг кор логігики між проектами, використовуючи NETStandart можна тепер шарити логіку навіть із веб-додатками.

Xamarin платформа дає доступ до 100% АПІ як на Андроїд так і iOS. Тому проблем із доступом камер, GPS, і PUSH повідомлень немає.

є також два підходи по розробці на Xamarin:
— Це використовуючи Xamarin.Forms — що дозволяє шарити навіть UI;
— Розробка UI відбувається через нативні підходи. Андроїд за допомогою axml, iOS за допомогою NIB or Storyboards.

Основним челеджом буде налаштування середовища і вивчення нативних парадигм (Андроїд і іОС), якщо ти не мав із ними досвіду.

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

Підписатись на коментарі