Wow that was an interesting WWDC! After a “quiet” year in 2018, Apple has unleashed some dramatic changes in 2019. 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. After that, I recommend prioritising the sessions on updating for iOS 13.
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 exciting but you probably don’t need to ship an App written 100% with SwiftUI or convert your iPad App for the Mac on day one. It’s great to learn new things but you’ve got time. Don’t burn yourself out trying to keep up.
Updating For iOS 13
What do you need to know to update your App for iOS 13? These sessions tell you where you need to spend your time over the summer:
-
Session 224 Modernizing Your UI for iOS 13 Start here to plan your updates. By April 2020 you’re required to use launch storyboards, be resizable on new devices (no more letterboxing) and support iPad split screen multi-tasking.
-
Session 808 What’s New in iOS Design Designing for dark mode, modal style card sheets and contextual menus.
-
Session 214 Implementing Dark Mode on iOS Updating your App for dark mode is pretty much required by iOS 13. Switch from hard-coded to semantic colors. Add light and dark variations to the asset catalog.
The initial trait collection for a view controller is no longer
nil
but set based on the destination view hierarchy. If you rely ontraitCollectionDidChange
being called on initialization you will need to move setup code elsewhere. -
Session 212 Introducing Multiple Windows on iPad This is a major change for iPad Apps. Your App can now have multiple window scenes. It’s likely you need to move code from your App delegate to a scene delegate. State restoration also changes to using
NSUserActivity
.
For more details on multiple window support see these three sessions:
- Session 258 Architecting Your App for Multiple Windows
- Session 259 Targeting Content with Multiple Windows
- Session 246 Window Management in Your Multitasking App
SwiftUI
The biggest change since Apple introduced Swift? It requires iOS 13 so adoption will take a while but the future is SwiftUI. The SwiftUI sessions together with the two framework sessions on Combine are essential watching:
-
Session 204 Introducing SwiftUI: Building Your First App Start here for a quick overview and demo.
-
Session 216 SwiftUI Essentials Deeper dive into how it works and the key concepts.
-
Session 226 Data Flow Through SwiftUI How to use data in SwiftUI. A single source of truth. Explains the difference between a simple property, BindableObject, @Environment, @Binding and @State.
-
Session 237 Building Custom Views with SwiftUI Dave Abrahams, with a brief appearance from Crusty, digs deeper into how the layout process works. Second part is an impressive demo of how to use graphics to draw custom controls.
-
Session 231 Integrating SwiftUI Use a hosting controller to wrap SwiftUI for use in your existing App. Use the Representable protocol to wrap existing UIKit/AppKit/WatchKit views to use in SwiftUI. Use the BindableObject protocol to integrate external data.
-
Section 233 Mastering Xcode Previews Great demos on how Xcode previews makes working with SwiftUI so easy.
Catalyst
Almost lost in the excitement we also got the much anticipated Catalyst (formerly known as Marzipan). A framework for bringing your iPad Apps to the Mac:
-
Session 205 Introducing iPad Apps for Mac Select the Mac option for your iOS target and your done… Well almost…
-
Session 235 Taking iPad Apps for Mac to the next level How to refine your iPad App to make it better for the Mac (it helps if you already have a good iPad App).
-
Session 809 Designing iPad Apps for Mac Designing iPad Apps for Mac to take advantage of the menu bar, sidebar and toolbar.
Essential Framework Sessions
Lots of exciting improvements across the application and system frameworks. This first set of sessions is essential viewing:
-
Session 206 Introducing SF Symbols Finally, a comprehensive (> 1000) library of vector-based symbols that is consistent across all platforms. Download the SF Symbols mac App to browse.
-
Session 215 Advances in Collection View Layout Great update to collection views. Compositional Layouts. Build complex layouts even nested collection views with independently scrolling sections without the boilerplate.
-
Session 220 Advances in UI Data Sources Another great improvement to table and collection views. Diffable data sources. No more index paths and boilerplate data source code. Applies a snapshot of your data with a single line of code.
The Combine framework is part of Foundation but you’ll want to understand it when working with SwiftUI:
Swift
I didn’t expect much Swift news at WWDC but Apple sneaked in Swift 5.1 and Xcode support for Swift packages and binary frameworks!
-
Session 402 What’s New in Swift ABI and Module stability mean we can have binary frameworks. Property wrappers, opaque return types and domain specific languages all help make SwiftUI possible.
-
Session 408 Adopting Swift Packages in Xcode How to use Swift packages in Xcode
-
Session 410 Creating Swift Packages Step-by-step guide to creating Swift packages. Worth it even if you only use local packages to share code between targets.
-
Session 415 Modern Swift API Design See the great discussion on protocols and generics.
-
Session 416 Binary Frameworks in Swift If you don’t want to share source code with a Swift package use the new XCFrameworks to create a binary distribution.
Developer Tools
Xcode 11 looks like another solid release:
-
Session 401 What’s New in Xcode 11 Swift packages, Git stashes, cherry pick commits, Swift UI and Xcode previews, test plans, faster simulators and moreā¦
-
Session 412 Debugging in Xcode 11 Device conditions and environment overrides. Debugging SwiftUI.
-
Session 413 Testing in Xcode Test plans are the big change and make it easier to group tests and run them on different configurations.
-
Session 403 Creating Great Localized Experiences with Xcode 11 App specific language settings, device specific strings in localization strings dictionary. Localize images in asset catalog.
-
Session 404 Getting Started with Xcode Remember session 404 if you know somebody new to Xcode who is feeling lost and needs help getting started.
-
Session 409 What’s New in Clang and LLVM The improvements for C++ went over my head but I had to watch the first 15 minutes on -Oz code size optimization by Jessica Paquette.
-
Session 423 Optimizing App Launch See the section on using the App launch template in Instruments to debug slow launch times.
Core Data
Some solid improvements to Core Data this year including the latest try at a sync solution:
-
Session 230 Making Apps with Core Data Fetched results controller can now return a diffable data source snapshot ready to use with the new table and collection view data sources. Use the new Combine framework to add UI bindings to your managed objects that update automatically. New derived attributes in your model to transform or aggregate items (for example a count of items).
-
Session 202 Using Core Data With CloudKit It looks easy to turn on CloudKit sync (if you’re using
NSPersistentContainer
). How well this works remains to be seen.
Other Framework Sessions To Explore
A mixed bag of other framework sessions I found interesting:
-
Session 227 Font Management and Text Scaling Font providers can now ship font applications via the App Store to allow users to install custom fonts. A new font picker UI allows user font selection.
-
Session 221 Introducing PencilKit Allow users to draw on a canvas in your App with the pencil just like the Notes App.
-
Session 223 Expanding the Sensory Experience with Core Haptics Use the taptic engine (iPhone 8 onwards) to create custom haptic feedback.
-
Session 705 What’s New in Core Location The way the system grants “Always” location permission has changed. Check if you still need it as “WhenInUse” can now do more.
-
Session 706 Introducing Sign In with Apple Privacy friendly sign-in.
-
Session 707 Advances in App Background Execution Background tasks framework allows you to schedule deferrable work.
-
Session 708 Designing for Privacy Summary of privacy changes including Sign In with Apple, Location and Bluetooth permission changes.
-
Session 709 Cryptography and your Apps Apple CryptoKit - don’t roll your own…
-
Session 712 Advances in Networking Part 1 Low data mode user preference. Limit discretionary network traffic when active.
Accessibility
-
Session 201 Accessibility Lessons A reminder that accessibility is more than VoiceOver. Writing good labels, custom actions, not relying on color alone, reducing motion and autoplay and using dynamic type.
-
Session 238 Accessibility in SwiftUI You get a lot for free in SwiftUI but you’ll likely need to tweak some things (as with UIKit). API for setting labels, traits, actions, etc.
App Store and Distribution
-
Session 301 What’s New in App Store Connect The new, standalone, Transporter App handles App uploads. New analytics including App deletions.
-
Session 304 App Distribution Custom Apps replace the enterprise program. Distribute private Apps from the App Store (so subject to App Store review) with MDM or redemption codes to internal or external customers with an Apple business manager.
watchOS
-
Session 208 Creating Independent Watch Apps The App Store comes to watchOS 6 along with independent watch apps. You no longer need to bundle watch Apps with an iOS App.
-
Session 219 SwiftUI on watchOS Of course you can now build watchOS Apps with SwiftUI.
Machine Learning and Augmented Reality
There are a lot of deep dive sessions but these gave me a good overview of what’s new in CoreML 3, ARKit 3 and the new RealityKit: