app development using tvmlkit - apple inc. · building an app with tvmlkit xcode tvml and styles...

123
© 2016 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple. Part 1 App Frameworks #WWDC16 Session 212 App Development Using TVMLKit Nurinder Manj tvOS Engineer

Upload: others

Post on 15-Jul-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

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

Part 1

App Frameworks #WWDC16

Session 212

App Development Using TVMLKit

Nurinder Manj tvOS Engineer

Page 2: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

Agenda

What is TVMLKit?

Page 3: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

Agenda

What is TVMLKit?Building an app with TVMLKit

Page 4: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

Agenda

What is TVMLKit?Building an app with TVMLKitNew features

Page 5: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit
Page 6: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit
Page 7: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit
Page 8: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit
Page 9: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

TVMLKit

Page 10: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

TVMLKit

Page 11: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

What is TVMLKit?

Native experience

Page 12: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

What is TVMLKit?

Native experienceXML and JavaScript

Page 13: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

What is TVMLKit?

Native experienceXML and JavaScriptConfigurable

Page 14: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

What is TVMLKit?

Native experienceXML and JavaScript ConfigurableExtensible

Page 15: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

What is TVMLKit?

Native experienceXML and JavaScriptConfigurableExtensibleNot a web browser

Page 16: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

Building an App With TVMLKit

Page 17: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

Building an App With TVMLKit

Xcode

Page 18: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

Building an App With TVMLKit

XcodeTVML and Styles

Page 19: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

Building an App With TVMLKit

XcodeTVML and StylesTVMLKit JS

Page 20: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

Application Architecture

TVMLKit

Page 21: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

Application Architecture

TVMLKitTVMLKit JS

Storage

DOM

XMLHttpRequest App

Settings

NavigationDocument

Player

Playlist

MediaItem

Page 22: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

Application Architecture

TVMLKitTVMLKit JS

Storage

DOM

XMLHttpRequest App

Settings

NavigationDocument

Player

Playlist

MediaItem

Page 23: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

Xcode windowTVML Application Template

Page 24: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

// Bootstrapping TVMLKit App

class AppDelegate: ..., TVApplicationControllerDelegate {

...

static let tvBaseURL = "http://localhost:9001/"

static let tvBootURL = "\(AppDelegate.tvBaseURL)/application.js"

func application(..., didFinishLaunchingWithOptions launchOptions: ...) -> Bool {

...

let appControllerContext = TVApplicationControllerContext()

if let javaScriptURL = NSURL(string: AppDelegate.tvBootURL) {

appControllerContext.javaScriptApplicationURL = javaScriptURL

}

...

appController = TVApplicationController(context: appControllerContext, window: window,

delegate: self)

...

return true

}

}

Page 25: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

// Bootstrapping TVMLKit App

class AppDelegate: ..., TVApplicationControllerDelegate {

...

static let tvBaseURL = "http://localhost:9001/"

static let tvBootURL = "\(AppDelegate.tvBaseURL)/application.js"

func application(..., didFinishLaunchingWithOptions launchOptions: ...) -> Bool {

...

let appControllerContext = TVApplicationControllerContext()

if let javaScriptURL = NSURL(string: AppDelegate.tvBootURL) {

appControllerContext.javaScriptApplicationURL = javaScriptURL

}

...

appController = TVApplicationController(context: appControllerContext, window: window,

delegate: self)

...

return true

}

}

Page 26: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

// Bootstrapping TVMLKit App

class AppDelegate: ..., TVApplicationControllerDelegate {

...

static let tvBaseURL = "http://localhost:9001/"

static let tvBootURL = "\(AppDelegate.tvBaseURL)/application.js"

func application(..., didFinishLaunchingWithOptions launchOptions: ...) -> Bool {

...

let appControllerContext = TVApplicationControllerContext()

if let javaScriptURL = NSURL(string: AppDelegate.tvBootURL) {

appControllerContext.javaScriptApplicationURL = javaScriptURL

}

...

appController = TVApplicationController(context: appControllerContext, window: window,

delegate: self)

...

return true

}

}

Page 27: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

