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
TVML Myths: or why you shouldn't write TVML off...
Search
sammyd
August 23, 2016
Programming
1
320
TVML Myths: or why you shouldn't write TVML off... yet
Presented at 360|iDev 2016.
sammyd
August 23, 2016
Tweet
Share
More Decks by sammyd
See All by sammyd
Core Image: Great when it works
sammyd
1
520
iOS Views & Animations: Learning by stealing
sammyd
1
180
Machine Learning on Mobile—a primer
sammyd
0
120
Core ML: A whistlestop tour
sammyd
1
170
DIY DI
sammyd
2
120
iOSConfSG 2017: Decoding Codable
sammyd
3
200
Machine Learning: deciphering the hype
sammyd
0
150
Notify Me, Notify You. Aha!
sammyd
1
180
SwiftConf 2016: Concurrency on iOS
sammyd
1
180
Other Decks in Programming
See All in Programming
Basic Architectures
denyspoltorak
0
150
まだ間に合う!Claude Code元年をふりかえる
nogu66
5
920
生成AI時代を勝ち抜くエンジニア組織マネジメント
coconala_engineer
0
36k
[AI Engineering Summit Tokyo 2025] LLMは計画業務のゲームチェンジャーか? 最適化業務における活⽤の可能性と限界
terryu16
1
170
Deno Tunnel を使ってみた話
kamekyame
0
290
Findy AI+の開発、運用におけるMCP活用事例
starfish719
0
2k
AI 駆動開発ライフサイクル(AI-DLC):ソフトウェアエンジニアリングの再構築 / AI-DLC Introduction
kanamasa
11
4.7k
マスタデータ問題、マイクロサービスでどう解くか
kts
0
170
「コードは上から下へ読むのが一番」と思った時に、思い出してほしい話
panda728
PRO
39
26k
脳の「省エネモード」をデバッグする ~System 1(直感)と System 2(論理)の切り替え~
panda728
PRO
0
130
Implementation Patterns
denyspoltorak
0
140
AtCoder Conference 2025「LLM時代のAHC」
imjk
2
620
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
55
9.4k
Optimizing for Happiness
mojombo
379
70k
Google's AI Overviews - The New Search
badams
0
880
SEO for Brand Visibility & Recognition
aleyda
0
4.1k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
4 Signs Your Business is Dying
shpigford
187
22k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
Are puppies a ranking factor?
jonoalderson
0
2.6k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
990
Utilizing Notion as your number one productivity tool
mfonobong
2
190
Transcript
TVML Myths or why you shouldn't write TVML off... yet
Sam Davies | @iwantmyrealname | 360|iDev 2016
What is TVML?
Why is TVML so misunderstood?
Five Myths about TVML 1. You have to use a
server 2. You write TVML in JavaScript strings 3. Layout includes data 4. TVML is for media playback 5. Either TVML or native
You have to use a server
demo
Five Myths about TVML 1. You have to use a
server 2. You write TVML in JavaScript strings 3. Layout includes data 4. TVML is for media playback 5. Either TVML or native
You write TVML in JavaScript strings
Sample Code App.onLaunch = function(options) { var template =
'<document>' + '<loadingTemplate>' + '<activityIndicator>' + '<text>Hello World!</text>' + '</activityIndicator>' + '</loadingTemplate>' + '</document>'; var templateParser = new DOMParser(); var parsedTemplate = templateParser.parseFromString(template, "application/xml"); navigationDocument.pushDocument(parsedTemplate); }
In-bundle TVML 4 TVML engine just processes text 4 Doesn't
care where it comes from 4 Server offers advantages, but not required
demo
Five Myths about TVML 1. You have to use a
server 2. You write TVML in JavaScript strings 3. Layout includes data 4. TVML is for media playback 5. Either TVML or native
Layout includes data
<infoList> <info> <header> <title>Presenter</title> </header> <text>Sam Davies</text> </info> <info> <header>
<title>Tags</title> </header> <text>Short</text> <text>Glasses</text> <text>Funny Accent</text> </info> </infoList> <stack> <title>Droning-On II: Return of the Tedium</title> </stack>
the entirety of JavaScript at your fingertips
!
Templating Engine
{{MUSTACHE}}
class ResourceLoaderJS { ... getDocument(name) { var docString = this.nativeResourceLoader.loadBundleResource(name);
return this.domParser.parseFromString(docString, "application/xml"); } }
class ResourceLoaderJS { ... getDocument(name, data) { data = data
|| {}; var docString = this.nativeResourceLoader.loadBundleResource(name); var rendered = Mustache.render(docString, data); return this.domParser.parseFromString(rendered, "application/xml"); } }
class ResourceLoaderJS { ... getDocument(name, data) { data = data
|| {}; var docString = this.nativeResourceLoader.loadBundleResource(name); var rendered = Mustache.render(docString, data); return this.domParser.parseFromString(rendered, "application/xml"); } getJSON(name) { var jsonString = this.nativeResourceLoader.loadBundleResource(name); var json = JSON.parse(jsonString); return json; } }
<infoList> <info> <header> <title>Presenter</title> </header> <text>Sam Davies</text> </info> <info> <header>
<title>Tags</title> </header> <text>Short</text> <text>Glasses</text> <text>Funny Accent</text> </info> </infoList> <stack> <title>Droning-On II: Return of the Tedium</title> </stack>
<infoList> <info> <header> <title>Presenter</title> </header> <text>{{presenter}}</text> </info> <info> <header> <title>Tags</title>
</header> {{#tags}} <text>{{.}}</text> {{/tags}} </info> </infoList> <stack> <title>{{title}}</title> </stack>
{ "presenter": "Sam Davies", "tags": [ "Short", "Glasses", "Funny Accent"
], "title": "Droning-On II: Return of the Tedium" }
demo
Five Myths about TVML 1. You have to use a
server 2. You write TVML in JavaScript strings 3. Layout includes data 4. TVML is for media playback 5. Either TVML or native
TVML is for media playback
Not just media playback 4 ~20 different templates 4 Complex
nested layouts 4 Great for browsing 4 Apple uses TVML a lot
Five Myths about TVML 1. You have to use a
server 2. You write TVML in JavaScript strings 3. Layout includes data 4. TVML is for media playback 5. Either TVML or native
Either TVML or native
Hybrid TVML & "Native" 1. Call native functionality from TVML
2. Integrate native views into TVML 3. Use TVML views in native apps
Call Native Functionality from TVML 4 Use JavaScriptCore 4 Create
native function, vend to JS context 4 Wire it in with JS app
demo
Integrate native views into TVML app 4 Extend TVML with
custom tags 4 Add custom style attributes to TVML 4 Use as regular TVML
demo
Five Myths about TVML 1. You have to use a
server 2. You write TVML in JavaScript strings 3. Layout includes data 4. TVML is for media playback 5. Either TVML or native
TVML Limitations
TVML Limitations 4 Less control over appearance / layout 4
Have to write JavaScript 4 Out of comfort zone 4 Documentation & samples {are|were} terrible
TVML Positives 4 Can redeploy app without app review 4
Trivial to use a server 4 Powerful layouts, really easily 4 XML is a good language for declarative layouts
try it. you might like it.
git.io/v6MsR github.com/sammyd @iwantmyrealname raywenderlich.com