Нативные соединения. Почему нативные приложения лучше гибридных? Скорость разработки и снижение затра

Примерно 2 года назад я захотел приобрести микрофон. Как обычно, перед покупкой я посмотрел несколько обзоров наиболее популярных моделей, узнал о тех характеристиках, которые отличают микрофоны, и зашел на сайт магазина, где собирался приобрести аппарат. Мой выбор пал на модель М1 (дабы исключить обвинения в рекламе и продакт-плейсменте заменим название микрофона). Эта модель была в двух комплектациях: обычный микрофон и вариант с USB-подключением, который стоил дороже. Кроме этого, эти две вариации ничем не отличались. Хорошо, берем деньги и идем в магазин. В магазине на витрине лежали обе модели. Я выловил девушку-консультанта и попросил показать понравившийся мне микрофон. «А не хотите взять эту модель?», — спросила девушка, показывая на более дорогой вариант с USB. «Разве она чем-то лучше? Именно в плане звука?» Девушка подумала немного: «Да, конечно лучше!». Мой совет: не верьте продавцам!

Но кому же верить? Когда мы хотим купить товар или услугу, мы общаемся именно с продавцами, которые, к сожалению, не являются экспертами в данном вопросе. На мой взгляд, выход в этой ситуации один. Взять все в свои руки и самому, хотя бы поверхностно, разобраться в интересующем Вас вопросе или найти профессионала в в данной области и узнать его мнение. Давайте так и сделаем. Вопрос, в котором мы будем разбираться звучит так: «Что лучше — нативные или гибридные приложения для мобильных платформ?».

Гибриды против натуралов

Чтобы с чего-то начать, давайте прибегнем к проверенному и надежному способу - загуглим интересующую нас проблему. Гугл выдает десятки статей, написанных словно под копирку. Различного рода блогеры, программисты, менеджеры, рекламщики, мамы рекламщиков, бабушки менеджеров и прочие люди, которые «отлично» разбираются в этом вопросе, пытаются интересно, индивидуально и с юмором донести до нас следующие вещи:

  1. Существуют чистые веб-приложения, которые выглядят почти как нативные. Например, app.ft.com . Их следует отделять от гибридных.
  2. Чистые веб-приложения без сети не работают.
  3. Интересное наблюдение: контент чистых веб-приложений легче искать. Просто вбейте интересующий вас запрос в поисковике и, если Google вас любит, пользователь увидит именно ваш сайт на первой странице поисковой выдачи.
  4. Еще одно интересное наблюдение: гибридные и нативные приложения должны соответствовать определенным правилам, для того чтобы их можно было опубликовать в AppStore или GooglePlay. С другой стороны, вы вполне можете запилить свой уютненький сайт-приложение с чернухой и вырвиглазным дизайном, и вам слова никто не скажет.
  5. Трудозатраты при написании гибридных приложений меньше, в сравнении с нативными, так как весь код пишется сразу на все платформы.
  6. Да и разработчиков нужно меньше. Просто найдем пару крепких парней, которые знают HTML и JavaScript. Они нам все и напишут. А то ищи всяких Java, С#, С++, Objective-C разработчиков и потом еще всей этой ораве деньги плати.

  7. Поддержка гибридных приложений обходится дешевле, так как, опять же, вроде как код один для всех платформ. Меняем в одном месте — и готово.
  8. Нативные приложения работают гораздо быстрее гибридных и веб-приложений.
  9. Нативное приложение может работать со всеми компонентами устройства, тогда как у гибридных и веб приложений этот доступ ограничен. Например, доступ к камере в нативных приложениях — это нечто само собой разумеющееся. А вот чтобы гибрид вашей камерой пофоткал — это нужно извернуться.>
  10. При разработке нативных приложений мы получаем оригинальный UI для каждой платформы. Гибридные и веб этого не могут.

Срываем покровы

Казалось бы, теперь мы знаем, чем отличаются гибридные и нативные приложения. На этом можно спокойно закончить статью и заняться делом — идти писать код. Но нет! Мы же помним: «Не верьте продавцам!». А большая часть людей, которые писали все эти пункты - именно продавцы, в той или иной форме. Так что, разбираемся дальше.

Веб-приложения

Сама идея сайта, который выглядит как приложение, — это, конечно, интересно. У этого подхода есть как минусы, так и определенные плюсы. Но есть один большой вопрос: «Зачем?». Представьте, что вы пользователь, не обремененный особыми познаниями в IT-технологиях. Открываете вы какой-то сайт и … О, Боже! У меня открылось приложение! Демоны! Это, наверное, вирус какой-то! Хотя стоп, а почему строка браузера видна? Это сайт что-ли такой? Или все-таки приложение? Хм, в списке установленных его нет. Работает он ужасно медленно. Установлю-ка я лучше нормальное приложение, а не это не пойми что.

