Skip to content

Instantly share code, notes, and snippets.

@tiagomartinho
Last active January 13, 2016 00:21
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tiagomartinho/7aed9c8b2d6651ea7e6d to your computer and use it in GitHub Desktop.
Save tiagomartinho/7aed9c8b2d6651ea7e6d to your computer and use it in GitHub Desktop.
Intro
Mindset, best practices, etc.
The future of TV vs Mobile, different rates of innovation
Apps: Media (Netflix, youtube, HBO, etc.) -> optimised for the apple tv
Zoova, fitness
Gilt shopping
Games, disney infinity (like console gaming)
Does not commute
Alto adventure
Madeira , digital comic book
Children Apps, sago mini fairy tales
Beginning -> bring from mobile
tvOS Fundamentals
* Living room experience
used from distance: focus-based interaction, larger, focus and shadows
the attention should be on content
communal vs individual experiences, shared device with multiple people interacting, in group or at different hours
* always connected (high speed internet connection) vs mobile
http live streaming
on-demand resources > limited storage for apps
cloud storage
* powerful hardware
new performance baseline
separate SDK > standalone binary (vs iPhone iPad)
same tools > swift Xcode objective-c
same frameworks > base for apps, plus great support for media and gaming
living room experience
connect people to content > direct , even if far away
with remote you use gestures, small or quick ovements
connected, clear, immersive
parallax delight and connect
things should be intuitive, where user are, hard to read text, dense UI,
navigation should be clear, one in-out path
San Francisco optimised for large distances, responds to accessibility
grid and focus item
clear where you are at the moment
no ambiguous gestures
cinematic experience with edge-to-edge background of movie images
touch surface, menu, play/pause are available for the app
not for multi touch gestures with two fingers, uses one-finger gestures
Play/pause for playback or game shortcuts
Menu is the back button for navigation (no back buttons on the UI)
Accelerometer and Gyro available for use > can help to connect users with the content
also in landscape > break neck game
move content in the expected direction (inverse of direct manipulation like iOS) *except in fullscreen mode or games
buttons can have different (Distinct) states, unselected, selected focus, highlighted, disabled
focus should be obvious > test: look out of the TV and look back, the content at focus is obvious?
you can add animation to make it easy
measurements for grids and spacing are available for use at guidelines
clicks instead of taps, taps can be made accidentally, click is intentionally and often will be a better option
focus model
finger movement, next view in focus, how to move and animate focus, parallax, speed adaption
focus engine handle all the (numerous) tasks related to focus model
Focus API > focusable view, initial focus, current focus,
canBecomeFocused,
new protocol UIFocusEnvironment , preferredFocusedView
table and collection views add delegate methods for focus model
new read-only properties for UIView and UIScreen
don’t set the focus manually, the user should be in control fo the focus
ambitious cases, views removed, new view presented or dismissed -> focus update requests
use can become focused and preferred focused view
you can request focus, set need focus update and update focus if needed
for collection view cells: adjusts image when ancestor is focused
respond to focus changes, ex. show/hide label with animation
animation timing responds to speed of swipe in the remote, fast movements make faster animations
didUpdateFocusInContext
using focus guides to guide focus when UI is not clear to focus model where to move
debugging focus, why is this view not focusable, and with Quick Look option in debugger,
handling button presses, custom behaviour for play/pause,
with gesture recogniser, allowed press types , UIPressTypes -> Select, Menu, Play/Pause
tap edges of the remote Up, Left, Right, Down, Arrow, works on siri remote, and with game controllers Pads
low level event handling, touch API also available, coordinates are from center of focused view
use Siri Remote as a game controller directly , using game controller framework
Digital Pad windowing , repotsAblosuteDpadsValues, framework creates window where user first puts the finger is the center and all values are relative to a virtual window
dpad values are in portrait , adapt it with allows rotation property
menu button in gameplay toggle pause/resume instead of handling navigation
integrating with UIKit with controller user interaction enabled property
disable screensaver timeout with idleTimerDisabled property, not always but only while in gameplay
device motion with GCMotion profile, access accelerometer and gyroscope *already filtered *fused data from both sensors
not intended for vigorous shaking aggressive movements
limitation: you can use one siri remote plus up to two mfi controllers
take input from all controllers if possible
On demand resources
Instead of getting all bundle and based on user interactions and predictions you download the resources you need > example, user downloads game and based on the next level they are playing you download resources for that level, and when no longer using it you free the resources
Dynamically loaded content, hosted in the App Store
Prioritized downloads, intelligent caching
What the customer gets with on-demand resources? Better install experience with reduced time install, more apps on the device, up to 20GB of content
Install tags (download on demand) for the content and prefetch tags (immediately download after install)
Base app up to 200MB, on-demand up to 20GB, in use up to 2GB
nsbundleresourcerequest
Initialize with set of tags. Begin requests. Tell the system when you are finished.
Track progress of request *you should not have need to use this, anticipate the user needs better
Set loading priority
Special urgent priority , the user is waiting for this
Is content available? Conditionally begin accessing resources with completion handler
Preservation priority to tell the system how important is to keep around the disk, not actively used, this is used for caching, it is relative to your app not system wide (don't set it to 100 to keep it around more than other apps ;)
Testing ODR
Xcode and Xcode server: artificial download, correctness not performance
TestFlight : closer to deploy, real world performance , network link conditioner
Embed in build, build settings to embed assets into the app, not correct for App Store, distribute ad hoc outside of App Store
Host from your web server, internal web server, for example enterprise scenario
Data storage
Mindset
iCloud key-value store, small
CloudKit, structured and bulk data
User might not be signed in
Multiple people may be sharing device
Public data is available even if user is not signed in
Single sign in account per user
Temporary data, subject to purge
Media playback experience
Video player does a lot of heavy lifting for you
AV foundation
Info panel, language, subtitles, sound
Scrubbing
Avfoundation, avkit, on tvos
Avasset single media asset , file or streaming
Asynchronous API
avplayeritem, references single asset, metadata
Avplayer, manages playback of avplayeritem , avqueueplayer plays multiple items in sequence
Avplayer view controller
Metadata into info panel, in set in avplayeritem or set external metadata
"What did he/she just say" feature of Siri uses this metadata
Interstitial time ranges, time ranges not part of actual content (ads,legal,warnings,etc.) no skipping for example
Avoid swapping players to display interstitial
AV player view controller delegate methods for managing interstitial , example disabling skipping
Rare cases can use AV player layer, use it when you want to customize the playback experience, no controls or ui, zoova uses it to skip exercises
File based
Local bundle, ORD or cached
Downloaded prior playback
Very short clips
Streaming
http live streaming HLS
segments downloaded during playback
Adaptive based on connection
HLS is the ideal way to provide media on the Apple TV
It based on the Internet connection status
H.264/avc codec
Up to 60fps
audio can add described video track for accessibility
To support "trick play" it is needed to add frames with EXT I FRAMES
subtitles are important for accessibility of for the "what did he just say" Siri feature
Preparing and presenting media for accessibility wwdc13
TVMLKIT is used by the App Store, music and video apps from Apple
Used where the server content is the focus of the app
template based language
Offers consistent UI
Reduced development effort with shorten time to market
Leverage existing client server architectures
Provide native experience
XML document that defines UI
Is not a web browser
Link the JavaScript with swift or objective c
Setup cache control header appropriately
TVJS framework has access to system frameworks
Bridging from/and to native to JavaScript
Evaluate in JavaScript context
Debugging with Safari web inspector
Sample projects with content server are available
Best practices for designing tvos apps
Common questions and problems
loading is constant
At all costs avoid blank screens
Use placeholder for images
Activity indicators or somethings that indicates progress, does not commute and Rayman adventures do it very well
Set expectations to loading time
Use loading time to educate (useful info) or entertain
Galaxy on Fire app when loading shows the story or if you skip show game tips
Authentication, try to avoid it
payment systems need it
Delay until necessary
Gilt app lets browse everything without sign in until you buy
If asking emails use the correct keyboard that shows the Recent emails entered in any system app
You can create a companion app to do more complex authentication behaviors
Not on the high street app completes the payment with an iOS companion application, it finds the device with the bonjour technology
Include fast profile switching
Make restore purchases obvious
On boarding
Critical to show how to use an app
Get out of the way
People want entertainment not read instructions
Badland app does not show any instructions when starting
It should not be a crutch for a bad UI
Show controls
Breakneck app pause gameplay to show controls
Transistor app show different instructions based on the controller you are using
Click with Siri remote, or press buttons with other controllers
Alto adventures show instructions as you go
Galaxy of fire app shows controls as soon as you tap the menu button
Anticipate the need for help
Using a cursor to point something is wrong , the focus model is right
Design the loading experience
Delay authentication
Onboard gradually
Use the focus model and no cursors
It is a totally new device, design specifically for this platform don't try to port from Mac or iOS
Tuning you tv os app
Bendled pixels
Accidental transparency, set view opaque if it is not transparent
Flat view hierarchy
Eliminate unnecessary transparency
Heavy use of images
Scaled images , can be a hit in performance
Misaligned images can cause a resize
Use auto layout to take care of it
Visual effects
Color offscreen render
Reduce redundant rendering
Use appropriate asset size
Minimize per frame load
Use bitmap caching when needed
Instruments are your best friend
Top shelf
Static image, not interactive
If your app was moved to the top the users are already using it, no place to capture users
Dynamic content can be used to promote content , ship it o the first version otherwise people may lose it, it is not linked to the bundle so it is always update
Sing by smule app does it with image content
Zoova shows content most relevant for the user
Featured content
Newsy app
Saves step by going directly to content
You can use play to start immediate playback
Provide shortcut to app
Can be personalized
Tv top shelf provider protocol
Top shelf style, inset or section
Tv content item, an array to populate the shelf
Image ratio and other metadata
If section you return an array with the sections
Linking to content, custom URL scheme for your app and respond to system calls.
Play url goes directly to playback when play button
Implement play and display for all content on the top shelf, posting to different parts of your app
Let the system know when the items will need to change using notifications : tv top shelf items did change notification
App Store distribution and marketing
Over 100 countries
Handpicked by Apple
Editorial curated
Searching the app and top charts
Business considerations
Business model
The same as iOS
Free, gilt, Airbnb
Paid once, alto
Freemium, free to download pay after
Paymium, pay to download pay after
Reach, revenue or both
Solution to you and your users
Freemium can be good
Find the right price for throughly charge users
What kind of model does your user expect
Longer but less frequent uses
More people using the app
Periodic quick use vs lasting value
Consider it during development
Important questions that affect you product development
Universal purchase
Not reversible
Purchase once and use it in iOS and tvos
In app purchases
Considerations
Reach revenue or both?
Customer don't want to pay both, but if you offer something different it may work
Content right limitations , show in mobile and tv may not be the same
Global expansion
Global business
iOS 154 countries
They like to feature local content
Consider the top markets
Leverage your own data
Localize it right, meet customer expectations
Every visitor is a potential customer
Icon
App name, match uniqueness, short, no Apple TV trademarks
Great screenshots
First 3/4 lines are the most important
Keywords are important for ASEO
Use all 100 characters commas not necessary no plurals no category
Add relevant keywords by understanding well the rules
Marketing guidance
Apple TV approved image in guidelines
Download at the App Store badge
Add icon imagery
Saga mini fairy tales app
Getting feature
Apps that customer will love
Make a great app
Is the app unique?
What make people love your app?
Engaging living room experience, group of people
Intuitive use of Siri remote
Fantastic first time user, on boarding , don't use on boarding screens, don't pop up login at start
Performance matters, slow loading speed, freezes or crashes
Designed for Apple TV
Understand the process
Refreshed every Thursday
Themes and holidays, fitness app in January , zoova!
Preference for localized content
Focus on initial launch and significant updates
Let us know
Product details, Apple ID and App Store link
Tell what makes special
Product roadmap
Marketing material
Contact before online, 3/4 weeks
appstorepromotion@apple.com
Quality first
Right business model
Universal purchase
Think global be local
Create a great product page
Market your app
@CarusoApps
Copy link

I have some notes to share from NYC if you like. Might match up..

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment