Что такое Xamarin.Forms?

Xamarin.Forms — это платформа пользовательского интерфейса с открытым кодом. С помощью Xamarin.Forms разработчики могут создавать приложения для Xamarin.Android, Xamarin.iOS и Windows на основе общей базы кода.
Xamarin.Forms позволяет разработчикам создавать пользовательские интерфейсы в XAML с помощью кода программной части в C#. Эти интерфейсы на каждой платформе подготавливаются к просмотру как собственные элементы управления.
Для кого предназначена платформа Xamarin.Forms
Платформа Xamarin.Forms ориентирована на разработчиков, перед которыми стоят следующие задачи:
- Совместное использование макета пользовательского интерфейса и разработка на различных платформах.
- Совместное использование кода, тестов и бизнес-логики на различных платформах.
- Написание кроссплатформенных приложений на языке C# в Visual Studio.
Как работает Xamarin.Forms

Xamarin.Forms предоставляет согласованный API для создания элементов пользовательского интерфейса на разных платформах. Этот API может быть реализован в XAML либо C# и поддерживает привязку данных для шаблонов, таких как «Модель — представление — модель представления» (MVVM).
Во время выполнения Xamarin.Forms использует отрисовщики платформы для преобразования кроссплатформенных элементов пользовательского интерфейса в собственные элементы управления в Xamarin.Android, Xamarin.iOS и UWP. Позволяет разработчикам добиться привычного внешнего вида, поведения и уровня производительности, а также реализовать преимущества совместного использования кода на разных платформах.
Приложения Xamarin.Forms обычно состоят из общей библиотеки .NET Standard и проектов отдельных платформ. Общая библиотека содержит представления XAML или C# и всю бизнес-логику, например службы, модели или другой код. Проекты платформы содержат всю зависящую от платформы логику или пакеты, необходимые приложению.
Xamarin.Forms использует платформу Xamarin для выполнения приложений .NET на разных платформах собственными средствами. Дополнительные сведения о Xamarin см. в статье Что такое Xamarin?.
Дополнительные функциональные возможности
Xamarin.Forms имеет большую экосистему библиотек, которые добавляют разнообразные функциональные возможности для приложений. В этом разделе описываются некоторые из этих дополнительных функций.
Xamarin.Essentials
Xamarin.Essentials — это библиотека, которая предоставляет кроссплатформенные API для собственных функций устройства. Как и сама платформа Xamarin, библиотека Xamarin.Essentials представляет собой абстракцию, которая упрощает процесс доступа к собственным служебным программам. Ниже приведены некоторые примеры служебных программ, предоставляемых Xamarin.Essentials:
- Сведения об устройстве
- Файловая система
- Акселерометр
- Телефон
- Преобразование текста в речь
- Блокировка экрана
Для получения дополнительной информации см. Xamarin.Essentials.
Оболочка
Оболочка Xamarin.Forms упрощает разработку мобильных приложений, предоставляя основные возможности, которые необходимы для большинства приложений. Ниже приведены некоторые примеры функций, предоставляемых этой оболочкой:
- Общие возможности навигации
- Схема навигации на основе URI
- Обработчик интегрированного поиска
Дополнительные сведения см. в разделе Оболочка Xamarin.Forms.
Особенности платформы
Xamarin.Forms предоставляет общий API, осуществляющий отрисовку собственных элементов управления на разных платформах, но конкретная платформа может иметь функции, отсутствующие на других платформах. Например, платформа Android имеет собственную функцию для быстрой прокрутки в ListView , а iOS — нет. Особенности платформы Xamarin.Forms позволяют использовать функции, доступные только на определенной платформе, без создания пользовательских отрисовщиков или эффектов.
Xamarin.Forms включает готовые решения для различных функций, характерных для определенных платформ. Дополнительные сведения можно найти в разделе
- Особенности платформы Xamarin.Forms
- Особенности платформы Android
- Особенности платформы iOS
- Особенности платформы Windows
Визуальный элемент материала
Визуальный элемент материала Xamarin.Forms используется для применения правил проектирования материалов к приложениям Xamarin.Forms. Визуальный элемент материала Xamarin.Forms использует свойство Visual для выборочного применения пользовательских отрисовщиков к пользовательскому интерфейсу, что обеспечивает единообразный внешний вид и поведение в iOS и Android.
Связанные ссылки
- Начало работы с Xamarin.Forms
- Xamarin.Essentials
- Оболочка Xamarin.Forms
- Визуальный элемент материала Xamarin.Forms
Подробно о Xamarin
Вы неплохо владеете языком C# и платформой .NET в целом? Вам надоело стоять в стороне и смотреть, как кто-то другой пишет крутые мобильные приложения вместо вас? У меня есть для вас кое-что интересное! То, что поможет вам изменить сложившуюся ситуацию и позволит писать отличные мобильные приложения, не требуя отдельного изучения Objective-C и Java. Я расскажу вам о продукте Xamarin. Подробно и правдиво.
Что это?

