v1.7.2

16 de julio de 2026

Versión de red de seguridad sobre v1.7.1. Aunque v1.7.1 corrigió el bug de pérdida de datos, v1.7.2 añade una copia de seguridad automática de tu almacén SwiftData y una pantalla de recuperación "Modo Actualización de App" para que una futura migración problemática nunca pueda borrar tus datos en silencio. Si la migración falla, tu biblioteca, saves, BIOS, cheats y ajustes se restauran desde una copia con marca de tiempo y la app arranca en un modo limitado que te permite instalar una actualización correctiva.

Destacados

  • Copia de seguridad pre-migración automática: Antes de abrir el almacén SwiftData, v1.7.2 copia la tripleta SQLite (TruchiEmu.sqlite, -wal, -shm) en ~/Library/Application Support/TruchiEmu/.migrationBackups/ con marca de tiempo. Se conservan como máximo 5 copias recientes.
  • Reversión en fallo: Si una migración de esquema falla, la app restaura la copia pre-migración más reciente en la ruta del almacén activo, para que la siguiente versión (correctiva) abra tu biblioteca original en lugar de un almacén vacío.
  • Modo Actualización de App: Cuando el almacén no se puede abrir, la app muestra una pantalla bloqueada con comprobación de actualización en un toque, Time Machine, continuar en modo limitado y salir — tus datos siempre se reportan como intactos.
  • Respaldo en memoria: La UI sigue funcionando aunque el almacén en disco no esté disponible, permitiendo que la pantalla de recuperación se renderice.

Cambios detallados

  • Añadido SwiftDataContainer.makePreMigrationBackup() y restoreLatestBackup() (copia/restauración de la tripleta SQLite con purga de copias antiguas)
  • Añadido estado launchSchemaError, createdPreMigrationBackup y runningInMemoryFallback para exponer fallos de migración
  • Revisada la ruta de fallo de ModelContainer: en error, restaura la copia y luego usa un almacén en memoria — sin borrados destructivos
  • Añadido AppUpdateModeView y conectado como primera vista cuando launchSchemaError != nil, con una notificación .exitAppUpdateMode para cerrarlo
  • Eliminado el ya no usado deleteStoreFiles() (su ruta de borrar-y-reintentar se quitó del manejador de fallo)
  • Añadidas claves de localización updateMode.* (en/es/pt)