Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
TVML Myths: or why you shouldn't write TVML off...
Search
sammyd
August 23, 2016
Programming
350
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
TVML Myths: or why you shouldn't write TVML off... yet
Presented at 360|iDev 2016.
sammyd
August 23, 2016
More Decks by sammyd
See All by sammyd
Core Image: Great when it works
sammyd
1
580
iOS Views & Animations: Learning by stealing
sammyd
1
200
Machine Learning on Mobile—a primer
sammyd
0
140
Core ML: A whistlestop tour
sammyd
1
200
DIY DI
sammyd
2
140
iOSConfSG 2017: Decoding Codable
sammyd
3
210
Machine Learning: deciphering the hype
sammyd
0
190
Notify Me, Notify You. Aha!
sammyd
1
210
SwiftConf 2016: Concurrency on iOS
sammyd
1
220
Other Decks in Programming
See All in Programming
ゲームコントローラやキーボードのファームウェアをSwiftで書く
kishikawakatsumi
1
270
Findy - エンジニア向け会社紹介/Findy Company Deck
findyinc
6
400k
Agentic Software Factoryに、すごく賢いIF文を。 / super smart IF statement into the Agentic Software Factory.
rkaga
2
500
Go × SIMDで高速化するベクトル検索 ~ルーフラインモデルでSIMDが効く境界を探れ! ~
po3rin
1
6k
MVNOの申込からeSIM開通までをiOSアプリでつなぐ- 本人確認・MNP・通信事業者基盤をまたぐ実装
satotakeshi
0
520
手動確認はもう限界 〜XCUITestでCustom URL Schemeの遷移を起動種別ごとに自動テストする〜 / Testing Custom URL Schemes with XCUITest
otouto
0
370
AGENTS.md Is Not Enough:Build Skills, Don't Download Them
lx_t
0
130
Security issues being discussed on Web Platforms
petamoriken
0
1.4k
AWSに止められる覚悟してますか?
morizo_1984
2
500
マイコン向けの軽量Ruby「PicoRuby」で各種デバイスを制御するネイティブアプリの実現手法
bash0c7
0
470
iOSDC2026登壇資料.pdf
riofujimon
0
200
Simple Storage Service(S3) is not simple
iwatsukayura
0
120
Featured
See All Featured
Darren the Foodie - Storyboard
khoart
PRO
4
4k
Google's AI Overviews - The New Search
badams
0
1.6k
A designer walks into a library…
pauljervisheath
211
25k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
580
Bash Introduction
62gerente
615
220k
Chasing Engaging Ingredients in Design
codingconduct
0
340
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
380
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
690
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
250
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
960
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