Даб-даб 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 активно продвигает свою телевизионную платформу TV+, и как следствие, мы увидели трейлер сериала на WWDC. Несмотря на приложенные усилия, здесь Apple остается в роли догоняющего. Платформы вроде 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 больше не будет, а его части будут существовать как отдельные приложения.
Не без самоиронии были представлены Apple Music, Podcasts и TV, которые раньше являлись частью iTunes. Работать с подключенными устройствами можно будет через Finder.
iOS 13
Пожалуй, главные изменения затронули iOS. Было представлено много обновлений, остановимся на главном.
Улучшение производительности: приложения стали запускаться быстрее — видимо, не в последнюю очередь за счет того, что Swift Runtime уже вшит внутрь системы. Размер бинарного файла, скачиваемого во время установки и обновления приложений, также несколько уменьшился. Радует, что Apple продолжает работать над оптимизацией своих продуктов, любопытно будет сравнить реальные значения улучшений с анонсированными на презентации.
Главная визуальная инновация, которую многие ждали уже давно, — это темная тема. Системные приложения выглядят очень симпатично в новом контексте.
Много ажиотажа возникло вокруг возможности регистрации/авторизации в приложениях с помощью Apple Id. То, что было представлено на презентации, вызывает уважение к компании: наконец-то появился легкий способ быстро авторизоваться в сторонних сервисах, не предоставляя своих реальных данных. Может быть, это станет головной болью для некоторых приложений, ведь Apple настроен сделать подобный вид авторизации обязательным для всех приложений, использующий OAuth.
Отдельно я хотел упомянуть улучшение в системе работы приложения Find My Mac. Теперь, даже если ноутбук находится в спящем режиме и/или не имеет доступа к сети, он может обмениваться сообщениями через Bluetooth с Apple-устройствами, находящимися рядом, которые, в свою очередь, отправят информацию о местоположении компьютера Apple. Простая, но очень полезная и действенная идея, которую было бы очень сложно сделать другой компании из-за отсутствия доверия и единого протокола общения между смартфонами и компьютерами.
Также нельзя не упомянуть, что теперь системная клавиатура iOS все-таки будет поддерживать набор свайпом между буквами, что означает, что любителям такого способа набора больше нет необходимости устанавливать сторонние клавиатуры. И наконец-то кнопка переключения на клавиатуру с emoji отделена от кнопки переключения языка.
Из остальных новинок можно упомянуть про старания Apple догнать Google Maps, внедряя аналог режима Google Streets в свое приложение Maps, умную сортировку и группировку фотографий, кастомные стикер-паки на основе Animoji. Также представлены некоторые не очень значительные улучшения стандартных приложений.
Mac Pro
Главным и единственным представленным не программным продуктом стал новый Mac Pro. Не буду приводить возможные источники вдохновения дизайнера внешнего вида устройства: первый взгляд на переднюю часть системного блока вызвал невольный смешок, что редкость для продуктов этой компании.
В целом, дизайнеры предпочли практичность элегантности. Новое поколение компьютера сильно отличается от предыдущего, который сравнивали с другим предметом обихода. Произошло некоторое возвращение к корням, и новый Mac Pro во многом по виду похож на свое первое поколение.
Однако внутри это совершенно новая машина. Возможная мощность компьютера и представленного монитора действительно впечатляют, но цена заставляет задуматься о необходимости таких замечательных устройств. Видимо, чтобы не пугать аудиторию, была представлена цена лишь самой базовой комплектации системного блока, которая составляет $6000. Новый 31.6-дюймовый XDR 6K монитор обойдется как минимум в $4999 долларов. Ну и сюда надо добавить $999 за подставку. Действительно, не к стене же его прислонять.
Swift UI
Самый главный анонс для разработчиков. Apple все-таки выпустила новый декларативный фреймворк для разработки UI на Swift. Последствия смены концепции трудно переоценить: первое впечатление от презентации было похоже на символ конференции на фасаде здания.
Докладчики не называли свои источники вдохновения. Все новое обычно представляют как инновации, тактично избегая упоминания аналогичных решений. В целом, люди, знакомые с другими фреймворками для декларативного способа разработки интерфейса, узнавали знакомые принципы. Угадывается влияние идей React и, может, даже Flutter. Но все это остается спекуляциями. В Twitter есть упоминания, что работа над этим фреймворком велась как минимум 3 года, что неудивительно, учитывая, как сильно все поменялось.
Смена концепции разработки интерфейса зачастую перерастает в смену подхода работы с данными, потому что подход, при котором вместо явных присвоений декларируется функциональная зависимость между значениями, очень хорошо сочетается с декларативным интерфейсом.
Пожалуй, самым распространенным фреймворком для реализации подобной концепции для iOS является RxSwift. Apple представила альтернативный, новый фреймворк, 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 по студенческой программе: это не так сложно, как кажется, и в этом году доля участников-студентов была достаточно большой.