» » » Даб-даб 2019: новинки WWDC и мои впечатления

 

Даб-даб 2019: новинки WWDC и мои впечатления

Автор: admin от 14-06-2019, 12:05, посмотрело: 22

Привет! Меня зовут Азат Зулькарняев, я занимаюсь разработкой iOS-приложений в компании Badoo. Традиционно мы каждый год с коллегами проводим неделю на WWDC. В статье я делюсь своими впечатлениями с конференции: под катом не только важные обновления и обзор сессий, но и немного личных эмоций от пребывания в счастливой толпе, которая скандирует «Даб-даб! Ди-Си!» и мечтает пожать руку Тиму Куку.



Даб-даб 2019: новинки WWDC и мои впечатления
Combine. На первый взгляд, классы этого фреймворка похожи на аналогичные из Java.



WWDC-сессии



Основная часть конференции — это серия сессий, где работники Apple рассказывают про новые технологии и объясняют как их правильно использовать. Каждая сессия содержит презентацию изменений и их демонстрацию на каком-либо примере.

На неделю Conventional Center в Сан-Хосе превращается в мини-университет для разработчиков и не только. Больше сотни презентаций, тысячи участников, активные обсуждения в перерывах.



Ниже я перечислю описание некоторых интересных, на мой взгляд, сессий с WWDC.



Swift UI



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



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



Основные особенности фреймворка — это value type отображения, автоматическое построение разницы между двумя состояниями отображаемых данных и то, что описанная кодом иерархия объектов не обязательно совпадает с реальной иерархией отрисованных view-элементов.



Value-type объекты позволяют быстро создавать и удалять объекты из памяти. Как реализован отрисовщик отображений и компонент, генерирующий разницу между состояниями, пока неясно: Apple редко открывает исходный код созданных инструментов.



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



Combine



Здесь зрителей познакомили с новым фреймворком для работы с Data Flow. Для тех, кто работал с Rx или похожими инструментами, мало что покажется новым; остальные разработчики на презентации были впечатлены выразительностью нового подхода. На презентации показали вполне стандартные для реактивных фреймворков примеры. Кейс с полем поиска и отправкой запроса на сервер с введенным текстом стал уже хрестоматийным. В целом, библиотека не такая большая, и ознакомления с документацией уже достаточно.



В Combine, так же как и в Swift UI, активно используются value-типы для большей производительности. Однако остается не совсем очевидным, как освобождаются ресурсы после вызова отмены подписки. Рекомендую статью Майкла Лонга на эту тему: он описывает возможные проблемы, с которыми можно столкнуться при использовании фреймворка.



В дополнение к Combine, Apple сделала расширения компонентов Foundation для удобного преобразования стандартного потока данных на реактивный.



Swift Package Manager



Apple решила всё-таки доделать свой инструмент для работы с зависимостями. Теперь он полностью поддерживается Xcode 11, внедрена интеграция с GitHub и другими популярными сервисами для репозиториев. На сессии рассказывают, как работать с SPM в Xcode (что довольно просто) и как разрешаются конфликты зависимостей.



Работа с коллекциями



Для тех, кто не планирует переходить на Swift UI, Apple представила новые инструменты для облегчения работы с UI-списками (Collection View, Table View) в UIKit. Новые data source для коллекций на разных платформах позволят легче обновлять отображения списков без опасения наткнуться на runtime ошибку из-за неконститеного состояния списка. Красной нитью через многие доклады шла идея единого источника правды, и новые компоненты реализуют эту концепцию для UI-списков.



Для Collection View представлен новый вид layout. Используя новое понятие группы, можно описывать абсолютно разное расположение элементов внутри одной секции. Таким образом, внутри одной коллекции у разных секций может быть разное направление прокрутки. По-моему это одно из самых полезных нововведений, которое позволит значительно упростить создание композитных списков.



Swift



