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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Josh Brown
November 02, 2015
Programming
0
170
tvOS for the iOS developer
An overview of the similarities and differences between developing for tvOS and iOS
Josh Brown
November 02, 2015
Tweet
Share
Other Decks in Programming
See All in Programming
CSC307 Lecture 10
javiergs
PRO
1
660
生成AIを使ったコードレビューで定性的に品質カバー
chiilog
1
270
Oxlint JS plugins
kazupon
1
970
Oxlintはいいぞ
yug1224
5
1.3k
疑似コードによるプロンプト記述、どのくらい正確に実行される?
kokuyouwind
0
390
CSC307 Lecture 02
javiergs
PRO
1
780
並行開発のためのコードレビュー
miyukiw
0
260
Vibe Coding - AI 驅動的軟體開發
mickyp100
0
180
副作用をどこに置くか問題:オブジェクト指向で整理する設計判断ツリー
koxya
1
610
今こそ知るべき耐量子計算機暗号(PQC)入門 / PQC: What You Need to Know Now
mackey0225
3
380
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
590
humanlayerのブログから学ぶ、良いCLAUDE.mdの書き方
tsukamoto1783
0
200
Featured
See All Featured
My Coaching Mixtape
mlcsv
0
48
A better future with KSS
kneath
240
18k
Context Engineering - Making Every Token Count
addyosmani
9
660
The Invisible Side of Design
smashingmag
302
51k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3k
Facilitating Awesome Meetings
lara
57
6.8k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
330
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.7k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.9k
Building Applications with DynamoDB
mza
96
6.9k
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