v1.7.1

July 16, 2026

Critical hotfix: updating from v1.6.0 to v1.7.0 could delete the entire TruchiEmu user-data folder (saves, BIOS, states, cheats, library database). v1.7.1 fixes the migration so user data is preserved.

Highlights

  • Data-loss fix: Updating from v1.6.0 to v1.7.0 deleted the entire ~/Library/Application Support/TruchiEmu/ folder. v1.7.1 fixes the schema migration for the ROMEntry.hasTitleScreen field so the migration succeeds and user data is preserved.
  • Defense in depth: The fallback store-recovery path no longer touches the user-data folder — only the three SwiftData SQLite files (TruchiEmu.sqlite, -wal, -shm). Saves, BIOS, config, cheats, and logs are never deleted by the recovery code path, even on a failed migration.

Detailed Changes

  • Changed ROMEntry.hasTitleScreen from a non-optional Bool to an optional Bool? so SwiftData/CoreData can automatically migrate existing rows from v1.6.0 (existing rows get nil, treated as false by all call sites)
  • Narrowed SwiftDataContainer.deleteStoreFiles() so it only removes the SQLite triple (TruchiEmu.sqlite/-wal/-shm) and the legacy root-level default.store* files — never the entire TruchiEmu/ user-data folder
  • Coalesced ROMEntry.hasTitleScreen reads to false for callers that translate between the SwiftData model and the plain ROM struct

If you already updated to v1.7.0 and lost data

v1.7.1 cannot recover data that was already deleted by v1.7.0 on a previous launch. If you were affected, your options are:

  • macOS APFS local snapshots: macOS often retains short-lived local snapshots of your disk. Open Time Machine from the menu bar or launch /System/Applications/Utilities/Time Machine.app and restore ~/Library/Application Support/TruchiEmu/ from a snapshot predating the v1.7.0 launch.
  • Time Machine backup: If you have an external Time Machine drive, restore the same folder from your most recent backup predating the update.
  • Install v1.7.1 first before restoring: once v1.7.1 is installed, future launches will no longer delete the folder, so a restored folder won't be wiped on the next relaunch.