В общем, не совсем понятен смысл всей этой мимикрии. Зачем вводить пользователя в заблуждение? Ведь кто-то может поверить, что это — приложение, и ожидать поведения, соответствующего обычному приложению. Хочется привести следующее сравнение: найдем здоровый камень круглой формы и покрасим его так, чтобы он выглядел как футбольный мяч. А потом спросим первого же горе-футболиста со сломанной ногой про его впечатления от нашего оригинального дизайнерского хода.

Гибриды

Так как опыта работы с PhoneGap и с другими фреймворками подобного рода у меня не особо много, то я решил обсудить этот вопрос с нашим JS/HTML разработчиком, который писал программу при помощи фреймворка PhoneGap. Оказывается, на данный момент большая часть описанных проблем решена. На этой страничке переодетый Черный Властелин обещает нам, что теперь реакция на клики будет проходить быстро и безболезненно. Существует вагон и маленькая тележка различных плагинов , которые позволяют получить доступ к различным системам целевого устройства. А если чего и нету, то можно свой плагин написать. И кажется, что вот оно — отличное решение для кросс-платформенной разработки мобильных апп! Но давайте задумаемся поглубже над этой проблемой.

Что это за волшебные пилюли — плагины, которые решают все проблемы? Может, это какая-то магия? К сожалению, магии в нашем мире нет. По крайней мере, в IT. Плагины — это JavaScript обертки над нативным кодом Android или iOS. То есть, по сути, PhoneGap — это GUI, который на самом деле является веб-приложением, выполняемым в WebView. Логическая часть программы, выполняющаяся при помощи плагинов, которые на самом деле являются вызовами нативного кода через JavaScript, взаимодействует с устройством. Теперь, зная составляющие фонгап приложения, мы можем порассуждать о том, как все это будет работать.

  1. Что ты знаешь о боли? WebView для Android версии 4.3 ужасно тормозит, когда требуется показать что-то чуть более сложное, чем текстовую инфу. В версии 4.4 движком для WebView стал Chromium, так что, возможно, это немного исправит ситуацию. В целом, для всех фонгаперов и иже с ними это означает боль и страдание при попытке запустить приложение на Android. На iOS ситуация с этим намного лучше, так как движок на сафари работает получше.
  2. — Простите, вы женщина? — Я буду кем ты захочешь, малыш. В зависимости от девайса, для интерфейса приложения могут применяться разные стили. Это, конечно, не плохо, но логики дизайна не меняет. Есть кнопка Назад» на iOS - значит, будет она и на Android. И не важно, что она там никому не нужна. Еще один пример - Actionbar. На iOS он традиционно находится внизу экрана, на Android — в верхней части экрана. В приложении на PhoneGap у вас Actiobar не будет менять положение в зависимости от девайса, он будет просто выглядеть по-разному. И еще один момент: каждая OC имеет определенные особенности. Например, анимация. Посмотрите на iOS и Android. Анимация переходов между экранами. Она разная! Гибридные приложения не смогут воспроизвести эти особенности.
  3. Разруха не в клозетах, а в головах. Еще один важный фактор, который почему-то никто не учитывает. Разработчики на PhoneGap — это обычно Фронт-енд разработчики. Они понятия не имеют о том, как должен выглядеть интерфейс под Android или iOS, так как не читали стайл-гайды. Они ничего не знают об особенностях платформы, потому что не читали документацию. Но они хорошо умеют делать сайты. Соответственно, вы получите приложение, похожее на сайт. Оно вам надо? Точно надо? Посмотрите на эту картинку? Вы все еще уверены в своем выборе?
  1. Гномики? Это вы? Далее к плагинам. Это просто куски кода, которые решают некоторые задачи. Вы также можете использовать их в нативном приложении. Проблема в том, что зачастую ваше приложение должно решать задачи, которые чуть-чуть, самую малость, отличаются от тех, что решают эти куски кода. То есть, их нужно будет менять, но кто это будет делать? Ваш разработчик знает только JavaScript и HTML. Еще один тонкий момент - совмещение плагинов от разных разработчиков. Если плагины работают в смежных областях, они вполне могут использовать одни и те же компоненты. За счет этого можно получить интересные побочные эффекты. И последний камень в огород плагинов: некоторые из них не особо популярны и, как следствие, плохо оттестированы. Будьте готовы к тому, что вам самим придется выступить в роли тестировщика.

В общем, что я хочу сказать? Кроссплатформенность в данном случае мнимая, и приложения будут выглядеть странно. Я думаю, гибридные приложения стоит использовать в качестве прототипов, на которых можно оценить реакцию пользователей на вашу идею и получить некоторый фидбек. Для продакшн-версии лучше все-таки использовать нативные приложения. Эти рассуждения актуальны для всех гибридов, работающих на связке HTML/JS.

Нативные

Про нативные ничего особо писать не буду. Тут и так все понятно. Быстро работают, хорошо выглядят, широкие возможности кастомизации. И стоят они соответствующе. Хотя первые три пункта актуальны, только если вы не наняли команду крепких профессионалов с семилетним опытом работы из Нью-Дели.

Тру кроссплатформенность

