- Создание мобильных приложений
- Создание первого приложения
- Знакомство с разработкой мобильных приложений
- Что такое Xamarin?
- Жизненный цикл разработки мобильного ПО
- Создание кроссплатформенных приложений
- Знакомство с Visual Studio для Mac
- Разработка мобильных приложений Xamarin
- Xamarin.Forms
- Android
- Функции Xamarin Enterprise
- профилировщик
- Inspector
- Достоинства и недостатки Xamarin
- 1. Простота освоения
- 2. Снижение расходов на проект
- 3. Возможность создавать пользовательские интерфейсы, подобные «родным»
- 4. Оптимальные условия для тестирования
- 5. Идеальная совместимость с устройствами «Интернета вещей»
- 6. Качественная документация и большое сообщество
- 7. Безупречная интеграция с Microsoft Windows
- Недостатки Xamarin
- Подробно о Xamarin
- Что это?
- Давай подробнее
- Это все хорошо, но давай ближе к разработке
- Что с ограничениями?
- Разработка UI
- Переносимость кода
- Сторонние компоненты
- Документация и комьюнити
- Среда разработки
- Xamarin Studio
- Visual Studio
- Лицензии
- Заключение
Создание мобильных приложений
Прежде чем начать, ознакомьтесь с требованиями к системе и инструкциями по установке, чтобы все было готово к работе.
Создание первого приложения
Если вы хотите создать приложение, используя для разработки интерфейса собственные технологии платформы (например, Android XML или Xcode Storyboards), воспользуйтесь следующими руководствами для конкретных платформ:
Знакомство с разработкой мобильных приложений
Дополнительные сведения о принципах функционирования Xamarin и начале работы с проектами по разработке мобильных приложений см. в приведенных ниже руководствах:
Что такое Xamarin?
В этом документе содержатся общие сведения о работе Xamarin и описываются руководства по началу работы с Xamarin.Forms, Android и iOS.
Жизненный цикл разработки мобильного ПО
В этой статье рассматривается жизненный цикл разработки мобильных приложений и приводятся некоторые аспекты, которые следует учитывать при создании проектов для мобильных приложений. Разработчики, желающие быстро приступить к работе, могут пропустить это руководство сейчас и вернуться к нему позднее, чтобы получить более полное представление о разработке мобильных приложений.
Создание кроссплатформенных приложений
Используя Xamarin и помня о некоторых аспектах при проектировании и разработке приложений для мобильных устройств, можно реализовать эффективный общий доступ к коду на нескольких мобильных платформах, сократить время выхода на рынок, использовать существующий потенциал, обеспечить потребности заказчиков в отношении мобильного доступа и уменьшить сложности, связанные с использованием разных платформ. В этом документе перечислены ключевые рекомендации по реализации этих преимуществ для служебных и офисных приложений.
Знакомство с Visual Studio для Mac
Дополнительные сведения о Visual Studio для Mac, интегрированной среде разработки (IDE) для macOS.
Источник
Разработка мобильных приложений Xamarin
Первоклассная поддержка Xamarin позволяет разрабатывать эффективные собственные интерфейсы для Android, macOS, iOS, tvOS и watchOS. Кроссплатформенные приложения Xamarin.Forms позволяют использовать код пользовательского интерфейса на основе XAML в Android, iOS и macOS без ограничения доступ к встроенной функциональности.
Xamarin.Forms
Горячая перезагрузка XAML для Xamarin.Forms встроена в Visual Studio для Mac начиная с версии 8.3. Если эта функция включена, изменения немедленно отражаются в работающем приложении при сохранении файла.
Чтобы включить Горячую перезагрузку XAML, установите флажок Включить горячую перезагрузку Xamarin в окне Visual Studio > Параметры > Проекты > Горячая перезагрузка Xamarin.
Дополнительные сведения о Горячей перезагрузке см. в руководстве по Горячей перезагрузке XAML для Xamarin.Forms в этой документации.
Android
Visual Studio для Mac имеет собственный диспетчер пакета SDK для Android, предоставляя вам доступ к необходимому SDK для приложения.
Visual Studio для Mac включает собственный конструктор для приложений Android, который работает с файлами .axml из Android и поддерживает визуальное создание пользовательских интерфейсов. Visual Studio для Mac открывает эти файлы в Android Designer, как показано на следующем рисунке:
См. обзор Xamarin.Android Designer для получения дополнительных сведений.
Конструктор iOS полностью интегрирован с Visual Studio для Mac и позволяет визуально редактировать XIB-файлы и файлы раскадровки для создания пользовательских интерфейсов и переходов iOS, tvOS и WatchOS. Весь пользовательский интерфейс можно создавать с помощью перетаскивания между панелью элементов и областью конструктора; при этом предлагается интуитивный подход к обработке событий. Конструктор iOS также поддерживает пользовательские элементы управления с возможностью их отрисовки во время разработки.
Дополнительные сведения об использовании конструктора iOS см. в руководствах по конструктору.
Xamarin включает собственные привязки к API для Mac, позволяющие создавать эффектно выглядящие Mac-приложения.
Дополнительные сведения о написании приложений Mac с помощью Visual Studio для Mac см. в руководствах по Xamarin.Mac.
Функции Xamarin Enterprise
Эти продукты можно использовать только с подпиской Visual Studio Enterprise.
профилировщик
В Xamarin Profiler доступно три инструмента для профилирования. В руководстве Introduction to the Xamarin Profiler (Знакомство с Xamarin Profiler) рассказывается, что измеряют эти инструменты и как они анализируют приложение, а также поясняется значение данных, представленных на каждом экране.
Inspector
Xamarin Inspector предлагает интерактивную консоль C# с пользовательскими инструментами. Ее можно использовать в отладке и диагностике работающих приложений, в качестве средства обучения, инструмента для создания документации и для экспериментов.
Это полнофункциональная консоль C#, которая представляет собой автономное приложение для программирования под различные платформы (Android, iOS, Mac и Windows) и интегрируется с рабочим процессом отладки вашей IDE.
Дополнительные сведения см. в руководстве по Xamarin Inspector.
Источник
Достоинства и недостатки Xamarin
Привет, Хабр! Сегодня расскажем вам о том, что пользователям нравится в Xamarin, нашем инструменте для кросс-платформенной разработки мобильных приложений. Кроме того, затронем и недостатки платформы. Кстати, под катом вы найдете много кода и показательные примеры, а не только текст с перечислением. Присоединяйтесь!
Статья подготовлена нашими партнерами, ребятами из EGO.
Xamarin — удобный набор инструментов для разработки кросс-платформенных мобильных приложений на C# с использованием .NET. Он поддерживает iOS, Android и Windows Phone.
Для разработки приложения на основе Xamarin вам не потребуется досконально знать специфические языки отдельных платформ. Кроме того, при работе с какой-либо платформой у вас будет полный доступ к возможностям ее пакета SDK и встроенным механизмам создания пользовательских интерфейсов.
Таким образом, Xamarin позволяет создавать приложения, которые почти не отличаются от нативных аналогов, а значит, вполне подходят для распространения через официальные магазины (например, Google Play и App Store).
Кроме того, по словам разработчиков Xamarin, готовое решение не будет существенно уступать и в плане производительности.
Рассмотрим составные части Xamarin.
- Xamarin.IOS — библиотека классов C#, предоставляющая разработчикам доступ к пакету SDK для iOS.
- Xamarin.Android — библиотека классов C#, предоставляющая разработчикам доступ к пакету SDK для Android.
- Компилятор C#.
- .NET Framework.
- Инструменты IDE (встроены в Visual Studio для Mac OS и Windows).
В этой статье подробно описаны семь существенных причин использовать Xamarin для кросс-платформенной разработки.
1. Простота освоения
На что в первую очередь следует обращать внимание при выборе платформы? Конечно, на сложность ее освоения. Вряд ли найдется много желающих тратить время на освоение особенностей синтаксиса (например, для достаточно уверенного владения Angular требуется изучать эту платформу как минимум несколько месяцев). Поэтому если создание качественного кода требует чрезвычайно серьезной подготовки, то многим новичкам попросту не удается в полной мере овладеть средой разработки. А вот начать работу с Xamarin совсем просто: вам не придется учить язык Xamarin или что-нибудь в таком духе.
Достаточно знать язык C# с его императивным стилем написания программ, свободно чувствовать себя в среде .NET и изучить несколько классов, связанных с конкретными платформами.
Для создания полностью «родного» приложения для той или иной платформы вам потребуется в достаточной мере владеть языком Java (в случае Android) или Objective-C/Swift (для iOS). В некоторых случаях это может стать серьезным препятствием. Давайте посмотрим, как одна и та же задача, подразумевающая создание строки атрибутов, решается в Objective-C и в C#.
Если вы не используете возможности кросс-платформенной разработки Xamarin, то для создания коммерческого проекта, который обладал бы достаточной производительностью на обеих платформах, может потребоваться применять сразу два разных подхода. А значит, и затраты практически удваиваются.
2. Снижение расходов на проект
Исходя из описанных выше преимуществ можно отметить, что кросс-платформенная разработка с использованием Xamarin требует примерно в 1,5 раза меньше времени (и денег), чем создание отдельного специализированного проекта под каждую платформу.
Конечно, некоторые фрагменты кода (например, служебные компоненты) будут одинаковыми в обеих версиях, а часть других (в частности, бизнес-логика, не использующая специализированные функции пользовательского устройства) потребует лишь незначительных изменений. Однако общая ситуация немного сложнее. Некоторые компоненты вашего приложения неизбежно придется писать с нуля для каждой ОС. При создании и развертывании двух приложений для двух платформ практически всегда необходимо нанимать две команды разработчиков. При использовании Xamarin все гораздо проще:
благодаря не зависящим от платформы интерфейсам API примерно 70% кода будет написано в универсальном формате.
В этом примере класс MainPage использует интерфейс ITextToSpeech для выбора нужной функции на конкретной платформе:
3. Возможность создавать пользовательские интерфейсы, подобные «родным»
Одна из основных причин, по которым разработчики избегают инструментов кросс-платформенной разработки, заключается в том, что такие средства не позволяют пользоваться всем спектром возможностей конкретных сред. В первую очередь это относится к дизайну (Flat Design в iOS, Material Design в Android) и к интеллектуальным возможностям пользовательских устройств (доступ приложения к контактам, камере, данным GPS и т. п.).
Конечное кросс-платформенное решение не будет обладать высокой производительностью (этот недостаток присущ практически всем приложениям, созданным с помощью кросс-платформенных веб-инструментов) и не сможет пользоваться преимуществами конкретных платформ (а это значит, что некоторые возможности, изначально запланированные создателем проекта, могут быть реализованы не полностью).
Однако все иначе при использовании инструментов Xamarin для кросс-платформенной разработки «родных» приложений. В этом случае вы не столкнетесь с вышеописанными проблемами. Разработчикам доступны не только стандартные классы .NET: они могут с легкостью подключить и классы, поддерживаемые конкретной мобильной платформой (они содержатся в библиотеках C# для Xamarin.Android и Xamarin.iOS соответственно). Это значит, что при использовании Xamarin для разработки приложений под iOS и Android в вашем распоряжении будет весь набор возможностей этих платформ. При этом не потребуется использовать сторонние (и обычно платные) инструменты.
4. Оптимальные условия для тестирования
Тестирование продукта, который готовится к выпуску, — задача нетривиальная, особенно когда речь идет о платформе Android. Форматы экранов пользовательских устройств iOS четко определены и известны заранее, а вот устройства Android бывают самыми разными. Если приложение не было протестировано на определенном устройстве, его интерфейс в некоторых случаях может «разъехаться». Создатели Xamarin предложили решение для этой проблемы.
В частности, для пользователей платформы также доступна среда Test Cloud, позволяющая эмулировать более 2000 устройств. Это решение не бесплатно, но затраты на него будут оправданы.
5. Идеальная совместимость с устройствами «Интернета вещей»
Если вы хотите, чтобы ваше приложение получало данные о местоположении пользователя, показания гироскопа, акселерометра или других встроенных датчиков, то Xamarin станет отличным выбором.
Эта среда разработки полностью совместима с устройствами IoT (например, с Estimote), позволяющими получать данные о местоположении, а значит, вам не придется настраивать интеграцию со сторонними решениями (тем более что такой возможности не будет в принципе).
6. Качественная документация и большое сообщество
Для Xamarin доступна отлично организованная документация с практическими примерами, фрагментами кода и пошаговыми инструкциями.
Разумеется, на некоторые вопросы найти ответ в ней не получится. В этом случае вам поможет онлайн-сообщество. Существует два официальных сообщества Xamarin: на официальном сайте платформы и на портале StackOverflow.
Если и здесь вам не удалось получить интересующую информацию (некоторые разработчики жалуются, что эксперты сообществ не очень активны), вы можете обратиться в частную службу технической поддержки, доступную для обладателей бизнес-лицензий Xamarin. Специалисты ответят вам уже через несколько часов и предложат не просто набор стандартных процедур, которые редко помогают полностью устранить проблему, а подробные пошаговые инструкции по решению именно вашей задачи.
7. Безупречная интеграция с Microsoft Windows
Практически в каждой ИТ-компании есть развитая инфраструктура используемого ПО на платформе Windows.
Для всех редакций Visual Studio (для Mac OS и Windows) с весны 2016 года в рамках подписки предоставляется и Xamarin. Если вы уже используете Visual Studio для разработки, вносить дополнительную оплату не потребуется.
Недостатки Xamarin
Мы постарались подробно рассказать о сильных сторонах Xamarin и рассмотрели ряд его очевидных преимуществ. Однако нам бы хотелось сделать этот обзор более объективным, так что обратимся к слабым сторонам решения. На самом деле внимания заслуживает лишь один недостаток: размер приложений, написанных с помощью Xamarin, обычно немного превышает объем нативных аналогов. Тем не менее оптимизация никогда не бывает лишней.
Источник
Подробно о 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`ов, что позволяет писать красивый и компактный код обработчиков с использованием лямбда-выражений:
Да и в целом код, написанный на 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. Достаточно серьезное ограничение, которое может некоторым образом испортить вашу стройную и красивую архитектуру.
Другие ограничения, например, отсутствие поддержки динамической генерации кода, на мой взгляд, не слишком существенны. Подробнее о них можно прочитать здесь для iOS и здесь для Android.
Разработка 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) – Слой пользовательского интерфейса.
Кроссплатформенными являются все слои, расположенные выше Application Layer. Доля переносимого кода достаточно сильно зависит от самого приложения, но, на мой взгляд, она вряд ли может превысить 50-60%. Инженеры Xamarin это понимают, поэтому стремятся к увеличению этой доли. В качестве достижений в решении этой проблемы можно рассматривать библиотеку Xamarin.Mobile. Она предоставляет единый для различных платформ API для работы с камерой, контактами и гео-локацией. Но использование этой библиотеки никак не ограничивает вас в применении платформозависимого API, например, с помощью механизма делегатов.
Сторонние компоненты
У 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
Xamarin Studio — кроссплатформенная IDE, которая работает как на Mac OS X, так и на Windows. На вид эта она выглядит очень простой и дружелюбной, однако за внешней простой скрывается достаточно мощный инструмент, который включил в себя множество фич, привычных нам в Visual Studio и Resharper:
- Приятная подсветка синтаксиса;
- Автодополнение кода (включая возможность одновременного импорта namespaces);
- Удобный универсальный поиск по названиям файлов, типам, членам классов и т.п;
- Развитые возможности навигации по проекту: Быстрый переход к описанию класса, переход к базовому классу, список мест использования класса и т.д.;
- Различные механизмы рефакторинга и быстрая подсказка (как alt+Enter в Resharper);
- Достаточно развитые механизмы дебага, включая слежение, просмотр текущего значения переменной при наведении, визуализацию потоков и аналог Immediate window в VS;
- Встроенная интеграция с системами контроля версий: SVN, Git и TFS (для TFS, правда, нужны сторонние утилиты);
Время горькой правды! В процессе использования открылись и другие интересные особенности. Я использовал Xamarin Studio на Mac, поэтому все нижесказанное относится именно к Mac OS X:
- Горячие клавиши (включая copy-paste) работают только в английской раскладке. Разработчикам известно об этой проблеме. Баг в багтрекере заведен;
- Периодически, при попытке поставить breakpoint студия виснет. Несмотря на наличие механизма автосохранения, это немного расстраивает.
- При использовании встроенной интеграции с SVN добавление новых файлов в проект не отслеживается автоматически. Т.е. изменение в файле .csproj зачекинятся, а сами файлы — нет. По каждому файлу нужно кликать правой кнопкой и добавлять его в репозиторий. Техподдержка сообщила, что им известно об этом баге и они исправят его в одном из ближайших обновлений.
- Иногда проект перестает компилироваться. Лечится перезапуском студии.
Справедливости ради стоит отметить, что обновления для Xamarin Studio на beta-канале выходят очень часто, по моими ощущениям — минимум раз в неделю, а то и раз в день.
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 (не вижу особого смысла, т.к. обновления и так выходят очень часто), а так же возможность отправить инженерам проект с исходным кодом и сказать «Что-то у меня не получается поменять ширину ячейки в таблице, помогите!». Плюс ряд не слишком полезных, на мой взгляд, опций.
Обращаю внимание, что для каждой платформы (iOS, Android) нужна отдельная лицензия. Несмотря на то, что у Business-лицензии написано «per developer» на текущий момент каждая лицензия может быть активирована на 4-ых рабочих станциях и эти рабочие станции можно менять. Т.е. гипотетически одну лицензию могут использовать два разработчика при том, что каждый из них будет использовать для разработки Visual Studio.
Заключение
На текущий момент технология Xamarin является серьезным инструментом для решения сложных задач в области разработки мобильных приложений. Несмотря на это, команда разработчиков не останавливается и продолжает его активное развитие и улучшение. За последние два месяца заметны серьезные улучшения в общей стабильности продукта. На мой взгляд у технологии большое будущее и с каждым днем число разработчиков, использующих ее в качестве основного фреймворка для разработки будет неуклонно расти. Однако довольно высокая стоимость лицензии может стать препятствием для использования на пути indie-разработчиков. В целом свой опыт работы с данным фреймворком считаю положительным и продолжу его использование.
Источник