Xamarin — это фреймворк для кроссплатформенной разработки мобильных приложений (iOS, Android, Windows Phone) с использованием языка C#. Идея очень простая. Вы пишете код на своем любимом языке, с применением всех привычных для вас языковых фич типо LINQ, лямбда-выражений, Generic`ов и async`ов. При этом вы имеете полный доступ ко всем возможностям SDK платформы и родному механизму создания UI, получая на выходе приложение, которое, строго говоря, ничем не отличается от нативных и (по крайней мере по заверениям) не уступает им в производительности.
- Xamarin.IOS — библиотека классов для C#, предоставляющая разработчику доступ к iOS SDK;
- Xamarin.Android — библиотека классов для C#, предоставляющая разработчику доступ к Android SDK;
- Компиляторы для iOS и Android;
- IDE Xamarin Studio;
- Плагин для Visual Studio.
Давай подробнее
Некоторое время назад достаточно широкую известность получили ряд фреймворков(например PhoneGap), которые предлагают разработку кроссплатформенных мобильных приложений на HTML5 с использованием JavaScript. Идея заключается в том, что приложение разрабатывается как обычный сайт для мобильных устройств с использованием соответствующих js-библиотек, например, Jquery Mobile. Затем все это упаковывается в некий контейнер, который для пользователя выглядит как нативное приложение. Минусы этих фреймворков очевидны: во-первых, вы не имеете доступа к нативным элементам UI. То есть даже если вы хотите использовать стандартную кнопку «Назад» для iPhone, вы должны ее нарисовать и сверстать. Во-вторых, вы получаете урезанный и обобщенный API для работы с платформой. Таким образом, те или иные фичи, присущие какой-то отдельной платформе будут вам недоступны. Ну и третье и самое важное — такое приложение физически запускается внутри браузера телефона (точнее внутри контрола WebView). Не нужно расписывать долго, что это значит: низкая производительность (особенно «хорош» WebView на старых версиях Android) и огромные проблемы с отображением (ну, господа, это же — браузер). Хотя, конечно, в определенных случаях эти фреймворки могут оказаться очень уместны.
Xamarin — это про другое. Т.к. я надеюсь, что мы здесь все — неглупые пацаны разработчики, я расскажу о том, как он устроен внутри. Это позволит понять потенциал данной технологии. Xamarin основан на open-source реализации платформы .NET — Mono. Эта реализация включает в себя собственный компилятор C#, среду выполнения, а так же основные .NET библиотеки. Цель проекта — позволить запускать программы, написанные на C#, на операционных системах, отличных от Windows — Unix-системах, Mac OS и других. Важно, что разработкой Xamarin занимаются те же люди, что и разработкой Mono. И (тут внимание) — это НЕ Microsoft со всеми вытекающими плюсами и минусами.
С точки зрения исполнения приложений между iOS и Android есть одно ключевое различие — способ их предварительной компиляции. Как известно, для выполнения приложений в Android используется виртуальная Java-машина Dalvik. Нативные приложения, которые пишутся на Java, компилируются в некий промежуточный байт-код, который интерпретируется Dalvik`ом в команды процессора в момент исполнения программы(т.е. аналогично тому, как работает CLR в .NET). Это так называемая Just-in-time компиляция (компиляция на лету). В iOS используется другая модель компиляции — Ahead-of-Time (компиляция перед исполнением). Xamarin учитывает это различие, предоставляя отдельные компиляторы для каждой из этих платформ, которые позволяют на выходе получать настоящие, нативные приложения, которые выполняются вне контекста браузера и могут использовать все аппаратные и программные ресурсы платформы.
Для iOS ситуация простая — никакой виртуальной машины нет и программный код должен быть просто заранее скомпилирован в машинный. Для этой цели используется AOT компилятор Mono.
Для Android интереснее. При компиляции приложения происходит перевод кода на C# в промежуточный байт-код, понятный виртуальной машине Mono и сама эта виртуальная машина также добавляется в упакованное приложение. И Mono и Dalvik написаны на Си и работают поверх ядра Linux (а мы помним, что Android основана на Linux). Вы уже понимаете, что происходит. При запуске приложения на Android обе виртуальные машины начинают работать бок о бок и обмениваются данными через специальный механизм wrapper`ов.
Это все хорошо, но давай ближе к разработке
Расскажу подробнее о самих библиотеках на примере Xamarin.iOS (Monotouch), т.к. опыта работы с ней гораздо больше, чем с Xamarin.Android (но там все аналогично).
Библиотека классов Monotouch.dll предоставляет доступ ко всем возможностям iOS SDK. Для разработчика — это просто набор C#-классов с хорошей аннотацией. Внутри эти классы используют разработанные инженерами Xamarin механизмы биндинга на нативные классы и методы. Важно, что этот же механизм можно использовать для биндинга любых библиотек, написанных на objective-c. Большинство классов и методов называются так же, как в оригинальном iOS SDK, хотя бывают исключения (в этом случае приходится использовать поиск в документации Xamarin по оригинальному названию, т.к. оно фигурирует в атрибутах биндинга). В классах активно используется механизм C# event`ов, что позволяет писать красивый и компактный код обработчиков с использованием лямбда-выражений:
button.TouchUpInside += (s, o) => < message.Text = "Hello!"; >;

