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
87
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
How mixi2 Uses TiDB for SNS Scalability and Performance
kanmo
29
11k
Rails アプリ地図考 Flush Cut
makicamel
1
110
GitHub Actions × RAGでコードレビューの検証の結果
sho_000
0
240
第3回関東Kaggler会_AtCoderはKaggleの役に立つ
chettub
3
890
AWS Organizations で実現する、 マルチ AWS アカウントのルートユーザー管理からの脱却
atpons
0
130
密集、ドキュメントのコロケーション with AWS Lambda
satoshi256kbyte
0
170
Flutter × Firebase Genkit で加速する生成 AI アプリ開発
coborinai
0
150
Linux && Docker 研修/Linux && Docker training
forrep
23
4.5k
Software Architecture
hschwentner
6
2.1k
『GO』アプリ バックエンドサーバのコスト削減
mot_techtalk
0
130
ISUCON14公式反省会LT: 社内ISUCONの話
astj
PRO
0
180
SwiftUI Viewの責務分離
elmetal
PRO
0
140
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.7k
Designing Experiences People Love
moore
139
23k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
8
270
A better future with KSS
kneath
238
17k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7.1k
The Pragmatic Product Professional
lauravandoore
32
6.4k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.2k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.4k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
The Cost Of JavaScript in 2023
addyosmani
47
7.3k
Building Adaptive Systems
keathley
40
2.4k
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