На мой взгляд, едиственный фреймворк, который может действительно позволить вам написать кроссплатформенное мобильное приложение в данный момент — это С++ Qt. Этот фреймворк генерит нативный Android код с использованием Android NDK. Поэтому производительность должна быть на уровне кода, написанного программистом при помощи Android SDK, а для фрагментов, использующих тяжелые расчеты еще и выше — за счет NDK. Qt — это качественная, протестированная библиотека. Это означает, что вы не будете в процессе ловить какие-то левые баги. В случае какой-либо проблемы, вы можете взглянуть на исходники Qt. Это, действительно, очень нужная возможность для разработчиков. В некоторых случаях это единственный способ побороть баг. Для того, чтобы получить программу для целевой платформы (Android или iOS), вам нужно просто перекомпилировать исходники. Хотя, насколько я знаю, иногда все-таки придется писать нативный код для платформы, т. к. не все возможности доступны через библотеки Qt. Надеюсь, это вскоре будет исправлено.

Но есть и минусы. Для продакшн-разработки вам придетcя приобрести лицензию Qt — что, соответственно, стоит денег. Для начинающих разработчиков это серьезная проблема. К тому же, на данный момент, Qt для мобильной разработки все еще сыроват. Ждем следующих релизов.

Вывод

На данный момент не существует средства, которое можно было бы с чистой совестью назвать настоящей кросплатформенной средой для разработки мобильных приложений . Возможно, в будущем, это место займет Qt, но на данный момент оно вакантно. Для проверки своей идеи посредством разработки прототипа, вы вполне можете использовать различные JS/HTML фреймворки, но я бы не советовал их применять для разработки сложных продакшн-приложений. В этой сфере разработки альтернативы нативным приложениям в данный момент нет.


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

Нативные приложения рассчитаны на параметры и свойства конкретной платформы (мобильной ОС, связанной с нею экосистемы и технических характеристик самого мобильного устройства) и задействует все возможности аппаратной платформы, которые нужны для работы с приложением - от камеры и модуля GPS до акселерометра, управлением жестами и других аппаратно поддерживаемых свойств конкретного смартфона или планшета. Кроме того, нативное приложение, раработанное в студии, можно получить как готовый продукт и разместить его в магазине мобильных приложений (таком как Google Play или Apple App Store).

Нативное приложение также использует систему уведомлений каждого конкретного устройства, поддерживает Push-уведомления и может работать в оффлайн-режиме.

А что создает большинство онлайн-конструкторов?

Мы опубликовали , но его скорее можно назвать списком пробных инструментов (чтобы посмотреть, как приложение будет выглядеть «в жизни»), а не полноценным решением для тех, кто хочет создать приложение с нуля.

В онлайн-конструкторе создается не нативное, а веб-приложение , которое не является программным продуктом в классическом смысле, по сути это - специальный веб-сайт, которые выглядит и действует как нативное приложение, но по сути таковым не является. Как правило для его работы нужен установленный и настроенный браузер мобильного устройства с выходом в интернет. Самое веб-приложение создано на основе использования HTML5. Отчасти это и объясняет растущую популярность веб-приложений (а также тот факт, что новая мобильная ОС Tizen от Samsung и некоторые модификации Android используют веб-приложения с этой технологией).

Такое веб-приложение подходит не всем проектам (в частности, если СМИ и новостные проекты с блогами могут довольствоваться возможностями HTML5, то для интернет-магазинов и высоконагруженных сайтов подобное решение не подходит).

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

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

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

Но и здесь есть свои недостатки, которые как правило заметны в дизайне приложений: нативные «фишки» одной платформы могут оказаться некорректно работающими на другой и наоборот. В итоге получается, что даже гибридное приложение не лишено недостатков web-app.

Что стоит выбрать?

У каждого типа приложений есть свои преимущества и недостатки, приведем только наиболее существенные:

Доступ к возможностям устройства:
У нативных приложений есть полный доступ к аппаратной платформе, а у веб-приложений таких возможностей нет. Так что если собираетесь использовать возможности камеры, геолокацию, передачу данных по беспроводной связи, то вам подойдет нативное, а не адаптивное приложение.

Работа без доступа к интернету:
Нативное приложение - ваш выбор, если важно, чтобы оно работало без подключения к интернету в каком-либо виде. Веб-приложения зависят от интернет-подключения и от кэширования в браузере.

Возможность поиска информации и самого приложения:
С поиском по контенту лучше справляются веб-приложения, но если у вас планируется поиск по содержимому приложения без доступа в интернет - то придется делать либо гибридное приложение, либо нативное.

Скорость работы: Быстрее всего работают нативные приложения. В 2012 году Марк Цукерберг заявил, что наибольшей ошибкой его социальной сети стал запуск веб-приложения, а не разработка нативного решения (до того времени Facebook использовал гибридное приложение, где основная часть контента была доступна только при подключении к интернету и основывалась на HTML; с 2012 года его заменили на нативное). Всё дело в скорости отклика .