Да и в целом код, написанный на C# выглядит гораздо читабельней и приятней. Посмотрите разницу на примере кода, создающего строку с атрибутами:
Для асинхронной разработки Xamarin предоставляет возможность использовать как классы из пространства имен System.Threading.Thread и System.Threading.ThreadPool, так и полный спектр возможностей, предоставляемых Task Parallel Library. Использование последней, однако, считается предпочтительным. Кроме того, на момент написания статьи вышла очередная Stable версия, в которой появилась поддержка .NET 4.5, в частности, теперь можно использовать ключевые слова async/await. Хотя эта возможность была доступна и ранее, но для этого приходилось использовать beta-канал обновлений.
Что с ограничениями?
Ограничения в Xamarin.iOS связаны в основном с тем, что в iOS, как было сказано выше, в отличии от .NET и Mono нет виртуальной машины. Поэтому возникают трудности с поддержкой Generic. Причина ясна — на компилятор ложится задача проанализировать код и определить все возможные конкретизации в том или ином классе и методе. Отсюда возникают такие ограничения:
- Не рекомендуется использовать Virtual Generic методы, т.к компилятор не всесилен и может не учесть все возможные варианты использования;
- Нельзя создавать Generic-наследников от класса NSObject, который является базовым в иерархии Objective-C. Достаточно серьезное ограничение, которое может некоторым образом испортить вашу стройную и красивую архитектуру.
Разработка UI
Для каждой платформы Xamarin предоставляет возможность использовать нативные средства разработки UI и нативные элементы пользовательского интерфейса. Для Android создание UI может происходить непосредственно в коде или же при помощи декларативного подхода с описанием интерфейса в XML. Для iOS это также либо код, либо использование нативных средств проектирования интерфейса — отдельные xib-файлы или же один большой Storyboard. Редактирование этих файлов происходит в привычной для iOS-разработчика среде XCode. И это означает, что вам потребуется Mac. Да, для разработки iOS-приложений вам в любом случае потребуется Mac по двум причинам:
Во-первых, как я уже сказал, для редактирования UI в среде XCode. Во-вторых, для отладки приложений требуется симулятор iPhone/iPad, который также доступен только на Mac.
Переносимость кода

