Хабрахабр

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

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

Немного о конференции

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

Впечатления

Думаю, каждый разработчик под платформы Apple мечтает хоть раз попасть на WWDC. И дело не только в lab-сессиях, где можно очно поговорить о своих проблемах и пожеланиях, но и в знаковости события.

Вообще, очереди — неотъемлемая часть конференции, что логично, ведь участников тысячи, все события проходят в одной локации. Конференция обычно начинается не с первой презентации, которая называется Keynote, а с регистрации, точнее, очереди на нее. Например, первых людей, попавших на регистрацию, Тим Кук приветствовал лично. Позиция в начале очереди иногда дает приятные преимущества.

После регистрации участнику выдают фирменную куртку и значки с символами конференции или компании.

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

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

Keynote: новинки

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

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

Ди-Си!», поклонники Apple охотятся за новыми значками, все довольно динамично и интересно. В целом атмосфера мероприятия напоминает праздник: организаторы поздравляют участником с тем, что они попали сюда, в очереди скандируют «Даб-даб! Это сильно воодушевляет, вдохновляет пробовать все нововведения и интегрировать их в свои продукты. Приятно осознавать, что самые важные вещи в iOS/MacOS разработке происходят здесь и сейчас, то есть впечатление от просмотра видео дома или на работе очень сильно разнится с реальным присутствием в зале. Короткий brainstorm с коллегами из Badoo на конференции превратился в большой список вещей, которые мы хотели бы реализовать в наших приложениях.

От WWDC в этом году ждали анонса новой версии iOS, инструментов для кросс-платформенной разработки под iOS и MacOS, заката iTunes, нового Mac Pro. Как всегда, задолго до конференции начали появляться слухи о будущих новинках. Были даже спекуляции насчёт очков дополненной реальности.

Но обо всем по порядку. Многие из этих слухов подтвердились.

Apple TV

Сперва про tvOS. UI tvOS подвергся сильному редизайну.

Несмотря на приложенные усилия, здесь Apple остается в роли догоняющего. Apple активно продвигает свою телевизионную платформу TV+, и как следствие, мы увидели трейлер сериала на WWDC. Платформы вроде Netflix пока что лучше как в плане UX, так и в плане контента.

Пожалуй, самым приятным для большинства нововведением для AppleTV является поддержка джойстиков Xbox и PlayStation.

iPadOS

Визуально она мало чем отличается от iOS. Целью, пожалуй, является приближение iPad к Mac. В итоге разработчики имеют возможность достаточно легко портировать приложения для iPad на MacOS. Планшеты от Apple стали более функциональными: например, теперь их можно использовать как второй монитор и подключать к ним usb-накопитель. Последнее возможно за счет обновленного приложения Files для работы с файловой системой.

Safari теперь должен работать адекватнее, выдавая верстку для desktop-версии сайта вместо мобильной.

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

Watch OS

Теперь, чтобы установить приложение на Apple Watch, необязательно это делать на привязанном iPhone. Как логическое продолжение появилось приложение AppStore для Apple Watch. Все это означает, что теперь можно искать и устанавливать приложения прямо с часов. Неясно, насколько это будет полезно для пользователей, потому что удобство такого способа установки вызывает сомнения. Приятным бонусом идут новые варианты дизайна главного экрана часов.

Mac OS

Название новой версии — MacOS Catalina в честь острова возле Лос-Анжелеса. В этот раз анонсировано не так много новинок. Из запоминающегося можно назвать лишь то, что приложения iTunes больше не будет, а его части будут существовать как отдельные приложения.

Работать с подключенными устройствами можно будет через Finder. Не без самоиронии были представлены Apple Music, Podcasts и TV, которые раньше являлись частью iTunes.

iOS 13

Пожалуй, главные изменения затронули iOS. Было представлено много обновлений, остановимся на главном.

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

Системные приложения выглядят очень симпатично в новом контексте. Главная визуальная инновация, которую многие ждали уже давно, — это темная тема.

То, что было представлено на презентации, вызывает уважение к компании: наконец-то появился легкий способ быстро авторизоваться в сторонних сервисах, не предоставляя своих реальных данных. Много ажиотажа возникло вокруг возможности регистрации/авторизации в приложениях с помощью Apple Id. Может быть, это станет головной болью для некоторых приложений, ведь Apple настроен сделать подобный вид авторизации обязательным для всех приложений, использующий OAuth.

Теперь, даже если ноутбук находится в спящем режиме и/или не имеет доступа к сети, он может обмениваться сообщениями через Bluetooth с Apple-устройствами, находящимися рядом, которые, в свою очередь, отправят информацию о местоположении компьютера Apple. Отдельно я хотел упомянуть улучшение в системе работы приложения Find My Mac. Простая, но очень полезная и действенная идея, которую было бы очень сложно сделать другой компании из-за отсутствия доверия и единого протокола общения между смартфонами и компьютерами.

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

Также представлены некоторые не очень значительные улучшения стандартных приложений. Из остальных новинок можно упомянуть про старания Apple догнать Google Maps, внедряя аналог режима Google Streets в свое приложение Maps, умную сортировку и группировку фотографий, кастомные стикер-паки на основе Animoji.

Mac Pro

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

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

Возможная мощность компьютера и представленного монитора действительно впечатляют, но цена заставляет задуматься о необходимости таких замечательных устройств. Однако внутри это совершенно новая машина. Новый 31. Видимо, чтобы не пугать аудиторию, была представлена цена лишь самой базовой комплектации системного блока, которая составляет $6000. Ну и сюда надо добавить $999 за подставку. 6-дюймовый XDR 6K монитор обойдется как минимум в $4999 долларов. Действительно, не к стене же его прислонять.

Swift UI

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

Все новое обычно представляют как инновации, тактично избегая упоминания аналогичных решений. Докладчики не называли свои источники вдохновения. Угадывается влияние идей React и, может, даже Flutter. В целом, люди, знакомые с другими фреймворками для декларативного способа разработки интерфейса, узнавали знакомые принципы. В Twitter есть упоминания, что работа над этим фреймворком велась как минимум 3 года, что неудивительно, учитывая, как сильно все поменялось. Но все это остается спекуляциями.

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

Apple представила альтернативный, новый фреймворк, Combine. Пожалуй, самым распространенным фреймворком для реализации подобной концепции для iOS является RxSwift. На первый взгляд, классы этого фреймворка похожи на аналогичные из Java.

WWDC-сессии

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

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

Swift UI

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

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

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

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

Очень радует, что неинтерактивные элементы, требующие большого количества ресурсов для отрисовки, можно одной строчкой перевести в режим отрисовки через 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 аналог аннотаций для свойств объектов.

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

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

Foundation

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

Изменения в iOS

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

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

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

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

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

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

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

Machine Learning

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

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

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

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

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

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

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть