Cross platform development

Xamarin – один из наиболее популярных инструментов кроссплатформенной разработки приложений для iOS, Android, tvOS, watchOS, macOS и Microsoft (UWP-приложения) с использованием С# и .NET. В 2019-2020 годах он стабильно занимал место среди пяти самых используемых разработчиками фреймворков.

На него в своей разработке полагались такие известные компании как Bosch, Siemens, Slack, Pinterest, UPS, Outback Steakhouse, Aggreko и другие. В этой статье мы поделимся нашим опытом разработки приложения с помощью Xamarin, расскажем, почему стоит его использовать и чем в нашем случае он был полезен.

5 причин выбрать Xamarin для кроссплатформенной разработки
Рис. 1 Кроссплатформенные мобильные фреймворки, используемые разработчиками программного обеспечения во всем мире в 2019 и 2020 годах (Источник: Statista)

Кейс: старое приложение на новой платформе

Вопросы миграции устаревших приложений неоднократно рассматривались в нашем блоге (например, тут или тут). В случаях, когда обновление или внедрение новых функций такого приложения обходится дорого и трудозатратно, если отсутствует документация или эксперты, знающие код, правильным решением будет миграция старого приложения на новый стек технологий. По сути, это сводится к написанию приложения с нуля с применением логики уже существующего приложения.

Приложение заказчика было написано на LabView и к моменту старта нашего совместного проекта существовало уже более 10 лет. За это время документация по проекту устарела, не осталось специалистов поддержки, а главное, приложение было невыгодно портировать на новые операционные системы. Встал вопрос о миграции интерфейсов и бизнес-логики на новую кодовую базу.

Основными требованиями для разработки нового приложения стали:

  • поддержка iOS и Windows с полным воспроизведением интерфейса старого приложения;
  • сжатые сроки разработки;
  • простота поддержки и масштабируемость.

Хорошим решением поставленных задач стал Xamarin и далее я расскажу, почему.

Причина 1: Нативная мультиплатформенность

Xamarin предоставляет полный доступ к нативным API и инструментам, используемым на платформах Android, iOS и Windows. Следовательно, он может обеспечить практически нативный дизайн и производительность для каждого приложения. Этот факт позволяет отдать предпочтение решениям на основе Xamarin, а не его гибридным конкурентам.

Причина 2. Сжатые сроки разработки

Задача миграции приложения всегда идет рука об руку с требованием о сжатых сроках, и Xamarin полностью отвечает этому требованию. Основные его преимущества:

  • использование одной кодовой базы на обе операционные системы (iOS и Windows) сокращает срок разработки;
  • использование C# и .NET, которые просты в изучении и использовании, увеличивает скорость разработки;
  • для начала работы достаточно установки Visual Studio.

Согласно опросам, четверть разработчиков пользуется именно этим IDE для отладки и работы с кодом.

Xamarin – мощный и удобный инструмент разработки. Создать в нем прототип приложения можно буквально за один день, а тестирование производить без реальных устройств, в Visual Studio, используя симуляцию. Это значительно экономит время.

Причина 3. Простота поддержки и быстрое обучение инженерной команды

Руководств по использования Xamarin написано уже немало. В них приводятся лучшие практики, что позволяет быстро обучить новых инженеров и легко ввести их в проект. Также есть Xamarin University – специализированный портал удаленного обучения для тех, кто только знакомится с пакетом. Он создан для инженеров со знанием C#, а также для всех, кто имеет не слишком большой опыт программирования. Ресурс предоставляет все необходимые знания инженерам, использующим продукты на основе Xamarin.

Помимо этого, Xamarin упрощает обслуживание приложений: достаточно внести изменения или сделать обновления в исходном файле, и они будут применены к приложениям iOS, Android и Windows автоматически. Однако, следует учитывать, что это работает только для приложений, использующих Xamarin.Forms.

Причина 4. Возможность выбора приоритетов

В Xamarin есть два подхода к разработке – Forms и Native.

5 причин выбрать Xamarin для кроссплатформенной разработки
Рис. 2 Достоинства и недостатки подходов к разработке в Xamarin

По рисунку 2 можно определить важные критерии для разработки приложения в каждом конкретном случае.