Xamarin, по заявлениям разработчиков, является средством кроссплатформенной разработки, т.е. ожидаемо, что приложение, написанное один раз, может быть запущено на различных мобильных платформах. Но, в этом случае возникает конфликт с предыдущим пунктом. Как же так?
На самом деле ситуация обстоит следующим образом. Для каждой из платформы вам потребуется реализовать собственный слой UI. Т.е код, который отвечает за внешний вид приложения, вам придется написать для каждой платформы отдельно. Это цена за возможность использования нативных механизмов работы с UI. Если разбивать приложение на слои, то получается такая схема:
- Data Layer (DL) – Хранилище данных, например, база SqlLite или xml-файлы;
- Data Access Layer (DAL) – Обертка над хранилищем для осуществления CRUD-операций;
- Business Layer (BL) – Слой, содержащий бизнес-логику приложения;
- Service Access Layer (SAL) – Слой, отвечающий за взаимодействие с удаленными сервисами (Rest, Json, WCF);
- Application Layer (AL) – Слой, содержащий платформозависимый код, другими словами, это код, который зависит от библиотек monotouch.dll или monodroid.dll;
- User Interface Layer (UI) – Слой пользовательского интерфейса.
Сторонние компоненты
У Xamarin существует собственный магазин сторонних компонентов Xamarin Components.Он интегрируется в IDE и позволяет в несколько кликов подключать к вашему проекту различные компоненты, написанные как инженерами Xamarin, так и сторонними разработчиками. Количество компонентов, кстати, растет как на дрожжах. Есть как платные, так и бесплатные(на данный момент их большинство). Все компоненты можно разделить на две части. Одни предоставляют дополнительные элементы пользовательского интерфейса, другие являются библиотеками классов. Например вариант для Mono известной библиотеки для работы с Json — Json.NET или же библиотека для взаимодействия с Rest-сервисами — RestSharp. Не все компоненты кроссплатформенные, многие доступны только для конкретной платформы. Как я упоминал выше, Xamarin использует механизм биндингов для связывания с нативными библиотеками классов, что позволяет портировать на C# любые нативные библиотеки классов. Кроме того, для Xamarin.iOS, например, существует специальная утилита, которая умеет генерировать такие биндинги автоматически. Собственно это позволяет инженерам Xamarin поспевать за всеми нововведениями iOS. Так, в частности, в Xamarin.iOS практически сразу после выхода появилась возможность использовать Dropbox API, а так же новые фичи iOS 7.
Документация и комьюнити
Xamarin имеет отличную документацию, содержащую подробные руководства, сниппеты, а также внушительную базу примеров. Документация непосредственно по всем классам библиотек Monotouch и Monodroid являются частью общей документации Mono. Но, к сожалению, этого все равно недостаточно, чтобы покрыть весь пласт вопросов, которые могут возникать в процессе разработки. У Xamarin существует комьюнити разработчиков, которое сконцентировано на официальном форуме и на StackOverlow. Активностью и инициативностью людей в комьюнити похвастаться не могу. Из пяти вопросов, заданных на официальном форуме, ответ я получил только на один. Может быть, не то спрашивал. В этом плане неоценимую помощь оказала приватная тех. поддержка с инженерами по электронной почте, доступная в business-лицензии. Отвечают, как правило, в течении нескольких часов и не стандартными отписками «попробуйте выключить и включить», а действительно разбираются в проблеме и помогают ее решить. Следует понимать, что база вопросов и ответов, накопленная для нативной разработки гораздо шире, чем для Xamarin, поэтому, как бы вы ни хотели, вам придется разобраться в специфическом синтаксисе objective-c (c Java проблем быть не должно), чтобы понимать примеры кода на том же StackOverflow. Кроме того, это откроет вам доступ к прочтению и пониманию официальной документации для платформы, что на определенном этапе может стать очень важно. С другой стороны, в этом есть и положительный момент: получив такой базис, вам будет проще перейти к нативной разработке при необходимости.
Среда разработки
Разработчики Xamarin в качестве среды разработки предлагают использовать либо собственную IDE — Xamarin Studio, либо Visual Studio (в business-лицензии, об этом ниже).
Xamarin Studio
- Приятная подсветка синтаксиса;
- Автодополнение кода (включая возможность одновременного импорта namespaces);
- Удобный универсальный поиск по названиям файлов, типам, членам классов и т.п;
- Развитые возможности навигации по проекту: Быстрый переход к описанию класса, переход к базовому классу, список мест использования класса и т.д.;
- Различные механизмы рефакторинга и быстрая подсказка (как alt+Enter в Resharper);
- Достаточно развитые механизмы дебага, включая слежение, просмотр текущего значения переменной при наведении, визуализацию потоков и аналог Immediate window в VS;
- Встроенная интеграция с системами контроля версий: SVN, Git и TFS (для TFS, правда, нужны сторонние утилиты);
- Горячие клавиши (включая copy-paste) работают только в английской раскладке. Разработчикам известно об этой проблеме. Баг в багтрекере заведен;
- Периодически, при попытке поставить breakpoint студия виснет. Несмотря на наличие механизма автосохранения, это немного расстраивает.
- При использовании встроенной интеграции с SVN добавление новых файлов в проект не отслеживается автоматически. Т.е. изменение в файле .csproj зачекинятся, а сами файлы — нет. По каждому файлу нужно кликать правой кнопкой и добавлять его в репозиторий. Техподдержка сообщила, что им известно об этом баге и они исправят его в одном из ближайших обновлений.
- Иногда проект перестает компилироваться. Лечится перезапуском студии.
Visual Studio
Xamarin предлагает возможность вести разработку в Visual Studio после установки специального плагина, который доступен в business-лицензии (на момент выхода статьи — 999$), но есть месяц триала. Плюсы очевидны: вы становитесь разработчиком мобильных приложений, не меняя места дислокации, и можете использовать всю тяжелую артиллерию в лице Resharper и других ваших любимых плагинов. После установки плагина для Visual Studio вам потребуется настроить соединение с вашим Mac, которое будет использовано при запуске проекта на выполнение. Т.е. после запуска, приложение автоматически пересылается на Mac, где компилируется и загружается либо на симулятор либо на устройство, при этом сам процесс процесс отладки, расстановка брейкпоинтов и т.д. будет происходить в Visual Studio.
Вариантов работы в Visual Studio несколько. Либо вы используется виртуальную машину внутри Mac (например Parallels), куда ставите Windows и Visual Studio. Либо используете две разные физические машины, при этом использовать один Mac для нескольких PC-разработчиков затруднительно, т.к. отладка требует манипуляций с симулятором. И последний вариант — использовать виртуальную машину с Mac OS X (так называемый hackintosh). Вполне себе жизнеспособный вариант, хотя и есть некоторые ограничения. Например, в Xcode придется перемещаться по Storyboard только с использованием полос прокрутки, т.к. windows-мышь не очень похожа на настоящую мышь от Mac со всеми вытекающими.
Время горькой правды. С отладкой в Visual Studio периодически возникали проблемы. Самая заметная — это то, что при удаленной сборке приложения, процесс отладки мог отвалиться по таймауту. Хотя, опять же, стоит отдать должное разработчикам — они исправляют ошибки достаточно интенсивно, и вот уже на момент написания этой статьи, процесс отладки стал стабильным. Хотя и стоит заметить, что на текущий момент, времени между запуском приложения и появлением его на экране симулятора при использовании Visual Studio требуется несколько больше, чем при использовании Xamarin Studio на Mac.
Лицензии
На момент написания статьи Xamarin имеет следующие типы лицензий:
- Starter — Бесплатно. Рассчитан скорее для ознакомления, т.к. имеет ограничение на размер приложения (по ощущениям очень не большой, т.к. не компилировались даже некоторые sample-проекты) и на использование сторонних компонентов;
- Indie — 299$ на одно рабочее место. Снимается ограничение на размер приложения. Разработка возможна только в Xamarin Studio;
- Business — 999$ на одно рабочее место. Появляется возможность разработки в Visual Studio и приватная тех. поддержка от инженеров Xamarin;
- Enterprise -1899$ на одно рабочее место. В рамках этой лицензии предоставляется возможность получения Hotfixes (не вижу особого смысла, т.к. обновления и так выходят очень часто), а так же возможность отправить инженерам проект с исходным кодом и сказать «Что-то у меня не получается поменять ширину ячейки в таблице, помогите!». Плюс ряд не слишком полезных, на мой взгляд, опций.
Заключение
На текущий момент технология Xamarin является серьезным инструментом для решения сложных задач в области разработки мобильных приложений. Несмотря на это, команда разработчиков не останавливается и продолжает его активное развитие и улучшение. За последние два месяца заметны серьезные улучшения в общей стабильности продукта. На мой взгляд у технологии большое будущее и с каждым днем число разработчиков, использующих ее в качестве основного фреймворка для разработки будет неуклонно расти. Однако довольно высокая стоимость лицензии может стать препятствием для использования на пути indie-разработчиков. В целом свой опыт работы с данным фреймворком считаю положительным и продолжу его использование.
Сравнение Xamarin с нативными iOS/Android и гибридными разработками
В последнее время многие разработчики приложений склонны соглашаться с тем, что Xamarin может считаться нативным инструментом разработки. В самом деле, существует мнение, что «все, что можно сделать в приложении iOS с использованием Objective-C или Swift, и все, что можно сделать в приложении Android с помощью Java, можно сделать и на языке C # при помощи Xamarin».
Тем не менее существует много подводных камней в соперничестве нативной платформы и платформы Xamarin. Итак, давайте сравним Xamarin с нативными инструментами разработки и разработкой гибридных платформ (Ionic, PhoneGap/Cordova).
Один стек, одна кодовая база (C#, .Net framework + нативные библиотеки)
Разные стеки для каждой платформы
Один стек, одна кодовая база (JavaScript, HTML5, CCS)
Совместное использование кода
Да, до 96% с использованием Xamarin.Forms
Нет, разные кодовые базы
UI/UX (User Interface/User Expierence)
Возможна полная настройка UI для каждой платформы
Только платформо-зависимые UI
Общий UI для всех платформ (ограниченные возможности настройки)
Хорошая, близкая к родной
Возможности аппаратных средств
Высокие. Xamrin использует платформо-
и поддерживает связь с нативными библиотеками
Высокие. Нативные инструменты имеют полную поддержку для возможностей системы OOTB
Средние. Возможности могут быть доступны через сторонние API и плагины, хотя есть некоторые риски из-за низкого качества и ненадежности большинства из этих инструментов
TTM (время выхода на рынок)
С Xamarin.Forms TTM происходит быстро из-за ограниченной настройки и расширенного обмена кодами.
Xamarin,iOS и Xamarin.Android требуют больше времени по мере того, как увеличивается количество пользовательского кода.
TTM для нативных приложений Android или iOS может быть таким же, что и для Xamarin.Forms или гибридных инструментов. Тем не менее создание приложений для множества платформ может потребовать от вас либо продлить время выхода на рынок, либо увеличить количество заинтересованных разработчиков
Благодаря единой кодовой базе и минимальной настройке, гибридные решения быстрей выходят на рынок. Эти инструменты используются даже для макетирования концептуальных проектов
Есть ли альтернатива Xamarin сегодня?
Гибридные инструменты мобильной разработки развиваются довольно быстро, но им по-прежнему не хватает производительности и собственных возможностей, которые предлагает Xamarin. При этом затраты остаются сопоставимиыми. Если рассматривать два подхода (гибридный и Xamarin), то самая популярная дилемма — это Xamarin против Ionic и Xamarin против React. Однако React Native теряет популярность из-за ряда ограничений в базовых технологиях (стек веб-технологий).
Тем не менее существует мобильный инструмент разработки на базе JavaScript, который превосходит гибридные решения, по крайней мере, с точки зрения UI. Речь идет о NativeScript. Этот кроссплатформенный фреймворк с открытым исходным кодом при поддержке Telerik и при помощи единой базы кода позволяет вам реализовывать нативный UI и подключаться к родным API для лучшего использования мобильных устройств. Его главное отличие заключается в том, что он использует разметку XML, которая компилируется не в веб-браузере HTML, а в нативных эквивалентах Android и iOS.
Этот подход заполняет пробелы между нативными и гибридными разработками, и его методы похожи на то, что делает Xamarin. Основное различие между этими двумя инструментами заключается в языке программирования. Поэтому сравнение Xamarin и NativeScript, должно стать предметом более подробных исследований.
В то же время обсуждения преимуществ и недостатков Xamarin и нативных разработок Android/iOS кажутся более сложными: оба варианта доказывают, что они ценны с точки зрения качества и производительности. Поэтому выбор обычно зависит от типа приложения, которое вы хотите создать.
Советы по использованию Xamarin
При сравнении всех за и против нетрудно прийти к выводу, что перечисленные недостатки могут нанести ущерб разработке. Большинство владельцев бизнеса выбирают платформу Xamarin, так как это сокращает время выхода на рынок (Time-To-Market) и инженерных затрат за счет совместного использования кода и использования единого стека технологий.
Основываясь на опыте нашей команды, можно заключить, что лучшим вариантом использования Xamarin является разработка мобильных приложений для бизнеса. Со стандартным интерфейсом, который охватывает 90% проектов, логическое ядро продукта можно легко сделать общим на всех платформах.
В случае создания приложений со сложным интерфейсом, количество общего кода кардинально уменьшается. Таким образом, кроссплатформенная разработка Xamarin теряет своё главное преимущество и может сравняться по затратам с отдельными нативными решениями для каждой целевой платформы. Но это не делает приложения на Xamarin менне качественными, просто несколько увеличивает трудозатраты. И если вы ищете альтернативу платформе Xamarin для создания кроссплатформенных мобильных приложений, вы, скорее всего, разочаруетесь. Так, наиболее широко используемыми кроссплатформенными мобильными инструментами для разработки являются PhoneGap/Apache Cordova, Ionic Framework, Appcelerator/Titanium, а они, в первую очередь, опираются на веб-технологии, такие как HTML5 или JavaScript. Именно поэтому ни один из этих инструментов не может иметь такой же уровень производительности и нативные функциональные возможности, какие нам предлагает платформа Xamarin.
Возможности и преимущества Xamarin
Xamarin – фреймворк, предназначенный для разработки кроссплатформенных приложений и позволяющий создавать проекты, ничем не отличающиеся от нативных. В качестве основного языка программирования используется C# в тандеме с .NET. Мобильные приложения разрабатываются для операционных систем Android, IOS, Windows Phone. Также разработка приложений осуществляется для tvOS, watchOS, macOS и Microsoft.
Впервые платформа Xamarin была представлена в 2001 году, существовала как коммерческий проект до момента, пока компания Microsoft не выкупила права на владение.
Принцип работы Xamarin
Разработка на основе Xamarin не требует особых знаний в работе отдельных платформ, что позволяет заниматься созданием приложений даже специалистам среднего уровня. Помимо этого, Xamarin открывает на платформе возможность доступа к пакетам SDK.

Преимущества Xamarin заключаются в том, что платформа обладает большим набором встроенных инструментов и библиотек, позволяющим разработчикам создавать многофункциональные приложения на языке C#. Xamarin полностью основан на технологиях Microsoft, имеет качественную поддержку, стабильную работу и высокую производительность. Для разработки доступно два инструмента: Xamarin.iOS и Xamarin.Android.
Основной плюс Xamarin – возможность создавать код для различных платформ с единой бизнес-логикой, то есть использовать одну наработку для нескольких операционных систем одновременно, что экономит время и финансовые вложения в отличие от полностью нативной разработки, когда для каждой отдельной платформы приходится писать код с нуля. Несмотря на единый код, предоставляется беспрепятственный доступ к сетевым коммуникациям, базам данных. Благодаря этому получается, что кроссплатформенные приложения на базе Xamarin выглядят полностью нативными со стабильным и адаптированным интерфейсом.
Xamarin доступен по лицензии VisualStudio 2013/2015, имеет свой магазин инструментов, который регулярно пополняется как бесплатными, так и платными дополнениями. Но стоит не забывать, что основной набор, необходимый для разработки, предоставляется полностью бесплатно вместе с фреймворком.
Кому подойдет Xamarin?
Разработка приложений на Xamarin подойдет тем, кто планирует создать приложение с широким функционалом и простым интерфейсом, который не будет перегружен сложными элементами. Для элементарных приложений общего назначения целесообразно использовать Xamarin.Forms с ограниченным набором инструментов. На выходе проект получится универсальным для нескольких платформ, будет работать стабильно, а главное – не потребует большого количества затраченного времени и сил.
Если же речь идет о более сложных приложениях, в которых требуется применение большого количества инструментов, то в игру вступают Xamarin.Android и Xamarin.iOS.
Возможности Xamarin
Xamarin, как и все фреймворки, имеет определенную внутреннюю структуру, позволяющую разрабатывать качественные и производительные приложения. Встроенный набор инструментов и библиотек для Xamarin состоит из следующих элементов:
- Библиотека C#, дающая доступ к SDK (комплект для разработки программного обеспечения) для операционной системы IOS.
- Библиотека C#, дающая доступ к SDK для операционной системы Android.
- Компилятор C# для создания исполняемого файла Out.exe.
- .NET Framework – поддержка веб-служб и приложений Windows.
- Инструменты IDE (интегрированная среда разработки).
Важно отметить, что все вышеперечисленные элементы доступны полностью бесплатно, поставляются одним набором, без необходимости отдельной установки.
Преимущества Xamarin
Большинство разработчиков в качестве основы выбирают инструменты, позволяющие создавать качественные нативные приложения, это: Objective-C, Swift, Java. Однако существуют и другие достойные инструменты, Xamarin – один из них. Платформа используется многими крупными компаниями, например GitHub. Выбор в сторону Xamarin связан с доступностью и большим функционалом платформы, чем не могут похвастаться некоторые конкуренты.
Стек технологий единого типа
Возможность создания всех приложений на основе Visual Studio благодаря полной интеграции, а треть готового кода использовать в дальнейших разработках. Плюс Xamarin – работа на основе языков C# и .NET Framework, что позволяет создавать мобильные приложения абсолютно для любой платформы. Инструменты для кроссплатформенной разработки являются встроенной частью интегрированной среды разработки, дополнительные затраты не требуются.
Нативная производительность
Приложения, разработанные на Xamarin, можно расценивать как нативные. Это является главным отличием платформы от остальных гибридных решений, которые базируются на веб-технологиях. Показатели производительности ничем не отличаются от приложений, разработанных на основе Java, Objective-C и т. д.
Доступно применение Test Cloud совместно с Test Recorder для автоматического поиска проблемных участков в пользовательском интерфейсе и производительности. Данная услуга предоставляется за отдельную плату.
Возможность выбирать приоритеты
На платформе представлено два типа разработки: Forms и Native. Первый тип дает возможность создания примитивных приложений, имеет урезанный набор инструментов, использует до 95% общего кода и общий UI, что максимально ускоряет процесс разработки. Второй – расширенный вариант для приложений с требовательным функционалом, с третью переиспользования кода, отдельным UI для каждой платформы и высокой производительностью.
Хорошая совместимость с оборудованием
С использованием плагинов и различных API, проблемы совместимости с оборудованием сводятся к нулю. Платформу можно сочетать с библиотеками для нативных приложений с учетом конкретной операционной системы. Это преимущество Xamarin имеет ценность для многих разработчиков, так как иногда требуется помощь дополнительных узконаправленных инструментов, которых нет в стандартном наборе платформы.
Широкий набор инструментов для разработки
Платформа имеет собственный набор инструментов, который поставляется бесплатно: IDE, Xamarin SDK, Xamarin Test Cloud (тестирование), Hockeyapp and Xamarin.Insights (аналитика). Таким образом, в большинстве случаев не требуется дополнительная интеграция с другими инструментами, что экономит время, а в некоторых случаях и деньги.
Нативные UI
При помощи платформозависимых элементов UI можно создавать качественный интерфейс. Для разработки интерфейса с максимальным набором возможностей необходимо обращаться к Xamarin.iOS и Xamarin.Android.
Поддержка Open Source
Open Source – программное обеспечение для конечного пользователя, позволяющее получать открытый исходный код. Это дает возможность дорабатывать и изменять приложения под свои параметры без нарушения авторских прав. Данная функция стала доступна пользователям после 2016 года, когда компания Microsoft приобрела права на владение платформой.
Xamarin SDK входит в список открытых инструментов Visual Studio, доступен под лицензией MIT (второе название – лицензия X11) – свободное и открытое ПО для всех пользователей без ограничений. Данное решение избавляет от дополнительных трат на лицензию, что является неоспоримым преимуществом.
Стабильная работа и простая поддержка
Xamarin является кроссплатформенной площадкой, что позволяет создавать приложения сразу для нескольких операционных систем, которые имеют общую бизнес-логику. Альтернативным решением для общего кода может стать Xamarin.iOS и Xamarin.Android.
Качественная документация
Вместе с Xamarin поставляется подробная документация с практическими примерами, инструкциями, расписанными пошагово с учетом мельчайших деталей. Это дает возможность разработчикам, которые впервые пользуются платформой, получить качественную базовую подготовку без использования сторонних интернет-ресурсов.
Минусы Xamarin
Маленький штат специалистов
Несмотря на регулярные нововведения в Xamarin, штат специалистов не столь велик, как хотелось бы. Среди всех специалистов в сфере разработки мобильных приложений, разработчики Xamarin занимают около 10% от общей численности, что является довольно низким показателем.
В противовес небольшому штату можно поставить высокий уровень подготовки специалистов, а также регулярное повышение квалификации и проверку знаний. Для этого компанией Microsoft создано отдельное учебное учреждение с названием Xamarin University.
Долгое ожидание обновлений
После выхода обновлений со стороны Android или IOS, внедрение изменений необходимо ожидать от разработчиков Xamarin некоторое время. Хотя служба поддержки и заявляет, что обновления обеспечиваются в тот же день, но на практике это не всегда так, что может стать проблемой для специалистов, разрабатывающих приложения на данной платформе.
Сложности интеграции со сторонними ресурсами
Бывают случаи, когда возникают проблемы с интеграцией со сторонними ресурсами, хотя большинство инструментов и библиотек заявляют о полной поддержке нативных технологий. Полную интеграцию с Xamarin ни один производитель не может гарантировать, поэтому лучше использовать встроенные элементы платформы.
Доступ с ограничениями к библиотекам Open Source
В нативной разработке используется большое количество технологий с открытым исходным кодом. В Xamarin набор компонентов ограничен самой платформой. Среди инструментов и библиотек доступно большое количество основных элементов интерфейса: графики, диаграммы, темы и многое другое. Помимо этого, доступна функция встроенной обработки платежей, Push-уведомлений, стриминга и т. д.
Обязательны базовые знания нативных языков программирования
При разработке с применением Xamarin.iOS и Xamarin.Android требуются хотя бы базовые знания нативных технологий, так как в таком случае для каждой платформы часть кода пишется индивидуально, как в случае с полностью нативным методом создания приложений.
Это не будет проблемой для разработчиков, ранее занимавшихся созданием проектов для Android или IOS с применением полностью нативного способа разработки, а вот новичкам, которые не сталкивались с подобным ранее, может быть сложно.
Внушительный размер приложений
Основной минус фреймворка, отталкивающий некоторых разработчиков. Даже при создании несложных приложений их вес может быть в несколько раз больше стандартных нативных. Это вынуждает проводить дополнительную оптимизацию приложений, чтобы они на выходе имели приемлемый вес. Подобный нюанс требует дополнительных временных и финансовых затрат, что не всегда выгодно. Но даже несмотря на это, все остальные преимущества платформы с лихвой перекрывают такой хоть важный, но не критичный недостаток.
Эффективность Xamarin
Платформа обладает большим встроенным функционалом, за который не нужно дополнительно платить. На его основе можно разрабатывать масштабные проекты с высоким уровнем производительности, при этом сохранять кроссплатформенность внутри и нативность снаружи. Получается, что готовое приложение сразу доступно для использования на нескольких платформах, но сохраняет нативность, позволяющую прекрасно адаптироваться под каждое отдельное устройство без сбоев и проблем в интерфейсе.
Из этого можно сделать вывод, что Xamarin обладает высоким уровнем эффективности, которая может полностью удовлетворить все потребности разработчиков.
Оглавление
- Принцип работы Xamarin
- Кому подойдет Xamarin?
- Возможности Xamarin
- Преимущества Xamarin
- Минусы Xamarin
- Эффективность Xamarin