watchkit in-depth, part 2...nathan de vries watchos engineer chloe chang watchos engineer app...

119
© 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple. #WWDC15 WatchKit In-Depth, Part 2 Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208

Upload: others

Post on 14-Dec-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

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

#WWDC15

WatchKit In-Depth, Part 2

Nathan de Vries watchOS EngineerChloe Chang watchOS Engineer

App Frameworks

Session 208

Page 2: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Agenda

Digital Crown

Page 3: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Agenda

Digital CrownMedia Playback

Page 4: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Agenda

Digital CrownMedia PlaybackAudio Recording

Page 5: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Agenda

Digital CrownMedia PlaybackAudio RecordingSecurity

Page 6: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Digital Crown

Nathan de Vries watchOS Engineer

Page 7: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Core Interactions

Page 8: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Core Interactions

Page 9: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Core Interactions

Page 10: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Core Interactions

Page 11: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Core Interactions

Page 12: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Digital Crown–Why?

Intuitive

Page 13: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Digital Crown–Why?

IntuitiveKeep your UI visible

Page 14: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Digital Crown–Why?

IntuitiveKeep your UI visiblePrecise

Page 15: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Digital Crown–Why?

IntuitiveKeep your UI visiblePrecisePlayful

Page 16: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

WKInterfacePickerList style

Page 17: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

WKInterfacePickerList style

Page 18: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

WKInterfacePickerStack style

Page 19: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

WKInterfacePickerStack style

Page 20: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

WKInterfacePickerSequence style

Page 21: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

WKInterfacePickerSequence style

Page 22: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

😀 ✌

Focus Styles

Page 23: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

😀 ✌😀 ✌

Focus Styles

Page 24: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

😀 ✌😀 ✌😀 ✌

Focus Styles

Page 25: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

😀 ✌😀 ✌😀 ✌

FACE

Focus Styles

Page 26: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

😀 ✌😀 ✌😀 ✌

HAND

😀 ✌

Focus Styles

Page 27: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Contextual Indicator

😎

Page 28: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Contextual Indicator

😎

Page 29: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Coordinating Images

0%

Page 30: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Coordinating Images

0%10%20%30%

Page 31: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Coordinating Images

0%10%20%30%

Page 32: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Coordinating Images

0%10%20%30%40%50%60%70%

Page 33: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Creating a Picker

Page 34: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Creating a Picker

Page 35: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Creating a Picker

Page 36: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Creating a Picker

Page 37: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Creating a Picker

Page 38: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Creating a Picker

Page 39: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Creating a Picker

Page 40: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Creating a Picker

Page 41: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Configuring Items

Page 42: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Configuring Items

Page 43: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Configuring Items

picker.setItems([ ])

title: ITEM 1 caption: CAPTION 1 accessoryImage:

title: ITEM 2 caption: CAPTION 2 accessoryImage:

title: ITEM 3 caption: CAPTION 3 accessoryImage:

WKPickerItem

title: ITEM 4 caption: CAPTION 3 accessoryImage:

CAPTION 2

ITEM 2ITEM 1

ITEM 3

Page 44: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Configuring Items

picker.setItems([ ])

caption: CAPTION 1 contentImage:

caption: CAPTION 2 contentImage:

caption: CAPTION 3 contentImage:

WKPickerItem

caption: CAPTION 4 contentImage:

CAPTION 2

Page 45: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Specifying Item Images

// Image bundled with the app let itemOne = WKPickerItem() itemOne.contentImage = WKImage(imageName: "picker-item-content")

// Image data loaded from a file or network let itemTwo = WKPickerItem() itemTwo.contentImage = WKImage(imageData: contentImageData)

// UIImage drawn in code let itemThree = WKPickerItem() itemThree.contentImage = WKImage(image: contentImage)

Page 46: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Specifying Item Images

// Image bundled with the app let itemOne = WKPickerItem() itemOne.contentImage = WKImage(imageName: "picker-item-content")

// Image data loaded from a file or network let itemTwo = WKPickerItem() itemTwo.contentImage = WKImage(imageData: contentImageData)

// UIImage drawn in code let itemThree = WKPickerItem() itemThree.contentImage = WKImage(image: contentImage)

Page 47: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Specifying Item Images

// Image bundled with the app let itemOne = WKPickerItem() itemOne.contentImage = WKImage(imageName: "picker-item-content")

// Image data loaded from a file or network let itemTwo = WKPickerItem() itemTwo.contentImage = WKImage(imageData: contentImageData)

// UIImage drawn in code let itemThree = WKPickerItem() itemThree.contentImage = WKImage(image: contentImage)

