Является ли SwiftUI риском, и готов ли я поставить на него свой проект?

Все мы знаем, что Xcode 11 станет золотым в сентябре, а это означает, что мы можем технически начать выпуск приложений для iOS с использованием SwiftUI примерно через месяц.

И хотя в сообществе iOS / Swift есть ажиотаж по поводу того, что обещает Apple, это не обязательно означает, что все собираются сделать решительный шаг.

Я сомневаюсь, что кто-то собирается переписывать свое производственное приложение на SwiftUI, если только это не было уже в разработке. Но для меня есть две категории разработчиков, которые в настоящее время задают один и тот же вопрос.

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

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

Однако они оба задают следующий вопрос: «Является ли SwiftUI риском и готов ли я поставить на это свой проект?»

Давайте тогда разберемся, ладно?

Добро

Преимущества были сразу заметны

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

Это должно было изменить создание пользовательского интерфейса iOS (на самом деле Apple).

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

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

Мы могли бы даже представить, сколько времени можно сэкономить, изначально написав наш пользовательский интерфейс таким образом (Пол Хадсон даже демонстрирует это в отличном сравнении видео).

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

Нам это нравится, потому что мы так переборщили с IB / SB

У Interface Builder были проблемы с ростом, поскольку он был одним из первых решений для быстро развивающегося рынка.

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

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

Теперь проект приложения с одним представлением, установленный на SwiftUI, даже не поставляется с Main.Storyboard. Это официальное автономное решение для пользовательского интерфейса. Это само по себе делает каждый запускаемый мной проект SwiftUI современным.

Превью - это все (когда работает)

Если время равняется деньгам, то превью - самая большая ценность для разработчиков, которую предоставляет Xcode 11. Изменения появляются практически сразу, без необходимости нажимать CMD+R.

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

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

На самом деле, дайте максимально точную оценку и посчитайте. Давай, я подожду.

Свифт теперь цел

Теперь есть что-то особенное в возможности писать свой пользовательский интерфейс на Swift. Это действительно похоже на брак; ваш код и ваш пользовательский интерфейс теперь единое целое. Я признаю, что это очень сентиментальный взгляд на это, но это замечательная вещь.

Да, есть фреймворки для реагирования Swift. Да, вы могли бы стать мастером UIkit и создать свой пользовательский интерфейс в коде (хотя вам все равно понадобится раскадровка).

И да, есть фреймворки, которые не используют Swift для реагирования и создания пользовательского интерфейса в коде (React Native и Flutter, я смотрю на вас).

Но, тем не менее, они по-прежнему могут полагаться на собственный код / ​​плагины, когда сталкиваются с ограничением функциональности. Это работает, но это не то же самое.

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

Плохо

Бета глючит

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

И я не одинок. Некоторые даже могут назвать это альфой.

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

Но это не инструмент IDE, с которым я могу работать, пока мой код в порядке. Это мой код.

Амортизация в квадрате

Я столкнулся с рядом устаревших элементов. PresentationLink, Sheet и Modal удалены и заменены, identified(by: ) был изменен, relativeSize удален и т. Д.

Я подумал, что в бета-версиях кое-что изменится, но некоторые из них - это то, как представлена ​​вся функция.

И не всегда очевидно, что что-то изменилось. Незначительное изменение инициализации TextField было не сразу очевидным и считалось большой уловкой на форумах разработчиков ».

Количество правок, которые все еще вносятся, заставляет задуматься, будут ли изменения еще внесены вскоре после выпуска.

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

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

Это не первый

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

Стоит даже заполнить пробелы в родном Swift и связать его с выбранным фреймворком. Таким образом, в определенном смысле SwiftUI противостоит опытным, зрелым и уже принятым конкурентам.

И это все еще не кросс-ОС

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

Людям хотелось бы, чтобы Swift стал кросс-OS должным образом, но даже что-то вроде SwiftUI определенно будет специфичным для Apple.

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

Но при этом не учитывается, что SwiftUI предназначен не только для телефонов и планшетов. Если мы хотим писать кросс-платформенные приложения в сфере Apple, это совсем другая история.

Перспективы впереди - уродливые или милые

Состояние приложений в целом

Есть предположения (даже здесь, на Medium) о том, есть ли в настоящее время «приложение для этого». Действительно ли нам нужны приложения?

Я могу придумать как минимум три немедленных ответа на это:

  • Приложения, желающие воспользоваться преимуществами аппаратной оптимизации (ARKit и Core ML кому-нибудь?).
  • Приложения, выходящие за рамки iPhone (убийственная причина - iPadOS).
  • Приложения, которые хотят иметь отличный UX, помимо того, что может предложить мобильный сайт.

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

Расшифровка продаж iPhone

Ни для кого не секрет, что Apple не получила того отклика, на который надеялись в прошлом году, с XS и XR. И их продажи однозначно пострадали.

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

Большинство людей вокруг меня в прошлом году спрашивали, как они могут получить дешевый iPhone 7 или 8, потому что они просто не могут позволить себе сделать решительный шаг. Им не нужен портретный режим, Face ID, OLED-экраны или даже оптимизированное для машинного обучения оборудование (особенно потому, что они даже не знают, что это значит).

Им нужен iPhone, любой iPhone. Почему? Потому что они к этому привыкли, как Apple, и / или имеют средние потребности.

Я понимаю, что чрезмерное обобщение. Но это правдивые комментарии окружающих меня людей. Лично мы с женой получили XR после того, как выжали жизнь из наших 6.

Что вы должны сделать?

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

Могу ли я разрабатывать приложение с использованием SwiftUI для выпуска в 2019 году? На самом деле это зависит от сложности и того, насколько я хочу поддерживать это приложение.

На самом деле мы сейчас пытаемся решить, стоит ли им быть ранним последователем. Это загадка 21 века. И, как и в любом другом случае, раннее освоение чего-либо сопряжено с риском (Galaxy Fold? Слишком рано?).

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

Что касается моего вопроса в заголовке раздела, то я не могу ответить за вас. Вам больше пора задуматься.

На самом деле, я хотел бы услышать отзывы от вас, сообщество! Вы делаете решительный шаг? Если не в следующем месяце, то вскоре после этого? Или вы уже смотрели в другом месте?