Когда мы задумываемся о разработке под iOS, чаще всего в голове возникает пятизначная сумма входного порога: как минимум нужно iOS-устройство на последней версии ОС и Mac. Если вы уже пишете под iOS, вам наверняка известны альтернативные варианты, а если нет — посмотрите, вдруг пригодится? Приведенный ниже обзорный пост — как раз на этот случай. Под катом вы найдете довольно простую информацию, так что если хотите хардкорчика, вам не сюда!

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

  • Берем Mac (точнее, нам нужна OS X), берем Xcode с iOS SDK, берем Objective-C или Swift, делаем проект, и на выходе получаем самое настоящее, «нативное», iOS-овское приложение, которое даже можно со спокойной душой засабмитить в App Store, и радоваться показу баннеров тому, что наша небольшая разработка приносит людям радость.
  • Берем хоть Mac, хоть Windows-машину, выбираем фреймворк, позволяющий писать мобильные приложения на более знакомых многим языках (JavaSctipt, C#). Заботу о том, как наш код выполнится на устройстве, возьмет на себя фреймворк: для обеспечения выполнения с нашим кодом будет слинкован механизм исполнения кода (runtime), в задачи которого, среди прочего, входит трансляция вызовов используемого языка программирования в API мобильной платформы. Плюс подхода состоит в определенной независимости от конкретной мобильной платформы (с которой нас связывает только сам runtime), минус же — в меньшей, чем у «родного» приложения, скорости работы.
  • Берем Блокнот любой редактор текстовых файлов, ваяем веб-страницу, должным образом ее обустраиваем, и на выходе получаем веб-приложение, которое, по сути, будет запускаться в полноэкранном окне браузера (как самое настоящее приложение на платформе — без адресной строки браузера), но работать будет, конечно, со скоростью и отзывчивостью обычной веб-страницы. В первую очередь это будет видно при отсутствии нормального интернет-соединения, однако, согласитесь, даже такой вариант иногда удобен. Веб-приложение, кстати, имеет тот плюс, что для доступа пользователей к нему страницу не требуется отправлять в App Store, достаточно дать людям ее URL и предложить добавить себе «на домашний экран».

Путь от Apple


Путь настоящего джедая тру iOS-разработчика лежит в плоскости следования идеям Apple. Свежий SDK, свежая же версия Xcode, документация от Apple по технологиям Apple, форумы разработчиков на технологиях Apple – если вдуматься, а что ещё нужно для создания отличного приложения, кроме толики времени? Польза очевидна: разработка идет самым близким к платформе и к идеологии Apple образом, с использованием всех новинок, предлагаемых Apple в текущем (и будущих) iOS API, так что постоянное изучение нового приносят больше хорошего, чем плохого.

Новинки Apple озвучивает регулярно. На последней конференции для разработчиков WWDC 2017 были показан новый SDK и новая версия среды для разработке Xcode. Список изменений довольно обширен (тем более в преддверии выхода iOS 11):

Xcode


Текстовый редактор в Xcode переписали на Swift, сделав его надёжнее и быстрее. Можно ли это почувствовать? Да! Подсветка синтаксиса работает (почти) моментально, открытие и навигация по файлу теперь без заметных задержек, а сообщения об ошибках больше не перекрывают исходный код. В beta все выглядит очень приятно, посмотрим, что нас ждет в релизе!

В Xcode появилась поддержка Markdown. Разметку можно использовать при документировании кода, и функциональность эта, на первый взгляд, косметическая, довольно заметно облегчает чтение кода, особенно чужого:


(Источник)

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


(Источник)

Ещё одной важной фичей Xcode 9 стал рефакторинг кода на Swift, Objective-C, Objective-C++, C. Рефакторинг позволяет переименовывать классы, переменные, а также дробить методы на менее крупные.


(Источник)

Из менее выделяющихся, но тем не менее полезных фич, можно назвать:

  • Новую систему сборки (кстати, написанную на Swift);
  • Поддержку GitHub;
  • UI debugger стал показывать UIViewController;
  • Добавили больше проверок (например, main thread API checker и undefined behavior tracking);
  • Параллельный запуск тестов на разных устройствах и симуляторах, UI-тесты нескольких приложений;
  • «Беспроводную» отладку на нескольких устройствах для проверки приложений под iPad и iPhone.?

Swift 4


Это изменение стоит особняком. Все, кто уже пережил чувство «в Swift 2 было, в Swift 3 пропало?!», могут ощутить дежавю, но сейчас ожидаются изменения, скорее, в лучшую сторону (впрочем, замечу вполголоса, когда это было не так, по мысли авторов-то?)



Итак:

  • Приложения, написанные на Swift 4, станут меньше в размерах.
  • Swift 4 получит встроенную поддержку кодирования/декодирования в/из JSON. До Swift 4 приходилось много писать много кода самому, либо использовать сторонние кодогенераторы. Сейчас этот код генерирует компилятор. Отдельное спасибо!
  • Возврат к удобной модели работы со строками, которая была реализована в Swift 2 и убрана в Swift 3. Вместе с этим изменением строки станут лучше поддерживать Unicode («чтобы ваши любимые приложения корректно показывали все ваши emoji»), а работа с ними ускорится.
  • Проекты, в которых используется и Swift, и Objective-C, будут собираться на 40% быстрее за счёт улучшений в Xcode 9 и его системы сборки.?
  • Apple (как обычно) обещает простую миграцию на Swift 4, и одновременную поддержку разных кодовых баз (3.2 и 4.0).

«Гибридное», «не совсем нативное» приложение


Уточню: термин, вынесенный в заголовок, даже по сути своей не очень верен. Приложения, которые мы получим в результате, самые что ни на есть нативные в смысле того, что они исполняются на той же iOS, на том же железе, что и любое другое ПО для iOS, просто сам процесс разработки позволяет использовать не только предложенные Apple технологии и языки программирования. Если человек умеет писать, скажем, на JavaScript, и не хочет разбираться в Swift, то Apple ему ничем не поможет (кроме, конечно, хорошего учебника по Swift), а вот вариант написать, условно говоря, приложение на JavaScript, а потом запустить его на iOS, как если бы оно было написано в Xcode (получив, таким образом, некий «гибридный» вариант) существует, и вполне востребован.

Ionic



Ionic – один из самых известных фреймворков для кросс-платформенной разработки. Он построен на базе Apache Cordova, что обеспечивает доступ к различным функциям устройства, таким как геолокация, push-уведомления, камера и прочим, и позволяет разработчикам создавать приложения для iOS и Android с веб-технологиями, такими как HTML, CSS и JavaScript.

В дополнение к фреймворку, Ionic может похвастаться целой экосистемой, облегчающей разработчикам-новичкам процесс изучения и вхождения. Ionic Cloud предоставляет разработчикам различные инструменты для управления, развертывания и масштабирования приложений на Ionic. Ionic Creator представляет собой визуальный редактор, который позволяет разработчикам быстро прототипировать и создавать мобильные приложения методом drag&drop. Наконец, существует Ionic View — бесплатное приложение для iOS и Android, которое позволяет разработчикам легко делиться своим Ionic-приложением с пользователями, тестерами и клиентами без необходимости развертывать приложение в магазине приложений конкретной мобильной платформы. Разработчики просто отправляют пользователям приглашение из приложения Ionic View, и как только оно принято, пользователь может загрузить и запустить конкретное приложение в своей копии Ionic View — так, как если бы приложение было установлено на его телефоне из магазина приложений.

Увы, есть и «ложка дегтя». Приложения, написанные с использованием Ionic, используют WebView, в результате мы получаем самое натуральное веб-приложение, со своей обычной (обычно не самой впечатляющей) скоростью работы. За счет этого трудно считать его подходящим для создания тяжелых приложений, таких, как игры, либо программы с интенсивным использованием графики. Разработка с Ionic требует хороших знаний Angular, по крайней мере при желании «выжать» из фреймворка как можно больше.

PhoneGap / Cordova


PhoneGap исходно был создан компанией Nitobi. В 2011 году, Adobe приобретает Nitobi и бренд PhoneGap. Adobe затем передает одну из версий PhoneGap (назвав её Cordova), в Apache Foundation, оставив себе бренд PhoneGap и его как продукт. В результате Cordova можно рассматривать как движок, стоящий под капотом PhoneGap (а также некоторе другие гибридные фреймворки). PhoneGap, в свою очередь, добавляет к возможностям Cordova свои, дополнительные, функции.

PhoneGap во многих отношениях очень похож на Ionic. Он так же дает разработчикам возможность создавать кросс-платформенные приложения при помощи веб-технологий, и так же построен на базе Apache Codova. Однако PhoneGap не привязан к какому-то определенному Javascript-фреймворку, поэтому разработчики имеют бОльший выбор, на чем и как они будут создавать свои приложения. У PhoneGap имеется десктопное приложение, мобильное приложение, и облачный сервис под названием PhoneGap Build, который позволяет собирать и деплоить приложение.

Увы, подобно Ionic, PhoneGap использует WebView (который в iOS работает довольно медленно), так что со скоростью у приложений, созданных на базе этого фреймворка, дела не всегда обстоят блестяще.

Xamarin


Основанная в 2011 году компания Xamarin, выпускающая семейство продуктов Xamarin через пять лет своего существования была купена компанией Microsoft. Сегодня продукты Xamarin представляют на рынке очень интересный подход к разработке кросс-платформенных мобильных приложений: приложения пишутся на C#, затем Xamarin компилирует его в нативное приложение для iOS, либо для Android, при этом в качестве базовой технологии Xamarin использует Mono, чем кросс-платформенность и обеспечивается. Разработчики Xamarin говорят, что полученные на выходе приложения используют нативное API платформы, для которой приложение компилируется, так что поведение полученного приложения никак не отличается от поведения любого другого приложения на этой же платформе. Разработку, кстати, можно вести при помощи Visual Studio (что совсем неудивительно).

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

React Native


Проект React Native появился на свет в Facebook, и построен на основе React. Внутри нашего мобильного устройства запускается веб-сервер, на котором и работает написанное нами приложение на JavaScipt. React Native сопоставим с Xamarin, при этом приложения, созданные с помощью React Native, очень похожи на нативные приложения iOS и Android.

Синтаксис React довольно прост, что облегчает изучение фреймворка, а Стандартная библиотека UI-компонентов в поставке React Native содержит много полезных компонентов, однако самым большим отличием React Native от других JavaScript-фреймворков называют возможность использования кода на на Objective-C и Swift (чаще для для улучшения производительности или более тонкого взаимодействия с мобильной платформой). На практике это означает, что разработчики могут использовать существующие собственные библиотеки в своих приложениях React Native.

Веб, чистый веб


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

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



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

Если вы любите мобильную разработку так же, как любим ее мы, рекомендую обратить внимание на следующие доклады Mobius 2017 Moscow (да-да, в ноябре Мобиус едет в Москву, если вы еще не знали):

Комментарии (23)


  1. oldschoolgeek
    07.09.2017 19:22
    +2

    Поправьте, пожалуйста, если ошибаюсь, но кажется, что все альтернативные варианты, кроме progressive web apps, так или иначе, требуют MacOS и Xcode для того, чтобы на выходе получилось мобильное приложение, работоспособное на настоящем iPhone / iPad.


    1. yul
      07.09.2017 20:08

      Tabris.js может делать билды в облаке, но тестировать все равно где-то нужно. Он на базе Кордовы, но работает не в webview.


    1. easty
      08.09.2017 19:05

      У меня нет мака, но приложение на кордове как то надо сабмитить в аппстор. Мой набор такой: osx sierra на virtualbox. Там очееь тупит xcode, боль вести отладку, еще не хватает клавишь. Поэтому js часть приходится править в visual studio code. Удобнее чем в xcode. Отладку на девайсе залочили для новых иос. Не видит макос проброшеннок юсб устройство. Сборка и публикация через xcode. Как то так. ))


      1. danial72
        09.09.2017 11:36

        Ну или hackintosh для сборки и публикации, linux/win для разработки


  1. beduin01
    07.09.2017 21:40

    Про Vue Native забыли написать, там тоже есть пару вариантов, но сам с ними детально не разбирался.


  1. IL_Agent
    07.09.2017 22:12
    -2

    Вроде как на Xamarin можно без мака обойтись, только айфон нужен.


    1. Virviil
      07.09.2017 23:07

      Сборка для IPhone только при подключению к макбуку


    1. Dolbe
      08.09.2017 13:47

      Для дебага и симуляции есть вот Xamarin Live Player:
      https://www.xamarin.com/live


      Но для сборки под iOS нужен мак.


  1. ONEGiN
    07.09.2017 22:34

    использовать веб-страницу как отдельное приложение

    Похоже самый бюджетный вариант, вполне пригодный для прототипа.
    Есть сервисы которые могут опубликовать такое приложение в Apple store?


  1. NeonXP
    08.09.2017 03:38
    +4

    Если не хочется тратиться на мак и айфон/айпад, есть интересное решение на основе React Native: expo.io оно умеет в облаке собирать и apk и ipa (и, что интересно, умеет OTA обновление JS бандла). Я от этого инструмента в восторге. Кстати, create-react-native-app, который предлагается разработчиками RN, сделан на его основе.

    Так же у них есть сверх лайтовый вариант: простой веб-редактор кода, в котором можно накидать простой прототип и тут же (да, во время набора кода!) смотреть результат на реальном устройстве / встроенном в страницу эмуляторе. Вот он: snack.expo.io.

    Скриншот по которому всё сразу понятно
    image


    1. sopov
      08.09.2017 10:29

      А эту штуковину можно с С++ библиотеками скрестить?


      1. NeonXP
        08.09.2017 11:16

        Можно eject сделать, тогда оно сформирует нормальный iOS и Android проекты, которые можно либо кастомизировать напрямую (в смысле дописать какой надо код), либо добавлять нативные плагины, как указано в инструкции. Правда, пропадет возможность облачной сборки, как я понимаю.


      1. Elsedar
        08.09.2017 17:40

        В топике еще про Qt/QML забыли. Самое оно.


  1. Sie
    08.09.2017 11:54
    +1

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


    1. danial72
      08.09.2017 17:47

      flutter


    1. easty
      08.09.2017 19:09

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


  1. basnopisets
    08.09.2017 12:11
    +1

    почему не упомянули Flutter?


    1. danial72
      08.09.2017 17:46

      Потому-что не знают о нем. Популярность довольно-таки низкая.
      Кстати тоже нужен xcode.


    1. NeonXP
      08.09.2017 22:03

      Посмотрел эту штуку. Вопрос. Чем оно концептуально отличается от React Native? Понятно что и там и там используется нативный UI для каждой ОСи. Интересует программная часть там выполняется в некой VM, как RN выполняется в JavaScriptCore или всё таки магически транслируется в полностью нативный бинарь?


      1. basnopisets
        08.09.2017 22:15
        +1

        я пока сам не копал глубоко, только в планах стоит поиграться с Flutter. Но вот, что я видел из материалов по нему и что может помочь найти ответ: статья от Гугл и презентация с Дроидкон Берлин недельной давности


        1. NeonXP
          08.09.2017 22:31

          Спасибо, да там есть прямой ответ:

          Dart is compiled “ahead of time” (AOT) into native code for multiple platforms.

          Согласен, интересная вещь. Вот если бы не Dart (не имею ничего против него, просто это ещё один язык в отличие от JS, который много кто знает), то вообще неоценимая была бы.


  1. avdept
    08.09.2017 15:32

    В react-native нету вебсервера. Да и от там просто не нужен. Весь UI работает используя нативные компоненты, в то время когда логика работает на js в отдельном потоке и обменивается данными с UI через специальную прослойку. Это убирает всевозможные фризы и торможения интерфейса какие есть в случае кордовы или ионика.


  1. coder1cv8
    08.09.2017 16:24
    +3

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