Page 48: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Specifying Item Images

// Image bundled with the app let itemOne = WKPickerItem() itemOne.contentImage = WKImage(imageName: "picker-item-content")

// Image data loaded from a file or network let itemTwo = WKPickerItem() itemTwo.contentImage = WKImage(imageData: contentImageData)

// UIImage drawn in code let itemThree = WKPickerItem() itemThree.contentImage = WKImage(image: contentImage)

Page 49: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Handling Selected Item Changes

var pickerItems : [WKPickerItem]!

...

@IBAction func pickerAction(selectedIndex: Int) { var item = pickerItems[selectedIndex] print("The selected item is \(item.title) with index \(selectedIndex).") }

Page 50: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Coordinating Images

70%

Page 51: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Coordinating Images

70%Group

Picker

Page 52: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Coordinating Images

let progressImages = UIImage.animatedImageWithImages([

], duration: 0.0)

progressInterfaceGroup.setBackgroundImage(progressImages)

picker.setCoordinatedAnimations([ progressInterfaceGroup, ... ])

Page 53: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Coordinating Images

let progressImages = UIImage.animatedImageWithImages([

], duration: 0.0)

progressInterfaceGroup.setBackgroundImage(progressImages)

picker.setCoordinatedAnimations([ progressInterfaceGroup, ... ])

Page 54: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Coordinating Images

let progressImages = UIImage.animatedImageWithImages([

], duration: 0.0)

progressInterfaceGroup.setBackgroundImage(progressImages)

picker.setCoordinatedAnimations([ progressInterfaceGroup, ... ])

Page 55: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Coordinating Images

Image Image Image Image Image Image

Item Item Item Item ItemWKInterfacePicker Item

WKInterfaceGroupor WKInterfaceImage

selected index

Page 56: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Coordinating Images

Image Image Image Image Image Image

Item Item Item Item ItemWKInterfacePicker Item

WKInterfaceGroupor WKInterfaceImage

selected index

Page 57: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Demo

Page 58: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Digital CrownRecap

Three customizable stylesFocus and indicator supportImage animation coordination

Page 59: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Media Playback

Chloe Chang watchOS Engineer

Page 60: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Media PlaybackAudiovisual

Page 61: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Media PlaybackAudiovisual

Page 62: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Media PlaybackAudio-only

Page 63: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

} }

Media Playback

if let url = NSBundle.mainBundle().URLForResource("sample", withExtension: "mov") {

let options: [NSObject: AnyObject] = [ WKMediaPlayerControllerOptionsAutoplayKey: true, WKMediaPlayerControllerOptionsStartTimeKey: 3.0, WKMediaPlayerControllerOptionsVideoGravityKey: WKVideoGravity.ResizeAspect.rawValue]

presentMediaPlayerControllerWithURL(url, options: options) { didPlayToEnd, endTime, error in /* check playback result */

Page 64: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

} }

Media Playback

if let url = NSBundle.mainBundle().URLForResource("sample", withExtension: "mov") {

let options: [NSObject: AnyObject] = [ WKMediaPlayerControllerOptionsAutoplayKey: true, WKMediaPlayerControllerOptionsStartTimeKey: 3.0, WKMediaPlayerControllerOptionsVideoGravityKey: WKVideoGravity.ResizeAspect.rawValue]

presentMediaPlayerControllerWithURL(url, options: options) { didPlayToEnd, endTime, error in /* check playback result */

Page 65: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

} }

Media Playback

if let url = NSBundle.mainBundle().URLForResource("sample", withExtension: "mov") {

let options: [NSObject: AnyObject] = [ WKMediaPlayerControllerOptionsAutoplayKey: true, WKMediaPlayerControllerOptionsStartTimeKey: 3.0, WKMediaPlayerControllerOptionsVideoGravityKey: WKVideoGravity.ResizeAspect.rawValue]

presentMediaPlayerControllerWithURL(url, options: options) { didPlayToEnd, endTime, error in /* check playback result */

Page 66: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

} }

Media Playback

