v1.8.3

July 24, 2026

Patch release fixing two regressions — silent save-state deletion failures and false-positive update notifications on the current version — plus a TV-mode game-loading reliability pass and a broad Swift 6 warning cleanup.

Highlights

  • Deleting save states works again: Delete handlers in ModernSaveStateSlotView and the progressive thumbnail context menu now build the same composite displayName__ key the save path uses (#27).
  • No false update prompt on the current version: Update availability in AppUpdateService is no longer gated behind #if LOG_DEBUG, so fresh installs no longer report themselves as outdated (#25).
  • TV Mode reliability: Library initialization was refactored so games load deterministically in TV mode, and entering TV mode now triggers a fullscreen entry pass to keep the controller focused.
  • Swift 6 warning cleanup: Removed ~20 actor-isolation, unused-binding, and deprecated-API warnings across Swift sources to keep the build log actionable.

Detailed Changes

  • Fix save-state delete handlers to use the composite displayName__ key — see BaseRunner.swift:1150 and GameDetailView.swift:426 for the canonical save path (Fixes #27)
  • Drop #if LOG_DEBUG gating of update availability in AppUpdateService; the real version-comparison path now runs unconditionally (Fixes #25)
  • Refactor ROM library initialization so games are loaded in TV mode rather than relying on side-effects
  • Add fullscreen entry logic on TV Mode activation so the active window is brought to focus on transition
  • Update build configurations and logging flags to document the LOG_DEBUG/LOG_EXTREME scoping rules
  • Add debug logging for time-machine operations and other components
  • Cleanup Swift 6 warnings: redundant await on sync calls, unused system/port/existing bindings, deprecated single-parameter onChange(of:perform:), default actor-isolation arguments, and confusable trailing-closure bodies
  • Revise asset links and trim outdated sections in README.md