Процесс установки:
Если нативное и гибридное приложения надо устанавливать на свое устройство и давать разрешение на доступ к определенным компонентам программной и аппаратной платформы, то веб-приложение по сути «устанавливается» простым добавлением закладки в мобильный браузер.

Управление приложением и его обслуживание: Нативное приложение после каждого обновления надо повторно размещать в магазине приложений, в тов время как в веб-приложении по сути обновляется страница и контент, «упакованный» в виде своеобразного мобильного сайта.

Привязка к конкретной платформе: Поскольку разные браузеры могут поддерживать разные версии HTML5 независимо от типа аппаратной платформы или установленной мобильной ОС, то для тех, кто хочет «отвязаться» от платформы, выбором станут веб-приложения или гибридные приложения. Если отдельная разработка под каждую отдельную платформу вас не пугает, то можете сделать ставку на нативное приложение.

Работа с контентом, процедура добавления в магазин приложений и дополнительные платежи:
Нативные и гибридные приложения проходят специальную процедуру утверждения после добавления их в магазин приложений. Кроме того, на них могут накладываться определенные ограничения в силу правил и внутренней политики App Store и Google Play (особенно если речь идет о «взрослом» контенте, азартных играх, тематике алкоголя или подобных темах).

Кроме того, нативные приложения, которые продают платную подписку в рамках приложений, добавленных в App Store, должны делиться отчислениями с Apple. Соответственно, ценообразование и бюджеты в случае нативных приложений надо корректировать с учетом суммы этих отчислений.

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

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

Хотите заказать нативное приложение? Отправляйте заявку с темой «Разработка приложения» на наш email - и мы свяжемся с вами в течение 24 часов и уточним всем детали для дальнейшего обсуждения.

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

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

Интересно! Согласно статистике от Flurry Analytics 90% всего времени за телефоном мы проводим именно в приложениях.

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

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

ГИБРИДНЫЕ И НАТИВНЫЕ ПРИЛОЖЕНИЯ

Итак, чем же отличаются эти два типа приложений друг от друга?

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

Для написания нативного приложения для iOS будет использоваться Swift или Objective-C. Для нативных Android приложений подойдут Java или Kotlin.

Однако согласно статистике от VisionMobile, 47% всех нативных iOS приложений и 42% всех нативных Android приложений на самом деле также используют HTML5.

А вот и пример нативного приложения:

Известное во всем мире приложение для электронной торговли Bounce было написано нашими разработчиками на языках Swift для iOS и Java для Android.

Приложение доступно в Apple Store и Google Play .

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

Познакомиться с гибридами вы можете на примере другого нашего приложения, распространенного на западном рынке, – LASIK для онлайн поиска хирургов и записи на прием.

Приложение доступно в Apple Store и Google Play .

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

ПЛЮСЫ ГИБРИДНЫХ ПРИЛОЖЕНИЙ

  • Экономия . Если вы не готовы опустошить свой кошелек в погоне за идеальным приложением, а хотите получить простое приложение по доступной цене, тогда гибрид – ваш вариант. Только подумайте, сколько вы сэкономите, создав одно приложение для двух платформ сразу!

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

МИНУСЫ ГИБРИДНЫХ ПРИЛОЖЕНИЙ

  • Непрактичность . Даже хорошо проработанное гибридное приложение может быстро устареть. Прогресс не стоит на месте, и владельцы приложений стараются шагать в ногу с ним. Как только появляются новые технологии, каждый из владельцев старается как можно скорее добавить диковинную функцию и в свое приложение. К несчастью гибридов, потребуется от 3 до 6 месяцев, чтобы изменить фреймворк и добавить в него новый функционал. Только после этого разработчики смогут усовершенствовать и ваше приложение тоже. В нативных же приложениях нововведения можно добавлять сразу после их анонсирования.

Маловероятно, что наше приложение будет пользоваться спросом у юзеров, если оно получится некачественным и нестабильным:

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

  • Низкая скорость . Зачастую гибридные приложения представляют собой веб-страницы, которые не особо расторопны, например, в скроллинге тяжелого контента: картинок, анимаций и т.д.

Скроллинг – вертикальная или горизонтальная прокрутка страницы.

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

Компиляция – процесс перевода высокоуровневого языка программирования (PHP, Java, JavaScript) в машинный.

  • Трудности дизайна . Если вы хотите, чтобы вид вашего приложения соответствовал профессиональному и хорошо-проработанному системному дизайну каждой из платформ, будь то iOS или Android, вам придется разрабатывать дизайн для обеих операционных систем по отдельности. iOS и Android приложения имеют свои собственные, уникальные стандарты дизайна, а так как гибридное приложение не отвечает им, его вид придется «подгонять» под соответствующие рамки. Получается, по окончании работы вы получите только одно приложение, а времени и денег вы потратили как на два.

  • Незащищенность исходного кода . Одним из серьезных минусов гибридных приложений является их небезопасность. В то время как нативное приложение может быть зашифровано перед выходом в официальный магазин, гибридное приложение остается “голым”. Поскольку в основе многих гибридный приложений лежит HTML страница, то ничего не стоит посмотреть ее исходный код и понять, как работает само приложение.Как минимум, ваш код может быть украден. Как максимум – взломщик может использовать ваше приложение в своих корыстных целях, например, получить приватную информацию и данные о приложении.

