Skip to content

Instantly share code, notes, and snippets.

@eliperkins
Created January 12, 2016 21:29
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save eliperkins/96236c2fc5a11ef8f3e2 to your computer and use it in GitHub Desktop.
Save eliperkins/96236c2fc5a11ef8f3e2 to your computer and use it in GitHub Desktop.

Apple TV Tech Talks

tvOS Fundamentals

  • Living Room experience
  • Always connected
  • Powerful hardware
  • Separate SDK with optional Universal Purchase
  • Developer tools and tech

Designing for tvOS

  • 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(_:)
  • 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

Gamepads on tvOS

  • Dpad is windowed (begins at initial touch, once touch extends past 1 on axis, moves window to follow)

AVKit

  • requiresLinearPlayback
  • interstitialTimeRanges can support disabling of scrubbing and skipping, as well as disabling time movement on the displayed timeline (for ads, legal, etc.)

TVML

  • 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

On-Demand Resources and Storing Data

  • 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
  • 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

UX Best Practices

  • 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 for 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!

Top Shelf

  • 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!!!

App Store

  • 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!
  • appstorepromotion@apple.com
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment