Кроссплатформенная и нативная разработка

Что такое кроссплатформенная и нативная разработка

Под нативной (родной) разработкой подразумевается использование оригинальных языков и инструментов разработки той или иной мобильной операционной системы. Для iOS приложения создаются в среде разработки XCode на языках Objective-C, Swift, C и С++. Для создания приложений под Android используется среда Android Studio и язык Java. Каждая среда разработки содержит целый комплекс утилит для написания кода, проектирования интерфейса, отладки, профилирования (мониторинга) и сборки приложений. И среда, и соответствующий набор утилит созданы специально под каждую мобильную операционную систему и являются максимально удобными и мощными средствами разработки мобильных приложений.

Кроссплатформенная разработка подразумевает использование специальных утилит (фреймворков) для создания приложения на основе семейства языков JavaScript. Вся структура и логика приложения создается с помощью таких инструментов (PhoneGap, Titanium, Xamarin, Cordova и др.) на JavaScript, а затем оборачивается в нативный запускающий элемент, т.е. интегрируется в базовый проект для XCode или Android Studio, что позволяет создавать сборки проекта с одной и той же логикой под несколько операционных систем сразу.

Ближайшая аналогия в случае с персональными компьютерами: все приложения (MS Word, Skype, почтовые приложения, календарь) — это нативно разработанные приложения под настольную операционную систему; все, что происходит в браузере (сайты, онлайн-редакторы текста и графики, социальные сети, чаты, форумы) — это кроссплатформенные технологии.

 

Плюсы кроссплатформенной разработки

Кроссплатформенный подход к разработке имеет следующие положительные моменты:

  1. Требуется меньше ресурсов для реализации приложения сразу под несколько платформ. В этом собственно и суть кроссплатформенного подхода — один и тот же код работает и на iOS, и на Android. Программистов, занимающихся проектом, нужно ровно в два раза меньше. Дизайнер делает только один набор графики. Все это снижает количество рабочих часов и как следствие бюджет проекта.
  2. Меньшее время на разработку. За счет отсутствия уникальных элементов интерфейса и более простых технологий время на создание простых продуктов как правило меньше.
  3. Упрощенный цикл обновления продукта. Если в проект нужно что-то добавить или исправить какую-то ошибку, это делается сразу для всех платформ, на которых распространяется проект.
  4. Возможность использования мобильной версии сайта. Большинство кроссплатформенных решений используют семейство JavaScript языков, поэтому если у вас уже есть мобильная версия сайта, значительная часть кода и материалов может быть использована в приложении без изменений.
  5. Использование единой логики приложения. Заложенная логика в работу приложения будет работать гарантированно одинаково для всех платформ. Довольно часто это может являться и минусом из-за разной архитектуры операционных систем (яркий пример — кнопка Назад в навигации между экранами: в Android предусмотрена аппаратная кнопка Back для этих целей, в iOS — движение пальцем от левой части экрана или же наличие кнопки в левой части навигационной панели; если кнопку не делать вовсе, пользователи iOS не смогут вернуться назад; если сделать, но не на том месте и выглядящую нестандартно — пользователям iOS будет непривычно и неудобно; если сделать как в iOS, будет непривычно пользователям Android), однако написанная и отлаженная один раз логика содержит потенциально меньшее количество ошибок и расхождений в своей работе: вам не придется проделывать двойную и тройную работу по поиску проблем на каждой платформе.

 

Плюсы нативной разработки

