WWDC2020 kicked off on June 22nd with an all new online format, it's very different to what we're used to, I imagine a welcome change to developers who don't have the opportunity to head out to Apple park year-on-year. They've pulled it off quite well, with the format being not that of an 'online conference' where the Apple execs talk to an empty auditorium, but more cinematic with cool transitions between buildings across apple park, they seem to have really leaned into the online format which I like.

By far Apple's biggest talking point (at least for them) is the transition from intel based CPUs to ARM (or Apple Silicon as they keep reminding us), half of the platform state of the union address was based on this, not entirely what we're used to seeing but welcome i'm sure to Mac developers all over the world. It's really interesting to see the future of the Mac, in true apple fashion they've really thought about the transition and provided all sorts of useful tools to port Mac apps to the new CPUs with multiple architecture builds and emulation, they even showed off the ability to run iOS apps on the Mac natively - pretty cool! In this post i'm going to cover the advancements in all of apple platforms + Xcode from the state of the union, if you haven't watched the SOTU yet you can do so here. I'll split this up by platform so you can just jump to the platform you're interested in.


macOS Big Sur

As mentioned in the opening, the main focus for Big Sur is the transition to Apple Silicon, at the same time they also introduced a new design language that's very icon and colour heavy, as well as a new design for app icons that's a nice blend of apple's current design language and the older skeuomorphic design trend they made popular with the initial release of the iPhone.

Design

This is an example of the updated design in action, you can see there's a lot more going on visually, with the use of colour and icons to separate sections and actions. You'll notice they've completely removed the action bar along the top and moved all the actions elsewhere. The side bar is now full height, any app using a side bar on the Mac will get this update for free.

Apple also redesigned the native app icons, this of course doesn't affect us too much as developers, although they have increased the corner radius slightly!

SFSymbols

To compliment this new design, the SFSymbols app has been updated to SFSymbols 2, which has moved from 1500 icons to 2400, a huge jump which gives us access to many new icons, as someone who often found it hard to find the right icon it's a welcome change.

SFSymbols can now be configured to match the font size of the system settings using NSImage.SymbolConfiguration.

Notification Extensions

The notification extensions from iOS have come to MacOS along with an updated notification center built in SwiftUI.

These new macOS notifications are made available through the UNNotificationContentExtension protocol, find more about how to implement that in the documentation.

More

  • App specific accent colours using NSAccentColorName inside your plist
  • Run catalyst apps at native macOS resolution by selecting “Optimize interface for Mac” to use the Mac Idiom
  • Control center on Mac
  • macOS has transitioned from 10 to 11

iPadOS

The changes on iPadOS this year are relatively minor, although it does have the benefit of adopting all the new features of iOS 14 as well. The highlights here are the new controls they've added for date picker and an all new colour picker, as well as an updated side bar and changes to ARKit with Lidar and PencilKit.

The sidebar has been updated with a three column view that's collapsable into two-column.

You get this functionality for free using UIKit's UISplitViewController and SwiftUIs NavigationView, as an added bonus it's also available in portrait mode. The sidebar design reflects the changes made in Big Sur.

A welcome addition to the sidebar is the collapsable row, where rows in the sidebar are collapsable/expandable, they use updated APIs for UICollectionView in UIKit and List in SwiftUI.

Date Picker

A redesigned date picker has been added to UIKit and SwiftUI, it's a great change that replaces the outdated picker wheel with a nice inline popover.

You can make use of this new DatePicker using the additional inline style added to UIDatePickerStyle when using the UIDatePicker. If using DatePicker in SwiftUI you can take control the style of the date picker using GraphicalDatePickerStyle.

The updated documentation for UIDatePicker can be found here and DatePicker here.

Colour Picker

An all new colour picker API gives us the power to select a colour in a grid, on a spectrum or using RGB sliders. This is available in UIKit with UIColorPickerViewController and in SwiftUI using ColorPicker.

You can find the documentation for ColorPicker here and UIColorPickerViewController here.

ARKit 4 and Lidar scanner

The updated iPad pro introduced the Lidar scanner, it uses direct time of flight to map depth in surfaces up to five metres away, ARKit 4 allows us to access this information in the form of scene geometry with plane detection, depth APIs give us precise depth information. All of this results in much improved object occlusion and measurements. Read more about the changes in ARKit4 here.

PencilKit

iPadOS introduces the ability to write with the Apple Pencil in any UITextField  and convert it to typed text, you will get this for free whether you use PencilKit or not. A major addition to PencilKit is the ability to get stroke data from the pencil in realtime., they also introduced smart selection that lets you highlight handwritten text as if it were typed and 'Scratch to delete' which lets you scribble out words you don't want. Read more on the changes to PencilKit.

More

  • New Mac-style inline emoji picker
  • Inline context menus now preferred in iPadOS over Action sheet
  • PencilKit shape detection

iOS

