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
160
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.5k
Buckets of Code
subdigital
0
2k
Building 5 Calls for iOS
subdigital
0
130
Swift on Linux
subdigital
1
880
Swift Solutions
subdigital
2
480
iOS 8 Networking
subdigital
4
950
iOS 8 App Extensions
subdigital
1
380
Effective Networking with iOS 8 and Swift
subdigital
4
1.7k
Other Decks in Programming
See All in Programming
ELYZA_Findy AI Engineering Summit登壇資料_AIコーディング時代に「ちゃんと」やること_toB LLMプロダクト開発舞台裏_20251216
elyza
2
1.1k
例外処理とどう使い分ける?Result型を使ったエラー設計 #burikaigi
kajitack
16
5.6k
Kotlin Multiplatform Meetup - Compose Multiplatform 외부 의존성 아키텍처 설계부터 운영까지
wisemuji
0
180
gunshi
kazupon
1
140
TestingOsaka6_Ozono
o3
0
280
メルカリのリーダビリティチームが取り組む、AI時代のスケーラブルな品質文化
cloverrose
2
470
0→1 フロントエンド開発 Tips🚀 #レバテックMeetup
bengo4com
0
500
React 19でつくる「気持ちいいUI」- 楽観的UIのすすめ
himorishige
11
5.5k
AtCoder Conference 2025
shindannin
0
960
rack-attack gemによるリクエスト制限の失敗と学び
pndcat
0
220
JETLS.jl ─ A New Language Server for Julia
abap34
2
480
なぜSQLはAIぽく見えるのか/why does SQL look AI like
florets1
0
310
Featured
See All Featured
So, you think you're a good person
axbom
PRO
2
1.9k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
0
91
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.3k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
1.8k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Paper Plane (Part 1)
katiecoart
PRO
0
3.2k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
96
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
0
1.1k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.3k
New Earth Scene 8
popppiees
1
1.4k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Between Models and Reality
mayunak
1
170
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