ПЛЮСЫ НАТИВНЫХ ПРИЛОЖЕНИЙ

  • Высокое качество . Узко-специализирующийся разработчик нативных приложений напишет вам чистый, уникальный код. Многолетний опыт разработки и четкие стандарты нативных iOS & Android приложений помогут сделать качественный продукт с широким функционалом и снизить риск появления багов практически до минимума.
  • Низкая вероятность отказа в размещении в App & Play Stores . Поскольку нативное приложение изначально отвечает стандартным требованиям определенной платформы, маловероятно, что вы столкнетесь с какими-либо проблемами при запуске вашего приложения в официальных магазинах App Store и Play Store.
  • 100% использование UX дизайна . Современные пользователи избалованы яркими, детально-проработанными интерфейсами, и простые, стандартизированные приложения навряд ли заинтересуют их. Именно в нативной разработке UX дизайн используется на все 100%, что позволяет сделать качественное и интересное приложение. В гибридном приложении вы получите стандартизированный для двух платформ интерфейс.

  • Разнообразие инструментов для разработки . Благодаря многолетнему опыту разработки нативных приложений появилось огромное количество различных фреймворков, шаблонов и других проверенных инструментов, которые позволят сделать ваше приложение уникальным, индивидуальным и стабильным.
  • Большое сообщество разработчиков . Ну и конечно же, разрабатывая нативное приложение, вы навряд ли столкнетесь с проблемой, которую никто не решал до вас. А это значит, что вам не придется тратить лишнее время на поиск подходящего решения, а можно будет обратиться к опыту других программистов.

МИНУСЫ НАТИВНЫХ ПРИЛОЖЕНИЙ

  • Стоимость . Как говорится, бесплатный сыр только в мышеловке. Нативное приложение – это уникальный, качественный продукт, для создания которого требуется немало времени и, конечно же, высококвалифицированный разработчик с многолетним опытом. Поэтому и стоит такое приложение соответственно.

ИНТЕРЕСНЫЙ ФАКТ

Вы удивитесь, когда узнаете, что на самом деле разработать нативное iOS приложение стоит дешевле гибрида . Не верите? Смотрите сами!

При разработке нативного приложения у вас есть огромное разнообразие инструментов, входящих в SDK той или иной платформы. То есть все, что вам нужно – использовать эти инструменты в своем нативном приложении.

В случае с гибридом – вам остается надеяться, что на тот или иной нативный инструмент существует адаптация на базе фреймворка, выбранного для гибридной разработки.

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

Исходя из этого, получается, что, создать одно нативное iOS приложение дешевле, чем одно гибридное iOS приложение .

Если же сравнивать разработку гибридного приложения и двух нативных, то цена гибрида будет ниже, как и ожидалось, ведь в гибридном приложении backend и frontend подходят для двух платформ сразу.

В нативном приложении нужно разрабатывать два отдельных frontend’а, отвечающих общепринятым стандартам каждой из платформ.
Отсюда такие расценки:

HYBRID iOS APP – $11.5K
HYBRID iOS + Android APPS
$12.5K

NATIVE iOS APP – $10K
NATIVE iOS + Android APPS
$18K

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

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

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

КАКОЕ ПРИЛОЖЕНИЕ ВЫБРАТЬ?

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

ИТАК ,

Выбирайте гибридное приложение , если вы хотите получить:

  • простое приложение
  • приложение для двух платформ по бюджетной цене
  • 1 приложение с возможностью быстрого выхода на два рынка (ios/Android)

Выбирайте нативное приложение , если вам нужно:

  • профессиональное приложение, соответствующее всем стандартам выбранной платформы
  • сложное приложение с широким функционалом
  • приложение с высокой скоростью работы

Теперь, когда вы знаете о нативных и гибридных приложениях все и даже больше, вы сможете с легкостью сделать правильный выбор.

Воплотите все ваши самые смелые мечты и идеи в реальность вместе с .

Гибридная и нативная разработки: сравним?


Гибридные приложения или нативные (от англ. native – родной)? Это один из самых главных вопросов, который возникает у заказчика программного обеспечения, когда ему требуется выпустить новое приложение для пользования потребителем.

Давайте начнем с определения каждого из них. Гибридное приложение, как это и звучит, сочетает в себе элементы как родного (приложение работает без каких - либо внешней поддержки) и Web (приложение работает с помощью браузера и, как правило, написано на HTML5) приложений. Приложение заимствует кросс-совместимые веб - технологии, такие как HTML5, CSS и Javascript и использует часть собственного кода для большей приспособленности к пользовательскому устройству. Гибридные приложения размещаются внутри собственного приложения где находится WebView мобильной платформы (браузер в комплекте внутри мобильного приложения, если можно так выразиться). Проще говоря, гибрид приложение представляет собой веб-сайт, который упакован в оригинальную обертку. Примеры брендов, использующих гибридные приложения: Amazon App Store, Gmail и Yelp.

