A quick list of overlooked announcements at WWDC'16



Ok, so sadly I wasn’t at WWDC this year 😢 and followed it only on video 🎥 and Twitter. I bet you all saw the big announcements made during the keynote and the Platform State of the Union talks 🎉. But did you know about all those other new APIs that were added more silently? 🕵

Purpose

The problem with the WWDC each year is there are tons of info and announcements and videos and so little time to watch and experiment on everything!

The purpose of this list is NOT to be exhaustive. It’s merely to allow you to discover topics you might have missed, so you can decide to take some of your time to look for info in the WWDC videos, read the associated documentation, experiment in a playground… when you have time.

I’ll probably update this list later to add 🎬 WWDC session numbers and links to talks or blog posts; for now I didn’t want to let that list in my drafts for too long 😉

New APIs

Speech Recognition

New SFSpeechRecognizer framework to analyze speech and do some Speech-to-Text by code

SiriKit

Ok you probably didn’t miss this one. But still included in the list because that’s still a topic I want to experiment with when I’ll have more time.

Provide SiriKit with static & dynamic vocabulary specific to your app, and let Siri call your app with the interpreted meta-data (Intent) so you can take action.

👀 Programming Guide, Intents.framework and IntentsUI.framework
🎬 #217

Dedicated Notifications framework

  • Unifies local and remote notifications
  • Include media in your notifications, like images and GIFs
  • Be notified when the user dismisses your notification
  • Get the list of notifications of your app, control their trigger date, update them, ability to delete an old notification…
  • Access the User Notifications settings from code

👀 UserNotifications.framework & UserNotificationsUI.framework documentation

CloudKit

Initiate a CloudKit sharing operation and display a view controller that lets users view and modify participants and start and stop sharing.

👀 UICloudSharingController & UICloudSharingControllerDelegate
You can also see that in action in Notes.app in iOS 10

CoreGraphics

Swiftier API, especially the C-like API is gone, you can now use context.xxx() instead of CGContextXXX() on a lot of CoreGraphics APIs

Foundation

Dates

  • NSISO8601DateFormatter is at last officially in Foundation!
  • New NSDateInterval type

Measurements & Units

New APIs in Foundation to convert from and to various measurement units.

De-stringification of a lot of APIs

  • NSCalendarIdentifier is now a dedicated type (instead of a NSString)
  • NSError.domain is now an NSErrorDomain instead of a NSString
  • Notifications use NSNotificationName instead of NSString
  • stringByApplyingTransform:reverse: uses NSStringTransform type instead of NSString
  • NSRunLoop.mode is now an NSRunLoopMode instead of… yeah you guessed it
  • NSHTTPCookie properties are now [NSHTTPCookiePropertyKey: AnyObject] instead of [NSString: AnyObject]
  • and so on

New logging API

Global function os_log with various log levels, etc

New timer API

Now taking a closure! (not yet in Xcode 8’s Swift build, but will be included in Swift 3)

Timer(fireDate: when, interval: 0, repeats: false) { /* code */ }

🎬 #207

NSURLSession

New delegate method allowing you to catch some network metrics on your requests. Provides lots of meta-data like start/end date of various stages (domain lookup, connection, …) of each intermediate request and more.

👀 NSURLSessionTaskMetrics & NSURLSessionTaskTransactionMetrics

UITableView & UICollectionView prefetching

  • Pre-fetching: pre-load data before arriving at the end of the scroll area, to implement multi-paging more easily.
  • UIRefreshControl available on any UIScrollView, not just UITableViewController
  • new UICollectionViewFlowLayoutAutomaticSize CollectionView layout!

GCD

New Dispatch API introduced in Swift 3 for GCD. This makes working with GCD in Swift 3 a lot easier… and a lot prettier!

UUID value type

There is now a new UUID type in Swift 3, which is a value type (as opposed to ObjC’s NSUUID).

UIViewPropertyAnimator

The new UIViewPropertyAnimator class is an alternative to the well known UIView.animateWithDuration(…) API, but can do a lot more, including:

  • interrupting the animation mid-flight
  • changing the values after animation started
  • making the animation interactive by changing its percentComplete property
  • or even binding that percentComplete to a UIGestureRecognizer for example

UIPasteboard

UIPasteboard now has the ability to share clipboards between devices, e.g. to copy from your Mac and paste on your iPhone/iPad and vice-versa!

UITabBar

Additional control over the appearance of the badge on a tab bar item, such as background color and text attributes.

CoreData

  • Better integration with Swift
  • Transparent support of fetching and faulting
  • Tighter integration with Xcode, including better generation and ability to update your NSManagedObject subclasses.

ApplePay

  • Apple Pay is now supported on the Web (on Safari 10 only)
  • New countries supported (including mine 🇫🇷!)

Messages API

  • New framework to build iMessage-based apps
  • Ability to create iMessage Sticker packs

🎬 #204 & 🎬 #224

watchOS 3

  • better launch times
  • no more Glances, now concept of App Switcher
  • background updates API to update App Switcher screenshot
  • access to digital crown and gyroscope events

tvOS

  • Unified SSO (Single SignOn) to make login and managing passwords on tvOS apps easier
  • You can now remote-control the AppleTV using your iPhone. The remote app on iOS looks and behave exactly like the physical remote.
  • In addition, if you move the focus to a textField in tvOS 10, a notification with a text field appears on your iPhone/iPad to act as a remote keyboard!

New tools in Xcode

  • New Visual Debugging Tools, esp. Memory and Thread Sanitizer
  • New Code Signing mechanism
  • Xcode Extensions
  • Ability to choose Swift 2.3 or Swift 3.0 in Xcode 8
  • Documentation revamped
  • Image name completion, Color & Image literals in code
  • Improved Accessibility Inspector & accessibility audits (🎬 #202 & 🎬 #416)

Other topics to play with

  • The Playgrounds App on iPad
  • new Apple File System (APFS)
  • Ability to remove built-in apps (Stocks, etc) from your Springboard on iOS10
  • Apple open-sourced LZFSE, their compression algorithm lib & CLI.

Various important info

  • 🚨 At the end of 2016, Apple will make ATS1 mandatory for all developers who hope to submit their apps to the App Store. You’ll need to justify if you still need to use exceptions (like if you’re talking with a partner server you don’t have controller over). (🎬706)
  • You’re now required to declare the XXXUsageDescription in your Info.plist to access protected data (e.g. NSCalendarsUsageDescription to access user’s calendar data). If you don’t, your app will now exit when it tries to access the data!

To create that list, I got inspiration mostly from my Twitter feed, but also from:

  1. ATS stands for Apple Transport Security, forcing you to use HTTPS and TLS v1.2 for all your HTTP communications with web services