if let url = NSBundle.mainBundle().URLForResource("sample", withExtension: "mov") {

let options: [NSObject: AnyObject] = [ WKMediaPlayerControllerOptionsAutoplayKey: true, WKMediaPlayerControllerOptionsStartTimeKey: 3.0, WKMediaPlayerControllerOptionsVideoGravityKey: WKVideoGravity.ResizeAspect.rawValue]

presentMediaPlayerControllerWithURL(url, options: options) { didPlayToEnd, endTime, error in /* check playback result */

Page 67: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Media PlaybackWKInterfaceMovie

Page 68: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Media PlaybackWKInterfaceMovie

Page 69: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda
Page 70: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda
Page 71: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda
Page 72: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda
Page 73: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Media PlaybackWKInterfaceMovie

var url: NSURL var poster: WKImage @IBOutlet weak var movie: WKInterfaceMovie!

func setupMovie() { movie.setMovieURL(url) movie.setVideoGravity(.ResizeAspectFill) movie.setPosterImage(poster)}

Page 74: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Media PlaybackWKInterfaceMovie

var url: NSURL var poster: WKImage @IBOutlet weak var movie: WKInterfaceMovie!

func setupMovie() { movie.setMovieURL(url) movie.setVideoGravity(.ResizeAspectFill) movie.setPosterImage(poster)}

Page 75: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Media PlaybackWKInterfaceMovie

var url: NSURL var poster: WKImage @IBOutlet weak var movie: WKInterfaceMovie!

func setupMovie() { movie.setMovieURL(url) movie.setVideoGravity(.ResizeAspectFill) movie.setPosterImage(poster)}

Page 76: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Media PlaybackRecommended formats

Video Audio

H.264 High ProfileBit Rate: 160 kbpsFrame Rate: 30 fps

Full screen: 208 x 26016:9 aspect ratio: 320 x 180

Bit Rate: 32 kbpsAAC Stereo

Page 77: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Media PlaybackLong-form audio

Page 78: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Media PlaybackLong-form audio

Play in the background

Page 79: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Media PlaybackLong-form audio

Play in the backgroundPodcasts, music

Page 80: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Media PlaybackLong-form audio

Play in the backgroundPodcasts, musicRouted to Bluetooth headphones

Page 81: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Media PlaybackLong-form audio

Play in the backgroundPodcasts, musicRouted to Bluetooth headphonesNow Playing glance integration

Page 82: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Media PlaybackLong-form audio

let asset = WKAudioFileAsset.assetWithURL(URL:url) let playerItem = WKAudioFilePlayerItem.playerItemWithAsset(asset:asset)

let player = WKAudioFilePlayer.playerWithPlayerItem(playerItem:playerItem) player.play() //player.pause()

let queuePlayer = WKAudioFileQueuePlayer.queuePlayerWithItems(items:[…]) queuePlayer.play() //queuePlayer.pause()

Page 83: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Media PlaybackLong-form audio

let asset = WKAudioFileAsset.assetWithURL(URL:url) let playerItem = WKAudioFilePlayerItem.playerItemWithAsset(asset:asset)

let player = WKAudioFilePlayer.playerWithPlayerItem(playerItem:playerItem) player.play() //player.pause()

let queuePlayer = WKAudioFileQueuePlayer.queuePlayerWithItems(items:[…]) queuePlayer.play() //queuePlayer.pause()

Page 84: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Media PlaybackLong-form audio

let asset = WKAudioFileAsset.assetWithURL(URL:url) let playerItem = WKAudioFilePlayerItem.playerItemWithAsset(asset:asset)

let player = WKAudioFilePlayer.playerWithPlayerItem(playerItem:playerItem) player.play() //player.pause()

let queuePlayer = WKAudioFileQueuePlayer.queuePlayerWithItems(items:[…]) queuePlayer.play() //queuePlayer.pause()

Page 85: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Media PlaybackLong-form audio

let asset = WKAudioFileAsset.assetWithURL(URL:url) let playerItem = WKAudioFilePlayerItem.playerItemWithAsset(asset:asset)

let player = WKAudioFilePlayer.playerWithPlayerItem(playerItem:playerItem) player.play() //player.pause()

let queuePlayer = WKAudioFileQueuePlayer.queuePlayerWithItems(items:[…]) queuePlayer.play() //queuePlayer.pause()

Page 86: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Media PlaybackLong-form audio

Enable background mode in the app’s Info.plist

Page 87: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Media PlaybackLong-form audio

Enable background mode in the app’s Info.plist

Page 88: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Media PlaybackLong-form audio

Enable background mode in the app’s Info.plist

Page 89: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Media PlaybackResource locations

Watch App

Watch Extension

Page 90: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Media PlaybackResource locations

Watch App

Watch Extension

App’s Container

Extension’s Container

Page 91: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Media PlaybackResource locations

Watch App

Watch Extension

App’s Container

Extension’s Container

Page 92: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Media PlaybackResource locations

Watch App

Watch Extension

App’s Container

Extension’s Container

Page 93: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Media PlaybackResource locations

Watch App

Watch Extension

App’s Container

Extension’s Container

Page 94: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Media PlaybackResource locations

Watch App

Watch Extension

App’s Container

Extension’s Container

Page 95: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Media PlaybackResource locations

Watch App

Watch Extension

App’s Container

Extension’s Container

Page 96: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Media PlaybackResource locations

Watch App

Watch Extension

App’s Container

Extension’s Container

Page 97: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Media PlaybackResource locations

Watch App

Watch Extension

App’s Container

Extension’s Container

Page 98: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Media PlaybackResource locations

Watch App

Watch Extension

App’s Container

Extension’s Container

Shared Container for App Group

Page 99: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Media PlaybackResource locations

Watch App

Watch Extension

App’s Container

Extension’s Container

Shared Container for App Group

Page 100: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Sharing Data with Your Containing AppApp Extension Programming Guidehttp://developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html

Media PlaybackApp groups

Page 101: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Audio Recording

Page 102: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Audio Recording

Page 103: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Audio Recording

Page 104: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Audio Recording

Page 105: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Audio Recording

presentAudioRecordingControllerWithOutputURL(url, preset: .NarrowBandSpeech, maximumDuration: 60.0, actionTitle:"Send") { didSave, error in /* check recording result */ }

Page 106: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Audio Recording

presentAudioRecordingControllerWithOutputURL(url, preset: .NarrowBandSpeech, maximumDuration: 60.0, actionTitle:"Send") { didSave, error in /* check recording result */ }

Page 107: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Audio RecordingSupported file types

AAC Codec LPCM Codec

Page 108: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Audio RecordingPresets

Presets Sample Rate Bit Rate

AAC LPCM

Narrow band speech 8 kHz 24 kbps 128 kbps

Wide band speech 16 kHz 32 kbps 256 kbps

High quality audio 44.1 kHz 96 kbps 705.6 kbps

Page 109: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Security

Page 110: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

SecurityKeychain

Page 111: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

SecurityKeychain

Locks/unlocks with Apple Watch

Page 112: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

SecurityKeychain

Locks/unlocks with Apple WatchNo iCloud Keychain

Page 113: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

SecurityKeychain example

let secret = "YouCanNeverGuess" if let secretData = secret.dataUsingEncoding(NSUnicodeStringEncoding) { let attributes: [NSString: NSObject] = [ kSecClass: kSecClassGenericPassword, kSecAttrAccessible: kSecAttrAccessibleWhenUnlocked kSecAttrService: "myservice", kSecAttrAccount: "account name", kSecValueData: secretData ] SecItemAdd(attributes, nil) }

Page 114: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Summary

Digital CrownMedia playbackAudio recordingSecurity

Page 115: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

More Information

DocumentationwatchOS 2 Transition GuideWatchKit Programming Guidehttp://developer.apple.com/watchOS

Sample CodeListerWatchKitMoviePlayerWatchKit Cataloghttp://developer.apple.com/watchOS

Technical SupportApple Developer ForumsDeveloper Technical Supporthttp://developer.apple.com/forums

General InquiriesJake Behrens, watchOS Frameworks [email protected]

Page 116: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Related Sessions

Introducing WatchKit for watchOS 2 Presidio Tuesday 10:00AM

Privacy and Your App Pacific Heights Tuesday 2:30PM

Building Watch Apps Pacific Heights Tuesday 4:30PM

Security and Your Apps Mission Tuesday 4:30PM

WatchKit In-Depth, Part 1 Pacific Heights Wednesday 9:00AM

Introducing Watch Connectivity Pacific Heights Thursday 11:00AM

Designing for Apple Watch Presidio Wednesday 4:30PM

Page 117: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Related Sessions

Layout and Animation Techniques for WatchKit Pacific Heights Thursday 10:00AM

Networking with NSURLSession Pacific Heights Thursday 9:00AM

WatchKit Tips and Tricks Presidio Friday 10:00AM

Apple Watch Design Tips and Tricks Presidio Friday 3:30PM

Page 118: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda

Labs

AVKit and AV Foundation Lab Graphics, Games,and Media Lab A Wednesday 1:30PM

WatchKit Lab Frameworks Lab D Wednesday 3:30PM

AVKit and AV Foundation Lab Graphics, Games,and Media Lab B Thursday 11:00AM

Watch Connectivity Lab Frameworks Lab B Thursday 1:30PM

WatchKit and ClockKit Complications Lab Frameworks Lab A Friday 1:30PM

AVKit and AV Foundation Lab Graphics, Games,and Media Lab B Friday 1:30PM

Page 119: WatchKit In-Depth, Part 2...Nathan de Vries watchOS Engineer Chloe Chang watchOS Engineer App Frameworks Session 208 Agenda Digital Crown Agenda Digital Crown Media Playback Agenda