Для нашего приложения производительность не играет важной роли, поэтому, руководствуясь остальными критериями, мы выбрали подход Xamarin.Forms.

Итак, Xamarin.Forms лучше всего выбрать для:

  • MVP (Minimum Viable Product) приложений
  • Простых приложений с небольшим функционалом

Xamarin.Native будет полезен при разработке:

  • Высоконагруженных систем
  • Приложений, которые интегрированы с другими сервисами

Приложений, в которых пользовательский интерфейс более важен, чем переиспользование кода.

Причина 5. Простота внедрения кроссплатформенности

Кроссплатформенность действительно легко и удобно достигается средствами Xamarin. Вы пишете общий код для iOS, Android и Windows, а Xamarin сам разбирается, как связать ваш код с нативным для каждой платформы API. Кроме того, есть возможность писать не только общий, но и платформозависимый код, и Xamarin тоже поймет, что и где вызывать. Одним из главных механизмов достижения кроссплатформенности является наличие «умных» сервисов, способных осуществлять кросс-зависимые вызовы, то есть обращаться к той или иной реализации определенного функционала в зависимости от платформы. Платформозависимый код можно писать не только на C#, но и добавлять его в xml-разметку. В нашем случае iOS-версия была урезанной и часть графического интерфейса нужно было скрыть, размеры некоторых элементов также зависели от платформы.

Для большей наглядности приведем небольшой пример. В нашем проекте мы использовали библиотеку классов, предоставленную заказчиком, которая была написана на C++. Назовем ее MedicalLib. MedicalLib собиралась в две разные сборки в зависимости от платформы (статическая MedicalLib.a для iOS и динамическая MedicalLib.dll для Windows). Кроме того, она имела различные wrapper-классы (классы-переходники) для вызова неуправляемого кода. Основной проект (общая кодовая база) содержал описание API MedicalLib (интерфейс), а платформозависимые проекты для iOS и Windows – конкретные реализации этого интерфейса и ссылки на сборки MedicalLib.a и MedicalLib.dll соответственно. Из основного кода мы вызывали те или иные функции абстракции, не задумываясь, как именно они реализованы. Механизмы Xamarin.Forms, понимая, на какой платформе запущено приложение, вызывали необходимую реализацию и подгружали конкретную сборку.

Примерно так это можно изобразить схематично:

5 причин выбрать Xamarin для кроссплатформенной разработки
Рис. 3 Вызов платформозависимых функций в Xamarin.Forms

Недостатки Xamarin

Необходимо также кратко упомянуть и недостатки Xamarin, которые мы принимали во внимание, делая выбор в пользу этого инструмента.

Во-первых, больший размер написанного приложения влияет на скорость загрузки и количество дискового пространства, которое оно занимает на устройстве. В нашем случае это было не критично, так как приложение было сделано для внутреннего использования и не было предназначено для широкого использования.

Во-вторых, небольшие задержки обновлений для последних версий Android и iOS. Для нашего приложения были прописаны поддерживаемые версии операционных систем, а конечные пользователи не могли скачивать и устанавливать обновления без разрешения администратора организации, что давало нам время на проверку и исправление дефектов в новой версии ОС.

В-третьих, сообщество разработчиков Xamarin является довольно молодым и несмотря на наличие Xamarin University, найти разработчика с реальным опытом Xamarin может быть непросто.

Наконец, поскольку код пользовательского интерфейса является платформозависимым, Xamarin будет нецелесообразно использовать для создания комплексной анимации, разработки богатых кастомных пользовательских интерфейсов и при создании игр.

В заключение

Большинство лиц, принимающих решения, выбирают для разработки кроссплатформенных приложений платформу Xamarin, так как она сокращает время вывода на рынок продукта и затраты на разработку за счет переиспользования кода и использования одного технологического стека. Опыт нашей команды показывает, что Xamarin дает возможность быстро получить MVP при минимальных инженерных издержках и проверить приложение на жизнеспособность.

В случае приложений со сложным пользовательским интерфейсом и сильной зависимостью от системы объем общего кода резко уменьшается. Таким образом, кроссплатформенная разработка Xamarin теряет свои основные преимущества и может быть равна по времени и стоимости нативным решениям. Однако за счет использования мощного IDE все равно оставляет за собой ряд преимуществ.