В новой версии Swift можно делать так называемые property wrappers. По сути, это generic-классы, которые добавляют свойству объекта какое-то поведение. Звучит очень абстрактно, но это очень сильное изменение языка, которое добавляет в Swift аналог аннотаций для свойств объектов.



Также теперь достаточно легко сделать свой типизированный DSL. Судя по словам докладчика на сессии, один из разработчиков Apple сделал DSL для HTML-тегов за пару часов. Функция еще на этапе бета-версии, и, возможно, в ходе эволюции она станет еще интереснее.



Чтобы избежать проблем при использовании протоколов ассоциированным типом или Self requirement, выведены opaque-типы. Добавление ключевого слова some перед типом позволит использовать тип таких протоколов не только как generic-ограничение.

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



Foundation



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



Изменения в iOS



Изменений тут очень много, так что упомяну лишь главные.

Если вы поддерживаете авторизацию в вашей системе через сторонние сервисы вроде Google или Facebook, то скоро Apple будет требовать поддержу авторизации через Apple ID. Возможно, в некоторых случаях это будет особым случаем авторизации, так что не стоит затягивать с интеграцией этого функционала.



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



Многие приложения используют работу в фоне, так что, возможно, актуальной будет сессия про изменения в API работы с фоновыми задачами.Если коротко, то теперь можно отложить задачу до того, как пользователь подключит устройство к источнику питания. И да, теперь не получится использовать VoIP пуш-уведомления для того, чтобы будить приложение, не используя при этом CallKit. Советую также проверить, что сервер будет отсылать нужные параметры в содержимом пуш-нотификации с нужными значениями, упомянутыми на видео.



Темная тема, которая доступна в iOS 13 может также быть вызовом для многих приложений. Если стороннее приложение игнорирует стиль, заданный системой, то это может привести к тому, что пользователи будут недовольны приложением в целом. Поэтому хорошо бы поддержать динамический стиль в своем приложении, если это приемлемо в плане дизайна.



Такие ресурсы как цвета или изображения могут быть динамическими и их конкретное значение зависит от контекста. Информация о стиле хранится в Traits Collections и на основании ее текущего значения может один и тот же динамический цвет будет иметь разные значения. Свои цвета или ресурсы легко можно сделать динамическими через каталог asset-ов в Xcode либо программно, принимая trait-коллекцию как параметр инициализатора.



Изменение темы можно получить в методе traitCollectionDidChange, но надо иметь в виду, что теперь UIView сразу создается с заданной коллекцией. То есть еще до добавления в иерархию отображений, сам UIKit присваивает объекту наиболее вероятную будущую коллекцию.



Более подробную информацию о темной теме вы можете узнать в этом видео.



Machine Learning



Главное нововведение — теперь можно подстраивать обученные модели для конкретного пользователя, производя обучение прямо на устройстве. Для этого нужно собрать данные для обучения на основе действий пользователя и запустить обучение, которое может использовать графические адаптеры для вычислений. В случае нейронных сетей лучше делать это в фоновой задаче и тогда, когда устройство заряжается.



Также Apple открыла новые API для анализа фотографий, звука, распознавания текста на изображении.



Стоит ли съездить на WWDC? Да!



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



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



Замечательно, что Apple уделяет столько внимания людям, вовлеченным в разработку, и организовывает подобные мероприятия на самом высоком уровне. Цены на билеты могут показаться завышенными, но, на мой взгляд, оно того стоит. Если вы студент, то очень рекомендую на следующий год подать заявку на визит WWDC по студенческой программе: это не так сложно, как кажется, и в этом году доля участников-студентов была достаточно большой.

Источник: Хабр / Интересные публикации

Категория: Game Development, iOS

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

Добавление комментария

Имя:*
E-Mail:
Комментарий:
Полужирный Наклонный текст Подчеркнутый текст Зачеркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Выбор цвета | Скрытый текст Вставка цитаты Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера
Введите два слова, показанных на изображении: *