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 for the iOS developer
Search
Josh Brown
November 02, 2015
Programming
180
0
Share
tvOS for the iOS developer
An overview of the similarities and differences between developing for tvOS and iOS
Josh Brown
November 02, 2015
Other Decks in Programming
See All in Programming
モダンOBSプラグイン開発
umireon
0
190
テレメトリーシグナルが導くパフォーマンス最適化 / Performance Optimization Driven by Telemetry Signals
seike460
PRO
2
200
PHPのバージョンアップ時にも役立ったAST(2026年版)
matsuo_atsushi
0
280
Smarter Angular mit Transformers.js & Prompt API
christianliebel
PRO
1
110
「効かない!」依存性注入(DI)を活用したAPI Platformのエラーハンドリング奮闘記
mkmk884
0
290
見せてもらおうか、 OpenSearchの性能とやらを!
shunta27
1
170
Redox OS でのネームスペース管理と chroot の実現
isanethen
0
500
S3ストレージクラスの「見える」「ある」「使える」は全部違う ─ 体験から見た、仕様の深淵を覗く
ya_ma23
0
1.2k
生成 AI 時代のスナップショットテストってやつを見せてあげますよ(α版)
ojun9
0
330
Geminiをパートナーに神社DXシステムを個人開発した話(いなめぐDX 開発振り返り)
fujiba
0
130
KagglerがMixSeekを触ってみた
morim
0
360
Rethinking API Platform Filters
vinceamstoutz
0
5.1k
Featured
See All Featured
Claude Code のすすめ
schroneko
67
220k
Being A Developer After 40
akosma
91
590k
Deep Space Network (abreviated)
tonyrice
0
99
Optimizing for Happiness
mojombo
378
71k
The Cult of Friendly URLs
andyhume
79
6.8k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.6k
Embracing the Ebb and Flow
colly
88
5k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.6k
Ethics towards AI in product and experience design
skipperchong
2
250
Measuring & Analyzing Core Web Vitals
bluesmoon
9
800
Rails Girls Zürich Keynote
gr2m
96
14k
Believing is Seeing
oripsolob
1
100
Transcript
tvOS for the iOS developer
What's similar to iOS? → everything → Xcode, Interface Builder,
Objective-C, Swift → frameworks (UIKit, Metal, CloudKit, Game Center, and more)
What's different from iOS? → user interaction (Siri remote) →
focus engine → a few missing parts → the App Store and assets → (new) TVML, JavaScript, TVMLKit → views & view controller appearance
User interaction
None
None
Remote
None
Focus
"A UI element is in focus when the user highlights
an item, but has not selected an item."
Focus → UIFocusGuide → Adam made some awesome slides
None
What do these have in common? → Photos framework →
Multipeer Connectivity → EventKit → local storage → web views
Storage → no persistent local storage → NSUserDefaults: 500K →
CloudKit
None
App Store: Required Assets → Layered icons: App Store, Home
screen → Top Shelf Image → Launch image → Screen shots
Parallax on tv → app icons → movies → TV
shows
Layered icon Three layers → Front → Middle → Back
Layered icon Two sizes → Large: 1280 x 768 →
Small: 400 x 240
Top Shelf image
None
Capture (just like iOS) → Screen shots: Xcode → Video:
QuickTime Player
None
Views & View Controllers UIKitCatalog
None
TVML
TVML and JavaScript "client-server apps whose primary purpose is to
stream media"
Why TVML? you can change stuff after it's deployed
TVML Architecture
None
TVML and JavaScript 1. write some TVML (XML) & JavaScript
2. put it on your server 3. write a TVMLKit app that points to your server 4. submit your TVMLKit app to Apple
None
<document> <mainTemplate> <background> <img src="path to images on your server/Car_Movie_1920x1080"
/> </background> <menuBar> <section> <menuItem> <title>PLAY</title> </menuItem> <menuItem> <title>SCENES</title> </menuItem> <menuItem> <title>EXTRAS</title> </menuItem> </section> </menuBar> </mainTemplate> </document>
// application.js doc.addEventListener("play", startPlayback); // ... function startPlayback(event) { var
player = new Player(); // ... player.playlist.push(video); // ... player.play(); }
class AppDelegate: UIResponder, UIApplicationDelegate, TVApplicationControllerDelegate { var appController: TVApplicationController? static
let TVBaseURL = "http://localhost:9001/" static let TVBootURL = "\(AppDelegate.TVBaseURL)js/application.js" func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // ... let appControllerContext = TVApplicationControllerContext() if let javaScriptURL = NSURL(string: AppDelegate.TVBootURL) { appControllerContext.javaScriptApplicationURL = javaScriptURL } appControllerContext.launchOptions["BASEURL"] = AppDelegate.TVBaseURL appController = TVApplicationController(context: appControllerContext, window: window, delegate: self) // ... }
thanks
Questions? @jtbrown
Further Reading tv Human Interface Guidelines 200MB Max, No Storage,
No Web Views: Is tvOS the Future of Apps? Beginning tvOS Development with TVML Tutorial