Нативное приложение разработано для определенной мобильной операционной системы (Objective-C /Swift для iOS или Java для Android) и оптимизировано в полной мере использовать все возможности платформы (камера, список контактов, GPS и т. д.). По существу, нативное приложение реализуется с помощью собственных инструментов платформы. Примеры таких приложений включают Старбак, Home Depot, Facebook (хотя с последним некоторые не согласны).

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

Стоимость разработки

Гибридные приложения разрабатываются для многих платформ. Идентичный HTML-код может быть применен и повторно использован на более чем одной мобильной операционной системе. Проще говоря, когда вы заказываете разработку гибридного приложения, ваш конечный продукт будет работать сразу на большинстве современных смартфонов и планшетов. Таким образом, ваши затраты на разработку значительно снижаются.

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

Время

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

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

Обновления

Гибридная разработка позволяет обновлять контент непосредственно из Интернета. Если нет какого-то резкого изменения функциональности, то обновления получаются практически незаметные. Многие из этих обновлений могут быть установлены не через App Store. Это делает исправление ошибок и добавление обновлений более эффективным, и заставляет пользователя меньше раздражаться. Тем не менее, есть одно предостережение, связанное с веб-обновлениями.

Может возникнуть ситуация, когда приложение ориентировано на особенности мобильной платформы, которая больше не работает, потому что плагин устарел. Когда это происходит, вы сталкиваетесь с дилеммой – необходимо либо удалить функцию приложения или нанять программиста, чтобы написать плагин. Тот же сценарий применяется при выходе новых версий мобильной платформы. Если вы хотите, чтобы ваше приложение могло использовать новые возможности, вы снова даете разработчику задание создать плагин для размещения обновления, или можете подождать, пока сообщество создаст.

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

Пользователи

С нативного приложения можно легко использовать широкий функционал мобильного устройства: камеру, микрофон, GPS и многое другое. При этом кривая обучения пользователя невелика.

Родные приложения также обычно разрабатываются для использования, когда нет Wi - Fi или возможности получения данных извне. Гибрид может также работать в автономном режиме, у вас просто будет немного меньше вариантов.

Стоит отметить, что скорость отклика при прочих равных условиях обычно выше у нативных приложений. Это часто ощущается пользователем в игровой среде, которая зависит от графической производительности. Это проявляется даже тогда, когда гибридное приложение использует HTML5 Canvas и WebGL. Разница в скорости составляет доли секунды – вам решать, критично это или нет.

Безопасность

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

Родные же приложения используют собственные функции безопасности без плагинов. Таким образом, для приложений, где требуется высокий уровень безопасности, нативная разработка может быть более предпочтительной. Для всех других потребностей бизнес - приложений, разработка гибридов предлагает вполне удовлетворительный уровень безопасности.

Кросс-платформенная совместимость

Здесь все просто - В этом гибридные приложения выигрывают: нативное приложение, разработанное для iPhone, не будет работать на Android, и наоборот.

Вывод

Вы ищете однозначный ответ? Единственное, что я могу сказать вам так это то, что лучшая форма разрабатываемого приложения это та, которая соответствует вашим уникальным потребностям. Это будет зависеть от ваших ресурсов и потребностей вашего конечного пользователя. Напомню, что вы всегда можете обратиться за разработкой программы ко мне; я могу создать приложение на Java или C#. Есть также опыт разработки под J2ME и Android.

Смартфоны продолжают отвоевывать все больше места под солнцем не только как инструмент потребления фотографий котиков и ххх-роликов, но и в качестве рабочего инструмента. Поэтому и спрос на мобильную разработку растет. Принято считать, что тру и кул - это Objective-C/Swift для iOS и Java/Kotlin для Android. Спору нет, тру и кул, но существует большое количество реальных сценариев, в которых использование кросс-платформенных фреймворков более предпочтительно в сравнении с нативными инструментами.

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

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

Зачем нужны кросс-платформенные инструменты?

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

Нативные инструменты = предоставляются владельцем экосистемы.

Все остальные признаки «нативности» ВТОРИЧНЫ - поведение и интерфейс приложений, доступ к возможностям ОС, производительность и прочее.

К тому же практически всегда оказывалось, что нативные инструменты несовместимы друг с другом не только на уровне языков разработки, принятых соглашений и архитектур, но и на уровне механизмов работы с операционной системой и библиотеками. В результате для реализации одних и тех же алгоритмов и интерфейсов требовалось написать приложение для нескольких сред на разных языках программирования, а потом его поддерживать из расчета «одна команда на платформу». При этом возможности и внешний вид приложений на разных платформах практически всегда идентичны на 90%. Сравни ради интереса реализацию любимых программ для iOS и Android.

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