// Bootstrapping TVMLKit App

class AppDelegate: ..., TVApplicationControllerDelegate {

...

static let tvBaseURL = "http://localhost:9001/"

static let tvBootURL = "\(AppDelegate.tvBaseURL)/application.js"

func application(..., didFinishLaunchingWithOptions launchOptions: ...) -> Bool {

...

let appControllerContext = TVApplicationControllerContext()

if let javaScriptURL = NSURL(string: AppDelegate.tvBootURL) {

appControllerContext.javaScriptApplicationURL = javaScriptURL

}

...

appController = TVApplicationController(context: appControllerContext, window: window,

delegate: self)

...

return true

}

}

Page 28: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

TVML and Styles

Page 29: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

TVML and Styles

Markup to define template

Page 30: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

TVML and Styles

Markup to define templateTemplates have default style

Page 31: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

TVML and Styles

Markup to define templateTemplates have default styleCustomize appearance with styles

Page 32: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

// Document XML Structure

<?xml version="1.0" encoding="UTF-8" ?>

<document>

<head>

<style>

<!-- custom styles -->

</style>

</head>

<templateName>

<!-- template content -->

</templateName>

</document>

Page 33: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

// Document XML Structure

<?xml version="1.0" encoding="UTF-8" ?>

<document>

<head>

<style>

<!-- custom styles -->

</style>

</head>

<templateName>

<!-- template content -->

</templateName>

</document>

Page 34: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

// Document XML Structure

<?xml version="1.0" encoding="UTF-8" ?>

<document>

<head>

<style>

<!-- custom styles -->

</style>

</head>

<templateName>

<!-- template content -->

</templateName>

</document>

Page 35: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit
Page 36: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

<stackTemplate>

<collectionList>

<carousel>...</carousel>

<shelf>...</shelf>

...

</collectionList>

</stackTemplate>

Page 37: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit
Page 38: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

<carousel>

<section>

<lockup><img ... /></lockup>

...

</section>

</carousel>

Page 39: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

<shelf>

<header>...</header>

<section>

<lockup>...</lockup>

...

</section>

</shelf>

Page 40: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

<lockup>

<img ... />

<title>

...

</title>

</lockup>

<lockup>

<img ... />

</lockup>

Page 41: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit
Page 42: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

// Configure text elements

<document>

<head>

<style>

.lockupTitle {

tv-text-highlight-style: marquee-and-show-on-highlight;

}

</style>

</head>

<stackTemplate>

...

<lockup>

<img src="..." width="..." height="..." />

<title class="lockupTitle">...</title>

...

</lockup>

...

</stackTemplate>

</document>

Page 43: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit
Page 44: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit
Page 45: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit
Page 46: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit
Page 47: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

TVMLKit JS

Page 48: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

TVMLKit JS

XMLHttpRequest

DOM

Storage

Page 49: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

TVMLKit JS

XMLHttpRequest

DOM

Storage

App

Restrictions

Settings

NavigationDocument

MenuBarDocument

Keyboard

Slideshow

Device

Page 50: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

TVMLKit JS

XMLHttpRequest

DOM

Storage

App

Restrictions

Settings

NavigationDocument

MenuBarDocument

Player

Playlist

MediaItem

Keyboard

Slideshow

Device

Page 51: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

App lifecycleTVMLKit JS

When TVApplicationController is initialized

App.onLaunch = function(options) {

var locationStr = options['location'];

...

};

Page 52: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

App error handlerTVMLKit JS

Capture uncaught exceptions

App.onError = function(message, sourceURL, line) {

console.error("Uncaught Exception!", message, sourceURL, line);

};

Page 53: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

NavigationDocumentTVMLKit JS

Manage document hierarchyGlobal instanceDismiss handled by framework

Page 54: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

NavigationDocumentTVMLKit JS

Manage document hierarchyGlobal instanceDismiss handled by framework

navigationDocument.pushDocument(document)

navigationDocument.replaceDocument(document, oldDocument)

navigationDocument.presentModal(document)

Page 55: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

// Presenting documents