The headliners for iOS this year are home screen widgets and app clips along with the fresh new APIs that go with them.

Widgets

Widgets have been available on iOS for sometime in the today view, they're displayed in a collection view style layout with a fixed width with variable height and content, they provide 'at a glance' information and actions for your apps. Two major changes are coming too widgets from a user's perspective, the first being variable widths (so have fun designing the new layouts), the second is adding widgets to the home screen.

The new Widgets are written in SwiftUI and utilise a new framework, WidgetKit. i'll be exploring all WidgetKit has to offer this week in a new tutorial so stay tuned for that. The previous way of handling widgets was via an app extension, this method wasn't performant enough for the home screen so the Apple engineers came up with a new method using archived view states and a new concept called Timeline entries that consist of a SwiftUI archive, time & date and a relevance score.

The system only renders the widget when it's visible to the user. Widgets can be stacked and swiped through, this is where the relevance score comes into play, it's your way of telling the system that something of high importance has happened, like a weather warning for example. iOS will intelligently reorder the widget stack based on this.

App Clips

App clips are small slices of your app that are easy to discover and accessible even when the app isn't installed.

App clips start with this card that is automatically generated by Apple based on metadata available in the app store, when the card appears the app clip is automatically downloaded in the background (it must be less than 10MB). App clips can use sign in with apple and apple pay to eliminate common types of form entry, and they only hang around as long as you need them too. Once gone, you can view the associated app in the new app library feature in iOS14.

App clips can be utilised with the new App Clip framework. App clips are created as part of your app using a new App Clip target available in Xcode 12 and could potentially be as simple as adding your source code to that target. I'll be exploring app clips in depth this week in a new tutorial.

App Privacy

Apple are providing new ways in which our users can view how their data is being used via the app store.

You provide this information to apple via app store connect by answering questions on how you collect, store and protect your users data.


watchOS

watchOS 7 brings SwiftUI complications, multiple complications for single apps and watch face sharing where users can share watch face configurations with others. These features and more have all been made available through updates to the WatchKit and ClockKit framework.

Complications

Multiple complications can be created for a single app so you can show more information to a user at one time in the same face. Each complication can open a separate part of your app. This works using the CLKComplicationDescriptor type in ClockKit, that provides an identifier, display name and supported layout types to watchOS. You can wrap your complication in one of many new complication view types declared in ClockKit, apple have a great summary of this here.

Xcode 12 also introduces complication previews!

Watch face sharing

You can now share watch faces right from the app to other iOS users via iMessage. Opening a watch face from iMessage will give the user the opportunity to install any watchOS apps that are missing and required by the new face.


Xcode

My favourite part of the SOTU is the improvements too Xcode, we have some great new workflows coming to Xcode 12 this year, along with a design refresh inline with the new design system introduced in macOS Big Sur. Xcode 12 also gives us access to all Swift 5.3 has to offer.

Design

Xcode 12 utilises the updated side bar in macOS Big Sur, along with the new contextual menu. There's nothing drastic you need to know here, other than it looks more modern and fits well with the new design system we'll be getting in macOS 11.

Document tabs

Document tabs help you better organise your workflow. The Dynamic tab (in italics) is the main tab, that changes as you open files as it would in current versions, you can now double click (or option click) a new file to open in a new tab, 'open quickly' and 'jump to definition' also now opens a new tab. You can open a group of tabs at once by dragging a folder to the tab bar to open all of it's contents.

StoreKit testing

Xcode 12 introduces support for testing store kit apps in the simulator, this means we can test the in app purchase flow without the need for test devices! You can even simulate refunds.

SwiftUI source editing

SwiftUI previews have had some quality of life changes, with a toolbar to help us with common actions like preview duplication and environment overrides for light/dark mode. Adding modifiers has also been improved, with recommendations and search.

Swift code completion is up to 12 times faster and placeholders are pre-filled with values from apple documentation.

SwiftUI views can now be made available in the library and accessible anywhere using the new LibraryContentProvider protocol and Swift packages.

More

  • App templates provide a way to write common code and tailored UI code that's more platform specific.
  • Navigate through nested calls when testing
  • UITests can evaluate the performance of your UI with animations, it can show you dropped frames and the actual duration
  • In Swift 5.3 Swift packages and SPM now supports asset catalogues
  • Double click a SwiftUI preview to edit the associated view in code
  • Smaller bundle sizes and memory usage
  • SwiftUI Lazy view types for lazy loading

There are many more features in Xcode 12, you can read the release notes here.


Apple has a clear strategy in mind when it comes to parity across their platforms, they're providing some really great tools for developers to build for the entire apple ecosystem with a single codebase, from apple watch all the way up to the mac. The SOTU is where we get a sneak peak of what apple has planned for us in the future, but the developer talks are where we get a real sense of how these things work and how to implement them, so stay tuned for more!

Thanks for reading ✌️