What's New in Cocoa Touch

318
© 2016 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple. App Frameworks #WWDC16 Session 205 What’s New in Cocoa Touch Olivier Gutknecht Senior Engineering Manager, UIKit

Transcript of What's New in Cocoa Touch

Page 1: What's New in Cocoa Touch

© 2016 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple.

App Frameworks #WWDC16

Session 205

What’s New in Cocoa Touch

Olivier Gutknecht Senior Engineering Manager, UIKit

Page 2: What's New in Cocoa Touch

What’s New in Cocoa Touch

Page 3: What's New in Cocoa Touch

What’s New in Cocoa Touch

Page 4: What's New in Cocoa Touch

What’s Not New in Cocoa Touch

Page 5: What's New in Cocoa Touch

Since Last Year

Page 6: What's New in Cocoa Touch

Since Last Year

3D Touch

Page 7: What's New in Cocoa Touch

Since Last Year

3D TouchiPad Pro

Page 8: What's New in Cocoa Touch

Since Last Year

3D TouchiPad ProApple Pencil

Page 9: What's New in Cocoa Touch

Since Last Year

3D TouchiPad ProApple PencilSmart Keyboard

Page 10: What's New in Cocoa Touch

Adaptivity

Page 11: What's New in Cocoa Touch

Adaptivity

UIUserInterfaceSizeClass.compact

Page 12: What's New in Cocoa Touch

Adaptivity

UIUserInterfaceSizeClass.regular

Page 13: What's New in Cocoa Touch

Adaptivity

UIUserInterfaceSizeClass.gigantic

Page 14: What's New in Cocoa Touch

Adaptivity

UIUserInterfaceSizeClass.gigantic

Page 15: What's New in Cocoa Touch

Adaptivity

UIUserInterfaceSizeClass.gigantic

Page 16: What's New in Cocoa Touch

Adaptivity

UIUserInterfaceSizeClass.gigantic

Page 17: What's New in Cocoa Touch

Making Apps Adaptive

TraitsSize ClassesSize-based layouts

The fundamentals

Aa

Page 18: What's New in Cocoa Touch

Making Apps AdaptiveInterface Builder

Page 19: What's New in Cocoa Touch

Making Apps Adaptive

Auto LayoutDynamic TypeLayout GuidesUIAppearance Asset Catalogs

Tools and Techniques

Page 20: What's New in Cocoa Touch

Making Apps Adaptive

Making Apps Adaptive, Part I Presidio Thursday 11:00AM

Making Apps Adaptive, Part II Presidio Friday 9:00AM

Inclusive App Design Pacific Heights Tuesday 10:00AM

PART 1 PART 2

Aa

Page 21: What's New in Cocoa Touch

Advanced Touch Input

Page 22: What's New in Cocoa Touch

Advanced Touch Input

120 Hz touch scanning on iPad Air 2 and iPad Pro

Page 23: What's New in Cocoa Touch

Advanced Touch Input

120 Hz touch scanning on iPad Air 2 and iPad ProOrientation, Precise Location, Force, and 240 Hz scanning with Apple Pencil

Page 24: What's New in Cocoa Touch

Advanced Touch Input

120 Hz touch scanning on iPad Air 2 and iPad ProOrientation, Precise Location, Force, and 240 Hz scanning with Apple Pencil Force on iPhone with 3D Touch

Page 25: What's New in Cocoa Touch

Advanced Touch Input

120 Hz touch scanning on iPad Air 2 and iPad ProOrientation, Precise Location, Force, and 240 Hz scanning with Apple Pencil Force on iPhone with 3D Touch New APIs in iOS 9 & iOS 9.1

Page 26: What's New in Cocoa Touch

Advanced Touch Input

120 Hz touch scanning on iPad Air 2 and iPad ProOrientation, Precise Location, Force, and 240 Hz scanning with Apple Pencil Force on iPhone with 3D Touch New APIs in iOS 9 & iOS 9.1

Leveraging Touch Input on iOS Presidio Thursday 9:45AM

Page 27: What's New in Cocoa Touch

Keyboard Support

Page 28: What's New in Cocoa Touch

Keyboard Support

Keyboard shortcuts

Page 29: What's New in Cocoa Touch

Keyboard Support

Keyboard shortcutsDynamic, context-sensitive

Page 30: What's New in Cocoa Touch

// Keyboard Support: UIKeyCommand

