Here’s my viewing guide for the sessions I found most interesting this year.
Where Do I Start?
Watch the Platforms State of the Union for an overview. The first 45 minutes cover the switch to Apple Silicon and macOS 11. Then comes iPadOS and iOS 14, watchOS 7 and Xcode 12. If you’re looking for changes to SwiftUI skip to the last ten minutes.
As always, there’s a huge amount of new stuff to learn this year and it can seem like you’re getting left behind. Don’t let it overwhelm you.
You don’t have to learn everything new today!
It’s great to learn new things but you’ve got time. Don’t burn yourself out trying to keep up.
WWDC and the Developer App
Tim Cook told us there are over 23 million registered Apple developers. Only a tiny number of them will ever go to an in-person WWDC. If Apple has a physical conference next year I hope they keep the pre-recorded sessions and online labs for the vast majority of remote developers.
I watched the videos using the Apple Developer app. It’s available on macOS and iOS. I find navigation a bit of a mess but the video player supports from 0.5x to 2x playback, many videos have transcripts and support copying of the onscreen sample code.
The pre-recorded sessions are a lot shorter this year (many < 10 minutes). There is no padding so you can quickly get to the topics that interest you.
The big news of WWDC 2020 is Apple moving the Mac from Intel x86 to Apple Silicon. For iOS developers this has some interesting implications:
iPad and iPhone apps on Apple Silicon Macs Your iOS apps will, by default, become available in the Mac App Store and run unmodified on Macs with Apple Silicon. You might want to watch some of the Catalyst sessions and optimize them for the Mac.
Explore the new system architecture of Apple Silicon Macs Overview of the new Apple Silicon Macs, Rosetta 2 and the new boot, login and recovery features.
Port your Mac app to Apple Silicon Apps built for Intel run using Rosetta on Apple Silicon but you should rebuild to create a universal app (Intel and Apple Silicon).
UIKit and iOS 14 Updates
It feels almost like a sideshow but there are some big changes to collection views in iOS 14 building on the compositional layout introduced in iOS 13:
- Advances in UICollectionView A quick 10 minute overview of the changes covering diffable data sources, list style sections and cell registration and configuration.
Deeper dives into each of the changes (also see the sample app):
- Modern cell configuration Big changes to table and collection view cells. Cell content and background configurations replace old style cell management.
- Lists in UICollectionView The end of UITableView. Replace them with lists implemented with UICollectionView compositional layout.
- Advances in diffable data sources Section snapshots support outline style UI’s used by the sidebar.
iOS 14 refreshes controls to make them consistent across platforms and we get some new pickers:
- Design with iOS pickers, menus and actions Where and when to use the new pickers, menus and actions.
- Build with iOS pickers, menus and actions How to use the new color picker, date picker styles, page controls and menus. Use
UIActioninstead of target-action.
As the Mac gets more iPad features, so the iPad gets more Mac features. The first two design session videos show a theme of consistent user experience across all platforms:
The technical sessions. Be sure to watch the split view controller changes:
- Build for iPad Split view now has a 3 column style. Build your lists with the new UICollectionView list style.
- Support hardware keyboards in your app Get notified of raw keyboard events for even better keyboard support.
- Build for the iPadOS pointer Updating your app for pointer support.
- Handle trackpad and mouse input
Josh Shaffer talks about the approach Apple is taking with the development of SwiftUI on the last 10 minutes of the State of the Union
The full surface of mature frameworks like AppKit and UIKit cannot be covered all at once. So we’re taking our time to get it right. We’re prioritizing source stability while making the API more powerful over time.
This is good news if you were an early adopter of SwiftUI:
Code you’ve already written will continue to compile and run with this years releases, with no migration required.
If you’ve been waiting now is a good time to jump in. Maybe create a Widget or Watch complication? These first three sessions are a good intro to SwiftUI:
- Introduction to SwiftUI Start with this video if you’re new to SwiftUI or need a recap of SwiftUI updated for Xcode 12 and multi-platform Apps.
- Visually edit SwiftUI views Quick demo of building a view in the Xcode preview canvas.
- Build a SwiftUI view in Swift playgrounds Enjoyable demo of prototyping SwiftUI views using Swift playgrounds on an iPad.
Digging deeper, there’s a lot of great additions here. Worth taking your time to watch them all:
What’s new in SwiftUI The new App protocol replaces App and Scene delegates. Use Info.plist settings as an alternative to launch screen storyboards. Build Widgets and watchOS complications in SwiftUI. Use outlines for nested lists, lazy grids and stacks, toolbars, help and keyboard shortcut modifiers, progress views and gauges (which take advantage of the new trailing closure syntax).
Stacks, Grids, and Outlines in SwiftUI Welcome additions to SwiftUI - Lazy stacks and grids, sidebar lists and outlines.
App essentials in Swift UI Build an entire App with just SwiftUI. No more App and Scene delegates and easier scene based state restoration.
Data essentials in SwiftUI An essential session that recaps data flow in SwiftUI and introduces @StateObject, @SceneStorage and @AppStorage.
Build document-based apps in SwiftUI DocumentGroup hides a lot of complexity for document based apps.
Add custom views and modifiers to the Xcode library Great addition to Xcode 12 making it easy to share views and modifiers.
Structure your app for SwiftUI previews Great session with lots of tips, especially the section on where to put sample preview data.
Other Framework Sessions
- What’s new in location User can choose to only allow approximate location.
- Design for location privacy Wondering how your app can work with only approx location? Here’s how Apple adapted the Maps app.
- Meet Nearby Interaction Access the U1 chip to get relative position of nearby devices.
- SF Symbol 2 New version of the SF Symbols App with 750 new symbols. Also available in MacOS Big Sur. More localizations and multi-color symbols. Watch out as some names have changed.
- The details of UI typography Moving from the old optical fonts (SF Text, SF Display) to the variable font (SF Pro). WebKit font-family support and scaling custom fonts in SwiftUI.
- Meet the new photos picker New PHPicker supports search and multi-selection. Out of process, no direct access to Photos library needed. App only gets access to the photos returned by the picker.
- Handle the Limited Photos Library in your app User can choose which photos your app gets access to.
- Sync a Core Data store with the CloudKit public database iOS 13 added sync with private CloudKit databases. In iOS 14 that’s extended to public CloudKit.
- Core Data: Sundries and maxims Tweaks to batch operations and notifications.
- What’s new in HealthKit Track symptoms, access ECG data, new mobility types for walking.
- Beyond counting steps The iPhone now collects walking data like speed and step length. The watch collects speed up and down stairs. Together they help understand how mobile somebody is.
- Getting started with HealthKit
Xcode 12 ships with Swift 5.3 and the Swift Package Manager supports binary frameworks and resources:
- What’s new in Swift See the section on changes to the language, especially multiple trailing closures and implicit self in closures.
Some deeper dives:
- Explore logging in Swift Upgrade your print statements to the Swift unified logging API.
- Embrace Swift type inference How the compiler infers types.
- Explore numerical computing in Swift Open source Swift numerics package.
- Unsafe Swift More than I wanted to know about unsafe pointers when working with C APIs.
- Safely manage pointers in Swift When you have to use pointers, do it safely.
- Refine Objective-C frameworks for Swift If you have Objective-C code you want to use from Swift.
Updates to the Swift Package Manager:
- Swift packages: Resources and localization Adding resources (asset catalogs, storyboards, core data models, etc.) to a Swift package. How to access those resources from code and how to localize those resources.
- Distribute binary frameworks as Swift packages
There’s no “What’s New in Xcode 12” video this year but there are many great sessions. I recommend the first three videos on finding and fixing performance issues:
- Diagnose performance issues with the Xcode organizer A refreshed Xcode 12 organizer has new metrics including scroll hitches.
- Eliminate animation hitches with XCTest Writing tests to catch poor scrolling and animation performance.
- Why is my app getting killed? Reduce terminations of your app when running in the background. But remember, jetsams are inevitable.
- What’s new in MetricKit Summary of the new metrics and diagnostics in MetricKit.
- Create Swift playgrounds content for iPad and Mac Creating playground book content that works on both iPad and Mac.
- Swan’s Quest, Chapter 1 Fun interactive playground adventure.
Xcode testing adds an execution time allowance and gets better call stack diagnostics to see where a test failed:
- Get your test results faster New execution time allowance (default is 10m) to guard against slow or hanging tests.
- Handle interruptions and alerts in UI tests Good recap on a confusing topic.
- XCTSkip your tests How to use XCTSkip (introduced in Xcode 11.4).
- Triage test failures with XCTIssue Xcode 12 uses XCTIssue to capture call stack for failing tests.
- Write tests to fail Lots of tips for writing better tests.
Nothing new here, but some useful recaps on localization:
- Formatters: Make data human-friendly Lots of tips for using the various formatters. I’d forgotten about list formatter.
- Build localization-friendly layouts using Xcode
Other Useful Sessions
We’re all Mac developers now. Catalyst has added more iOS frameworks and an optimized for Mac mode:
Optimize the interface of your Mac Catalyst app By default the Mac scales an iPad app. You can opt-in to an optimized mode to run it in the Mac idiom. It looks better but can create more work as layout can change.
Accessibility design for Mac Catalyst Designing a great keyboard experience also improves accessibility.
App Store, Distribution and Payments
If you’re using in app purchases I recommend watching the first two videos:
- What’s new in in-app purchase Family sharing for purchases. New refund notification and did renew notification (later this year). Promote apps with SKOverlay.
- Introducing StoreKit testing in Xcode Test in-app purchases locally without needing to use App Store sandbox. StoreKitTest framework to build unit & UI tests.
- Architecting for subscriptions Building an “entitlement engine” that makes sense of the complexity of a subscribers state.
- What’s new in Wallet and Apple Pay Mac support for Apple Pay (native and Catalyst). Standardized contact formatting to clean up “Shipping Address Invalid” errors - starting in Australia, Canada, UK and US.
App Store Connect gets some new API:
- What’s new in App Store Connect
- Expanding automation with the App Store Connect API A new API to manage App uploads (Fastlane is already on it).
- Identify trends with the Power and Performance API Download the power and performance metrics for your own custom analytics and dashboards.
An Apple theme this year is Intelligence. This includes Widgets, App Clips, Shortcuts and Siri suggestions. All ways for users to discover and interact with your App. Check out the design sessions to see how they work together.
Confused by the variety of intelligence and automation technologies? Four quick sessions that help put app clips, widgets, shortcuts, intents, donations and Siri into context to understand why you might want to support them.
- Design for intelligence: Apps evolved
- Design for intelligence: Discover new opportunites
- Design for intelligence: Meet people where they are
- Design for intelligence: Make friends with the system
Want to start using Swift UI? Create a widget! Widgets are lightweight home screen extensions to your App built using SwiftUI views and fed with a timeline of data to show.
- Meet WidgetKit Overview on building a widget. A widget is not a mini-app.
- Build SwiftUI views for widgets A great demo not just of building a Widget but also of using SwiftUI.
- Add configuration and intelligence to your widgets Set up configurations with intents and donate intents so it appears in Siri suggestions and Widget stacks.
- Design great widgets Design hints and tips for Widgets.
Also see this three-part “code-along” to building a Widget for a sample App:
- Widget Code-along, part 1: The adventure begins
- Widget Code-along, part 2: Alternate timeline
- Widget Code-along, part 3: Advancing timelines
App clips provide a small part of your App for a specific task launched by URL and downloaded independently of your App. Expect websites to have annoying banners inviting you to download them.
- Explore app clips Unlike Widgets you have full SDK access but need to keep it small and fast (<10Mb download).
- Design great app clips
More detailed sessions:
SiriKit and Shortcuts
Additions to SiriKit and the Shortcuts App:
- What’s new in SiriKit and Shortcuts Siri gets a compact design, shortcut app gets folders, more automation triggers. Shortcuts on the watch and you can mark shortcuts suitable for a “Wind-down” experience.
More detailed sessions for when you have time:
- Empower your intents If using an Intent extension is insufficient you can now have an in-app handler.
- Integrate your app with Wind Down Get a good night’s sleep.
- Decipher and deal with common Siri errors
- Evaluate and optimize voice interaction for your App
- Expand your SiriKit Media intents to more platforms HomePod and Apple TV support and alternate results.
- Design high quality Siri media interactions
Build watchOS 7 complications with SwiftUI and share watch faces:
- What’s new in watchOS design
- Create complications for Apple Watch
- Build complications in SwiftUI
- Keep your complications up to date
- Meet watch face sharing
- Create quick interactions with Shortcuts on watchOS
Apple Pencil improvements. The most interesting to me is Scribble which allows handwritten text anywhere you can enter text on the iPad.
- What’s new in PencilKit Most improvements need no developer effort.
- Meet Scribble for iPad
- Inspect, modify and construct PencilKit drawings
I like that these aren’t just a repeat of how to add VoiceOver support. Try to watch at least the custom rotors and switch control videos if you can:
- VoiceOver efficiency with custom rotors After watching this I think I finally understand how to add custom rotors to make it easier to navigate complex interfaces.
- App accessibility for switch control What is a switch control and how to create a good experience with your app.
- Make your app visually accessible Quick summary of using color and shape to differentiate items. Understanding text readability and respecting user display preferences for things like motion and animations.
- Create a seemless speech experience in your apps When to use AVSpeechSynthesizer, note the new setting to respect the users assistive technologies preferences.
Still waiting for the Apple Glasses:
- Explore ARKit 4 Real world location based anchors, FaceTracking now works on devices with at least A12 Bionic.
- What’s new in RealityKit Use video materials to add texture and spatialized audio.
- Shop online with AR Quick Look The try before you buy experience introduced last year.
- The artist’s AR toolkit Converting 3D assets into USDZ using Reality Converter. Reality Composer also now exports in USDZ.
- What’s new in USD Apple is collaborating with Pixar to create new schemas.
Security and Privacy
Every year Apple adds a few more privacy controls for the user:
- Build trust through better privacy App Store has extra privacy questions coming fall 2020. Pasteboard, camera and mic access are now visible to the user. Encrypted DNS. Limited photo library access and new picker, approx location sharing and contact autofill.
- Secure your app: threat modelling and anti-patterns How are you handling the untrusted data in your app?
- One-tap account security upgrades The keychain password manager now warns of breached passwords and offers upgrades to strong passwords or switching to Sign-in with Apple.
- Get the most out of Sign in with Apple
- Boost performance and security with modern networking If you’re using URLSession and the Network framework you get most improvements for free. User permission now required when accessing local network resources and encrypted DNS support.
- Enable encrypted DNS Support for both DoT and DoH via a network extension from the public DNS provider or application opt-in.
- Support local network privacy in your app If you access local network resources using Bonjour or directly you’ll need to update to request user permission.
- Build local push connectivity for restricted networks Deploy your own push provider for situations where you don’t have internet access (the example is on a cruise ship).
Apple insists they are listening and the WKWebView API is still growing. Universal links are now supported on watchOS and SwiftUI:
- What’s new for web developers
- What’s new in Web Inspector
- Meet Safari Web Extensions
- Meet Face ID and Touch ID for the web
- Introducing Car Keys What could go wrong?