Для того чтобы решить обе эти проблемы, на рынке уже давно появились инструменты кросс-платформенной разработки (не только mobile), предлагающие:

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

Так как языков программирования (и сред) сейчас наплодилось очень много (и специалистов, владеющих этими языками), то и инструментов для кросс-платформенной разработки существует изрядное количество. Мы в качестве примера остановимся на популярных в наших краях PhoneGap, Xamarin, React Native и Qt .


Теперь можно поговорить и о мифах.

Миф 1. Магия

Самый частый миф, будоражащий умы начинающих девелоперов, связан с верой в сверхалгоритмы (и сверхпрограммистов, их создавших), которые волшебным образом превращают кросс-платформенные приложения в нативные. Что-то в духе «преобразования кода JavaScript в Swift и дальнейшая компиляция уже Swift-приложения». Этот миф подогревают и сами разработчики кросс-платформенных инструментов, обещая на выходе создание «нативных приложений». И не то чтобы кто-то здесь лукавил, но богатая фантазия и непонимание базовых механизмов иногда наводят разработчиков на мысли о шаманских приемах.

Главный принцип, лежащий в основе кросс-платформенных решений, - разделение кода на две части:

  • кросс-платформенную , живущую в виртуальном окружении и имеющую ограниченный доступ к возможностям целевой платформы через специальный мост;
  • нативную , которая обеспечивает инициализацию приложения, управление жизненным циклом ключевых объектов и имеет полный доступ к системным API.


Для того чтобы связывать между собой мир «нативный» и мир «кросс-платформенный», необходимо использовать специальный мост (bridge) , именно он и определяет возможности и ограничения кросс-платформенных фреймворков.

При использовании bridge производительность всегда снижается за счет преобразования данных между «мирами», а также конвертации вызовов API и библиотек.

Итак, все кросс-платформенные приложения обязаны иметь нативную часть, иначе операционная система просто не сможет их запустить. Поэтому давай рассмотрим подробнее, какие системные API и механизмы предоставляются самими iOS, Android и Windows. Переходим к следующему мифу.

Миф 2. Ненативно!

Итак, у нас есть кросс-платформенная часть приложения, живущая в виртуальном окружении и взаимодействующая с операционной системой через инфраструктуру фреймворка и мост.

Все операционные системы: iOS, Android и Windows UWP - предоставляют доступ к следующим подсистемам (наборы системных API):

  • WebView (встроенный в приложение веб-браузер) используется в гибридных приложениях на базе PhoneGap и фактически выступает средой выполнения локального веб-сайта;
  • JavaScript-движки используются в React Native и аналогах для быстрого выполнения JS-кода и обмена данными между Native и JS;
  • OpenGL ES (или DirectX) используется в игровых движках и приложениях на Qt/QML или аналогах для отрисовки интерфейса;
  • UI-подсистема отвечает за нативный пользовательский интерфейс приложения, что актуально для React Native и Xamarin.


Кросс-платформенные приложения имеют нативную часть и такой же полный доступ к системным API, что и «нативные» приложения. Разница в том, что вызов системного метода идет через мост и инфраструктуру фреймворка:

WebView - приложение живет в своем веб-браузере по аналогии с одностраничным веб-сайтом. Нет доступа к нативным контролам (кнопки, списки и прочее), все основано на HTML/CSS/JavaScript. С другой стороны, веб-разработчик почувствует себя как рыба в воде.

JavaScript-движки стали популярны относительно недавно, так как в iOS подобный механизм был добавлен только в версии 7.0. Из особенностей стоит учитывать необходимость сериализации в JSON сложных структур данных, передаваемых между средами JavaScript и Native. Если коротко описать подобный класс решений, то в JavaScript-среде выполняется JS-код, управляющий нативным приложением.

OpenGL ES и DirectX являются подсистемами низкого уровня и используются для отрисовки пользовательского интерфейса в играх и, например, Qt/QML. То есть при использовании OpenGL/DirectX разработчики сами рисуют контролы и анимации, которые могут быть лишь похожи на нативные. С другой стороны, это подсистема низкого уровня с очень высокой производительностью, поэтому она используется и в кросс-платформенных игровых движках.

Все кросс-платформенные приложения имеют нативную часть, а следовательно, потенциально такой же полный доступ к системным API, что и «нативные». Также кросс-платформенные приложения собираются и упаковываются «нативными» инструментами в «нативные» установочные пакеты. Ключевой вопрос - как организовано взаимодействие между кросс-платформенной частью и нативной. Например, внутри WebView или с помощью Open GL ES / DirectX нет возможности создать пользовательский интерфейс с полностью нативным look’n’feel, но при этом есть полный доступ к GPS, Push-уведомлениям и другой функциональности. А код на JavaScript или C# вполне свободно может управлять нативным приложением и его поведением, обеспечивая полностью нативный look’n’feel.

