Here’s my viewing guide for the WWDC 2021 sessions I found interesting this year.
Where Do I Start?
Watch the Platforms State of the Union (SOTU) for a summary of what’s new. It has a demo of Xcode Cloud, Holly Borla introducing the Swift concurrency changes, Josh Shaffer covering updates to SwiftUI and more.
You don’t have to learn everything new today!
There’s 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 require iOS 15 so it may be a while before you can use them. Don’t burn yourself out trying to keep up.
- Meditation for fidgety skeptics might help.
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, many videos have transcripts and support 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.
The open source nature of the Swift project makes these sessions less of a surprise but they are still essential viewing:
- What’s new in Swift A recap of what’s been happening with Swift and some of the changes in Swift 5.5.
Swift Concurrency and async/await/actors are one of the big features this year. This first session is essential viewing but note that Swift Concurrency needs iOS 15:
- Meet async/await in Swift I was a little unsure about the excitement around async/await. This session helped me understand what it means.
Deeper sessions that I’m going to be rewatching many times…
- Explore structured concurrency in Swift
- Protect mutable state with Swift actors
- Meet AsyncSequence
- Swift concurrency: Behind the scenes
The theory is great but how do you use it?
- Use async/await with URLSession
- Swift concurrency: Update a sample app Don’t miss this refactoring session with Ben Cohen.
Other interesting Swift sessions
- Write a DSL in Swift using result builders Great session on using result builder to create your own DSL.
- Discover and curate Swift Packages using Collections Create and share collections of Swift Packages.
- Meet the Swift Algorithms and Collections packages I like how we’re getting these Swift standard libraries as open source Swift packages.
- ARC in Swift: Basics and beyond Don’t rely on observed object lifetimes. Experimental build setting to optimize object lifetimes.
The third release of SwiftUI is a solid update with lots of rough edges removed and gaps filled:
- What’s new in SwiftUI An overview of many of the changes. Async image loading, async task modifiers, list separator customizations, swipe actions, tables on macOS, searching, canvas for drawing, markdown text support, focus and button styles and more. Essential viewing.
The detailed sessions:
- Demystify SwiftUI Essential viewing. I’d love to see a session like this on SwiftUI layout.
- Discover concurrency in SwiftUI Great session on how to use concurrency with SwiftUI.
- Craft search experiences in SwiftUI No more rolling your own search bar. A cross-platform searchable modifier with support for search suggestions. This looks great.
- Add rich graphics to your SwiftUI app Using safe areas, foreground styles, materials and drawing with the canvas view.
- SF Symbols in SwiftUI New modifiers and rendering modes for the updates to SF Symbols 3.
- Direct and reflect focus in SwiftUI Controlling focus.
Don’t forget about UIKit. There are some useful refinements here too:
- What’s new in UIKit Start with the quick summary of what’s changed.
The detailed sessions:
- Meet the UIKit button system Buttons are back to looking like buttons with easier customization, dynamic type and multiline support.
- Customize and resize sheets in UIKit Medium (half-screen) sized and non-modal sheets.
- Your guide to keyboard layout A new Auto Layout keyboard layout guide to keep your views away from the keyboard and optionally switch constraints when the undocked keyboard is near/away from edges.
- Make blazing fast lists and collection views Use prefetching and cell reconfiguration.
- SF Symbols in UIKit and AppKit Using the new SF Symbol features in UIKit and AppKit.
A big focus on the keyboard this year:
- Take your iPad apps to the next level Extend iPad window support by allowing the user to open specific content in a new window scene. New interface for keyboard shortcuts using UIMenuBuilder. Pointer enhancements.
- Focus on iPad Keyboard navigation Controlling focus to customize keyboard navigation.
Mac & Catalyst
- What’s new in AppKit AppKit also gets SF Symbols 3, TextKit 2, and Swift Concurrency API updates. New property wrapper for view invalidation removes some boilerplate.
- Meet Shortcuts for macOS Shortcuts come to the mac. Includes migration tool for (now legacy) Automator workflows.
The many ways to make iOS apps run on a Mac:
- Qualities of great iPad and iPhone apps on Macs with M1 If your app works on M1 Macs use the Verify Compatibility link in App Store Connect to replace “Not verified for macOS” with “Designed for iPad” in the App Store.
- What’s new in Mac Catalyst New API for buttons, tooltips, printing and window subtitles.
- Qualities of a great Mac Catalyst app Recap of adding Catalyst support to an iPad app.
Two-part code-along building a Mac app. Using SwiftUI makes this familiar ground for iOS developers:
Always-on display for apps is the big feature this year:
- What’s new in watchOS 8 Always-on display for apps. Background delivery of HealthKit data and Bluetooth connections. Region based user notifications.
- There and back again: Data transfer on Apple Watch The many ways to transfer data to/from the watch. Jump to the end for a summary table.
- Connect Bluetooth devices to Apple Watch More on getting Bluetooth device data during background app refresh.
- Build a workout app for Apple Watch Making use of HealthKit data and always-on display.
The big news is Xcode Cloud, but there’s also a new documentation compiler and plenty of improvements in Xcode 13.
- Meet Xcode Cloud Build, analyze, test, archive and distribute. Sign up to the beta and give it a go.
- Explore Xcode Cloud workflows Customizing the workflow and some recommended workflows.
- Customize your advanced Xcode Cloud workflows Environment variables for secrets, custom scripts, additional repositories and webhooks.
DocC - Documentation Compiler
This is a huge improvement to the Xcode documentation tooling.
- Meet DocC documentation in Xcode This is great. Create reference docs, articles and tutorials and have them show up in the documentation browser or host them on the web.
- Host and automate your DocC documentation How to host your DocC archive on your web server. Automate the build and distribution of the DocC archive.
- Elevate your DocC documentation in Xcode Going beyond the basic symbol and method reference docs by adding a documentation catalog and articles.
- Build interactive tutorials using DocC Write interactive tutorials like the Apple SwiftUI landmarks tutorial.
- Build interfaces with style Finally… you can reorder storyboard scenes in the outline view and edit properties on groups of constraints. New button and table view cell content styles, SF Symbol and Accessibility inspector support.
- Localize your SwiftUI app Keyboard shortcuts get translated to work on different keyboards. Opt-in existing projects to use the compiler to extract strings.
- Streamline your localized strings Xcode 13 can directly view and edit exported localization catalogs. Automatic grammar agreement (for English and Spanish).
- Review code and collaborate in Xcode Pull request workflows for GitHub and BitBucket.
- Meet TestFlight on Mac Coming Fall 2021.
- Diagnose unreliable code with test repetitions Xcode 13 adds test repetition modes to run until failure, or retry on failure. Pause on failure to catch in debugger.
- Embrace Expected Failures in XCTest Use XCTExpectFailure to track expected failures.
- Explore Digital Crown, Trackpad, and iPad pointer automation UI Test support for iPad pointer, digital crown rotation and macOS trackpad so you can test things like swiping to show the sidebar.
Performance and Debugging
- Discover breakpoint improvements Column breakpoints are the feature I didn’t realise I needed.
- Analyze HTTP traffic in Instruments A new HTTP instrument. This looks useful.
- Ultimate application performance survival guide Recap of the many tools you can use to find performance issues in your app.
- Diagnose Power and Performance regressions in your app Using the organizer to look for performance regressions.
- Detect and diagnose memory issues New diagnostics for investigating memory test regressions (usage, leaks and fragmentation).
- Detect bugs early with the static analyzer Static analyzer now checks for infinite loops, unused/redundant code, side effects in asserts.
- Understand and eliminate hangs from your app
- Triage TestFlight crashes in Xcode Organizer TestFlight crash feedback now included in the Xcode crash organizer.
- Explore advanced project configuration in Xcode
- Symbolication: Beyond the basics A deep dive.
- What’s new in Foundation A completely new Swift AttributedString that supports inline markdown styles. Formatters get a rewrite removing the need to create the formatter. Grammar agreement in localized strings (Spanish and English only).
- What’s new in CloudKit Async versions of the API’s, encrypted fields and more fine-grained sharing with zones.
- Automate CloudKit tests with cktool and declarative schema New schema language and cktool command-line tool you can use as a pre-run script to configure a container before running a test.
- Meet CloudKit Console Redesigned console.
- Meet the Location Button Get allow-once location authorization without prompting each time.
- Bring Core Data concurrency to Swift and SwiftUIAsync versions of perform and performAndWait. SwiftUI get dynamic fetch request configuration and section fetch requests.
- Showcase app data in Spotlight Much easier way to index Core Data with spotlight. Requires SQLite store with history tracking enabled.
- Build apps that share data through CloudKit and Core Data Surprised these features did not get a mention in the SOTU. New API that makes it easier to mirror a private store to CloudKit and share records between users.
- Send communication and Time Sensitive notifications Set interruption levels on notifications to control how they work with the new notification management.
- Reduce network delays for your app New developer setting to test network responsiveness under working conditions (more than a simple speed test). Disappointing that Apple cannot improve the speed of light.
- Accelerate networking with HTTP/3 and QUIC On by default in iOS 15, QUIC is replacing TCP. Check with new HTTP instrument.
- Optimize for 5G networks.
- Adopt Quick Note Use NSUserActivity to connect app content with notes.
- Build Mail app extensions New MailKit framework for building mail extensions. Replacement for plugins.
- Meet TextKit 2 A new text engine. UITextField uses TextKit 2 automatically.
- Get ready for iCloud private relay iCloud+ routes Safari browsing, DNS queries and a subset of app traffic via proxy servers.
- Meet the Screen Time API Add Screen Time and parental controls to your app.
The accessibility sessions are always good:
- SwiftUI Accessibility: Beyond the basics Xcode 13 includes the accessibility preview inspector. The easier Apple makes it to support accessibility the better. Lots of good tips.
- Bring accessibility to charts in your app This is pretty cool. Using audio to make graphs accessible.
- Support Full Keyboard Access in your iOS app Full keyboard access is great for accessibility and power users.
- Tailor the VoiceOver experience in your data-rich apps AXCustomContent API to better handle data rich content. User controls when they want to hear additional content.
- Accessibility by design: An Apple Watch for everyone So many accessibility features turn out to be useful for everybody, even making Mickey talk.
- Create accessible experiences for watchOS Dynamic Type on the watch. Assistive Touch is like magic.
- Developer spotlight: Accessibility
App Store and Distribution
- Meet StoreKit 2 A new set of async/await Swift API’s for in-app purchase.
- Manage in-app purchases on your server New JWS transactions and App Store Server APIs.
- Support customers and handle refunds Extend a user’s subscription after a service issue. Display the manage subscriptions and request refund pages in-app.
- Get ready to optimize your App Store product page Create up to 35 custom product pages each with a unique URL. A/B test up to 3 treatments of a product page. Launching later this year.
- Meet in-app events on the App Store Another way to promote (and generate revenue) with in-app events that also show up on the App Store.
- What’s new in App Analytics New metrics for store transactions and app clip usage coming later this year.
- Distribute apps in Xcode with cloud signing Xcode 13 can create a new app in App Store Connect, manage build numbers automatically and keeps signing keys in the cloud.
- Faster and simpler notarization for Mac apps New notary tool for a one-line command to submit app.
Photos and Camera
- Use the camera for keyboard input in your app This is a great new feature. It needs a 2018 or newer iPhone with a neural engine.
- Improve access to Photos in your app Easier to adjust the selection of photos you’ve authorized for limited library access.
Privacy and Security
- Apple’s privacy pillars in focus The app privacy report in device settings will report your app’s activities to the user. Turn on Record App Activity and check what it will show.
- Secure login with iCloud Keychain verification codes TOTP codes are now built in to the iCloud keychain password manager.
- Mitigate fraud with App Attest and DeviceCheck
- Safeguard your accounts, promotions, and content
- Move beyond passwords Technology Preview of WebAuthn. Passkeys are stored in iCloud keychain removing need for physical key. Turn on in developer settings to test.
Safari and Web
- Design for Safari 15 A “reimagined browser experience”. Web site theme colors extend into the toolbar. Adjust content for the safe area.
- Explore WKWebView additions New API for media playback controls and managing downloads. Disabling text interaction.
- Meet Safari Web Extensions on iOS Safari web extensions are now supported on iOS 15.
- Explore Safari Web Extension improvements
- Discover Web Inspector improvements New CSS grid inspector and accessibility tests.
Widgets were the surprise hit of last year, but I’m not sure I’ve seen an App Clip in the wild.
- Principles of great widgets Mark views as privacy sensitive so they are redacted on locked devices. iPad has an extra large widget size.
- Add intelligence to your widgets Widget suggestions can now insert your widget into a smart stack based on intent donations.
- Donate intents and expand your app’s presence
- What’s new in Wallet and Apple Pay Wallet automatically hides expired passes.
- Add support for Matter in your smart home app Good to see Apple supporting a standard for home automation.
- Explore UWB-based car keys If you’re building a car…
- Discoverable design How do people discover what your app can do?
- The practice of inclusive design How can you make apps that appeal to everybody?
- The process of inclusive design
- What’s new in SF Symbols Over 600 new symbols, more localizations, new rendering modes including multicolor.
- Explore the SF Symbols 3 app Download the new SF Symbols app.
- Create custom symbols Walk through of creating a custom symbol.
Audio and Video
SharePlay and ShazamKit are the big news this year:
- Meet Group Activities Integrate group activities into your app to allow text, audio or video to work with SharePlay in group FaceTime or Message session.
- Coordinate media experiences with Group Activities Using the GroupActivities API.
- Build custom experiences with Group Activities Demo of the shared whiteboard in a FaceTime call.
- Design for Group Activities
- Explore ShazamKit Integrating Shazam audio matching into your app.
- Create custom audio experiences with ShazamKit Building a custom catalog of audio signatures.
MusicKit and Apple Music
- Meet MusicKit for Swift Integrating Apple Music.
- Explore the catalog with the Apple Music API Using Apple Music metadata in your app.
- Cross reference content with the Apple Music API Sharing content across regions.
Other Audio Sessions
- Practice audio haptic design Recap of Core Haptics.
Still no Apple Glasses but ARKit and RealityKit keep growing. Object Capture is the big development this year:
- Create 3D models with Object Capture Take pictures of an object on your phone. Transfer the files to your mac and use the photogrammetry API’s in RealityKit to build a 3D USDZ model.
- AR Quick Look, meet Object Capture
- Explore ARKit 5 Location anchors are coming to London.
- Dive into RealityKit 2
- Explore advanced rendering with RealityKit 2
Machine Learning and Vision
- Build dynamic iOS apps with the Create ML framework
- Discover built-in sound classification in SoundAnalysis Recognises over 300 sounds.
- Classify hand poses and actions with Create ML Train models to classify custom hand poses and gestures.
- Tune your Core ML models
- Detect people, faces, and poses using Vision Now handles people wearing masks.
- Extract document data using Vision Documentation segmentation detection.