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

Краткое описание кроссплатформенных решений

React Native

React Native, платформа, разработанная и поддерживаемая Facebook, используется для кроссплатформенных мобильных приложений на JavaScript. Таким образом, разработчики могут совместно использовать до 70% кода между различными платформами, такими как Android и iOS.

Flutter

Flutter — молодая, но очень многообещающая платформа, уже привлекшая к себе внимание крупных компаний, запустивших свои приложения. Flutter интересна своей простотой, сравнимой с разработкой веб-приложений, и скоростью работы наравне с нативными приложениями. В качестве языка программирования здесь используется Dart, который компилируется в бинарный код. За счет этого достигается скорость выполнения операций, сравнимая с Objective-C и Swift.

Xamarin

Xamarin — это фреймворк для кроссплатформенной разработки мобильных приложений с использованием языка C#. В 2016 году Microsoft купила Xamarin, после чего сделала исходный код Xamarin SDK открытым и включила его в состав IDE Microsoft Visual Studio.

Краткое описание нативных решений для iOS-разработки

Objective-C

Objective-C до недавнего времени был основным для разработки на iOS. Язык Objective-C является надмножеством языка Си, поэтому Си-код полностью понятен компилятору Objective-C. Таким образом, приложение, написанное на Objective-C, может быть очень быстрым. Также в Objective-C есть полноценное ООП (объектно-ориентированное программирование), что позволяет писать программы, которые будут легко масштабироваться в будущем, если понадобится расширить возможности приложения. Но этот язык уже довольно старый: Objective-C был создан в начале 1980-х в компании Stepstone. Однако, Apple – очень прогрессивная компания, поэтому, когда в 2014 она представила новый язык программирования – Swift – это не было неожиданностью.

Swift

Swift – это язык, с помощью которого можно писать приложения для телефонов, десктопных компьютеров, серверов. Компилятор оптимизирован для производительности, а язык оптимизирован для разработки, без компромиссов с одной или другой стороны. Swift уже имеет за плечами годы развития, и он не стоит на месте, а включает в себя всё новые и новые возможности. Когда он только вышел, коммьюнити разделилось на два лагеря: одни считали, что лучше, чем Objective-C, ничего нет, а другие воодушевленно смотрели на Swift и пытались применять его для создания приложений. И теперь, спустя несколько лет развития, можно сказать, что Swift – язык номер один, когда речь идет о разработке приложений на iOS.

Плюсы и минусы кроссплатформенных решений

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

Плюсы:

  • Простота. Можно выбрать между Java Script, C#, Dart в качестве основного языка программирования. С ними может работать большее количество разработчиков, что очень сильно упростит разработку.
  • Скорость и стоимость разработки. Нужна одна команда разработчиков, чтобы написать приложение, которое одинаково выглядит на iOS и Android. Когда нужно быстро создать приложение на обе платформы, это будет очень существенным плюсом.

Минусы:

  • Безопасность. Практически все кроссплатформенные решения имеют открытый исходный код, и любой злоумышленник (программист) может посмотреть его, выявить слабые места и взломать ваше приложение. Также очень важно то, что кроссплатформенное приложение связывается с бэкэндом с помощью обычных HTTP-вызовов, и злоумышленники легко могут перехватить ваши данные и использовать их в своих целях (почитать подробнее об этом можно здесь: https://www.cloudflare.com/learning/ssl/why-is-http-not-secure/).
  • Сложность работы с нативными функциями iOS. Разработчики языка Swift уже встроили в язык полезные модули, с помощью которых можно работать с аудио, видео, камерой телефона, локацией, Bluetooth. При разработке кроссплатформенного приложения работа с этими функциями затруднена. Например, чтобы добавить AR-объект на видео с камеры или демонстрировать экран во время онлайн-звонка, нужно разрабатывать свои дополнительные модули. Из-за этого увеличивается время разработки, и она становится дороже нативной.
  • Скорость работы и отзывчивость интерфейса. Да, когда разрабатывается приложение, в котором отображаются какие-то данные (например, интернет-магазин, новостная лента), то скорость работы кросс-платформенного приложения будет равна нативному, но чаще она будет ниже. А если вы захотите, чтобы приложение поддерживало звонки, видеочаты, дополненную реальность, то оно будет работать еще медленнее по сравнению с нативным. Пользователям не понравится, если во время звонка он не услышит половину из того, о чем говорил собеседник, или если он не сможет ловить своих любимых покемонов в дополненной реальности из-за низкой отзывчивости интерфейса.

Плюсы и минусы нативных решений

Согласно результатам исследования, приведенным в блоге https://armadsen.micro.blog/2019/02/16/how-many-apps.html, в выборке из 79 самых популярных неигровых приложений в App Store, примерно 53% написаны на Swift, а 47% Swift не используют. При этом стоит понимать, что что-то из 47% может использовать Objective-C, который также является нативным языком.

Также в исследовании с сайтa statista.com говорится, что ⅔ всех приложений - нативные (и Android, и iOS). Выясним, почему так.

Плюсы:

  • Учитывание всех особенностей определенной платформы. Несомненно, удобно разрабатывать приложение под две платформы сразу, но каждая из них индивидуальна. Требования к безопасности, дизайну интерфейса приложения и внедрению систем оплат отличаются.
    К примеру, системные элементы у iOS и Android абсолютно разные (пример на картинке), а юзер ожидает увидеть в интерфейсе привычные для платформы элементы.
Нативное или кроссплатформенное приложение?, image #1
  • Скорость работы и отзывчивость интерфейса. Приложения, написанные нативно, работают быстрее. Юзеру намного комфортнее пользоваться приложением, где все анимации плавные, касания кнопок обрабатываются моментально, а экран скроллится без видимых притормаживаний и быстро подгружает контент. Это все очень важно, потому что люди сейчас активно пользуются приложениями для оплаты покупок, посещения врачей, деловых встреч. Никому бы не хотелось зависаний на этапе оплаты или на важных переговорах. Эти вещи могут заставить пользователя найти альтернативу.
  • Отсутствие препятствий для обновления приложений или расширения его функций. Платформы развиваются, добавляя новые функции, и приложения должны их поддерживать. Обновление iOS может полностью сломать приложение. И пока разработчики кроссплатформенного фреймворка не выпустят новую версию, ваше приложение может не работать, и с этим ничего не сделать.
  • Доступ к собственным функциям и приватным API платформы. В отличие от кроссплатформенных, нативные приложения могут использовать собственные функции и приватные API платформы. Разработчики языка Swift уже встроили в язык полезные модули, с помощью которых можно работать с аудио, видео, камерой телефона, локацией, Bluetooth. А в случаях, если вы хотите сделать приложение с онлайн-конференциями, дополненной реальностью или с возможностью передачи данных через Bluetooth (рекламный пуш при попадании в зону действия Bluetooth-маячка или перевод средств в банковских приложениях), получится, что разработчикам не нужно создавать эти модули самим, что очень сильно экономит время, а с ним и деньги.
  • Безопасность. Исходный код операционной системы и нативных средств разработки для нее закрыт. К нему невозможно получить доступ, в отличие от кроссплатформенных решений, где исходный код открыт, и к нему может получить доступ любой.

Минусы:

  • Нужно сделать два приложения, а не одно
  • Эти же два приложения нужно поддерживать.

Заключение

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

Например, можно выбрать кроссплатформенные решения, если:

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

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

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

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

Примеры: e-learning, медицина, интернет-ТВ, видеочаты, видеонаблюдение, дополненная реальность.

  • Опыт клиентов