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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Ben Scheirman
October 12, 2016
Programming
1
170
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
170
Bézier Curves
subdigital
1
5.6k
Buckets of Code
subdigital
0
2k
Building 5 Calls for iOS
subdigital
0
140
Swift on Linux
subdigital
1
880
Swift Solutions
subdigital
2
480
iOS 8 Networking
subdigital
4
950
iOS 8 App Extensions
subdigital
1
390
Effective Networking with iOS 8 and Swift
subdigital
4
1.7k
Other Decks in Programming
See All in Programming
Goの型安全性で実現する複数プロダクトの権限管理
ishikawa_pro
2
310
DevinとClaude Code、SREの現場で使い倒してみた件
karia
1
1k
コードレビューをしない選択 #でぃーぷらすトウキョウ
kajitack
3
930
Ruby x Terminal
a_matsuda
7
590
最初からAWS CDKで技術検証してもいいんじゃない?
akihisaikeda
4
140
AIとペアプロして処理時間を97%削減した話 #pyconshizu
kashewnuts
1
230
AIコーディングの理想と現実 2026 | AI Coding: Expectations vs. Reality 2026
tomohisa
0
1.2k
株式会社 Sun terras カンパニーデック
sunterras
0
2.1k
AI駆動開発の本音 〜Claude Code並列開発で見えたエンジニアの新しい役割〜
hisuzuya
4
500
猫の手も借りたい!ので AIエージェント猫を作って社内に放した話 Claude Code × Container Lambda の Slack Bot "DevNeko"
naramomi7
0
260
AWS Infrastructure as Code の新機能 2025 総まとめ 〜SA 4人による怒涛のデモ祭り〜
konokenj
10
3.3k
RubyとGoでゼロから作る証券システム: 高信頼性が求められるシステムのコードの外側にある設計と運用のリアル
free_world21
0
270
Featured
See All Featured
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
670
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
210
Amusing Abliteration
ianozsvald
0
130
Evolving SEO for Evolving Search Engines
ryanjones
0
150
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
86
Heart Work Chapter 1 - Part 1
lfama
PRO
5
35k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
110k
Ruling the World: When Life Gets Gamed
codingconduct
0
170
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.8k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
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