Нативное или кроссплатформенное приложение — что выбрать?
Когда вы создаёте приложение для 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 не может не привлекать. Но идеального ничего не бывает — и у кроссплатформенной разработки есть свои плюсы и минусы.
Плюсы:
- Простота. Можно выбрать в качестве основного языка программирования JavaScript, 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% — нет. При этом стоит учитывать, что часть из этих 47% может использовать Objective-C, который тоже является нативным языком для iOS.
Также в исследовании с сайтa statista.com говорится, что ⅔ всех приложений - нативные (и Android, и iOS). Выясним, почему так.
Плюсы:
- Учитывание всех особенностей определённой платформы. Конечно, удобно разрабатывать приложение сразу под две платформы, но каждая из них имеет свои особенности. Требования к безопасности, дизайну интерфейса и интеграции платёжных систем различаются.
Например, системные элементы в iOS и Android совершенно разные (пример на картинке), а пользователь ожидает увидеть в интерфейсе привычные для своей платформы элементы.

- Скорость работы и отзывчивость интерфейса. Приложения, написанные нативно, работают быстрее. Пользователю намного комфортнее пользоваться приложением, где анимации плавные, нажатия на кнопки обрабатываются мгновенно, а прокрутка экрана происходит без задержек и быстро подгружает контент. Это очень важно, потому что люди всё чаще используют приложения для оплаты покупок, записи к врачам и участия в деловых встречах. Никто не хочет, чтобы приложение зависло в момент оплаты или во время важных переговоров. Такие сбои могут заставить пользователя перейти к альтернативе.
- Отсутствие препятствий для обновления приложений или расширения его функций. Платформы развиваются, добавляя новые возможности, и приложения должны их поддерживать. Обновление iOS может полностью сломать приложение. И пока разработчики кроссплатформенного фреймворка не выпустят новую версию, ваше приложение может перестать работать — и с этим ничего не поделаешь.
- Доступ к собственным функциям и приватным API платформы. В отличие от кроссплатформенных, нативные приложения могут использовать собственные функции и приватные API платформы. Разработчики языка Swift уже встроили в язык полезные модули, с помощью которых можно работать с аудио, видео, камерой телефона, локацией и Bluetooth. А если нужно создать приложение для онлайн-конференций, дополненной реальности или передачи данных через Bluetooth — например, рекламный пуш при входе в зону действия Bluetooth-маячка или перевод средств в банковских приложениях — разработчикам не придётся создавать эти модули с нуля. Это сильно экономит время и деньги.
- Безопасность. Исходный код операционной системы и нативных средств разработки для неё закрыт — к нему нет доступа. В отличие от кроссплатформенных решений, где исходный код открыт и доступен любому, здесь такой возможности нет.
Минусы:
- Нужно создать два приложения, а не одно
- Эти два приложения нужно поддерживать.
Заключение
И кроссплатформенная, и нативная разработка имеют свои плюсы и минусы. Универсального инструмента, который был бы лучше везде, не существует. При выборе технологий разработки важно учитывать тип приложения, его особенности, особенности платформы, ваши цели и ресурсы.
Например, можно выбрать кроссплатформенные решения, если:
- Вы ограничены в средствах и времени
- Ваше приложение должно выглядеть одинаково на всех платформах, несмотря на их особенности
- Ваше приложение не будет использовать специфичные функции платформы (работа с камерой телефона, сложные анимации, редактирование фото и видео, Bluetooth, онлайн-звонки)
- Ваше приложение не требует повышенного уровня безопасности
Примеры: новостные приложения, приложения для заказа пиццы, записи в салон красоты, онлайн-магазины и так далее.
Но вам подойдут нативные средства, если приложение:
- Будет поддерживаться долгое время
- Будет использовать камеру телефона, сложные анимации, работать с Bluetooth или будет связано с видеозвонками, аудиозвонками или стримингом
- Будет нуждаться в поддержке новых функций платформы после её обновления
- Будет выглядеть по-разному на разных платформах
- Будет соответствовать гайдлайнам платформы
- Будет требовать повышенного внимания к безопасности
- Будет нуждаться в высокой скорости работы и отзывчивом интерфейсе, независимо от новизны и мощности устройства
Примеры: e-learning, медицина, интернет-ТВ, видеочаты, видеонаблюдение, дополненная реальность.
