Back to Provenance

3081

.changelog/3081.md

3.3.11.6 KB
Original Source

Added

  • Save State Version Mismatch Detection — new SaveStateVersionChecker utility detects when a save state was created by a different emulator core version and presents an async "Load Anyway / Cancel" dialog before proceeding. createdWithCoreVersion propagated through SaveStateRowViewModel, RetroSaveStateItem, and PVPrimitives.SaveState.

Fixed

  • Version mismatch alert hangSaveStateVersionChecker.confirmLoad(on:) now guards a hasResumed flag to prevent double-resume, adds withTaskCancellationHandler to resume false if the Swift task is cancelled while the alert is visible, and hooks UIAdaptivePresentationControllerDelegate to resume on interactive sheet dismissal. A pre-flight guard also resumes immediately (with false) if the view controller cannot present (not in window or already presenting).
  • "Unknown" sentinel triggers false mismatchSaveStateVersionChecker.mismatch(for:) now normalises version strings, treating nil, empty, or "Unknown" (case-insensitive) as unknown so CloudKit-synced save states with missing version info never prompt a spurious warning.
  • Load task racing user confirmationPVEmulatorViewController.loadSaveState(_:) no longer starts the load Task before the user responds to the version-mismatch dialog; the actual state load is deferred until after shouldLoad is true, making "Cancel" reliably prevent the load.
  • SaveStateRowViewModel equality incompletecreatedWithCoreVersion and coreIdentifier are now included in the Equatable == implementation so diffing/caching reflects version changes correctly.