override var keyCommands: [UIKeyCommand]? {

return [

UIKeyCommand(input: "F",

modifierFlags: .Command,

action: #selector(ViewController.find(_:)),

discoverabilityTitle: "Find…"),

UIKeyCommand(input: "N",

modifierFlags: [.Command, .Alternate],

action: #selector(ViewController.newDocument(_:)),

discoverabilityTitle: "New document”),

]

}

func find(sender: UIKeyCommand) {

// ...

}

Page 31: What's New in Cocoa Touch

// Keyboard Support: UIKeyCommand

override var keyCommands: [UIKeyCommand]? {

return [

UIKeyCommand(input: "F",

modifierFlags: .Command,

action: #selector(ViewController.find(_:)),

discoverabilityTitle: "Find…"),

UIKeyCommand(input: "N",

modifierFlags: [.Command, .Alternate],

action: #selector(ViewController.newDocument(_:)),

discoverabilityTitle: "New document”),

]

}

func find(sender: UIKeyCommand) {

// ...

}

Page 32: What's New in Cocoa Touch

1024 x 768

Page 33: What's New in Cocoa Touch

What’s Not New in Cocoa TouchWhat’s

Page 34: What's New in Cocoa Touch

What’sNot New in Cocoa TouchWhat’s

Page 35: What's New in Cocoa Touch

What’s New in Cocoa Touch

Page 36: What's New in Cocoa Touch

Agenda

Page 37: What's New in Cocoa Touch

Core technologies

Agenda

Page 38: What's New in Cocoa Touch

Core technologiesBuilding better user interfaces

Agenda

Page 39: What's New in Cocoa Touch

Core technologiesBuilding better user interfacesAdopting system features

Agenda

Page 40: What's New in Cocoa Touch

Core technologiesBuilding better user interfacesAdopting system featuresIntegrating with iOS

Agenda

Page 41: What's New in Cocoa Touch

Core Technologies

Page 42: What's New in Cocoa Touch

Swift 3

Page 43: What's New in Cocoa Touch

// …

let font = UIFont.preferredFontForTextStyle(UIFontTextStyleBody)

let color = UIColor.blackColor()

let title = content.stringByTrimmingCharactersInSet(.whitespaceAndNewlineCharacterSet())

// …

let transform = CGAffineTransformRotate(baseTransform, angle) CGContextConcatCTM(context, transform)

title.drawAtPoint(position, withAttributes: attributes)

// …

let queue = dispatch_queue_create("com.example.queue", nil)

dispatch_async(queue) {

// … }

Page 44: What's New in Cocoa Touch

// …

let font = UIFont.preferredFontForTextStyle(UIFontTextStyleBody)

let color = UIColor.blackColor()

let title = content.stringByTrimmingCharactersInSet(.whitespaceAndNewlineCharacterSet())

// …

let transform = CGAffineTransformRotate(baseTransform, angle) CGContextConcatCTM(context, transform)

title.drawAtPoint(position, withAttributes: attributes)

// …

let queue = dispatch_queue_create("com.example.queue", nil)

dispatch_async(queue) {

// … }

Page 45: What's New in Cocoa Touch

// …

let font = UIFont.preferredFont(forTextStyle: UIFontTextStyleBody)

let color = UIColor.blackColor()

let title = content.stringByTrimmingCharactersInSet(.whitespaceAndNewlineCharacterSet())

// …

let transform = CGAffineTransformRotate(baseTransform, angle) CGContextConcatCTM(context, transform)

title.draw(at: position, withAttributes: attributes)

// …

let queue = dispatch_queue_create("com.example.queue", nil)

dispatch_async(queue) {

// … }

Page 46: What's New in Cocoa Touch

// …

let font = UIFont.preferredFont(forTextStyle: UIFontTextStyleBody)

let color = UIColor.blackColor()

let title = content.stringByTrimmingCharactersInSet(.whitespaceAndNewlineCharacterSet())

// …

let transform = CGAffineTransformRotate(baseTransform, angle) CGContextConcatCTM(context, transform)

title.draw(at: position, withAttributes: attributes)

// …

let queue = dispatch_queue_create("com.example.queue", nil)

dispatch_async(queue) {

// … }

Page 47: What's New in Cocoa Touch

// …

let font = UIFont.preferredFont(forTextStyle: UIFontTextStyleBody)

let color = UIColor.black()

let title = content.trimmingCharacters(in: .whitespaceAndNewline())

// …

let transform = CGAffineTransformRotate(baseTransform, angle) CGContextConcatCTM(context, transform)

title.draw(at: position, withAttributes: attributes)

// …

let queue = dispatch_queue_create("com.example.queue", nil)

dispatch_async(queue) {

// … }

Page 48: What's New in Cocoa Touch

// …

let font = UIFont.preferredFont(forTextStyle: UIFontTextStyleBody)

let color = UIColor.black()

let title = content.trimmingCharacters(in: .whitespaceAndNewline())

// …

let transform = CGAffineTransformRotate(baseTransform, angle) CGContextConcatCTM(context, transform)

title.draw(at: position, withAttributes: attributes)

// …

let queue = dispatch_queue_create("com.example.queue", nil)

dispatch_async(queue) {

// … }

Page 49: What's New in Cocoa Touch

// …

let font = UIFont.preferredFont(forTextStyle: UIFontTextStyleBody)

let color = UIColor.black()

let title = content.trimmingCharacters(in: .whitespaceAndNewline())

// …

let transform = baseTransform.rotate(angle) context.concatCTM(transform)

title.draw(at: position, withAttributes: attributes)

// …

let queue = dispatch_queue_create("com.example.queue", nil)

dispatch_async(queue) {

// … }

Page 50: What's New in Cocoa Touch

// …

let font = UIFont.preferredFont(forTextStyle: UIFontTextStyleBody)

let color = UIColor.black()

let title = content.trimmingCharacters(in: .whitespaceAndNewline())

// …

let transform = baseTransform.rotate(angle) context.concatCTM(transform)

title.draw(at: position, withAttributes: attributes)

// …

let queue = dispatch_queue_create("com.example.queue")

dispatch_async(queue) {

// … }

Page 51: What's New in Cocoa Touch

// …

let font = UIFont.preferredFont(forTextStyle: UIFontTextStyleBody)

let color = UIColor.black()

let title = content.trimmingCharacters(in: .whitespaceAndNewline())

// …

let transform = baseTransform.rotate(angle) context.concatCTM(transform)

title.draw(at: position, withAttributes: attributes)

// …

let queue = DispatchQueue(label: ”com.example.queue")

queue.async {

// … }

Page 52: What's New in Cocoa Touch

Grand Central Dispatch

Page 53: What's New in Cocoa Touch

Grand Central Dispatch

Create a private queue

Page 54: What's New in Cocoa Touch

Grand Central Dispatch

Create a private queueSchedule asynchronous work items

Page 55: What's New in Cocoa Touch

Grand Central Dispatch

Create a private queueSchedule asynchronous work itemsGCD can automatically wrap each work item in an autorelease pool

Page 56: What's New in Cocoa Touch

Grand Central Dispatch

Create a private queueSchedule asynchronous work itemsGCD can automatically wrap each work item in an autorelease pool

let q = DispatchQueue(label: "com.example.queue", attributes: [.autoreleaseWorkItem])

Page 57: What's New in Cocoa Touch

Grand Central Dispatch

Create a private queueSchedule asynchronous work itemsGCD can automatically wrap each work item in an autorelease pool

let q = DispatchQueue(label: "com.example.queue", attributes: [.autoreleaseWorkItem])

Concurrent Programming With GCD in Swift 3 Pacific Heights Friday 4:00PM

Page 58: What's New in Cocoa Touch

Foundation

Page 59: What's New in Cocoa Touch

Foundation

Swift improvements

Page 60: What's New in Cocoa Touch

Foundation

Swift improvementsUnits and measurements

Page 61: What's New in Cocoa Touch

Foundation

Swift improvementsUnits and measurementsNSISO8601DateFormatter

Page 62: What's New in Cocoa Touch

Foundation

Swift improvementsUnits and measurementsNSISO8601DateFormatterNSDateInterval

Page 63: What's New in Cocoa Touch

Foundation

Swift improvementsUnits and measurementsNSISO8601DateFormatterNSDateInterval

What’s New in Foundation for Swift Mission Tuesday 4:00PM

Measurements and Units Presidio Friday 4:00PM

Page 64: What's New in Cocoa Touch

UIPasteboardUniversal Clipboard

Page 65: What's New in Cocoa Touch

UIPasteboardUniversal Clipboard

Page 66: What's New in Cocoa Touch

UIPasteboard

A paste operation might have to retrieve remote data

Universal Clipboard

Page 67: What's New in Cocoa Touch

UIPasteboard

A paste operation might have to retrieve remote data

Universal Clipboard

Page 68: What's New in Cocoa Touch

UIPasteboardUniversal Clipboard

A paste operation might have to retrieve remote dataCheck for Pasteboard content without fetching

Page 69: What's New in Cocoa Touch

UIPasteboardUniversal Clipboard

public class UIPasteboard : NSObject {

public var hasStrings: Bool { get }

public var hasURLs: Bool { get }

public var hasImages: Bool { get }

public var hasColors: Bool { get }

A paste operation might have to retrieve remote dataCheck for Pasteboard content without fetching

Page 70: What's New in Cocoa Touch

UIPasteboard

Control what you publish

Universal Clipboard

extension UIPasteboardOption {

public static let expirationDate: UIPasteboardOption

public static let localOnly: UIPasteboardOption

}

Page 71: What's New in Cocoa Touch

Wide Color

Technology shift

Page 72: What's New in Cocoa Touch

Wide Color

Technology shift

43

Page 73: What's New in Cocoa Touch

Wide Color

Technology shiftFrom sRGB to extended sRGB

44

Page 74: What's New in Cocoa Touch

Wide Color

Technology shiftFrom sRGB to extended sRGBiOS 9.3 is color managed!

Page 75: What's New in Cocoa Touch

Wide Color

Technology shiftFrom sRGB to extended sRGBiOS 9.3 is color managed!Exposed as API in iOS 10.0

Page 76: What's New in Cocoa Touch

Wide Color

UIImageView, color-managed since iOS 9.3

Page 77: What's New in Cocoa Touch

Wide ColorUIColor Support

Page 78: What's New in Cocoa Touch

Wide Color

public class UIColor : NSObject {

public init(red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat)

public init(displayP3Red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat)

UIColor Support

Page 79: What's New in Cocoa Touch

Wide Color

Go beyond [0-1] for extended sRGB with the existing initializer

public class UIColor : NSObject {

public init(red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat)

public init(displayP3Red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat)

UIColor Support

Page 80: What's New in Cocoa Touch

Wide Color

Go beyond [0-1] for extended sRGB with the existing initializerUse displayP3 for content creation and interchange

public class UIColor : NSObject {

public init(red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat)

public init(displayP3Red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat)

UIColor Support

Page 81: What's New in Cocoa Touch

Wide Color

Go beyond [0-1] for extended sRGB with the existing initializerUse displayP3 for content creation and interchange

public class UIColor : NSObject {

public init(red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat)

public init(displayP3Red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat)

Working with Wide Color Mission Thursday 1:25PM

UIColor Support

Page 82: What's New in Cocoa Touch

Image Renderer

Page 83: What's New in Cocoa Touch

Image Renderer

UIGraphicsBeginImageContext and UIGraphicsEndImageContext

Page 84: What's New in Cocoa Touch

Image Renderer

UIGraphicsBeginImageContext and UIGraphicsEndImageContext • 32 bits and sRGB only

Page 85: What's New in Cocoa Touch

Image Renderer

UIGraphicsBeginImageContext and UIGraphicsEndImageContext • 32 bits and sRGB only• Error prone

Page 86: What's New in Cocoa Touch

Image Renderer

UIGraphicsBeginImageContext and UIGraphicsEndImageContext • 32 bits and sRGB only• Error prone• Not extensible

Page 87: What's New in Cocoa Touch

Image Renderer

UIGraphicsBeginImageContext and UIGraphicsEndImageContext • 32 bits and sRGB only• Error prone• Not extensible

func createDrawing(size: CGSize) -> UIImage {

let renderer = UIGraphicsBeginImageContext(size)

// Do your drawing here

let image = UIGraphicsGetImageFromCurrentImageContext()

UIGraphicsEndImageContext()

return image

}

Page 88: What's New in Cocoa Touch

Image Renderer NEW

Page 89: What's New in Cocoa Touch

Image Renderer

New UIGraphicsRenderer class

NEW

Page 90: What's New in Cocoa Touch

Image Renderer

New UIGraphicsRenderer class• Fully color managed

NEW

Page 91: What's New in Cocoa Touch

Image Renderer

New UIGraphicsRenderer class• Fully color managed• Block-based

NEW

Page 92: What's New in Cocoa Touch

Image Renderer

New UIGraphicsRenderer class• Fully color managed• Block-based• Subclasses for images and PDF

NEW

Page 93: What's New in Cocoa Touch

Image Renderer

New UIGraphicsRenderer class• Fully color managed• Block-based• Subclasses for images and PDF• Manages context lifetime

NEW

Page 94: What's New in Cocoa Touch

Image Renderer

New UIGraphicsRenderer class• Fully color managed• Block-based• Subclasses for images and PDF• Manages context lifetime

func createDrawing(size: CGSize) -> UIImage {

let renderer = UIGraphicsImageRenderer(size: size)

return renderer.image { rendererContext in

// Do your drawing here

}

}

NEW

Page 95: What's New in Cocoa Touch

Asset Management

Wide color assetsDirectional image assetsCompression

Integrated with the UIKit trait system

NEW

Page 96: What's New in Cocoa Touch

Asset Management

Wide color assets• Automatic variants generation• Compatible with App Thinning

Page 97: What's New in Cocoa Touch

Asset Management

Compression• Now supports automatic lossy compression• Great compromise between footprint

and quality• Automatic variant will find the right tradeoff• Compatible with App Thinning

Page 98: What's New in Cocoa Touch

Asset Management

Directional image assets for right-to-left and left-to-right UIs• Specify if an image should be

flipped or not • Provide specific images

What's New in International User Interfaces Nob Hil Friday 9:00AM

Page 99: What's New in Cocoa Touch

Building Better User Interfaces

Page 100: What's New in Cocoa Touch

Accessibility Inspector

Page 101: What's New in Cocoa Touch

Accessibility Inspector

Page 102: What's New in Cocoa Touch

Accessibility Inspector

Page 103: What's New in Cocoa Touch

Accessibility Inspector

Page 104: What's New in Cocoa Touch
Page 105: What's New in Cocoa Touch
Page 106: What's New in Cocoa Touch
Page 107: What's New in Cocoa Touch
Page 108: What's New in Cocoa Touch
Page 109: What's New in Cocoa Touch
Page 110: What's New in Cocoa Touch

SFSpeechRecognizerSpeech Recognition

Page 111: What's New in Cocoa Touch

SFSpeechRecognizerSpeech Recognition

Continuous speech recognition

Page 112: What's New in Cocoa Touch

SFSpeechRecognizerSpeech Recognition

Continuous speech recognitionFrom audio files or audio buffers

Page 113: What's New in Cocoa Touch

SFSpeechRecognizerSpeech Recognition

Continuous speech recognitionFrom audio files or audio buffersOptimized for free-form dictation or search-style strings

Page 114: What's New in Cocoa Touch

SFSpeechRecognizerSpeech Recognition

Continuous speech recognitionFrom audio files or audio buffersOptimized for free-form dictation or search-style strings

let recognizer = SFSpeechRecognizer()

let request = SFSpeechURLRecognitionRequest(url: audioFileURL)

recognizer?.recognitionTask(with: request, resultHandler: { (result, error) in

print(result?.bestTranscription.formattedString)

})

Page 115: What's New in Cocoa Touch

SFSpeechRecognizerSpeech Recognition

Continuous speech recognitionFrom audio files or audio buffersOptimized for free-form dictation or search-style strings

let recognizer = SFSpeechRecognizer()

let request = SFSpeechURLRecognitionRequest(url: audioFileURL)

recognizer?.recognitionTask(with: request, resultHandler: { (result, error) in

print(result?.bestTranscription.formattedString)

})

Speech Recognition API Session 509

Page 116: What's New in Cocoa Touch

Smarter Text Input

Page 117: What's New in Cocoa Touch

Smarter Text Input

Semantic tagging of text fields, text views and web content

Page 118: What's New in Cocoa Touch

Smarter Text Input

Semantic tagging of text fields, text views and web contentProvides intelligent suggestions

Page 119: What's New in Cocoa Touch

Smarter Text Input

Semantic tagging of text fields, text views and web contentProvides intelligent suggestionsMany predefined content type

Page 120: What's New in Cocoa Touch

Smarter Text Input

Semantic tagging of text fields, text views and web contentProvides intelligent suggestionsMany predefined content type

People

Page 121: What's New in Cocoa Touch

Smarter Text Input

Semantic tagging of text fields, text views and web contentProvides intelligent suggestionsMany predefined content type

PeopleLocations

textField.textContentType = UITextContentTypeFullStreetAddress

Page 122: What's New in Cocoa Touch

Smarter Text Input

Semantic tagging of text fields, text views and web contentProvides intelligent suggestionsMany predefined content type

PeopleLocations

textField.textContentType = UITextContentTypeFullStreetAddress

Email, telephone, credit card number, …

Page 123: What's New in Cocoa Touch

Content size category traitDynamic Type

Page 124: What's New in Cocoa Touch

Content size category traitDynamic Type

No longer a property on UIApplication

Page 125: What's New in Cocoa Touch

Content size category traitDynamic Type

No longer a property on UIApplicationNo need to listen to notifications

Page 126: What's New in Cocoa Touch

Content size category traitDynamic Type

No longer a property on UIApplicationNo need to listen to notificationsNow available in extensions

Page 127: What's New in Cocoa Touch

Dynamic Type

Page 128: What's New in Cocoa Touch

Dynamic Type

Page 129: What's New in Cocoa Touch

Dynamic Type

label.font = UIFont.preferredFont(forTextStyle: UIFontTextStyleBody)

label.adjustsFontForContentSizeCategory = true

Page 130: What's New in Cocoa Touch

Automatic support in label, text views and controlsDynamic Type

label.font = UIFont.preferredFont(forTextStyle: UIFontTextStyleBody)

label.adjustsFontForContentSizeCategory = true

Page 131: What's New in Cocoa Touch

Tab bar itemsImproved Customization

Page 132: What's New in Cocoa Touch

Tab bar itemsImproved Customization

Custom badge colors and text attributesCustomizable unselected Tint Color

Page 133: What's New in Cocoa Touch

Tab bar itemsImproved Customization

Custom badge colors and text attributesCustomizable unselected Tint Color

Page 134: What's New in Cocoa Touch

Tab bar itemsImproved Customization

Custom badge colors and text attributesCustomizable unselected Tint Color

tabBarItem.badgeColor = UIColor.white()

badgeTextAttributes = [ NSForegroundColorAttributeName : UIColor.blue(), NSFontAttributeName : UIFont.italicSystemFont(ofSize: 12) ]

tabBarItem.setBadgeTextAttributes(textAttributes: badgeTextAttributes, forState: UIControlStateNormal)

tabBar.unselectedTintColor = UIColor.brown()

Page 135: What's New in Cocoa Touch

Tab bar itemsImproved Customization

Custom badge colors and text attributesCustomizable unselected Tint Color

tabBarItem.badgeColor = UIColor.white()

badgeTextAttributes = [ NSForegroundColorAttributeName : UIColor.blue(), NSFontAttributeName : UIFont.italicSystemFont(ofSize: 12) ]

tabBarItem.setBadgeTextAttributes(textAttributes: badgeTextAttributes, forState: UIControlStateNormal)

tabBar.unselectedTintColor = UIColor.brown()

Page 136: What's New in Cocoa Touch

Improved WKWebView SupportPeek & Pop

Page 137: What's New in Cocoa Touch

Improved WKWebView SupportPeek & Pop

Fine control of Peek & Pop behaviors

Page 138: What's New in Cocoa Touch

Improved WKWebView SupportPeek & Pop

Fine control of Peek & Pop behaviorsCustom view controllers

Page 139: What's New in Cocoa Touch

Improved WKWebView SupportPeek & Pop

Fine control of Peek & Pop behaviorsCustom view controllersPreview actions

Page 140: What's New in Cocoa Touch

Improved WKWebView SupportPeek & Pop

Fine control of Peek & Pop behaviorsCustom view controllersPreview actionsPop inside your app

Page 141: What's New in Cocoa Touch

Improved WKWebView SupportPeek & Pop

Fine control of Peek & Pop behaviorsCustom view controllersPreview actionsPop inside your app

public func webView(_ webView: WKWebView, shouldPreviewElement elementInfo: WKPreviewElementInfo) -> Bool

public func webView(_ webView: WKWebView, previewingViewControllerForElement elementInfo: WKPreviewElementInfo, defaultActions previewActions: [WKPreviewActionItem]) -> UIViewController?

public func webView(_ webView: WKWebView, commitPreviewingViewController previewingViewController: UIViewController)

Page 142: What's New in Cocoa Touch

Bring your own UI!Peek & Pop

Page 143: What's New in Cocoa Touch

Bring your own UI!Peek & Pop

UIPreviewInteraction

Page 144: What's New in Cocoa Touch

Bring your own UI!Peek & Pop

UIPreviewInteraction

UIKit provides the “feel” of Peek & Pop

Page 145: What's New in Cocoa Touch

Bring your own UI!Peek & Pop

UIPreviewInteraction

UIKit provides the “feel” of Peek & Pop

func previewInteraction(_ previewInteraction: UIPreviewInteraction,

didUpdatePreviewTransition transitionProgress: CGFloat, ended: Bool) {

self.updateUIToPeek(transitionProgress)

if ended {

self.showPeekUI()

}

}

Page 146: What's New in Cocoa Touch

Bring your own UI!Peek & Pop

UIPreviewInteraction

UIKit provides the “feel” of Peek & Pop

func previewInteraction(_ previewInteraction: UIPreviewInteraction,

didUpdatePreviewTransition transitionProgress: CGFloat, ended: Bool) {

self.updateUIToPeek(transitionProgress)

if ended {

self.showPeekUI()

}

}

A Peek at 3D Touch Presidio Thursday 4:00PM

Page 147: What's New in Cocoa Touch
Page 148: What's New in Cocoa Touch
Page 149: What's New in Cocoa Touch

Support for UIScrollView and subclassesRefresh Control

Page 150: What's New in Cocoa Touch

Collection View

Page 151: What's New in Cocoa Touch

Collection View

Automatic self-sizing cellsin flow layout

Page 152: What's New in Cocoa Touch

Collection View

Automatic self-sizing cellsin flow layoutPaging support in collection view reordering

Page 153: What's New in Cocoa Touch

Collection ViewSmooth scrolling

Page 154: What's New in Cocoa Touch

Cell prefetching

Collection ViewSmooth scrolling

NEW

Page 155: What's New in Cocoa Touch

Cell prefetching

Collection ViewSmooth scrolling

NEW

Data prefetching

Page 156: What's New in Cocoa Touch

Cell prefetching

Collection ViewSmooth scrolling

NEW

Data prefetching(also available in UITableView)

Page 157: What's New in Cocoa Touch

Cell prefetching

Collection ViewSmooth scrolling

NEW

Data prefetching(also available in UITableView)

What’s New in UICollectionView in iOS 10 Presidio Thursday 9:00PM

Page 158: What's New in Cocoa Touch

UIViewPropertyAnimatorAdvances in UIKit Animations

Page 159: What's New in Cocoa Touch

UIViewPropertyAnimatorAdvances in UIKit Animations

Interruptible

Page 160: What's New in Cocoa Touch

UIViewPropertyAnimatorAdvances in UIKit Animations

InterruptibleScrubbable

Page 161: What's New in Cocoa Touch

UIViewPropertyAnimatorAdvances in UIKit Animations

InterruptibleScrubbableReversible

Page 162: What's New in Cocoa Touch

UIViewPropertyAnimatorAdvances in UIKit Animations

InterruptibleScrubbableReversibleRich timing features

Page 163: What's New in Cocoa Touch

UIViewPropertyAnimatorAdvances in UIKit Animations

InterruptibleScrubbableReversibleRich timing featuresDynamic

Page 164: What's New in Cocoa Touch

Advances in UIKit Animations

let timing = UICubicTimingParameters(animationCurve: .easeInOut)let animator = UIViewPropertyAnimator(duration: duration, timingParameters: timing)

animator.addAnimations { self.squareView.center = CGPoint(x: point.x, y: point.y)}

animator.startAnimation()

Page 165: What's New in Cocoa Touch

Advances in UIKit Animations

let timing = UICubicTimingParameters(animationCurve: .easeInOut)let animator = UIViewPropertyAnimator(duration: duration, timingParameters: timing)

animator.addAnimations { self.squareView.center = CGPoint(x: point.x, y: point.y)}

animator.startAnimation()

Advances in UIKit Animations and Transitions Pacific Heights Wednesday 5:00PM

Page 166: What's New in Cocoa Touch

1024 x 768

Page 167: What's New in Cocoa Touch

1024 x 768

Page 168: What's New in Cocoa Touch

1024 x 768

Page 169: What's New in Cocoa Touch

1024 x 768

Page 170: What's New in Cocoa Touch

Adopting System Features

Page 171: What's New in Cocoa Touch
Page 172: What's New in Cocoa Touch

Opening applications

Page 173: What's New in Cocoa Touch

Opening applications

Improving openURL

Page 174: What's New in Cocoa Touch

Opening applications

Improving openURL• Asynchronous, with a completion handler

Page 175: What's New in Cocoa Touch

Opening applications

Improving openURL• Asynchronous, with a completion handler• Let you check if a handler app is installed for

universal links

Page 176: What's New in Cocoa Touch

Opening applications

Improving openURL• Asynchronous, with a completion handler• Let you check if a handler app is installed for

universal links

UIApplication.shared().

open(url, options: [UIApplicationOpenURLOptionUniversalLinksOnly: true]) {

(didOpen: Bool) in

if !didOpen {

// No application available

}

}

Page 177: What's New in Cocoa Touch

Core Data

Page 178: What's New in Cocoa Touch

Core Data

Query generations

Page 179: What's New in Cocoa Touch

Core Data

Query generationsConcurrency improvements

Page 180: What's New in Cocoa Touch

Core Data

Query generationsConcurrency improvementsTooling improvements

Page 181: What's New in Cocoa Touch

Core Data

Query generationsConcurrency improvementsTooling improvements

What’s New in Core Data Pacific Heights Friday 10:00AM

Page 182: What's New in Cocoa Touch

CloudKit

Page 183: What's New in Cocoa Touch

CloudKit

Public databasesPrivate, per user databases

Page 184: What's New in Cocoa Touch

CloudKit

Public databasesPrivate, per user databasesRecord sharing

NEW

Page 185: What's New in Cocoa Touch

UICloudSharingControllerCloudKit NEW

Page 186: What's New in Cocoa Touch

UICloudSharingControllerCloudKit

Managing the invitation flow

NEW

Page 187: What's New in Cocoa Touch

UICloudSharingControllerCloudKit

Managing the invitation flowPrivate and secure

NEW

Page 188: What's New in Cocoa Touch

UICloudSharingControllerCloudKit

Managing the invitation flowPrivate and secure

let sharingController = UICloudSharingController(share: share, container: self.container)

NEW

Page 189: What's New in Cocoa Touch
Page 190: What's New in Cocoa Touch
Page 191: What's New in Cocoa Touch
Page 192: What's New in Cocoa Touch

CloudKit

87What’s New with CloudKit Presidio Thursday 3:00PM

Page 193: What's New in Cocoa Touch

NSUserActivity

Page 194: What's New in Cocoa Touch

NSUserActivity

Capture the state of your application

Page 195: What's New in Cocoa Touch

NSUserActivity

Capture the state of your application

NSUserActivity

Page 196: What's New in Cocoa Touch

NSUserActivity

Capture the state of your applicationInfrastructure for Handoff, Spotlight, …

NSUserActivity

Page 197: What's New in Cocoa Touch

NSUserActivity

Capture the state of your applicationInfrastructure for Handoff, Spotlight, …Now supports locations

NSUserActivity

Page 198: What's New in Cocoa Touch

NSUserActivity

Capture the state of your applicationInfrastructure for Handoff, Spotlight, …Now supports locations

NSUserActivityactivity.mapItem = myLocation

Page 199: What's New in Cocoa Touch

NSUserActivity

Capture the state of your applicationInfrastructure for Handoff, Spotlight, …Now supports locations

Increase Usage of Your App With Proactive Suggestions Mission Friday 1:40PM

NSUserActivityactivity.mapItem = myLocation

Page 200: What's New in Cocoa Touch

App Search

In iOS 9, we added support for indexed activities and indexed content

Page 201: What's New in Cocoa Touch

App Search

In iOS 9, we added support for indexed activities and indexed content

let userActivity = NSUserActivity(activityType: "myActivityType")

userActivity.eligibleForSearch = true

userActivity.eligibleForPublicIndexing = true

userActivity.title = "Presenting What’s New in Cocoa Touch"

let attributes = CSSearchableItemAttributeSet(itemContentType: "public.item")

attributes.displayName = …

userActivity.contentAttributeSet = attributes

Page 202: What's New in Cocoa Touch

App Search NEW

Page 203: What's New in Cocoa Touch

Users can continue their search in the app

App Search NEW

Page 204: What's New in Cocoa Touch

Users can continue their search in the app

App Search NEW

Page 205: What's New in Cocoa Touch

App Search

Page 206: What's New in Cocoa Touch

App Search

Add a CoreSpotlightContinuation key in your Info plist

Page 207: What's New in Cocoa Touch

App Search

Add a CoreSpotlightContinuation key in your Info plistImplement a new UIApplicationDelegate method

Page 208: What's New in Cocoa Touch

App Search

Add a CoreSpotlightContinuation key in your Info plistImplement a new UIApplicationDelegate method

func application(application: UIApplication,

continueUserActivity userActivity: NSUserActivity,

restorationHandler: ([AnyObject]?) -> Void) -> Bool {

if userActivity.activityType == CSQueryContinuationActionType {

if let searchQuery = userActivity.userInfo?[CSSearchQueryString] as? String {

// Search

}

return true

}

return false

}

Page 209: What's New in Cocoa Touch

CSSearchQuery CoreSpotlight Search API

Page 210: What's New in Cocoa Touch

CSSearchQuery CoreSpotlight Search API

Search the data you’ve already indexed with Spotlight

Page 211: What's New in Cocoa Touch

CSSearchQuery CoreSpotlight Search API

Search the data you’ve already indexed with SpotlightGreat power and performance, full content search

Page 212: What's New in Cocoa Touch

CSSearchQuery CoreSpotlight Search API

Search the data you’ve already indexed with SpotlightGreat power and performance, full content search Powerful query syntax

Page 213: What's New in Cocoa Touch

CSSearchQuery CoreSpotlight Search API

Search the data you’ve already indexed with SpotlightGreat power and performance, full content search Powerful query syntax

let query = CSSearchQuery(queryString: queryString, attributes: ["displayName"]) query.foundItemsHandler = { (items: [CSSearchableItem]) in /* process received items */ }

query.start()

Page 214: What's New in Cocoa Touch

CSSearchQuery CoreSpotlight Search API

Search the data you’ve already indexed with SpotlightGreat power and performance, full content search Powerful query syntax

Making the Most of Search APIs Pacific Heights Thursday 11:00AM

let query = CSSearchQuery(queryString: queryString, attributes: ["displayName"]) query.foundItemsHandler = { (items: [CSSearchableItem]) in /* process received items */ }

query.start()

Page 215: What's New in Cocoa Touch

RPBroadcastActivityViewController ReplayKit

Page 216: What's New in Cocoa Touch

Now supports live broadcasting

RPBroadcastActivityViewController ReplayKit

Page 217: What's New in Cocoa Touch

Now supports live broadcasting Third-party services support

RPBroadcastActivityViewController ReplayKit

Page 218: What's New in Cocoa Touch

Now supports live broadcasting Third-party services support

RPBroadcastActivityViewController ReplayKit

Go Live with ReplayKit Mission Tuesday 10:00AM

Page 219: What's New in Cocoa Touch

SceneKit

Page 220: What's New in Cocoa Touch

SceneKit

New realistic rendering• Physically-based rendering• High dynamic range• Linear color space

Page 221: What's New in Cocoa Touch
Page 222: What's New in Cocoa Touch

NEW

Advances in SceneKit Rendering Presidio Tuesday 2:00PM

Page 223: What's New in Cocoa Touch

Apple Pay

Page 224: What's New in Cocoa Touch

In Apps In Stores

iPhone

Apple Watch

iPad

Apple PayCurrently

Page 225: What's New in Cocoa Touch

Apple PayFall 2016

In Apps In Stores Web Extensions

iPhone

Apple Watch

iPad

Mac

NEW

Page 226: What's New in Cocoa Touch

Apple Pay

Page 227: What's New in Cocoa Touch

Apple Pay

Apple Pay in UI code

Page 228: What's New in Cocoa Touch

Apple Pay

Apple Pay in UI codeApple Pay in Safari

NEW

Page 229: What's New in Cocoa Touch

Apple Pay

Apple Pay in UI codeApple Pay in Safari• Also available in SFSafariViewController

NEW

Page 230: What's New in Cocoa Touch

Apple Pay

Apple Pay in UI codeApple Pay in Safari• Also available in SFSafariViewController

Apple Pay in non-UI extensions

NEW

Page 231: What's New in Cocoa Touch

Apple Pay

Apple Pay in UI codeApple Pay in Safari• Also available in SFSafariViewController

Apple Pay in non-UI extensionsGreat feature for your iMessage apps

NEW

Page 232: What's New in Cocoa Touch

Apple Pay

Apple Pay in UI codeApple Pay in Safari• Also available in SFSafariViewController

Apple Pay in non-UI extensionsGreat feature for your iMessage apps

Page 233: What's New in Cocoa Touch

Apple Pay

Apple Pay in UI codeApple Pay in Safari• Also available in SFSafariViewController

Apple Pay in non-UI extensionsGreat feature for your iMessage apps

Page 234: What's New in Cocoa Touch

Apple Pay

Apple Pay in UI codeApple Pay in Safari• Also available in SFSafariViewController

Apple Pay in non-UI extensionsGreat feature for your iMessage apps

Page 235: What's New in Cocoa Touch

Apple Pay

Apple Pay in UI codeApple Pay in Safari• Also available in SFSafariViewController

Apple Pay in non-UI extensionsGreat feature for your iMessage apps

Page 236: What's New in Cocoa Touch

Apple Pay

Apple Pay in UI codeApple Pay in Safari• Also available in SFSafariViewController

Apple Pay in non-UI extensionsGreat feature for your iMessage apps

Page 237: What's New in Cocoa Touch

Apple Pay

Apple Pay in UI codeApple Pay in Safari• Also available in SFSafariViewController

Apple Pay in non-UI extensionsGreat feature for your iMessage apps

Page 238: What's New in Cocoa Touch

Apple Pay

Apple Pay in UI codeApple Pay in Safari• Also available in SFSafariViewController

Apple Pay in non-UI extensionsGreat feature for your iMessage apps

Apple Pay on the Web Mission Tuesday 1:40PM

What’s New with Wallet and Apple Pay Mission Tuesday 3:00PM

Page 239: What's New in Cocoa Touch

Apple Pay

Apple Pay in UI codeApple Pay in Safari• Also available in SFSafariViewController

Apple Pay in non-UI extensionsGreat feature for your iMessage apps

Apple Pay on the Web Mission Tuesday 1:40PM

What’s New with Wallet and Apple Pay Mission Tuesday 3:00PM

Page 240: What's New in Cocoa Touch

Integrating with iOS

Page 241: What's New in Cocoa Touch
Page 242: What's New in Cocoa Touch
Page 243: What's New in Cocoa Touch

Keyboards Extensions

Automatically switch your multi-language keyboard extension based on text content Add system Globe Key functionalityin your own keyboard extension

Page 244: What's New in Cocoa Touch

Display modesWidgets

Widgets now have the concept of “display modes”

Page 245: What's New in Cocoa Touch

Display modesWidgets

Widgets now have the concept of “display modes”• User-controlled • Compact is fixed height

Page 246: What's New in Cocoa Touch

Display modesWidgets

Widgets now have the concept of “display modes”• User-controlled • Compact is fixed height• Expanded is variable

Page 247: What's New in Cocoa Touch

// Widgets: Display modes

public enum NCWidgetDisplayMode : Int {

case compact

case expanded

}

public var widgetLargestAvailableDisplayMode: NCWidgetDisplayMode

public var widgetActiveDisplayMode: NCWidgetDisplayMode { get }

public func widgetMaximumSize(for displayMode: NCWidgetDisplayMode) -> CGSize

optional public func widgetActiveDisplayModeDidChange(_ activeDisplayMode: NCWidgetDisplayMode,

withMaximumSize maxSize: CGSize)

Page 248: What's New in Cocoa Touch

Privacy best practicesWidgets

Page 249: What's New in Cocoa Touch

Privacy best practicesWidgets

Your widget will be on the lock screen

Page 250: What's New in Cocoa Touch

Privacy best practicesWidgets

Your widget will be on the lock screenDon’t surprise your users

Page 251: What's New in Cocoa Touch

User Notifications

Page 252: What's New in Cocoa Touch

User NotificationsNew Framework in iOS 10

Page 253: What's New in Cocoa Touch

User NotificationsNew Framework in iOS 10

Page 254: What's New in Cocoa Touch

User Notifications

Feature Parity

New Framework in iOS 10

Page 255: What's New in Cocoa Touch

User Notifications

Feature ParityUnifies local and remote notification

New Framework in iOS 10

Page 256: What's New in Cocoa Touch

User Notifications

Feature ParityUnifies local and remote notificationBetter delivery management

New Framework in iOS 10

Page 257: What's New in Cocoa Touch

User Notifications

Feature ParityUnifies local and remote notificationBetter delivery managementIn-app presentation option

New Framework in iOS 10

Page 258: What's New in Cocoa Touch

User Notifications

Feature ParityUnifies local and remote notificationBetter delivery managementIn-app presentation optionMulti-Platform

New Framework in iOS 10

Page 259: What's New in Cocoa Touch

User NotificationsService extension

ExtensionAPNSServer-side application

Page 260: What's New in Cocoa Touch

User Notifications

Non-UI extension point

Service extension

ExtensionAPNSServer-side application

Page 261: What's New in Cocoa Touch

User Notifications

Non-UI extension pointUse cases

Service extension

ExtensionAPNSServer-side application

Page 262: What's New in Cocoa Touch

User Notifications

Non-UI extension pointUse cases

Media attachments

Service extension

ExtensionAPNSServer-side application

Page 263: What's New in Cocoa Touch

User Notifications

Non-UI extension pointUse cases

Media attachments End-to-end encryption

Service extension

ExtensionAPNSServer-side application

Page 264: What's New in Cocoa Touch

User NotificationsContent extension

Page 265: What's New in Cocoa Touch

User NotificationsContent extension

Page 266: What's New in Cocoa Touch

User Notifications

UI extension point

Content extension

Page 267: What's New in Cocoa Touch

User Notifications

UI extension pointCustom views

Content extension

Page 268: What's New in Cocoa Touch

User Notifications

UI extension pointCustom viewsNo direct interaction

Content extension

Page 269: What's New in Cocoa Touch

User Notifications

Introduction to Notifications Pacific Heights Wednesday 9:00AM

Advanced Notifications Pacific Heights Wednesday 10:00AM

Page 270: What's New in Cocoa Touch

CallKitDirectory Extension

Page 271: What's New in Cocoa Touch

CallKit

Blocking

Directory Extension

Page 272: What's New in Cocoa Touch

CallKit

Blocking Identification

Directory Extension

Page 273: What's New in Cocoa Touch

CallKit

Blocking Identification

public class CXCallDirectoryExtensionContext : NSExtensionContext {

public func addBlockingEntry(withNextSequentialPhoneNumber phoneNumber: String)

public func addIdentificationEntry(withNextSequentialPhoneNumber phoneNumber: String, label: String)

}

Directory Extension

Page 274: What's New in Cocoa Touch

CallKitCall Provider API

Page 275: What's New in Cocoa Touch

CallKit

A 1st party experience for your VoIP application

Call Provider API

Page 276: What's New in Cocoa Touch

CallKit

A 1st party experience for your VoIP applicationFull screen incoming call UI

Call Provider API

Page 277: What's New in Cocoa Touch

CallKit

A 1st party experience for your VoIP applicationFull screen incoming call UIIntegrated with other types of calls

Call Provider API

Page 278: What's New in Cocoa Touch

CallKit

A 1st party experience for your VoIP applicationFull screen incoming call UIIntegrated with other types of callsVoIP calls appears in Favorites and Recents

Call Provider API

Page 279: What's New in Cocoa Touch

CallKit

A 1st party experience for your VoIP applicationFull screen incoming call UIIntegrated with other types of callsVoIP calls appears in Favorites and RecentsSupports Siri, CarPlay, Do Not Disturb, Bluetooth

Call Provider API

Page 280: What's New in Cocoa Touch

CallKit

A 1st party experience for your VoIP applicationFull screen incoming call UIIntegrated with other types of callsVoIP calls appears in Favorites and RecentsSupports Siri, CarPlay, Do Not Disturb, Bluetooth

Call Provider API

Enhancing VoIP Apps with CallKit Mission Thursday 5:00PM

Page 281: What's New in Cocoa Touch

SiriKit

Page 282: What's New in Cocoa Touch

SiriKit

Page 283: What's New in Cocoa Touch

SiriKit

Page 284: What's New in Cocoa Touch

SiriKit

Page 285: What's New in Cocoa Touch

SiriKit

Recognition

Page 286: What's New in Cocoa Touch

SiriKit

Recognition Domain

Page 287: What's New in Cocoa Touch

SiriKit

Recognition Domain Intents

Page 288: What's New in Cocoa Touch

SiriKit

Recognition Domain Intents Your Extension

Page 289: What's New in Cocoa Touch

SiriKit

Vocabulary

Recognition Domain Intents Your Extension

Page 290: What's New in Cocoa Touch

Intents Extension

Handle the interaction between Siri and your application• Intents and responses

Page 291: What's New in Cocoa Touch

Intents Extension

Handle the interaction between Siri and your application• Intents and responses

Intents are domain specific

Page 292: What's New in Cocoa Touch

Intents Extension

Handle the interaction betweenSiri and your application• Intents and responses

Intents are domain specific• Make sure Siri and your app

agree on the request before performing it

Page 293: What's New in Cocoa Touch

Intents Extension

Handle the interaction betweenSiri and your application• Intents and responses

Intents are domain specific• Make sure Siri and your app

agree on the request before performing it

“Tell Miko on WWDCChatwe need to meet after this session”

Page 294: What's New in Cocoa Touch

Intents Extension

Handle the interaction between Siri and your application• Intents and responses

Intents are domain specific• Make sure Siri and your app

agree on the request before performing it

“Tell Miko on WWDCChatwe need to meet after this session”

App NameSend message intent Recipient

Content

Page 295: What's New in Cocoa Touch

IntentsUI Extension

Embed your own UI in the Siri Transcript• Optional

Page 296: What's New in Cocoa Touch

Intents are Shared

Intents describe requests• For Siri to communicate with your app• To integrate with CallKit• For Ride Sharing in Maps• To donate information to the system

about a contact

Page 297: What's New in Cocoa Touch

Intents are Shared

Intents describe requests• For Siri to communicate with your app• To integrate with CallKit• For Ride Sharing in Maps• To donate information to the system

about a contact

Page 298: What's New in Cocoa Touch

Intents are Shared

Intents describe requests• For Siri to communicate with your app• To integrate with CallKit• For Ride Sharing in Maps• To donate information to the system

about a contact

Page 299: What's New in Cocoa Touch

Intents are Shared

Intents describe requests• For Siri to communicate with your app• To integrate with CallKit• For Ride Sharing in Maps• To donate information to the system

about a contact

Page 300: What's New in Cocoa Touch

iMessage Apps

Page 301: What's New in Cocoa Touch

iMessage Apps

Write apps for Messages

Page 302: What's New in Cocoa Touch

iMessage Apps

Write apps for MessagesSticker packs

Page 303: What's New in Cocoa Touch

iMessage Apps

Write apps for MessagesSticker packsMessages extension

Page 304: What's New in Cocoa Touch

Sticker PacksiMessage Apps

Page 305: What's New in Cocoa Touch

Sticker PacksiMessage Apps

No code required

Page 306: What's New in Cocoa Touch

Sticker PacksiMessage Apps

No code requiredPackage and distribute your images

Page 307: What's New in Cocoa Touch

Message ExtensionsiMessage Apps

Page 308: What's New in Cocoa Touch

Message ExtensionsiMessage Apps

Dynamic stickers content

Page 309: What's New in Cocoa Touch

Message ExtensionsiMessage Apps

Dynamic stickers contentCustomize your UI

Page 310: What's New in Cocoa Touch

Message ExtensionsiMessage Apps

Page 311: What's New in Cocoa Touch

Message ExtensionsiMessage Apps

Interactive Messages

Page 312: What's New in Cocoa Touch

Message ExtensionsiMessage Apps

Interactive MessagesConnect and integrate with a Messages session

Page 313: What's New in Cocoa Touch

Message ExtensionsiMessage Apps

Interactive MessagesConnect and integrate with a Messages session Custom content

Page 314: What's New in Cocoa Touch

iMessage Apps

138

Page 315: What's New in Cocoa Touch

iMessage Apps

138

iMessage Apps and Stickers, Part 1 Presido Tuesday 11:00AM

iMessage Apps and Stickers, Part 2 Presidio Thursday 1:40PM

Page 316: What's New in Cocoa Touch

More Information

https://developer.apple.com/wwdc16/205

Page 317: What's New in Cocoa Touch

Labs

Cocoa Touch Lab Frameworks Lab D Tuesday 2:30PM

Cocoa Touch Lab Frameworks Lab A Wednesday 3:00M

UIKit and UIKit Animations Lab Frameworks Lab C Thursday 1:00PM

Cocoa Touch 3D Touch Lab Frameworks Lab C Friday 10:30AM

Page 318: What's New in Cocoa Touch