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 aNSString
)NSError.domain
is now anNSErrorDomain
instead of aNSString
- Notifications use
NSNotificationName
instead ofNSString
stringByApplyingTransform:reverse:
usesNSStringTransform
type instead ofNSString
NSRunLoop.mode
is now anNSRunLoopMode
instead of… yeah you guessed itNSHTTPCookie
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 anyUIScrollView
, not justUITableViewController
- 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 aUIGestureRecognizer
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 yourInfo.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!
Links
To create that list, I got inspiration mostly from my Twitter feed, but also from:
-
ATS stands for Apple Transport Security, forcing you to use HTTPS and TLS v1.2 for all your HTTP communications with web services ↩