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
310
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
480
iOS Views & Animations: Learning by stealing
sammyd
1
160
Machine Learning on Mobile—a primer
sammyd
0
85
Core ML: A whistlestop tour
sammyd
1
150
DIY DI
sammyd
2
110
iOSConfSG 2017: Decoding Codable
sammyd
3
190
Machine Learning: deciphering the hype
sammyd
0
130
Notify Me, Notify You. Aha!
sammyd
1
160
SwiftConf 2016: Concurrency on iOS
sammyd
1
160
Other Decks in Programming
See All in Programming
ドメインイベント増えすぎ問題
h0r15h0
1
250
ソフトウェアの振る舞いに着目し 複雑な要件の開発に立ち向かう
rickyban
0
890
「Chatwork」Android版アプリを 支える単体テストの現在
okuzawats
0
180
テストコードのガイドライン 〜作成から運用まで〜
riku929hr
1
170
今年一番支援させていただいたのは認証系サービスでした
satoshi256kbyte
1
250
競技プログラミングへのお誘い@阪大BOOSTセミナー
kotamanegi
0
360
テスト自動化失敗から再挑戦しチームにオーナーシップを委譲した話/STAC2024 macho
ma_cho29
1
1.3k
見えないメモリを観測する: PHP 8.4 `pg_result_memory_size()` とSQL結果のメモリ管理
kentaroutakeda
0
320
talk-with-local-llm-with-web-streams-api
kbaba1001
0
180
StarlingMonkeyを触ってみた話 - 2024冬
syumai
3
270
Semantic Kernelのネイティブプラグインで知識拡張をしてみる
tomokusaba
0
180
短期間での新規プロダクト開発における「コスパの良い」Goのテスト戦略」 / kamakura.go
n3xem
2
170
Featured
See All Featured
Mobile First: as difficult as doing things right
swwweet
222
9k
Git: the NoSQL Database
bkeepers
PRO
427
64k
How to Think Like a Performance Engineer
csswizardry
22
1.2k
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.5k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Typedesign – Prime Four
hannesfritz
40
2.4k
We Have a Design System, Now What?
morganepeng
51
7.3k
Gamification - CAS2011
davidbonilla
80
5.1k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
Designing for Performance
lara
604
68k
Designing for humans not robots
tammielis
250
25k
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