Разработка на родных технологиях и языках под iOS и Android имеет следующие положительные моменты:

  1. Скорость работы приложения. Т.к. приложение создается с использованием оригинальных инструментов разработки (XCode, Android Studio), получаемый в результате компиляции проекта код является оптимальным для данной платформы. Приложение получает полную аппаратную поддержку устройства (обработка тех же изображений осуществляется отдельным процессором, специально для этого предназначенным — GPU), используется многопоточность для реализации сложных задачи и загрузки контента в фоне, в процессе разработки программисты могут измерять скорость работы всех участков кода и при необходимости их оптимизировать, в их распоряжении так же есть инструменты по мониторингу использования оперативной памяти, поиску возможных утечек и т.д.
  2. Гибкость в реализации. В отличие от ограничений в построении интерфейса и сложности визуальных эффектов, накладываемых фреймворками для кроссплатформенной сборки проектов, в случае нативной разработки реализовать можно все, на что способны технологии той или иной мобильной операционной системы.
  3. Использование последних технологий, зависимости от кроссплатформенных фреймворков. Новый программный и аппаратный функционал, предоставленный компаниями-производителями устройства и операционной системы, становится доступен для реализации сразу после выпуска соответствующих обновлений. К примеру, в iOS 9 заложена возможность поиска внутри приложений: в каждом из них должен быть реализован специальный метод, который возвращает результаты по определенному поисковому запросу. В результате для тех приложений, в которых этот функционал реализован, доступна возможность поиска контента через системный раздел поиска в iOS, там же, где осуществляется поиск приложений, контактов, событий и прочей информации. В случае с кроссплатформенной разработкой для реализации подобного функционала придется ждать не только релиза iOS 9, но и обновления соответствующего фреймворка, причем когда появится поддержка тех или иных новых возможностей и появится ли вообще, предсказать невозможно.
  4. Легкость и качество тестирования. Помимо упомянутом в п. 1 инструментария для контроля использования приложением аппаратных ресурсов устройства в распоряжении разработчиков и тестировщиков есть целых комплекс технологий. Во-первых, опять же, все параметры системы в процессе работы приложения контролируются автоматически. Если приложение стало использовать больше памяти чем это ожидается или больше ресурсов центрального процессора, это не пройдет незамеченным. Во-вторых, возможности в широком применении юнит-тестов — автоматического тестирования практически каждого метода в приложении. Если какая-то часть приложения перестала работать корректно вследствие каких-либо изменений кода, новая версия просто не соберется, а программист сразу увидит причину. В-третьих, доступны широкие возможности в интеграции систем удаленного мониторинга ошибок: в каждый нативный проект встраивается соответствующий функционал, который позволяет увидеть ошибку и ее причину, возникшую на устройстве любого пользователя.
  5. Полная поддержка со стороны магазинов приложений App Store и Google Play. Обе компании, и Apple, и Google, заинтересованы в том, чтобы пользователи получали максимально положительный опыт при использовании приложений на соответствующих платформах, который возможен на текущий момент. Это означает что приложение должно выглядеть максимально качественно (т.е. если у экрана высокое разрешение, а изображения расплывчаты, в App Store приложение просто не пропустят), должно работать настолько быстро, насколько это возможно (если приложение отображает небольшой список элементов за 20-30 секунд — его так же не пропустят), и вообще все должно быть красиво и удобно. Если какие-то из этих параметров слишком низки или вообще не выполнены, приложение не пропустят в магазин. Если же они не на высоте, чего добиться с кроссплатформенными технологиями крайне сложно, а часто и невозможно в принципе, то ваше приложение никогда не будет рассмотрено соответствующими компаниями для размещения в специальных рекламных разделах (Featured). Среди приложений, находящихся во Featured-разделах и App Store, и Google Play, нет ни одного, сделанного с помощью кроссплатформенных технологий, за исключением игровых проектов, в которых интерфейс не является системным.

 

Выводы

С технической точки зрения, с точки зрения качества создаваемого интерфейса, нативная разработка имеет гораздо больше плюсов. Однако есть сферы, в которых кроссплатформенные технологии являются оправданными: это игровой сектор и тестовые проекты.

Современные игры пишутся в подавляющем большинстве на кроссплатформенных технологиях, это сильно ускоряет разработку без ущерба для качества, т.к. в этом случае используются специальные графические фреймворки (самый популярный — Unity 3D). Если какой то проект нужно сделать быстро для проведения каких-либо тестов, при этом ситуация требует работы проекта именно на нескольких платформах одновременно, в этом случае кроссплатформенная реализация может быть оптимальным решением.

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