v1.8.4

July 24, 2026

Hotfix release: TV Mode now correctly resumes the user's last session state, so quitting the app in normal mode and relaunching no longer drops the user back into TV Mode. Also ships bundled controller presets and an export script for default gamepad mappings.

Highlights

  • TV Mode respects the last session: TVModeSettingsManager now reads tvMode_currentlyActive on init (the runtime-mode key it has been writing on every toggle) and only falls back to the launchInTVMode preference on a true first launch, so exiting TV Mode and quitting now actually persists.
  • Bundled controller presets: New BundledControllerPresets.swift loads default controller mappings from JSON at launch, with new presets for 8BitDo Ultimate 3-mode (Xbox layout), Lic Pro Controller, and Xbox Wireless Controller. ControllerService uses them as the default-mapping source.
  • Preset export utility: scripts/export_controller_presets.py exports user-saved controller mappings into the bundled preset JSON files.

Detailed Changes

  • Read tvMode_currentlyActive at TVModeSettingsManager init and fall back to launchInTVMode only when no prior session has been recorded, so cold-start TV-mode state matches the user's quit-time state
  • Add BundledControllerPresets.swift to load default controller mappings from JSON at app launch
  • Add new controller preset JSON files for 8BitDo Ultimate 3mode Xbox, Lic Pro Controller, and Xbox Wireless Controller
  • Update ControllerService to use bundled presets as the source for default mappings
  • Add export_controller_presets.py script to export user-saved controller mappings to bundled preset files
  • Update project.pbxproj to include the new source files and resources