После WWDC на сайте Apple размещается очень много сессий. Чтобы разобраться, что смотреть, а что нет, требуется куча времени. Так как я провел всю неделю на конференции и просмотрел множество топиков, захотелось собрать в одном месте краткий список новинок и видео, которые нужно посмотреть по каждой теме. Статья будет наиболее актуальна для мобильных разработчиков, использующих возможности и встроенные фреймворки iOS при разработке нативных приложений. В каждой категории сессии упорядочены в рекомендуемом порядке просмотра там, где это возможно. Начать стоит с
▸ 101 — Keynote и
▸ 102 — Platforms State of the Union,
в этих сессиях представлен обзор всех новостей с картинками и примерами работы.  Пожалуй, самая приятная новость конференции: в iOS 10 сторонние приложения получат доступ к SiriKit. Точнее говоря, это Siri получит доступ к тому, что творится в приложениях, и сможет активировать функции и даже отображать интерфейс вашего приложения прямо в системной панели. Настроить Siri под конкретное приложение можно довольно ограниченным способом: Siri ведет себя по-разному на часах, в машине, на iPhone или при голосовой активации. Это поведение полностью переносится на сторонние приложения. Диалоговый движок умеет распознавать как одинарные, так и многошаговые запросы. Самое обидное — предопределенный набор доменов (Domains) для распознавания: голосовые вызовы, заказ такси, отправка сообщений и некоторые другие. Конечно же, инженеры эппл обещают дополнять домены в будущем. Но зато реализованные домены работают здорово: можно выбирать разные формулировки, слэнг, последовательность разговора. Это не идет ни в какое сравнение с тем, что сейчас происходит на рынке чат-ботов, которые по сути решают ту же проблему. ▸ 217 — Introducing SiriKit
▸ 225 — Extending Your Apps with SiriKit SiriKit — не единственная точка входа в приложение. Контент можно искать через Spotlight, он может рекламироваться на основе Handoff, в iMessage могут появляться сообщения из приложений, а Geofencing и маяки iBeacon позволяют предлагать приложения на основе местоположения. О том, как работать с таким количеством точек входа — в следующих сессиях: ▸ 240 — Increase Usage of Your App With Proactive Suggestions
▸ 223 — Making the Most of Search APIs В iOS 10 пользователь получит новый дизайн оповещений. Помимо того, что они будут отображаться в виде одинаковых баннеров во всей системе, добавится поле Title. Если сделать Force Touch на уведомлении, то есть возможность отобразить часть интерфейса приложения через App Extensions, но эта View будет не интерактивной. Также к нотификациям можно прикладывать медиа-файлы (картинки, гифки, аудио, видео) в формате ссылки в полях payload. ▸ 708 — Advanced Notifications
▸ 724 — What's New in the Apple Push Notification Service
▸ 707 — Introduction to Notifications В iMessage добавилась куча новых функций, но для нас, разработчиков, важны две: стикеры и App Extensions.
Стикеры можно создавать прямо в Xcode, поддерживаются как статичные, так и анимированные варианты. Стикеры можно размещать в отдельном iMessage AppStore, то есть создавать родительское приложение не требуется. Для больших приложений доступна возможность писать расширения в iMessage. Например, приложение по бронированию столиков можно использовать для того, чтобы отправить карточку брони друзьям. При этом карточка покажется даже тому, у кого приложение не стоит, и это дополнительный канал для вирального распространения. Конечно же, приложения смогут вставлять изображения и ссылки в чат. Все это работает через App Extensions, то есть интерфейс отображается прямо внутри iMessage. Отправленные сообщения будут видны на маке и часах. ▸ 204 — iMessage Apps and Stickers, Part 1
▸ 224 — iMessage Apps and Stickers, Part 2  В инструментах разработчика много нового. Помимо переименования кучи системных API (см. раздел Swift) добавлены и новые плюшки. ▸ 205 — What's New in Cocoa Touch
▸ 213 — Improving Existing Apps with Modern Best Practices
▸ 216 — Advances in UIKit Animations and Transitions
▸ 230 — Enhancing VoIP Apps with CallKit
▸ 220 — Leveraging Touch Input on iOS
▸ 236 — What's New in Auto Layout
▸ 228 — A Peek at 3D Touch
▸ 219 — What's New in UICollectionView in iOS 10 Стоит также обратить внимание на сессии про работу с AutoLayout и Size Classes в разделе Xcode.  В системных фреймворках всегда много изменений, сказывается конкуренция с Android и необходимость предоставлять разработчикам самые актуальные средства. Для пользователя это все не очень заметно на первый взгляд (разве что поддержка расширенного RGB на новых айпадах и айфонах), но возможности разработчиков расширяются. ▸ 720 — Concurrent Programming With GCD in Swift 3
▸ 716 — Core Location Best Practices
▸ 711 — NSURLSession: New Features and Best Practices
▸ 714 — Networking for the Modern Internet
▸ 719 — Optimizing I/O for Performance and Battery Life
▸ 712 — Working with Wide Color
▸ 242 — What's New in Core Data Несколько сессий про оптимизацию скорости запуска и полировку iOS-приложений:
▸ 406 — Optimizing App Startup Time
▸ 420 — Optimizing Web Content in Your App
▸ 221 — Optimizing On-Demand Resources В прошлом году был представлен механизм работы с XLIFF. В этот раз сессии скорее про лучшие практики, чем про новые механизмы:
▸ 238 — Measurements and Units
▸ 201 — Internationalization Best Practices
▸ 232 — What's New in International User Interfaces В Купертино нереально заморачиваются по приватности и безопасности. Большинство экспертов, в том числе и российских, признают, что модель безопасности iOS намного более продуманная и защищенная, чем реализация в Android. Полный контроль над ПО и железом позволяет организовать многослойную защиту, и именно поэтому за почти 10 лет существования платформы не были ни одного массового случая кражи пользовательских данных или средств. ▸ 705 — How iOS Security Really Works
▸ 706 — What's New in Security  В iOS 9.3 был представлен режим shared iPad, когда одним устройством могут пользоваться несколько appleID-аккаунтов. Это актуально для школ или предприятий.
По сути весь механизм заключается в сохранении и загрузке контента через iCloud: между сессиями все блокируется и данные остаются индивидуальными. Есть оптимизации, благодаря которым iPad не будет перекачивать все данные заново, если хоть когда-то их уже скачал. Это относится и к on-demand resources, и к keychain, и к загруженным UserPreferences.
Представленные ранее фреймворки HealthKit, ResearchKit и CareKit не получили пока широкого распространения на российском рынке, но истории успеха на западе говорят сами за себя. ▸ 304 — Best Practices for Building Apps Used in Business and Education
▸ 237 — Getting Started with CareKit
▸ 209 — Getting the Most Out of HealthKit
▸ 234 — What's New in ResearchKit
▸ 713 — Health and Fitness with Core Motion В watchOS 3 большинство нововведений касаются исправления тех дефектов, которые делали предыдущие версии платформы неюзабельными. Появился AppDock, который не только содержит ссылки на запуск избранных приложений, но и заставляет систему постоянно держать их в запущенном состоянии и запускать за доли секунды. Для этого же предусмотрен механизм обновления в бэкграунде всех компонентов приложения: скриншота в доке, Complication на главном экране и приложения на iPhone. Также сторонним приложениям теперь доступны все события digital crown, полный контроль над обработкой touch input (жесты swipe, drag, pan, long press) и постоянный доступ к данным акселерометра. Есть надежда, что со всем этим можно делать такие же быстрые и отзывчивые приложения, как на iOS.
Нотификации в watchOS теперь могут быть локальными — то есть показываться только на часах и не попадать на телефон. ▸ 235 — Building Great Workout Apps
▸ 208 — What's New in watchOS 3
Скажу честно, на сессии 208 можно остановиться. Все остальное — это то же самое, но под другим соусом:
▸ 211 — Quick Interaction Techniques for watchOS
▸ 227 — Architecting for Performance on watchOS 3
▸ 218 — Keeping Your Watch App Up to Date Сессий по дизайну в этом году было меньше, да и контент не слишком интересный. Конечно, вся информация собрана в гайдлайнах, но иллюстрация не помешает. Как известно, в системах Apple с прошлого года используется новое семейство шрифтов San Francisco. В этом году добавляются моноширинные разновидности во всех начертаниях: SFMono. В Xcode 8 все они будут включены по умолчанию, из особенностей: ширина символов одного кегля одинаковая во всех начертаниях, цифры и символы специально настроены для разработки, в шрифтах есть кириллические символы. ▸ 803 — Typography and Fonts Для watchOS у дизайнеров Apple есть несколько рекомендаций. Приложения должны в первую очередь быть "glanceable", то есть доставлять контент за минимальное количество шагов. Типичное время взаимодействия с часами должно оставаться в пределах 2 секунд.
▸ 804 — Designing Great Apple Watch Experiences Также в этом году вышло традиционное продолжение сессий про дизайн в Keynote. В деталях рассмотрен процесс прототипирования и отсмотра вариантов.
▸ 805 — Iterative UI Design
▸ 801 — Inclusive App Design
▸ 802 — Designing for tvOS Каждый год проходит Design Awards. Вдохновиться можно здесь:
▸ 103 — Apple Design Awards  Для Swift 3, помимо изменений синтаксиса, были переименованы тысячи методов в системных фреймворках. Эппл называет это “Grand Renaming”, и системные API наконец-то избавляются от старого наследия. ▸ 402 — What's New in Swift
▸ 403 — Swift API Design Guidelines
▸ 419 — Protocol and Value Oriented Programming in UIKit Apps
▸ 207 — What's New in Foundation for Swift
▸ 404 — Getting Started with Swift
▸ 416 — Understanding Swift Performance Так как Swift был год назад выложен в опенсорс, Apple продвигает его в том числе и как язык для серверной разработки.
▸ 415 — Going Server-side with Swift Open Source На iPad скоро выйдет приложение Swift Playgrounds — редактор кода для обучения детей программированию на языке Swift.
▸ 408 — Introducing Swift Playgrounds  Xcode становится лучше каждый год, хотя все еще остаются противные косяки и проблемы. Система подписи приложений для тестирования на устройствах серьезно переделана. Если раньше кнопкой Fix Issue пользовались только любители острых ощущений, то теперь логика подписи позволит системе самостоятельно разрешать большинство проблем. Теперь в настройках проекта рекомендуется включить настройку Automatic Signing, и все сертификаты и провижн-профили будут сгенерированы и настроены по AppleID аккаунта разработчика. Это значит, что можно спокойно работать на нескольких рабочих машинах и смело коммитить настройки проекта для коллег. Также автоматически будут работать настройки Capabilities.
Конечно, все еще есть возможность делать все самостоятельно, чтобы четко отправить сборку в аппстор. ▸ 401 — What's New in Xcode App Signing
▸ 213 — Improving Existing Apps with Modern Best Practices
▸ 409 — Advanced Testing and Continuous Integration
▸ 417 — Debugging Tips and Tricks
▸ 414 — Using and Extending the Xcode Source Editor
▸ 410 — Visual Debugging with Xcode
▸ 413 — Introduction to Xcode ▸ 222 — Making Apps Adaptive, Part 1
▸ 233 — Making Apps Adaptive, Part 2 В инструментах тоже есть обновления и новые фичи.
▸ 411 — System Trace in Depth
▸ 412 — Thread Sanitizer and Static Analysis
▸ 418 — Using Time Profiler in Instruments Изменения в iTunesConnect небольшие, но важные: ▸ 305 — What's New in iTunes Connect
▸ 301 — Introducing Expanded Subscriptions in iTunes Connect
▸ 302 — Introducing Search Ads  Все остальные сессии (а там еще много про разработку игр, macOS и tvOS) можно посмотреть на developer.apple.com