Дмитрий Шлюгаев

Дмитрий Шлюгаев

Неделя
Aug 2, 2021 → Aug 7, 2021
Темы

Архив недели

Понедельник


Всем привет! На это недели аккаунт буду вести я, Дмитрий Шлюгаев Head of iOS из SberMarket.

Так получилось, что в мобильную разработку я пришел из фронтенда, когда там были популярны jQuery/ExtJS/BackboneJS и еще куча фреймворков, которыми перестали активно пользоваться. И первыми проектами под iOS были нативные и гибридные приложения, спасибо аутсорсингу за это.

На этой недели я хотел бы поговорить: 
• Декларативный стиль написания UI: abode air/flex, phonegap/cordova, reactnative, flutter.
• Чем хорош и плох Swift UI.

• Как черпают идеи из других сфер (про переиспользование подходов в разработке iOS из других направлений IT).
• Remote first, удаленочка. Как работают процессы на удаленке и почему это хорошо.

🔥Тред (Дмитрий Шлюгаев)
Краткий экскурс в историю гибридной/кросcплатформеной разработки под iOS, пройдемся только по тем у кого есть декларативный UI

Первым врывается конечно же Apache Cordova (PhoneGap) в далеком 2010 году, кажется это было еще недавно

Большая поддержка от гигантов Abode/Google/IBM/Microsoft/Mozzila. Светлые надежда на будущее, где все будут разрабатывать приложения при помощи HTML/CSS

На текущий момент он все еще жив, имеет ряд инструментов в виде доп фремверков для UI/логики, с полным доступом к железу.

Все еще тормозит из-за подхода все делать через WebView

Но даже на этом примере неудачной попытки облегчить жизнь в написание приложений всем разработчикам мы видим тот самый шаг в сторону декларативного UI. HTML/CSS выживают из-за своей лаконичности и простоты входа

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

Вторым участником стал Adobe AIR. Ребята не стали городить надстройки над WebView, а сумели создать свой райнтайм.

Рендерилка переводила flash/web в рантайм со свои собственным UI движком (флаттер взял похожий подход). Без доступа к нативным компонентам. MXML выступал для описания GUI и все это дело работало именно в декларативном стиле вместе с ActionScript (разница с JS очень небольшая).

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

Вся эта красивая история работала начиная с iOS 4.3 (2011 год). Сейчас еще живет. На мой взгляд умерло до прихода свифта на iOS, так как там были серьезные проблемы сс сапортом платформы. Ну и даты: Adobe 2008-2020 и теперь у HARMAN с 2019.

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

Март 2015 и мы увидели "убийцу нативной разработки" React Native. Ребята из Фейсбука активно продают идею, что любой фронтендер теперь может создать быстрое приложение, у которого будут нативные компоненты под капотом

Для верстки используем HTML+CSS с компонентным подходом от React. На мой взгляд эталон декларативного подхода в разработке UI

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

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

Минусы технологии прекрасно описаны в известном ряде статей medium.com/airbnb-enginee…

Итого RN напомнил о замечательном декларативном UI, который повлияли в дальнейшем сильно на наш любимый натив.

Последний гость Flutter. Стартанул в конце 2018. Сходу врывается в дверь со своим движком для рендера и языком программирования Dart. Декларативный стиль UI из переиспользуемых виджетов.

Замечательная графическая библиотека Skia + скафолдинг, выглядит как работа над ошибками RN. Конечно же биндинги и все прочие плюшки из web компонент.

Можно провести параллель с Adobe AIR, мы не имеем нативные компонент, только стили виджетов, которые мимикрируют, под нативные UI элементы.

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

Все 4 гибридные/кросплатформенные фреймверки. Только улучшали декларативный стиль разработки UI, который активно перетаскивают из web разработки в мобильную. Хорошая конкуренция заставляет таких гигантов, как Apple пересматривать текущий метод в разработке UI.

🔥Тред (Дмитрий Шлюгаев)
А теперь представьте, вам нужно накатать свой пет проект допустим это простенькое CRUD приложение, чтобы вы выбрали и почему?
🤔 25.8% Flutter
🤔 16.4% React Native
🤔 1.7% Xamarin
🤔 56.2% Native (iOS/Android)

Вторник


Сегодня будем продолжать наш поход по миру декларативного UI в iOS. Пришло время SwiftUI 🌈

В 2019 году Apple презентует декларативный UI.

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

Сразу переехать Apple не может, многое из UIKit сложно мигрировать или закрывать обертками на SUI. В начале 2020 новые фиксы и доработки, затем летом анонс SUI 2 поколения.

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

Анонс SUI 3 поколения закрывает большой пулл проблем с респондерами (вся работа с textfields/keyboard). Для меня остается только открытый вопрос по сложной навигации.

Конечно саппорт старых проектов с UIKit будет еще жить 2-3 года, некоторые не переедут никогда (не забываем кейс с objc, от которого в гигантах не отказались)

Если заглянуть под капот одних и тех же компонент в SUI разных поколений, можно увидеть, как Apple постепенно уходит от оберток над UIKit в сторону внутренних компонент. Хороший пример со списками.

🔥Тред (Дмитрий Шлюгаев)
Что же ожидать дальше от SwiftUI 🤩 ?

Если вернутся к заимствованию из web компонент и RN/Flutter, как наследников phonegap/AdobeAIR. То список будет выглядеть следующим образом:

Полноценный HOT reload, сейчас существую preview, но он слабо дотягивает до всех функций симулятора.

Scaffolding. Сейчас для в SUI нет генерации доменых моделей для UI / темплейтов. Частично можно решить на данный момент через XCode templates. Apple стоит посмотреть в сторону реализации в Flutter.

Среда


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

🔥Тред (Дмитрий Шлюгаев)

Суббота


Пробовали Jetpack Compose / SwiftUI?
🤔 19.9% Да, пишем продакшен код
🤔 32.5% Да, только в пет проектах
🤔 30.4% Нет, но хочу попробовать
🤔 17.3% Нет, не интересно

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

У большинства удаленшиков, есть ритуалы. У меня это заварить кофан, перед дейликом/ревью. Кто-то надевает «рабочую одежду». Были примеры, что можно выйти погулять и вернутся домой или просто пойти в коворкинг :)

Ссылки