Matuta 1.1.2
A reliability release. Fixes three ways an alarm could quietly vanish — app crashes, external music sources stealing keyboard focus, and restarts leaving the app unlaunched.
Fixed
A rare isMainExecutor() crash present since 0.1.0. Two crash reports (one from 0.1.0, one from 1.1.1) revealed identical crash traces in MatutaApp.body when SwiftUI evaluated dynamic @MainActor isolation checks on @State properties during scene graph updates. State ownership has been moved out of the App struct into dedicated root views, structurally eliminating the issue.
YouTube and Spotify alarms wouldn't stop when pressing Spacebar. Opening external browser URLs or Spotify links activated the target application in the foreground, stripping key window status from the fullscreen alarm overlay. Key events (like Spacebar) were swallowed by the browser (toggling YouTube play/pause) instead of dismissing the alarm, leaving the backup tone ringing endlessly. Sources now open in the background without activating (activates = false), and the overlay actively re-acquires key window focus.
Added
Launch at login. An alarm app that isn't running after a reboot can't wake you. You can now toggle "Launch at login" directly in Settings (⌘,), powered by macOS SMAppService. The preflight check in Nightstand also flags when this is turned off, offering a one-click fix.
Unit tests: 73, all passing.
Install
Download Matuta-1.1.2.zip below, unzip, and drag Matuta.app to your Applications folder. Signed with a Developer ID and notarized by Apple. Requires macOS 14.0 or later.
Known issues
- Wake-from-sleep during snooze has not been field-tested yet. Wake-from-sleep for a normal alarm has been verified on real hardware; the snooze case has not. For anything important, keep a second alarm.
- The Apple Music source sends a play command to the Music app, so the track depends on what is queued there. The backup tone plays alongside it either way.
한국어
알람이 조용히 사라지는 세 가지 경로(앱 크래시, 외부 앱 포커스 탈취로 인한 알람 미종료, 재시동 후 앱 미실행)를 차단한 신뢰성 패치입니다.
수정된 사항
- 0.1.0부터 존재하던
isMainExecutor()크래시 해결: 크래시 리포트 분석 결과, SwiftUI가 씬 그래프를 갱신할 때MatutaApp.body의@State객체에 대한 메인 액터 격리 동적 검사가 터지는 문제가 있었습니다. App 구조체에서@State소유를 완전히 제거하고 싱글턴 및 전용 루트 뷰로 격리하여 원인을 원천 차단했습니다. - 유튜브·Spotify 알람에서 스페이스바로 알람이 안 꺼지던 문제: 외부 브라우저나 앱을 열 때 전면으로 활성화되면서 알람 오버레이가 키 창 지위를 잃어 스페이스바가 유튜브 일시정지로만 작동하고 백업음이 계속 울리던 문제를 해결했습니다. 앱을 활성화하지 않고 백그라운드로 열고, 오버레이가 키 창 포커스를 즉각 되찾도록 보강했습니다.
추가된 사항
- 로그인 시 자동 실행: 재시동이나 로그아웃 후 앱이 실행되지 않으면 알람이 통째로 사라지는 문제를 막기 위해, 설정(⌘,)에 "로그인 시 실행" 토글을 추가했습니다(
SMAppService기반). 나이트스탠드 프리플라이트에서도 꺼져 있을 경우 주황색 경고와 원클릭 켜기 액션을 제공합니다.
단위 테스트: 73개 전건 통과.
알려진 사항:
- 스누즈 중 절전 깨우기는 아직 실사용 검증 전입니다. 중요한 일정에는 다른 알람을 함께 두시길 권합니다.
- Apple Music 소스는 음악 앱의 큐에 있는 곡을 재생하므로, 재생 곡은 큐 상태에 따릅니다(백업음은 항상 함께 울립니다).