My WWDC 2022 viewing guide to help you plan the sessions you want to watch.
Where Do I Start?
Watch the Platforms State of the Union (SOTU) for a summary of what’s new. If you’re in doubt about where we’re headed here’s a quote from Josh Shaffer:
The best way to build an app is with Swift and SwiftUI.
You don’t have to learn everything new today!
There are ~175 sessions and a huge amount of new stuff to learn. You may feel like you’re getting left behind. Don’t let it overwhelm you. You’ve got time.
Many of the new API’s need iOS 16 so it may be a while before you can use them. Don’t burn yourself out trying to keep up.
Watching The Sessions
I watch the videos using the Apple Developer app. It’s available on macOS and iOS. The video player supports from 0.5x to 2x playback, most videos have transcripts and allow copying of the onscreen sample code.
There are a lot of sessions, but many are short (10-20 minutes). There’s no padding and Apple’s engineers get to the point quickly.
What’s new in Swift and the Swift Package Manager.
- What’s new in Swift Recap of changes to Swift 5.7. Swift package command and build tool plugins. Module aliases. Swift concurrency improvements including opt-in safety checks and distributed actors. Regex builder, and more.
- Embrace Swift generics A great explanation from Holly Borla on when and how to use generics. Watch this session if you’re confused about when to use
- Design protocol interfaces in Swift Slava Pestov follows up with an explanation of modeling types with protocols. Combine this with the previous session on generics and you’ll be up to speed on a key change in Swift 5.7.
- Meet distributed actors in Swift Extending Swift’s actor model for distributed systems.
This is a great addition to Swift.
- Meet Swift Regex Regular expressions come to Swift. Use Regex literals or RegexBuilder.
- Swift Regex: Beyond the basics A deeper dive into using Regex.
- Eliminate data races using Swift Concurrency Lots of tips on adopting concurrency. Sendable types for sharing data between tasks. Actors isolate mutable state, are sendable, and run one task at a time. Think transactionally. Opt-in for stricter concurrency checking.
- Visualize and optimize Swift concurrency New Swift Concurrency template in Instruments to visualize concurrency code.
- Meet Swift Async Algorithms Summary of the Async Algorithms open source package for producing values over time.
This is a big year for SwiftUI. Apple has fixed many of my pain points (and feedback reports).
- What’s new in SwiftUI Swift charts. Data driven programmatic navigation stacks and split views. Scene API for windows. Resizable sheets and control improvements. Tables and customizable toolbars on the iPad. New shape styles for gradients, drop shadows. New grid layout and layout protocol for custom layouts.
- The SwiftUI cookbook for navigation The new navigation API’s look great. This is a must watch SwiftUI session.
- Compose custom layouts with SwiftUI Grid view and the custom layout protocol are going to make building many common layouts a lot less painful without the need for geometry reader. ViewThatFits will also be great for adaptive layouts.
- The craft of SwiftUI API design: Progressive disclosure Lots of tips, using examples from SwiftUI, on designing your reusable components. Optimize for the common uses, intelligent defaults, optimize the call site and compose, don’t enumerate.
- Efficiency awaits: Background tasks in SwiftUI Schedule background app refresh tasks with new API that uses Swift Concurrency and works across all platforms.
- Bring multiple windows to your SwiftUI app Two new Scene types. Window for a single, unique window (WindowGroup allows multiple windows). MenuBarExtra for system menu bar control. Programmatically open new windows/documents.
Did you need another reason to adopt SwiftUI?
- Hello Swift Charts Another huge addition to SwiftUI. A declarative way to build great looking, and accessible charts.
- Swift Charts: Raise the bar A deeper dive into the many types of charts and the wide range of customization options.
A couple of design-focussed chart sessions with ideas to make your charts effective and accessible:
- Design an effective chart Choosing marks, axes, descriptions, interactions, and color to make your charts effective.
- Design app experiences with charts Use smaller non-interactive charts higher in the navigation hierarchy that lead to expanded, interactive charts.
A reminder that UIKit still exists:
- What’s new in UIKit Navigation bar styles and customizable toolbars. UICalendarView. Customizable page controls. Custom detents for sheets. Stage Manager deprecates some UIScreen APIs - don’t assume you’re on the main screen. UICollectionView cells are self sizing by default and can host SwiftUI views. UIDevice orientation is no longer supported.
- Use SwiftUI with UIKit UIHostingController can now automatically update preferred and intrinsic content sizes. Use SwiftUI for collection and table view cells with UIHostingConfiguration.
AppKit and Mac Catalyst
- What’s new in AppKit Get ready for Stage Manager. Updated settings appearance (preferences are now named settings). New combo buttons, color well styles, toolbar customization, compact (iOS style) alerts expand when needed. New sharing picker.
- Use SwiftUI with AppKit Lots of examples taken from the Shortcuts macOS app. NSHostingController hosts a SwiftUI list for the split view sidebar. Each collection view cell uses NSHostingView to host SwiftUI. Representable protocols to embed AppKit controllers or views in a SwiftUI view.
- Bring your iOS app to the Mac Native iOS apps on M1 can launch to true screen size or full screen on Mac. Opt-in to touch alternatives. Mac Catalyst has new API for window geometry and controls and to support the new desktop-class iPad toolbars.
Apple continues to bring macOS features to the iPad which makes it easier to build apps that work well on both platforms.
- Meet desktop class iPad New navigation styles make room for center toolbar items. User customizable toolbars. Title menus and a more compact inline search bar.
- Build a desktop-class iPad app Updating iPad apps with the new desktop-class navigation, collection view, menu and editing APIs. See the sample code.
- Adopt desktop class editing interactions Many of the improvements to the text edit menu come for free. A new delegate method allows you to insert items into the menu. Inserting items with UIMenuController is now deprecated. New find and replace panel.
- What’s new in iPad app design Designing iPad apps with the new desktop-class features. Examples cover a document based App and a content browser style App. See also the use of the new Table view.
A two-parter that walks through the many changes to iPadOS interfaces in iOS 16:
- SwiftUI on iPad: Organize your interface Lists and multi-column tables (same API as macOS but don’t scroll horizontally), selection and menus, split views.
- SwiftUI on iPad: Add toolbars, titles, and more New toolbar features, leading aligned navigation titles, title menus and centered aligned toolbar items. Toolbar customization.
The big new feature for watchOS 9 is probably WidgetKit but it also gains many of the SwiftUI improvements:
- Go further with Complications in WidgetKit Migrate ClockKit complications to WidgetKit.
- Build a productivity app for Apple Watch New WatchOS Apps created in Xcode 14 have a single target (Xcode can migrate older projects). TextFieldLink button for text input. Stepper to edit sequential values. Support for ShareLink for sharing and SwiftUI charts. Digital crown rotation modifier.
- Get timely alerts from Bluetooth devices on watchOS Background updating of complications with Bluetooth accessories.
The keynote barely mentioned tvOS but it does get some improvements:
- Support multiple users in tvOS apps Maybe we’ll get multiple users on the iPad one day?
Xcode 14 has a big focus on performance improvements:
- What’s new in Xcode Previews are interactive by default. New canvas control to vary traits like color scheme or dynamic type with no need to add preview code. SF Symbols now in library. Single target can support multiple platforms. Build (and testing) parallelization up to 25% faster depending on cores. TestFlight feedback in the organizer. Xcode can now generate all App icon sizes from a single 1024x1014 image (hooray!).
- Use Xcode to develop a multiplatform app In Xcode 14, a single app target can support many destinations. New multiplatform app template uses SwiftUI and supports iPhone, iPad and Mac.
- Get the most out of Xcode Cloud Xcode Cloud has impressed me during the beta. It’s now open to all with some free usage up to end of 2023. Quick tip, add “[ci skip]” to a commit message to have Xcode Cloud skip a build.
- Deep dive into Xcode Cloud for teams Webhooks and Xcode Cloud API to integrate with external tools. Using a custom build script to integrate SwiftLint.
- Author fast and reliable tests for Xcode Cloud Some general tips on making tests faster and more reliable.
- What’s new in Swift -DocC Document Apps, Objective-C and C APIs. Publish to web servers including an example of publishing to GitHub pages.
- Improve the discoverability of your Swift-DocC content New navigation experience when browsing documentation. Tips on organising your topics.
- Demystify parallelization in Xcode builds Xcode Build Timeline visualizes how it parallelizes a build (assistant editor when viewing the build log). Different colors for each target. Empty space show blocked tasks. Sandboxed shell scripts that define their inputs/outputs help the build system manage dependencies. Eager linking for pure Swift targets.
- Link fast: Improve build and launch times Faster (2x) static linker in Xcode 14. Find balance between static (slower build times) and dynamic libraries (slower launch times). New tools dyld_usage and dyld_info to examine linking process.
Performance and Debugging
- Track down hangs with Xcode and on-device detection New tools to detect when main thread is unresponsive. Thread performance checker shows hangs as runtime issues in Xcode navigator. Hang Detection Labeller in Instruments when profiling App. On-Device Hang Detection in Developer settings. Xcode Organizer shows aggregated hang reports for users who share app analytics.
- Improve app size and runtime performance Swift runtime on iOS 16 precomputes protocol checks improving launch time. Objective-C message send up to 8 bytes smaller. Retain/release calls up to 4 bytes smaller. Autorelease elision faster and smaller.
- Debug Swift debugging with LLDB Deep dive into LLDB and source path remapping. swift-healthcheck command.
- Power down: Improve battery consumption Adopting dark mode, reducing frame rate, reducing use of services like location or audio when running in background, deferring work.
Swift Package Manager Plugins
- Meet Swift Package plugins Command plugins for custom actions such as formatting source code. Build tool plugins extend the build system. Useful for generating source code or resources.
- Create Swift Package plugins A more detailed walk through of creating plugins.
- Build your first app in Swift Playgrounds Create an app from a blank project through to submitting to TestFlight all from an iPad playground.
- Create engaging content for Swift Playgrounds Building guided educational content.
- Use Xcode for server-side development Using Swift to build server components with web frameworks like Vapor.
- Simplify C++ templates with concepts C++20 features in Xcode 14.
- Build global apps: Localization by example Translations depend on context. Joining strings can also cause problems. Export Localizations now also works for Swift Packages. SwiftUI Grid view and ViewThatFits helps to build layouts that adapt to localized string sizes.
- Design for Arabic Optimizing for the Arabic script. UI is right-to-left. Arabic words are more concise but taller. Arabic fonts are not case sensitive and usually match Latin lowercase size. May want to increase Arabic font size by 10%. Nice touch to make this session available in Arabic
- Get it right (to left) Supporting right-to-left (RTL) languages. Arabic and Hebrew are the most common RTL languages. SF Symbols supports RTL languages, flips forward/backward symbols, but not left/right symbols. Use the RTL Pseudolangauge to preview.
- What’s new in web accessibility Use semantic HTML, add roles and ARIA attributes to custom controls. Speech Synthesis Markup Language (SSML) to control text-to-speech.
- Create accessible Single App Mode experiences Single App Mode locks the device to a single app. Guided access lets users put any app in Single App Mode. Use the delegate methods to restrict features (e.g. account settings) during guided access. Apple Configurator locks devices into single app mode.
App Store and Distribution
- What’s new in App Store Connect Enhanced submission experience now on App Store Connect App for iPadOS and iOS. Connect API 2.0 release will include in-app purchase and subscriptions. Fetch and respond to reviews. XML feed decommissioned in the fall.
- What’s new in StoreKit testing IAP setup in App Store Connect syncs with StoreKit Testing in Xcode 14. New transaction inspector. Streamlined sandbox account creation and billing failure simulation.
- What’s new with in-app purchase Improvements to StoreKit 2. Example of moving from paid app to free with IAP. SwiftUI APIs for offer codes and requesting reviews. App Store messages, for example, a price increase, present over the app.
- Implement proactive in-app purchase restore Restore in-app purchases when user first opens app. See the SK Demo app.
- Explore in-app purchase integration and migration Migrating to the App Store Server APIs and Server Notifications.
- Discover Benchmarks in App Analytics New App Benchmarking tool (“early next year”). Compares app performance relative to peer group. Benchmarks for acquisition, usage and monetization.
- What’s new with SKAdNetwork Updates in SKAdNetwork 4.0, Apple’s privacy preserving Ad attribution network.
Photos and Camera
- Bring Continuity Camera to your macOS app Demo showing iPhone used as a webcam in Zoom.
- Discover PhotoKit change history PHPhotoLibrary change history API to track changes in image assets.
- What’s new in the Photos picker New filters in PHPicker for screenshots, recordings and other asset types (backported to iOS 15). Picker now available on macOS and watchOS and iPadOS has a new design. PhotoPicker API available on AppKit and SwiftUI. Uses Transferable for sharing.
- Discover advancements in iOS camera capture: Depth, focus, and multitasking Using the LIDAR scanner for depth measurement (new in iOS 15.4). Prioritizing faces for focus and exposure. Multiple video capture outputs so you can customize for each use (e.g preview vs recording). Access camera while user is multitasking.
- Create camera extensions with Core Media IO Create macOS system extensions for hardware or virtual cameras. Camera extensions replace legacy DAL plug-ins which Apple will disable in next major release after macOS 13.
Privacy and Security
- What’s new in privacy Device name access returns device model unless you have an entitlement. MacOs Ventura has new API to launch your app at login. Use UIKit paste controls to avoid system confirmation prompts. Private access tokens replace CAPTCHAs. Passkeys replace passwords. Safety Check to review and reset shared access.
- Meet passkeys Built on FIDO, the private key stays on device and is never shared with the server. Is this the end of passwords?
- Get to know Developer mode New way to enrol device into development. Apple says this is to prevent abuse.
- What’s new in notarization for mac apps Migrate to Xcode 14 or notarytool by fall 2023.
- Create your Privacy Nutrition Label Have you checked the privacy nutrition label for your app’s privacy practises?
- Replace CAPTCHAs with Private Access Tokens Privacy pass standard removes need for CAPTCHAs. Needs a token issuer that works with Apple devices (Fastly and Cloudflare).
- Streamline local authorization flows New higher level authorization LARight API to simplify common flows.
- Enhance your Sign in with Apple experience Recap and some iOS 16 updates to Sign in with Apple.
- Explore App Tracking Transparency As a developer, you’re responsible for the behavior of your whole app including any third-party SDK’s you use. You need to ask permission to track user data across apps and websites owned by other companies. Fingerprinting is never allowed.
- Improve DNS security for apps and servers DNSSEC client side validation now supported in iOS 16 and macOS Ventura. Option on URLSession configuration or request. Encrypted DNS used automatically if network supports DDR.
Core Data and CloudKit
- Optimize your use of Core Data and CloudKit Explore how CloudKit sync works with test data generators in your tests and sample apps. Use Instruments and Logs to analyze what’s happening.
- Evolve your Core Data schema Essential viewing if you’re using Core Data with CloudKit. CloudKit schema is immutable in production, you can add but never remove fields and records. Lightweight migration only changes the store on disk. Initialize the schema and promote changes from development to production.
- What’s new in CloudKit Console Hide development and test containers. Act as an iCloud account to query private data for that account.
- Meet Transferable A new Swift declarative framework to describe and serialize your models for sharing. Transferable can make use of Codable conformance, but data and file representations are also possible.
Maps and Location
- What’s new in MapKit Recompile to opt-in to new 3D City Experience. MKMapView properties are soft deprecated in iOS 16, use new map configuration API. New blend modes API. Selectable Map Features API. Look Around.
- Meet Apple Maps Server APIs Four new server APIs for geocoding, reverse geocoding, search and ETA. Daily cap of 25,000 calls.
- What’s new in Nearby Interaction ARKit enhanced nearby interaction to guide a user to a nearby object. Background interactions with Bluetooth accessories.
- Reduce networking delays for a more responsive app MultipathServiceType to avoid stalls when migrating from cellular to WiFi. Use the network quality tool to measure buffer bloat. Enable L4S in developer settings/defaults to reduce queuing delay.
- Build device-to-device interactions with Network Framework New DeviceDiscoveryUI framework pairs with Network framework to discover nearby devices and connect them. No need to request local network access.
- Meet Background Assets New app extension to download large files from CDNs in background after app installation, update or periodically so updated content is available when user launches the app.
- What’s new in Wallet and Apple Pay New SwiftUI API’s to add Apple Wallet and Apple Pay buttons. Automated recurring payments. Order Tracking (supported by Shopify, Narvar and Route). Identity Verification API for locations that allow users to add an ID to wallet.
- What’s new in TextKit and text views All text controls in UIKit and AppKit now use TextKit 2. Now supports exclusionPaths that text will flow around. Improved line breaking for justified paragraphs. Avoid accessing the layoutManager property which triggers TextKit 1 compatibility mode.
- What’s new in PDFKit Support Live Text in PDF documents. New API to create pages from images. Install overlay view on PDF page to allow drawing on page with PencilKit.
Widgets and App Clips
- Complications and widgets: Reloaded Add widgets to iOS lock screens and as complications to watchOS.
- What’s new in App Clips Size limit raised to 15 MB. Access to CloudKit public databases and local keychain.
App Intents and Shortcuts
- Dive into App Intents Support shortcuts by exposing your app’s functionality through App intents.
- Implement App Shortcuts with App Intents Deeper dive into creating App shortcuts using intents.
- Meet Focus filters Filter your app’s content and behaviour during a focus mode. Define what the user can customize with an App focus filter intent.
- Design App Shortcuts The best features to turn into shortcuts are self-contained, lightweight tasks that don’t need your App in focus. Maximum of ten/app. Name should be brief, must include App name. One dynamic parameter per shortcut.
- What’s new in HealthKit More detailed sleep and workout data. Save vision prescriptions. HealthKit query API supports Swift Async (iOS 15.4).
- Meet WeatherKit Build your own weather app. Access to Apple Weather Service for current, forecast and historical weather of a location. Use WeatherKit Swift framework or REST API. Must display attribution and Apple Weather logo.
- Get more mileage out of your app with CarPlay Enabling your App in CarPlay. New fuelling and driving task app types. New CarPlay Simulator Mac app.
- Design for Collaboration with Messages Some practical tips on designing for collaboration using the share sheet and messages.
- Enhance collaboration experiences with Messages Connect and collaborate on documents using Messages.
- Add Shared with You to your app How to adopt Shared With You. Shelf view shows content shared with the user in Messages. Attribution view shows who shared the content. Builds on universal links.
- Integrate your custom collaboration app with Messages Deeper dive into the SharedWithYou framework.
- Explore navigation design for iOS Practical tips and best practices for iOS navigation. This is a great session.
- Meet the expanded San Francisco font family SF Pro now has condensed, compressed and expanded widths. New SF Arabic Rounded font family.
- Writing for interfaces Good tips on how to choose the words in your app. Purpose, Anticipation, Context, Empathy (P.A.C.E.).
- What’s new in SF Symbols 4 Over 700 new symbols including in home, health, fitness, and currency categories. Variable color to highlight changing state.
- Adopt variable color in SF Symbols Adding variable color to your custom symbols.
Safari and Web
- What’s new in WKWebView New full-screen API, new CSS viewport units. Set findInteractionEnabled on WKWebView to enable familiar text search UI. Encrypted media. Remote web inspector now works in third-party browsers on iOS.
- What’s new in Safari and WebKit Summary of HTML, CSS and WebKit enhancements coming in Safari 16.
- Meet Web Push for Safari Web Push notifications come to Safari 16.
- Meet CKTool JS Manage iCloud containers using CKTool JS. NPM package.
- What’s new in Safari Web Extensions Manifest version 3 allows extensions to use service workers.
- Create Safari Web Inspector Extensions Add your own tools to Web Inspector using the Xcode Safari Extension app template.
- Bring your driver to iPad with DriverKit DriverKit now on (M1) iPads.
- Create macOS or Linux virtual machines Run macOS virtual machines on Apple silicon, run Linux on Apple silicon or Intel. See the sample code if you want to try it.
- Explore SMS message filters Walk through building a message filter extension. In iOS 16, filter classification has 12 more sub-categories. Only one filter can be active at a time. Apple supplies an SMS filter for India.
Audio and Video
- What’s new in SharePlay New APIs for starting SharePlay in your app without an existing FaceTime call.
- Make a great SharePlay experience Best practises for using the Group Activities framework.
- Explore more content with MusicKit Access curated and Radio Show content and a user’s local music library.
- Meet Apple Music API and MusicKit For Apple platforms use MusicKit framework. For other platforms use MusicKit on the web or MusicKit for Android.
- Meet ScreenCaptureKit ScreenCaptureKit for high performance screen capture used in apps like OBS Studio on the Mac.
- Take ScreenCaptureKit to the next level Deeper dive and demo of using ScreenCaptureKit with OBS.
Extended Dynamic Range
- Explore EDR on iOS Apple’s Extended Dynamic Range technology is supported by apps like Pixelmator Photo to show HDR content. The API is now supported on iOS.
- Display EDR content with Core Image, Metal, and SwiftUI Sample code project for using Core Image and Metal in a SwiftUI app.
- Display HDR video in EDR with AVFoundation and Metal Using AVPlayer to display HDR video as EDR.
Other Audio and Video Sessions
- Create custom catalogs at scale with ShazamKit New ShazamKit CLI to create large catalogs of audio signatures. Make everything “Shazamable”.
- Explore media metadata publishing and playback interactions Publishing Now Playing Information using MPNowPlayingSession now available on iOS 16.
- What’s new in AVQT Advanced Video Quality Tool assesses the quality of videos. Adds HTML based interactive reports and is now available on Linux.
- Create a great video playback experience New media player in iOS 16 adopting the look and feel of the tvOS player. New visual intelligence features, select and copy text from paused video, enabled by default. Playback speed menu.
- Create a more responsive media app New async AVFoundation APIs for loading assets.
- Enhance voice communication with Push to Talk The PushToTalk framework for walkie-talkie style audio interfaces.
- Discover ARKit 6 A new 4K video mode for high resolution content (iPhone 11 or M1 iPad Pro). Recreating the pirate flag photo at the Infinite Loop campus. New plane anchor behavior and improved motion capture now tracks left/right ear, improves pose detection and has more stable tracking.
- Bring your world into augmented reality Object Capture and RealityKit updates.
- Create parametric 3D room scans with RoomPlan RoomPlan is a new framework for scanning a room.
- Qualities of great AR experiences When should you use AR?
- Explore USD tools and rendering USDZ Tools support python 3 and Apple Silicon. Reality Converter can fix common issues. AR Quick Look has improved lighting. HydraPlayer sample project.
- Understand USD fundamentals Explainer of USD core concepts.
- What’s new in Create ML Create ML app helps you evaluate the quality of your model. ML Framework now on tvOS (Tabular classifier only). ML Components expose the underlying building blocks.
- Get to know Create ML Components Access the underlying components of each classifier to build custom tasks.
- Compose advanced models with Create ML Components Interesting example of using temporal transformers to count workout repetitions.
- Optimize your Core ML usage Generate performance reports for your model. Core ML models can be included in Swift Packages.
- Accelerate machine learning with Metal PyTorch support for Metal GPU acceleration on Apple silicon. TensorFlow and MPS Graph improvements (used by DaVinci Resolve 18 magic mask feature).
- Explore the machine learning development experience Walkthrough of the various tools, frameworks, and APIs to bring machine learning to your app.
- Add Live Text interaction to your app The Live Text API added to VisionKit makes it easier to support Live Text for still images.
- Capture machine-readable codes and text with VisionKit VisionKit now has a data scanner combining AVCapture and Vision for live capture.
- What’s new in Vision New text recognition and supported languages. Automatic language detection. New barcode detection. Data Scanner API makes it easier to implement text and barcode scanning. Quick Look Preview support.