- Living Room experience
- Always connected
- Powerful hardware
- Separate SDK with optional Universal Purchase
- Developer tools and tech
- Connected, Clear and Immersive
- Parallax: Delightful, but makes user feel more connected to content on screen
- Menu is your back button (use it to "zoom out")
- Play/pause can be used in apps/games
- Focused != Highlighted
- Don't try to recreate parallax, you won't nail it
- Awesome HIG with spacing/padding values! https://developer.apple.com/tvos/human-interface-guidelines/visual-design/
- Focus engine determines where to begin focus on new vcs
- Focus engine uses focus chain, similar to responder chain
- adjustsImageWhenAncestorFocused on image view will allow parallax on image
- Don't use fixed animation timings with focus. Use
didUpdateFocusInContext(_:)
to give you previously focused view and view that will be moved to, as well as the timing- Then use
coordinator.addCoordinatedAnimations(_:)
- Then use
- UIGestureRecognizer can take in constants with
allowedPressTypes
to handle remote buttons, swipes on touch surface, old remote, game controllers - UIResponder
presses[Began|Changed|Ended|Cancelled]
can handle touch events from center of currently focused view
- Dpad is windowed (begins at initial touch, once touch extends past 1 on axis, moves window to follow)
- requiresLinearPlayback
- interstitialTimeRanges can support disabling of scrubbing and skipping, as well as disabling time movement on the displayed timeline (for ads, legal, etc.)
- App Store and iTunes Movies are TVML
- They're called TVML "documents"
- Shells out to UIKit in the end
- Templates (and exteneded) can be shipped in the binary
- Mix and match is A-OK
- Not all frameworks can be interfaced with in TVML (like IAP), so shelling out to native is necessary
- Dispatching out to native will occur on JSCore thread, so make sure your threading is as desired
- Up to 20GB
- Special tag categories:
- Initial Install Tags
- Up to 2 GB
- Assets you want as soon as app is launched
- Included in size of app in App Store
- Prefetch Tags
- Downloaded after install
- App may open before this is complete
- Up to (4 GB - sizeof(Intial Install Tags))
- i.e. Level 2 assets, fancy touch assets
- On-demand Tags
- Initial Install Tags
- Single asset pack can be up to 512MB, but 64MB is ideal for purges
- request.loadingPriority = NSBundleResourceRequestLoadingPriorityUrgent is a special value
- Pauses other downloads, can overtake CPU, may have more priority than other things system-wide
- calling conditionallyBeginAccessingResourcesWithCompletionHandler will being accessing asset so make sure to stop accessing if you're not needing to use it but just checking
- setPreservationPriority can help keep assets from being purged (but OS heuristics will still run)
- last used, app running state also heuristics
- NSUserDefaults maxes out at 500KB
- iCloud key-value store can be used to great benefit on tvOS
- Authentication
- Use Email field for email (you get recents tab for free, shows emails from field on other apps too)
- Refer to web
- Not faux-pas to complete transactions on iOS
- Use Bonjour!
- Account switching is a great idea too. Think about supporting multiple users early
- Onboarding
- Get out of the way
- Onboarding is never a crutch for bad UI
- Show controls for controller or landscape
- Teach gradually and in context
- Anticipate the need for help (i.e. user exited halfway through first play)
- Fixed number of choices? Use the focus model
- EVEN IN GAMES! Don't get too cute with "cursor"-like models
- Just because some interaction model worked on iOS, doesn't mean it'll work on tvOS
- Tuning quick hits
- Minimizing launch time
- Reducing memory footprint
- Optimizing resource usage
- Responsive UI/animations
- New hardware capabilities
- Fast Path
- Spend last time on detours (expensive things)
- Think about your "compositing pipeline". Where are your detours?
- Alpha is a detour, causes blended pixels
- Flatten your images if you create/use masks, transparency or overlays often
- Resizing images can actually start to get pretty expensive
- Lots of early tvOS apps have had some pretty bad misaligned images!
- Static Top Shelf images should not include UI-like elements (i.e. "Play Now" button)
- Instant App Store rejection
- Inset banner images should be like billboards
- Use values from the HIG, use values from the HIG, USE VALUES FROM THE HIG!!!
- Keywords
- Commas, no spaces
- No need for plurals
- App Store refreshes every Thursday
- Themes and holidays play a big part in features
- Is your app great around the New Year or Halloween?
- Share your roadmap, marketing or PR plan
- Contact 3 to 4 weeks ahead of time
- Editors review, consider, provide feedback
- Plus, they have a schedule too!
- [email protected]