v1.8.6
Versión de funciones: slots de estado de guardado renombrables, sincronización de grabación entre rebobinados de Time Machine, selección de pantalla en Modo TV, atajo para conectar/desconectar el mando de Wii, API de sesión/ping de RetroAchievements y gestión de permisos TCC para carpetas que evita el aviso repetido de acceso a Descargas al arrancar.
Destacados
- Slots de guardado renombrables: Pasa el cursor por un slot para mostrar un botón de lápiz y renómbralo en línea, o usa la opción Renombrar en el menú contextual del slot/miniatura. Los nombres se guardan en un
.meta.jsonjunto a cada.statey vuelven a "Slot N" al vaciarse. El slot automático (-1) no se puede renombrar. - La grabación se mantiene sincronizada entre rebobinados (#30): Se suspenden las inserciones de frames de vídeo y la captura de audio durante el rebobinado/scrub, y la duración del rebobinado se resta de los anclajes PTS para saltárselo en ambas pistas (sin frame congelado ni silencio). Un ajuste opt-in "Cortar rebobinados de la grabación" y un toggle "Permitir rebobinado durante la grabación" exponen ambos comportamientos; el writer se detiene de forma síncrona al cerrar la ventana antes de
runner.stop()para evitar un fallo de captura de audio al desmapear la memoria compartida XPC. - Selección de pantalla en Modo TV: Un nuevo
TVModeMainSettingsViewcentraliza los ajustes del Modo TV (comportamiento, tema, opciones de pantalla, colecciones visibles, reasignación de botones del gamepad), yTVModeScreenPickerViewpermite elegir qué pantalla conectada usar al entrar al Modo TV mediante un nuevoScreenCatalog. - Atajo para conectar/desconectar el mando de Wii: Conecta/desconecta el mando de Wii en tiempo de ejecución con un nuevo atajo. Las opciones de IR de Wii ahora usan enteros como texto para las opciones de núcleo, con valores por defecto ajustados en
dolphin_libretro_default.json, y se soporta el seguimiento sintético del puntero durante la captura de entrada. - API de sesión/ping de RetroAchievements: Añade
rcheevos_api_init_ping/rcheevos_api_init_start_sessionpara presencia enriquecida e inicio de sesión, másrcheevos_api_init_login_with_tokenpara refresco de token. La vista de ajustes muestra una acción de refresco para las estadísticas del usuario y notificaciones de re-login. El manejo de errores ahora usa un tipo estructuradoRAErrorcon mensajes localizados. - Gestión de permisos TCC para carpetas: ROMLibrary ahora gestiona las concesiones TCC para ámbitos de carpeta. Combinado con la corrección del bookmark de carpeta en
LogManager/LoggerService(resolver con.withSecurityScope, emparejarstartAccessingSecurityScopedResource/stopAccessingSecurityScopedResourcealrededor del handle del log abierto), la app ya no vuelve a pedir acceso a Descargas en cada arranque. - Renovación de ajustes de atajos: Restablece atajos individuales o varios a la vez a sus asignaciones por defecto. Un nuevo enum
HotkeyTaborganiza los atajos de App, En juego y Especiales, con secciones nuevas para mando de Wii y Velocidad & Rebobinado. Los ajustes de Navegación con gamepad ahora se reutilizan bajo Atajos en vez de estar en una página separada. - Integración de BoxArtService:
GameCardViewyGameDetailViewusan el BoxArtService compartido, con un nuevo parámetroforceReplaceendownloadAndCache. - Override de auto-carga por lanzamiento:
launchGamegana un parámetrodisableAutoLoadOnStartpara saltarse la auto-carga en un solo lanzamiento sin cambiar la preferencia global.
Cambios detallados
- feat: añadir nombre visible para los slots de guardado (#31) — slots renombrables por el usuario, guardados en un
.meta.jsonauxiliar, que se vacían al borrar el slot por completo;SlotInfoganacustomNamey suEquatablelo compara para que SwiftUI refresque al recargar - fix: mantener la grabación A/V sincronizada entre rebobinados de Time Machine (#30) — flag
isRewindPaused+ acumuladorrewindPtsOffset, marcas de agua estrictas monotónicas de PTS, reinicio de posición de lectura de audio al soltar el rebobinado, parada síncrona del writer enwindowWillClose - feat: ajuste opt-in para cortar rebobinados de Time Machine de las grabaciones —
recording_seamlessRewindCutytimeMachine_rewindDuringRecording(por defecto ON para preservar el comportamiento) con pista OSD localizada cuando se bloquea el rebobinado - refactor: revertir el código de rotación de chunks sin costuras (#30) — problemas de inflación de chunks y de cómputo de recortes forzaron revertir al enfoque de escritor único con cut-PTS-skip; se preserva el fix del snapshot de MetalCoordinator para que los frames de scrub queden fuera de la grabación
- feat: exponer entradas desalojadas de TimeMachineBuffer + añadir scaffold del toggle
bufferBasedRecording—TimeMachineBuffer.pushdevuelve entradas desalojadas; el pipeline basado en búfer aún no está conectado, el servicio de grabación sigue usando cut-PTS-skip - chore: dejar el servicio de grabación en el comportamiento cut-PTS-skip verificado — el contenido previo al rebobinado se preserva entre fronteras de rebobinado; la duración del archivo es solo tiempo de juego
- feat(tvmode): implementar selección de pantalla y gestión de ajustes —
TVModeMainSettingsView,ScreenCatalog,ScreenDescriptor,TVModeScreenPickerViewcon nuevas claves de localización (en/es/pt) - feat: añadir parámetro
disableAutoLoadOnStarta la funciónlaunchGame - feat(BoxArtService): añadir parámetro
forceReplaceal métododownloadAndCache - feat: integrar BoxArtService en
GameCardViewyGameDetailViewpara un manejo mejorado de carátulas - Implementar las capas de ping e inicio de sesión de la API para la integración de RetroAchievements —
rcheevos_api_init_ping,rcheevos_api_init_start_session,rcheevos_api_init_login_with_token;RetroAchievementsServicegestiona el refresco de token y el manejo de sesión con notificaciones al usuario e interfaz de refresco - feat: mejorar el manejo de errores de RetroAchievements con tipo estructurado
RAErrory mensajes localizados - feat: implementar la gestión de permisos TCC y el manejo de ámbitos de carpeta en ROMLibrary
- fix: dejar de volver a pedir acceso a Descargas en cada arranque — resolver el bookmark de carpeta de log personalizada con
.withSecurityScopey emparejarstartAccessingSecurityScopedResource/stopAccessingSecurityScopedResourcealrededor del handle del log abierto - feat: mejorar la configuración de atajos — restablecer por acción y en bloque los atajos por defecto, nuevo enum
HotkeyTab(App/En juego/Especiales), secciones de mando de Wii y Velocidad & Rebobinado, Navegación con gamepad reutilizada bajo Atajos - Refactorizar niveles de logging y mejorar la funcionalidad del mando de Wii — INFO cambiado a DEBUG en CoreOverrideBridge/LibretroBridgeImpl/LibretroCallbacks/LibretroGlobals; atajo de conexión/desconexión del mando de Wii; opciones de IR de Wii con enteros como texto y defaults ajustados; seguimiento sintético de puntero durante la captura de entrada
- Subir la versión de marketing a 1.8.6 y el número de build a 29 en
project.yml, los dosInfo.plistydocs/_config.yml