Чтобы выпустить успешное мобильное приложение в 2010 году, можно было ограничиться iOS-платформой и отложить остальные платформы менее популярные, до лучших времен. Сейчас же игнорировать, скажем, Android, чья аудитория растет в геометрической прогрессии, недальновидно, в связи с чем кроссплатформенные подходы становятся объектом пристального внимания.
Тем не менее, возникает вопрос, что проще и выгоднее: писать универсальный код с последующим портированием в другую среду или разрабатывать отдельные приложения для каждой платформы? В каких случаях кроссплатформенная разработка будет оптимальной? На эти и другие вопросы отвечает Валентин Базаревский, один из ведущих разработчиков компании Itransition.
Нативные или кроссплатформенные приложения?
Основная задача в рамках разработки любого ПО заключается в том, чтобы максимально ускорить сроки выпуска и минимизировать затраты на разработку при сохранении качества. Кроссплатформенная мобильная разработка с использованием инструментов Xamarin, на первый взгляд, полностью решает эти задачи. Но копнув глубже, вы увидите, что Xamarin таит в себе множество подводных камней, о которых следует знать, прежде чем стартовать проект.
На рынке мобильного ПО крепче всего удерживаются те приложения, которые одинаково хорошо работают как минимум на двух платформах – iOS и Android, а желательно и на Windows Phone. Добиться этого можно двумя способами: написать приложение трижды под разные платформы или адаптировать универсальный код к особенностям различных платформ. Для трех разных приложений нужны три команды разработчиков с различными навыками мобильной разработки, а для кроссплатформенного кода потребуется всего одна, но хорошо подготовленная команда.
Какие приложения лучше писать кроссплатформенно?
Выбор способа разработки напрямую зависит от типа приложения. К примеру, интерфейс игр и геолокационных приложений особо не отличается на разных платформах, чего нельзя сказать о бизнес-приложениях, многие элементы которых реализуются согласно нативному интерфейсу каждой платформы.
Объем бизнес-логики, используемой в приложении, так же имеет значение. Для сложной логики лучше подойдет кроссплатформенная разработка, так как она позволит избежать переписывания нетривиальных алгоритмов под различные операционные системы. Суть ее в том, что сначала разрабатывается ядро приложения с базовыми компонентами логики и точками расширения, сочетаемыми со всеми платформами. Затем в отдельном слое создается специфический код родного интерфейса каждой платформы. В результате, приложение содержит в себе единую реализацию бизнес-логики при разном пользовательском интерфейсе. А благодаря наличию родных элементов интерфейса такое приложение внешне ничем не отличается от нативного.
Ядро кроссплатформенного приложения пишется один раз, а в дальнейшем лишь расширяется под различные системы. Конечно, сложная логика и кроссплатформенная архитектура потребуют немалых затрат, но только представьте себе, сколько времени и усилий необходимо для написания трех нативных приложений. Разница ощутима, не правда ли?
Возможно ли повторное использование кода для разных платформ?
Повторное использование кода помогает сократить трудозатраты при разработке сложных систем. Так, если система включает большой объем бизнес-логики, – сложные операции с локальной базой данных, например, – эта функциональность может быть без изменений перенесена с одной платформы на другую. Идеальные источники переносимого кода – это обширные проекты со сложными клиент-серверными операциями: масштабной обработкой и синхронизацией данных между мобильной и серверной базой данных, а также локальными алгоритмами предобработки, фильтрации и сжатия данных. И хотя интерфейс придется дописывать для каждой платформы отдельно, с инструментами Xamarin вы сможете составить до 80% кода из уже существующих компонентов (безусловно, это зависит от функционала конкретного приложения).
Возможно ли совместное использование логики серверной и клиентской частями?
Устоявшимся трендом является использование подхода API-first, который предполагает, что каждый серверный компонент системы предоставляет хорошо документированный и полный интерфейс взаимодействия. Зачастую помимо непосредственно API и документации к нему каждый такой серверный компонент предоставляет и клиентскую библиотеку (необходимую как минимум для интеграционного тестирования компонента). В случае .NET-проектов эта клиентская библиотека при правильном проектировании может быть использована без изменений на мобильных Xamarin-приложениях, таким образом значительно ускоряя процесс разработки.
Как добиться высокой производительности?
Этот вопрос волнует многих разработчиков, поскольку жертвовать производительностью системы ради экономии на этапе разработки недальновидно: пользователи вряд ли будут мириться с медленной работой приложения. В этой ситуации на помощь приходят кроссплатформенные SDK от вышеупомянутого Xamarin), который обеспечивает статическую компиляцию в нативный код, позволяя добиться хорошей производительности даже при сложных сценариях. Другие библиотеки, такие как Marmalade SDK, тоже показывают отличную производительность, но базируются на С++, поэтому требуют очень высокой квалификации команды и не позволяют повторное использование серверного C# кода.
Как насчет сторонних библиотек?
Создавая мобильное приложение, порой не обойтись без подключения сторонних библиотек. Здесь можно пойти двумя путями: внедрить зависимости в существующий код или же создать обертку над функционалом. Кроссплатформенные фреймворки решают эту проблему разными путями и с разной степенью эффективности. Xamarin, например, предусматривает оба подхода.
Как тестировать и поддерживать проект?
Продукты Xamarin поддерживают портируемые библиотеки типа PCL, позволяющие разработчикам использовать привычную серверную инфраструктуру для интеграции, внедрения и контроля качества, как любого другого .NET проекта. Таким образом, разработчики могут проводить модульное и интеграционное тестирование C# кода и применять хорошо зарекомендовавшие себя техники командной разработки, например, совместное владение кодом, командный анализ кода и пр.
Как интегрировать бизнес-приложения в инфраструктуру компании?
Крупные бизнес-проекты, разработанные на базе Xamarin, легко интегрируются с серверной инфраструктурой компании. Поскольку Xamarin основан на open-source реализации платформы .NET, он включает в себя множество традиционных полезных инструментов для полноценного развертывания и интеграции. А в свете последних событий (анонсирование поддержки операционных систем Linux и Mac OS X платформой .NET по умолчанию) будущее Xamarin становится все более многообещающим.
Нужны ли специальные знания мобильной разработки?
Поскольку приложения разрабатываются на С#, разработчики без знания Objective-C и Java могут принимать участие в написании мобильных приложений. Идея крайне проста: бизнес-логика пишется в привычной для .NET-разработчиков Visual Studio, тестируется и проверяется на одном из многочисленных continuous integration серверов, а непосредственным внедрением этой функциональности в мобильное приложение занимается программист, имеющий представление как о .NET, так и о Xamarin. В результате получается полноценное мобильное приложение.
Как углубить знания Xamarin?
На сегодняшний день кроссплатформенная разработка – это молодое, развивающееся направление, которое постоянно дополняется новыми технологиями и идеями. Чтобы писать кроссплатформенно, потребуется не только хорошая подготовка, но и желание отслеживать и осваивать последние новинки. В этом поможет блог Xamarin, а так же конференции и презентации, на которых вы сможете узнать что-то новое в этой перспективной, но пока малоизученной области.
Валентин Базаревский – один из ведущих разработчиков Itransition. В данный момент он работает над диссертацией на соискание степени кандидата наук в БГУИР. В сферу его профессиональных интересов входят .NET, iOS Objective-C, а так же технологии анализа данных в высоконагруженных системах, мобильные платформы (кроссплатформенная и нативная разработка) и машинное обучение.
Высоких конверсий!