Comments 50
Мне кажется, или раздел недостатков слегка сильно недописан?
Для разработки приложения на основе Xamarin вам не потребуется досконально знать специфические языки отдельных платформ.
То есть на c# я могу покрыть все случаи выходящие за границы HelloWorldApp по работе с платформой?
Xamarin требует примерно в 1,5 раза меньше времени (и денег), чем создание отдельного специализированного проекта под каждую платформу.
В первую очередь это относится к дизайну (Flat Design в iOS, Material Design в Android)
… и metro (если не ошибаюсь) для windows. И того три разных дизайна + в три раза дольше время на создание дизайна + три раза больше денег на создание трех разных дизайнов.
И кто сказал что разный дизайн одного приложения это круто? Наверное программисты, которым всегда трудно реализовывать дизайнерские идеи? Я не думаю чтобы дизайнер был доволен если бы его работа заключалась только в ресовании унифицированных схем с надписями «кнопка» и «селект».
А как же uix? Как можно разработать uix интерфейс, если интерфейс на каждой платформе разный?
И angular позволяет с api платформ на js работать. При чем оно по времени обновляется практически одновременно с платформой.
И невозможно не зная компонентной системы платформ и их api работать с ними. Даже в случаи кросплатформенных инструментов. Не нужно людей обманывать!
Ещё WPF, GDK и Tizen.
Плюс, насколько легко там подключать сторонние Android библиотеки? Особенно, если они тянут зависимости.
В Android Studio это решается простым добавлением строки в gradle. А что в Xamarin?
Насколько я знаю, там это нужно делать руками.
З.Ы. в Xamarin вы будете пользоваться не retrofit, а HttpClient (.NET из framework) или RestSharp из того же Nuget
Если хочется собирать API сервис из аннотаций, лучше, всё-таки, использовать Refit (https://github.com/reactiveui/refit), эдакий Retrofit для .NET. Если нужна производительность, то имеет смысл посмотреть в сторону ModernHttpClient (https://github.com/paulcbetts/ModernHttpClient)
При желании можно подключить любую нативную библиотеку написанную на Java
https://docs.microsoft.com/ru-ru/xamarin/android/platform/binding-java-library/
Так же для большинства наиболее популярных библиотек есть готовые обертки которые можно подключить из nuget-а.
Однако в случае retorfit проще использовать порт этой библиотеки на .net
https://www.nuget.org/packages/refit/
https://github.com/reactiveui/refit
а) насколько реально полноценно разрабатывать без приобретения Windows и VisualStudio?
б) если не реально, то сколько будет стоит комплект софта для разработчика в розницу?
НО! Приложение на не самых быстрых андроид-устройствах грузилось до 15 секунд!!!
Вы можете себе представить, чтобы какой-нибудь фейсбук грузился 15 секунд? Да вы, как пользователь, пошлете к чертям такое приложение, если это не B2B сектор, и вам НАДО с этим приложением работать. Конечно, там не только проблема фреймворка, там было много наших косяков, и с бубном удалось на пару секунд сократить загрузку, но все же… Например такой факт: гугл сделал DI контейнер Dagger 2, который работает на кодогенерации, и соответственно, в рантайме времени на поднятие контейнера не тратится. А нам приходилось работать с Autofac, который работает на рефлексии, и поднятие контейнера занимало при запуске несколько секунд!
З.Ы. простите за многабукаф, ИТОГО: мое мнение — Xamarin очень хорош, если у вас B2B сектор, готовая .NET команда, и нужно шарить код с десктопом. А главный критерий — сценарий использования приложения — как часто юзер будет его открывать и как долго с ним работать. Если открывать 20 раз в день чтобы ответить на сообщение и закрыть — Xamarin использовать нельзя.
И попробуйте создать пустой проект в Android Studio, запустите — приложение будет стартовать мгновенно.
Я часто сталкивался с аналогичной проблемой когда консультировал команды на Xamarin. Не обязательно все что может понадобиться и не понадобиться использовать на старте и инициализировать все. Можно декомпозировать приложение, сделать Lazy инициализацию компонент, выделить модули и приложение начнет запускаться намного быстрее.
class TextToSpeech_iOS
Вообще, большинство вопросов здесь — от незнания того, как работает Xamarin. Xamarin приложение на Android — это, по сути, приложение Mono, т.е., это то же .NET приложение, только в среде Linux. В iOS немного сложнее. Это если в двух словах. Интересующимся — доки.
Но, вообще говоря, вы можете собирать Xamarin.Android-приложения в среде Linux, т.к. msbuild уже кроссплатформенный, и вы даже можете попробовать использовать Rider от JetBrains для разработки.
NSDictionary *attributes = @{NSFontAttributeName: [UIFont systemFontOfSize:16], NSForegroundColorAttributeName: UIColor.whiteColor};
NSAttributedString *string = [[NSAttributedString alloc] initWithString:@"Hello from ego team!" attributes:attributes];
Есть десктоп-венда и считай, это 100% юзеров. С мониками от 20", мышой и относительно мощными ПК. Пишешь приложение строго для венды, со всеми гайдами, дизайном, темами и поэтессами. И очевидно, это будет классное rich-приложение, потому что не только look, но и feel.
Если вдруг вы обнаружили большой спрос на какой-нть ведроид или макакось, только тогда имеет смысл рассматривать разработку для других платформ! Ещё раз: сначала спрос, потом предложение. Потому что ИТ — это не «ещё более новый шампунь», здесь всё серьёзно и разрабатывается годами. Ни один бизнесмен не будет рисковать проторённым путём и прыгать на неполовозрелые идейки «а что если нас захотят запустить на Линукс?».
Захотят — тогда начнётся серьёзное исследование, где будут заданы крайне неудобные вопросы, на которые ни один усатый «сеньёр» 25-ти лет не даст внятного ответа — ибо скудоум в силу возраста:
1. Какой примерный прицент юзеров нашей программы хочет линупсы/макоси/ведроиды? Это серьёзный процент или это 1% маргиналов, которым лишь бы повопить «а давайте запустим эту хрень на моём 100-долларовом андроиде!»?
2. Какова вообще ЦА другой платформы? Её платёжеспособность? Желание вообще что-либо покупать? Как часто они готовы платить? Есть ли там бизнес сектор? Какие перспективы расширения?
3. Насколько гетерогенной будет разработка? Можно что-то перенести из венды? Какой ценой? Сколько на рынке есть специалистов по данной платформе? Сколько они хотят? Сколько это занимает времени?
4. Поддержка. Мрачный саппорт, тупорылость которого зашкаливает даже по джамшутным меркам. На венде ещё как-то люди ориентируются, где брать «недоайтишнегов» на маках? линуксе? Они вообще адекватные? По вендовой версии может саппортить даже программист, а что он будет делать с макофилами??
5. Платформы. Они РАЗНЫЕ и очень. И не надо вешать лапшу про «везде есть кнопки» — есть, да только это не составляет и 1% трудностей, которые нужно преодолеть! Это и «нативное поведение контролов» (чего не умеет НИ ОДНА кросс-библиотека), и специфичные механизмы (трэды, семафоры, сокеты, секьюрити, да чё говорить — не везде даже файлы доступны!). Только нативное приложение, разработанное профессионалами данной платформы, не будет вызывать тошноту у юзеров этой же платформы. Потому что этому учатся ГОДАМИ! Малолетние хипстеры со своими Qt/wxWidgets и прочими Кзамаринами просто «подаваны» по сравнению с теми, кто работал и развивался в каждой конкретной среде.
6. Отдельно коснусь мобильного мира: это совсем другая планета, товарищ! Забудь про аршинные тулбары и драгндропы, про «onMouseOver» и тонюсенькие, будто идиотом точенные, скроллбары — в «пальцетыке» это не прокатит. Только кнопки, свайпы и иконки на пол-экрана! И «никакая» производительность с «никакой» же памятью. Никакой тебе мемоизации, кэша и прочих плюшек. Выкусил? Только наивный Чебурашка будет думать, что вот сейчас он наскочит со своими кзамаринами и залепит аппликуху на всё, что только можно назвать компьютером! Мобильное ПО — это коренным образом отличающийся софт, который неизбежно надо проектировать с нуля, учитывая все ньюансы взаимодействия и ограничений.
Windows 10 — вот пример «ИТ урода», где кто-то не очень умный решил скрестить десктоп с мобилами — никому не нужный павлиноуткаёж просто галопом несётся в анал (не анналы!) истории.
Короче, грустно наблюдать весь этот тупняк, распаление ресурсов и натягивание совы на глобус — индустрия категорически не хочет думать — все хотят только баблосос на очередном хайпе. Прогресс/наука и бизнес — они несовместимы!
А так он дает глобально две вещи:
- возможность писать, использую нативное для платформы API, но используя C# и весь .Net за ним. Лично для меня это большой плюс — изучать андроид и джаву одновременно, или макос и objective-c несколько затратнее, чем просто одну платформу. Плюс, если вы делаете приложение одновременно для обеих платформ, вы можете пошарить между ними часть не UI-кода;
- при использовании Xamarin.Forms позволяет еще и иметь довольно большое количество общего UI-кода. Вы пишете UI, используя его абстракции, а не конкретной платформы. А он уже генерирует вам нативный UI, с учетом особенностей в отображении для разных платформ.
Из минусов Xamarin — еще один слой с еще одним слоем багов. IDE отстают от нативных (Android Studio, XCode). Visual Studio и Visual Studio Mac — совершенно разные IDE.
Из чисто нативной разработки минусы: разные платформы — разные баги, рассинхрон и несовместимость приложений на разных платформах.
Не нравится C# — котлин есть еще.
Достоинства и недостатки Xamarin