let loadingMarkup = `<?xml version="1.0" encoding="UTF-8" ?>

<document>

<loadingTemplate>

<activityIndicator>

<text>Loading ...</text>

</activityIndicator>

</loadingTemplate>

</document>`;

let loadingDocument = new DOMParser().parseFromString(loadingMarkup, ‘application/xml');

navigationDocument.pushDocument(loadingDocument);

// Later ...

let stackDocument = createStackDocument(...);

navigationDocument.replaceDocument(stackDocument, loadingDocument);

48

Page 56: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

// Presenting documents

let loadingMarkup = `<?xml version="1.0" encoding="UTF-8" ?>

<document>

<loadingTemplate>

<activityIndicator>

<text>Loading ...</text>

</activityIndicator>

</loadingTemplate>

</document>`;

let loadingDocument = new DOMParser().parseFromString(loadingMarkup, ‘application/xml');

navigationDocument.pushDocument(loadingDocument);

// Later ...

let stackDocument = createStackDocument(...);

navigationDocument.replaceDocument(stackDocument, loadingDocument);

49

Page 57: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

// Presenting documents

let loadingMarkup = `<?xml version="1.0" encoding="UTF-8" ?>

<document>

<loadingTemplate>

<activityIndicator>

<text>Loading ...</text>

</activityIndicator>

</loadingTemplate>

</document>`;

let loadingDocument = new DOMParser().parseFromString(loadingMarkup, ‘application/xml');

navigationDocument.pushDocument(loadingDocument);

// Later ...

let stackDocument = createStackDocument(...);

navigationDocument.replaceDocument(stackDocument, loadingDocument);

50

Page 58: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

NavigationDocumentTVMLKit JS

Manage document hierarchyGlobal instanceDismiss handled by framework

navigationDocument.pushDocument(document)

navigationDocument.replaceDocument(document, oldDocument)

navigationDocument.presentModal(document)

Page 59: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

Media Playback

Page 60: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

// Setting up a TVMLKit JS Video Player

var video = new MediaItem('video', 'https://example.com/video.m3u8');

video.title = 'My Great Movie';

video.description = 'An extensive description…';

video.resumeTime = 10.0; // seconds

var playlist = new Playlist();

playlist.push(video);

var player = new Player();

player.playlist = playlist;

player.play(); // Present the player

Page 61: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

// Setting up a TVMLKit JS Video Player

var video = new MediaItem('video', 'https://example.com/video.m3u8');

video.title = 'My Great Movie';

video.description = 'An extensive description…';

video.resumeTime = 10.0; // seconds

var playlist = new Playlist();

playlist.push(video);

var player = new Player();

player.playlist = playlist;

player.play(); // Present the player

Page 62: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

// Setting up a TVMLKit JS Video Player

var video = new MediaItem('video', 'https://example.com/video.m3u8');

video.title = 'My Great Movie';

video.description = 'An extensive description…';

video.resumeTime = 10.0; // seconds

var playlist = new Playlist();

playlist.push(video);

var player = new Player();

player.playlist = playlist;

player.play(); // Present the player

Page 63: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

// Setting up a TVMLKit JS Video Player

var video = new MediaItem('video', 'https://example.com/video.m3u8');

video.title = 'My Great Movie';

video.description = 'An extensive description…';

video.resumeTime = 10.0; // seconds

var playlist = new Playlist();

playlist.push(video);

var player = new Player();

player.playlist = playlist;

player.play(); // Present the player

Page 64: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit
Page 65: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

// Setting up a TVML JS Audio Player

var audio = new MediaItem('audio', 'https://example.com/audio.mp3');

audio.title = 'My Great Song';

audio.artworkImageURL = 'https://example.com/audio-artwork.jpg';

var playlist = new Playlist();

playlist.push(audio);

var player = new Player();

player.playlist = playlist;

player.play(); // Present the player

Page 66: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit
Page 67: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

Background audio app playbackAVFoundation

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // ... let audioSession = AVAudioSession.sharedInstance() let success = try? audioSession.setCategory(AVAudioSessionCategoryPlayback) // ... }

Page 68: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

DemoBuilding TVMLKit application

Jeff Tan-Ang tvOS Design Engineer

Page 69: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

Recap

Setup project using Xcode

Page 70: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

Recap

Setup project using XcodeConstruct and manage documents

Page 71: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

Recap

Setup project using XcodeConstruct and manage documentsHandle events

Page 72: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

Recap

Setup project using XcodeConstruct and manage documentsHandle eventsPlayback videos

Page 73: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

New Features

Parry Panesar tvOS Engineer

Page 74: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

TVMLKitSlideshow Interactive Video Overlays

ECMAScript 6

New Player API’s

Multi-row Shelf

Web Inspector Enhancements

New Lockups

Audio Now Playing

Embedded Video

Custom Collection Cells

Image PlaceholdersAnimatable DOM Updates

New Styles and Attributes

Light and Dark Appearance

Page 75: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

TVMLKitSlideshow Interactive Video Overlays

ECMAScript 6

New Player API’s

Multi-row Shelf

Web Inspector Enhancements

New Lockups

Audio Now Playing

Embedded Video

Custom Collection Cells

Image PlaceholdersAnimatable DOM Updates

New Styles and Attributes

Light and Dark Appearance

Page 76: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit
Page 77: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit
Page 78: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

TVMLKitSlideshow Interactive Video Overlays

ECMAScript 6

New Player API’s

Multi-row Shelf

Web Inspector Enhancements

New Lockups

Audio Now Playing

Embedded Video

Custom Collection Cells

Image PlaceholdersAnimatable DOM Updates

New Styles and Attributes

Light and Dark Appearance

Page 79: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit
Page 80: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

TVMLKitSlideshow Interactive Video Overlays

ECMAScript 6

New Player API’s

Multi-row Shelf

Web Inspector Enhancements

New Lockups

Audio Now Playing

Embedded Video

Custom Collection Cells

Image PlaceholdersAnimatable DOM Updates

New Styles and Attributes

Light and Dark Appearance

Page 81: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

TVMLKitSlideshow Interactive Video Overlays

ECMAScript 6

New Player API’s

Multi-row Shelf

Web Inspector Enhancements

New Lockups

Audio Now Playing

Embedded Video

Custom Collection Cells

Image PlaceholdersAnimatable DOM Updates

New Styles and Attributes

Light and Dark Appearance

Page 82: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

Light / Dark NEW

Page 83: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

Light / Dark NEW

Page 84: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

// tv-theme media query property

<document>

<head>

<style>

.foo { color: rgb(0, 0, 0); }

</style>

</head>

<templateName>

...

<title class="foo">text</title>

...

</templateName>

</document>

Page 85: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

// tv-theme media query feature

<document>

<head>

<style>

@media tv-template and (tv-theme:light) {

.foo { color: rgb(0, 0, 0); }

}

@media tv-template and (tv-theme:dark) {

.foo { color: rgb(255, 255, 255); }

}

</style>

</head>

<templateName>

...

<title class="foo">text</title>

...

</templateName>

</document>

Page 86: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

Embedded Video Playback

Page 87: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit
Page 88: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit
Page 89: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

NEWEmbedded Video Playback

Playback context inside templates

Page 90: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

NEWEmbedded Video Playback

Playback context inside templatesPlays on focus, or always

Page 91: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

NEWEmbedded Video Playback

Playback context inside templatesPlays on focus, or alwaysTransitions to full screen

Page 92: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

NEWEmbedded Video Playback

Playback context inside templatesPlays on focus, or alwaysTransitions to full screenSupports all player functionality

Page 93: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

NEW

Steps to configureEmbedded Video Playback

Configure template

Page 94: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

NEW

Steps to configureEmbedded Video Playback

Configure templateConfigure player

Page 95: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

NEW

Steps to configureEmbedded Video Playback

Configure templateConfigure playerTransition to fullscreen

Page 96: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

NEW

Configure templateEmbedded Video Playback

Wrap <img> with <mediaContent>

Page 97: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

NEW

Configure templateEmbedded Video Playback

Wrap <img> with <mediaContent>Configure playback mode

Page 98: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

NEW

Configure templateEmbedded Video Playback

Wrap <img> with <mediaContent>Configure playback mode

<lockup> <mediaContent playbackMode="onFocus">

<img src="http://host/image.jpg" width="548" height="308"/>

</mediaContent>

<lockup>

Page 99: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

Configure templateEmbedded Video Playback

Wrap <img> with <mediaContent>Configure playback mode

NEW

<lockup> <mediaContent playbackMode="onFocus">

<img src="http://host/image.jpg" width="548" height="308"/>

</mediaContent>

<lockup>

Page 100: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

Configure templateEmbedded Video Playback

Wrap <img> with <mediaContent>Configure playback mode

<lockup> <mediaContent playbackMode="onFocus">

<img src="http://host/image.jpg" width="548" height="308"/>

</mediaContent>

<lockup>

NEW

Page 101: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

NEW

Configure playerEmbedded Video Playback

Player per <mediaContent>Access with ‘Player’ feature

Page 102: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

NEW

Configure playerEmbedded Video Playback

Player per <mediaContent>Access with ‘Player’ feature

var mediaContentElement = document.getElementsByTagName('mediaContent').item(0); var player = mediaContentElement.getFeature('Player');

player.playlist = playlist;

Page 103: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

Transition to fullscreenEmbedded Video Playback

Does not transition automatically

NEW

Page 104: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

Transition to fullscreenEmbedded Video Playback

Does not transition automatically

NEW

document.addEventListener('select', function(event) { var mediaContentElement = event.target.getElementsByTagName('mediaContent').item(0);

var player = mediaContentElement.getFeature('Player');

player.present();

});

Page 105: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

Does not transition automatically

document.addEventListener('select', function(event) { var mediaContentElement = event.target.getElementsByTagName('mediaContent').item(0);

var player = mediaContentElement.getFeature('Player');

player.present();

});

Transition to fullscreenEmbedded Video Playback NEW

Page 106: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

Transition to fullscreenEmbedded Video Playback

Does not transition automatically

NEW

document.addEventListener('select', function(event) { var mediaContentElement = event.target.getElementsByTagName('mediaContent').item(0);

var player = mediaContentElement.getFeature('Player');

player.present();

});

Page 107: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

Interactive Video Overlays

Page 108: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit
Page 109: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit
Page 110: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit
Page 111: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

NEWInteractive Video Overlays

One per playerUse any templatePresented on full screen video

Page 112: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

NEWInteractive Video Overlays

One per playerUse any templatePresented on full screen video

// Set a document to present over the player. player.modalOverlayDocument = document;

Page 113: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

DemoAppearance, embedded video andinteractive video overlay

Jeff Tan-Ang tvOS Design Engineer

Page 114: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

Recap

Adopt dark appearance

Page 115: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

Recap

Adopt dark appearanceImmersive using embedded videos

Page 116: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

Recap

Adopt dark appearanceImmersive using embedded videosInteractive video overlays

Page 117: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

Summary

Native experience

Page 118: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

Summary

Native experienceRapid development

Page 119: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

Summary

Native experienceRapid developmentNew features

Page 120: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

More Information

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

Page 121: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

Related Sessions

Designing for tvOS Presidio Tuesday 4:00PM

Mastering UIKit on tvOS Presidio Wednesday 10:00AM

Focus Interaction on tvOS Mission Wednesday 4:00PM

Developing tvOS Apps Using TVMLKit: Part 2 Mission Thursday 4:00PM

Page 122: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit

Labs

tvOS Lab Frameworks Lab D Wednesday 2:00PM

TVMLKit Lab Graphics, Games, and Media Lab B Wednesday 3:00PM

tvOS Lab Frameworks Lab D Thursday 9:00AM

TVMLKit Lab Graphics, Games, and Media Lab C Friday 9:00AM

Page 123: App Development Using TVMLKit - Apple Inc. · Building an App With TVMLKit Xcode TVML and Styles TVMLKit JS. Application Architecture TVMLKit. Application Architecture TVMLKit TVMLKit