Если резюмировать - то да, «ненативно» с точки зрения используемых инструментов разработки (не от Apple, Google). Но приложение может быть полностью нативным с точки зрения доступа к системным API и обеспечивать полностью нативный внешний вид и поведение. А мы движемся к следующему мифу.

Миф 3. Костыль на костыле

Здесь стоит понимать, что нативные API по умолчанию костылями не считаются (хотя и здесь есть разные мнения), поэтому все негодование направлено на кросс-платформенную часть. Очевидно, что исполняющую среду (например, WebView, JavaScript-движок или Mono) костылем тоже назвать сложно - взрослые зрелые решения с длительной историей.

Похоже, что костылем называют то, как кросс-платформенная часть интегрируется с нативной. Чтобы лучше понять, как работают различные фреймворки, мы на примере PhoneGap, Xamarin, Qt и React Native рассмотрим те механизмы операционных систем, которые используются для связывания кросс-платформенной и «нативной» частей.

Начнем мы с PhoneGap. Ниже представлена верхнеуровневая архитектура приложения на базе этого фреймворка.



Приложение на PhoneGap - это по факту нативное приложение, которое в качестве единственного UI-контрола отображает WebView. Именно через него и идет взаимодействие с нативной частью. Все стандартные WebView в iOS, Android и Windows UWP поддерживают возможность добавить свои нативные обработчики для JS-свойств и методов. При этом JS-код живет в своей изолированной среде и ничего не знает о нативной части - просто дергает нужные JS-методы или меняет нужные JS-свойства. Все внутри стандартного вебовского DOM, в который просто добавляются новые элементы, связанные с нативной реализацией.



При создании приложений на React Native разработчику практически всегда будет необходимо реализовывать нативную часть на Objective-C, Java или C#, а само управление нативным приложением будет идти из JavaScript. По факту JavaScript-движок - это элемент WebView, который доступен отдельно. Взаимодействие идет через такой же JS-мост, как и в случае с PhoneGap. Однако в React Native JS-код управляет не вебовским DOM-деревом, а нативным приложением.

Необходимо учитывать, что из-за ограничений iOS (нет возможности реализовать JIT) код JavaScript на лету интерпретируется, а не компилируется. В целом это не особо сказывается на производительности в реальных приложениях, но помнить об этом стоит.

Теперь рассмотрим классический Xamarin.iOS и Xamarin.Android, так как Xamarin.Forms (поддерживающий Windows UWP) - это надстройка над ними.



Xamarin использует библиотеку Mono для взаимодействия с целевой операционной системой, которая позволяет вызывать нативный код с помощью механизма P/Invoke . Он же задействуется и для общения с нативными API в iOS/Android. То есть для всех публичных нативных API-методов создаются обертки на C#, которые, в свою очередь, вызывают системные API. Таким образом, из Xamarin-приложения можно обращаться ко всем системным API.

И в завершение рассмотрим Qt, так как о нем появляется много вопросов от опытных разработчиков.



Qt - «вещь в себе», в этом есть и плюсы, и ограничения. Библиотеки Qt просто подключаются к системным API на C++, которые есть во всех операционных системах. Для отрисовки пользовательского интерфейса используются механизмы низкого уровня, но свой графический движок, поддерживающий стилизации «под нативку». При этом на Android приходится обращаться к Java API через специальный мост (JNI bridge), а для Windows UWP использовать конвертер вызовов Open GL ES в DirectX, так как Open GL недоступен для UWP.

Подведем итог: все кросс-платформенные фреймворки используют стандартные нативные возможности операционных систем, являются зрелыми, создаются опытными командами и сообществом open source при поддержке гигантов IT-индустрии. И наконец, пришло время для самого «сильного» аргумента.

Миф 4. Медленно

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

Напомним, что особенность кросс-платформенных приложений заключается в параллельном существовании двух миров, связанных мостом:

  • PhoneGap: HTML/JS и Native Java / Objective-C / C#;
  • React Native: JS и Native Java / Objective-C / C#;
  • Xamarin: Mono и Native Java / Objective-C;
  • Qt: С++ и Native Java / Objective-C.

Таким образом, при сравнении производительности надо учитывать скорость работы:

  • кросс-платформенной части;
  • нативной части;
  • моста.

Если набрать в поисковике, например, react native vs swift performance, то можно посмотреть множество различных тестов, и во многих из них отмечается, что производительность резко падает при активном использовании моста, включая активное манипулирование UI из кросс-платформенного кода. Для Xamarin ситуация выглядит таким же образом - кросс-платформенная часть очень быстра и сопоставима с нативной в обработке данных, однако при использовании моста может падать производительность. Qt вообще работает на уровне С++, который быстр сам по себе. Если же рассматривать решения на базе PhoneGap, то здесь производительность будет сильно зависеть от WebView, но все же не следует активно менять UI в JavaScript-коде или проводить научные вычисления.

Медленно? Да, возможны падения производительности при неумелом взаимодействии с операционной системой через мост. Однако сами по себе кросс-платформенные миры такие же быстрые, как и нативные.

Статьи по теме: