It’s been well over a week since this years WWDC ended and all of us returned home, satisfied after a great conference and an equally great week in the beautiful Bay Area. As such, this seems like a good moment to look back at some of the announcements Apple made and what some of those may mean for developers.
While there weren’t any groundbreaking announcements (like the introduction of Swift at WWDC 2014 or the announcement Swift would be going open source at WWDC 2015), there were actually quite a few things we’re really excited about.
iOS 10, tvOS 10, watchOS 3 and macOS Sierra
Apple announced new versions of all their operating systems, which was to be expected, but we’ll mostly be focusing on iOS in this post.
Notifications received a visual redesign for iOS 10. They can show more content and look the same on every screen, like the lock screen and inside notification center. More importantly though, a lot of great features were added making notifications much more useful.
We’ve had actionable notifications for a while now, which let users trigger specific actions via a notification, like deleting an e-mail when it comes in or replying to a message directly via the notification. While these are great, they’re also pretty limited in their use. That changes with Service Extensions: With a Service Extension, you can update notification content before it is shown to the user. This lets you do all sorts of great things, like adding image attachments, or implementing end-to-end encryption for your notifications.
It’s also possible to add custom UI to a notification. In the examples given earlier, you can now actually display the full email or chat conversation right inside the notification using peek and pop. Combined with actionable notifications, this can really make notifications much more useful.
You can now ‘peek into’ a notification — https://developer.apple.com/videos/play/wwdc2016/708/
It’s now also possible to update delivered notifications or remove a specific notification on demand. Instead of flooding the user with many notifications for every event, the user just sees one notification with the latest state, like the current score of a football match.
Bonus: In-app presentation of notifications
Most of us will probably appreciate the fact that it’s now possible to display notifications while your app is in the foreground. We sure do.
Apple is slowly opening up Siri to developers via SiriKit. For now, Siri integration is limited to apps that fall within a set of pre-defined domains. If your app falls outside of these domains, you’re out of luck, but we’re sure Apple will be expanding these in the near future.
The domains that are currently available for Siri integration are Audio and video calling, Messaging, Payments, Searching photos, Workouts and Ride booking. There is a 7th domain, CarPlay, but that’s only open to car vendors.
SiriKit defines one or more intents for each of these domains. An intent is a representation of the user’s intention, like sending a message for messaging apps or sending a payment for payment apps.
Different users may use very different language to describe an intention. Some will use few words, while others will need more to express their intent. What’s great about intents, is that Apple handles the conversation for you and only requests and returns the information you need to perform a certain action on the user’s behalf, letting developers focus on performing those actions.
In order to integrate with Siri, you must provide three things:
In order for Siri to better understand a user’s intent, you need to provide it with vocabulary specific to your app. For instance, the nickname of one of your contacts inside a messaging app.
- App logic
In order for your app to respond to intents, you need to provide app logic. This is done via an Intents Extension.
- User interface
Lastly, you’ll want to provide Siri with some custom UI for your app via an Intents UI Extension. For a messaging app, this could be styled a version of the message that is going to be sent, making it even clearer to the user with which app they’re interacting.
It seems Apple put a lot of thought into this, and despite some limitations, it’ll be really interesting to see what developers will come up with.
Advances in animations and transitions
A new class called UIViewPropertyAnimator makes it possible to build interactive and interruptible animations. Its API is a bit more verbose than the methods we’re used to on UIView, but it also makes it easier to build highly interactive animations that work particularly well in conjuction with viewcontroller transitions.
Two new timing objects have also been introduced, named UICubicTimingParameters and UISpringTimingParameters. If the latter is used without arguments, it returns a timing function that Apple uses for pushing and popping viewcontrollers onto and from a navigation stack. If arguments are given, the duration is ignored; the spring determines its own duration, resulting in much more realistic spring animations.
I have covered three of the announcements above, but obviously there are many other great announcements, like performance improvements in watchOS 3, faster UICollectionView and UITableView’s and some great improvements coming to Swift 3. I could write a post on each one, but of course all sessions are available via Apple’s Developer Portal if you want to have a look yourself!