Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
tvOS Workshop
Search
Ben Scheirman
October 12, 2016
Programming
1
150
tvOS Workshop
A 1-day workshop given to attendees of Pragmaconf '16 in Verona, Italy.
Ben Scheirman
October 12, 2016
Tweet
Share
More Decks by Ben Scheirman
See All by Ben Scheirman
A Promise for a Better Future
subdigital
0
150
Bézier Curves
subdigital
1
5.3k
Buckets of Code
subdigital
0
2k
Building 5 Calls for iOS
subdigital
0
120
Swift on Linux
subdigital
1
850
Swift Solutions
subdigital
2
450
iOS 8 Networking
subdigital
4
920
iOS 8 App Extensions
subdigital
1
370
Effective Networking with iOS 8 and Swift
subdigital
4
1.7k
Other Decks in Programming
See All in Programming
「Cursor/Devin全社導入の理想と現実」のその後
saitoryc
0
140
Java on Azure で LangGraph!
kohei3110
0
170
Google Agent Development Kit でLINE Botを作ってみた
ymd65536
2
120
Result型で“失敗”を型にするPHPコードの書き方
kajitack
4
270
Azure AI Foundryではじめてのマルチエージェントワークフロー
seosoft
0
130
Create a website using Spatial Web
akkeylab
0
300
レガシーシステムの機能調査・開発におけるAI利活用
takuya_ohtonari
0
610
ruby.wasmで多人数リアルタイム通信ゲームを作ろう
lnit
2
240
なぜ「共通化」を考え、失敗を繰り返すのか
rinchoku
1
470
5つのアンチパターンから学ぶLT設計
narihara
1
110
Cursor AI Agentと伴走する アプリケーションの高速リプレイス
daisuketakeda
1
130
Deep Dive into ~/.claude/projects
hiragram
7
1.2k
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.7k
4 Signs Your Business is Dying
shpigford
184
22k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
Facilitating Awesome Meetings
lara
54
6.4k
Mobile First: as difficult as doing things right
swwweet
223
9.7k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
5
210
For a Future-Friendly Web
brad_frost
179
9.8k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Building Applications with DynamoDB
mza
95
6.5k
How to train your dragon (web standard)
notwaldorf
92
6.1k
Transcript
None
None
None
None
None
A New Platform
Not just a bigger screen. • Central place in home
• The hub for media • Families
Refreshing Stuff
One Screen Size* *(for now) 1920 x 1080 16:9
One Image Scale
One Image Scale
Always Connected…
Not So Refreshing…
Overscan 90 pt gutter on sides 60 pt gutter top/bottom
None
Input
None
None
None
?
None
Design Considerations
None
10-feet away
None
•Provide a single focus point. •Keep the background simple. •Use
words only when they’re essential or part of a logo. •Don’t include screenshots. •Keep icon corners square.
None
None
None
2 UI Paradigms
UIKit TVML
UIKit UIViewController UIView UIButton UILabel UIImageView
JavaScript TVML XML
TVML <document> <loadingTemplate> <activityIndicator> <text>Hello World!</text> </activityIndicator> </loadingTemplate> </document>
<document> <stackTemplate> <banner> <title>Available Action Movies</title> </banner> <collectionList> <shelf> <section>
<lockup onselect="playMedia('path to video', 'video')"> <img src="path to image" width="182" height="274"/> <title>Movie 1</title> </lockup> <lockup onselect="playMedia('path to video', 'video')"> <img src="path to image" width="182" height="274" /> <title>Movie 2</title> </lockup> </section> </shelf> </collectionList> </stackTemplate> </document>
<document> <stackTemplate> <banner> <title>Available Action Movies</title> </banner> <collectionList> <shelf> <section>
<lockup onselect="playMedia('path to video', 'video')"> <img src="path to image" width="182" height="274"/> <title>Movie 1</title> </lockup> <lockup onselect="playMedia('path to video', 'video')"> <img src="path to image" width="182" height="274" /> <title>Movie 2</title> </lockup> </section> </shelf> </collectionList> </stackTemplate> </document>
function playMedia(extension, mediaType) { var videourl = baseURL + extension;
var singleVideo = new MediaItem(mediaType, videourl); var videoList = new Playlist(); videoList.push(singleVideo); var myPlayer = new Player(); myPlayer.playlist = videoList; myPlayer.play(); }
None
https://developer.apple.com/library/content/samplecode/TVMLCatalog/Introduction/ Intro.html
None
Focus
None
Am I focusable? canBecomeFocused? userInteractionEnabled? visible?
Am I focusable? po [view _whyIsThisViewNotFocusable]
None
None
None
magic? !
None
None
None
None
None
None
.sectioned
.inset
Project Setup
Project Setup ViewController.swift RSSParser.swift RSSEntry.swift iTunesClient.swift
Project Setup E