Skip to content

Releases: RAKKUNN/matuta

Matuta 1.2.0

Choose a tag to compare

@RAKKUNN RAKKUNN released this 06 Sep 04:11

Gentle waking extended to screen and touch. The volume already faded in over 30 seconds; now the screen arrives gently too, with full respect for system motion settings.

What's New

Gentle screen arrival and dismissal. At 7:00 AM, the fullscreen alarm overlay no longer abruptly hard-cuts the screen to pitch black. The display fades in smoothly (0.45s) while audio starts playing immediately. When you tap Spacebar, audio cuts out instantly without waiting, and the screen gently fades away (0.22s). Nightstand mode enters and exits with the same calm cadence.

Respects "Reduce Motion". Matuta previously disregarded the system accessibility setting. Every animation in 1.2.0 queries NSWorkspace.accessibilityDisplayShouldReduceMotion and collapses to 0 duration when enabled, transitioning instantly without visual motion.

Smooth list reordering and transitions. Changing an alarm time re-sorts the list chronologically. Previously cards teleported instantly, making it hard to track what moved where. Cards now glide smoothly to their new positions. Adding or removing an alarm transitions with subtle scale and fade.

Subtle affordance breathing. The Spacebar dismiss capsule on the alarm overlay gently breathes (2.0s cycle) to guide sleepy eyes without anxiety. Time digits and labels remain completely stationary.

Haptic feedback on alarm enable. When you toggle an alarm on, your trackpad confirms the commitment with a crisp, subtle tap (NSHapticFeedbackManager). Turning off an alarm remains silent — feedback is reserved for deliberate commitments. Silently ignored on devices without Force Touch.

Corrections & Technical Notes

  • Clarification on 1.1.2 crash fix: The isMainExecutor() crash fix shipped in 1.1.2 was an architectural structural fix based on crash reports, but could not be reproduced in a controlled test spike prior to shipping. We want to be upfront that while the underlying dynamic actor check was structurally eliminated, it was not confirmed through reproduction.
  • Unit tests: 78, all passing.

Install

Download Matuta-1.2.0.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.

한국어

"조용히 깨운다"는 철학을 화면과 촉각으로 확장했습니다. 소리가 30초에 걸쳐 서서히 커지듯, 화면도 이제 서서히 나타나며 시스템의 손쉬운 사용 설정을 존중합니다.

달라진 점

  • 화면의 부드러운 등장과 퇴장: 아침 7시에 반쯤 잠든 상태에서 화면이 갑자기 새까맣게 툭 덮이지 않습니다. 소리는 즉시 시작하면서 화면만 약 0.45초에 걸쳐 부드럽게 나타납니다. 스페이스바를 누르면 소리는 지체 없이 즉시 멈추고 화면은 0.22초에 걸쳐 정돈됩니다. 나이트스탠드 화면도 동일하게 차분하게 열리고 닫힙니다.
  • "동작 줄이기(Reduce Motion)" 완벽 지원: 지금까지 접근성 설정을 무시하고 있었습니다. 시스템 설정의 "동작 줄이기"를 켜면 모든 새 애니메이션의 지속시간이 즉시 0으로 수렴하여 지연 없이 즉각 전환됩니다.
  • 알람 목록 순서 재배치 애니메이션: 알람 시간을 변경하면 시각순으로 자동 정렬되는데, 지금까지는 카드가 순간이동하여 눈으로 쫓기 어려웠습니다. 이제 카드가 부드럽게 미끄러지며 제자리로 이동합니다.
  • 해제 어포던스 호흡: 알람 화면의 스페이스바 해제 버튼이 2초 주기로 은은하게 밝아졌다 어두워지며 시선을 안내합니다. 시간 숫자와 텍스트는 가독성을 위해 미동도 하지 않습니다.
  • 알람을 켤 때만 은은한 햅틱: 알람을 켜는 순간 Force Touch 트랙패드에 톡 하는 짧은 확인 진동을 줍니다. 알람을 끄는 동작에는 반응을 주지 않아, 내일 아침을 맡기는 중요한 결정에만 무게를 싣습니다 (트랙패드가 없는 기기에서는 오류 없이 무시됨).

정정 및 기술적 안내

  • 1.1.2 크래시 수정 관련 정정: 1.1.2에서 배포된 isMainExecutor() 크래시 수정은 크래시 리포트를 바탕으로 구조를 근본적으로 개선한 것이었으나, 배포 전 스파이크에서 실제로 크래시를 재현하는 데는 성공하지 못했습니다. 구조적으로 원인을 차단했음을 믿으나, 재현 테스트를 거치지 못했음을 솔직히 밝힙니다.
  • 단위 테스트: 78개 전건 통과.

알려진 사항:

  • 스누즈 중 절전 깨우기는 아직 실사용 검증 전입니다. 중요한 일정에는 다른 알람을 함께 두시길 권합니다.
  • Apple Music 소스는 음악 앱의 큐에 있는 곡을 재생하므로, 재생 곡은 큐 상태에 따릅니다(백업음은 항상 함께 울립니다).

Matuta 1.1.2

Choose a tag to compare

@RAKKUNN RAKKUNN released this 06 Sep 03:55

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 소스는 음악 앱의 큐에 있는 곡을 재생하므로, 재생 곡은 큐 상태에 따릅니다(백업음은 항상 함께 울립니다).

Matuta 1.1.1

Choose a tag to compare

@RAKKUNN RAKKUNN released this 04 Sep 03:19

A bug-fix release. Three UI problems that only showed up in English, all found while taking the screenshots now in the README.

Fixed

Weekday letters were cut off in English. The day indicators on each alarm row had a fixed 18pt width, sized for the single-character Korean labels (월, 화). In English Mon and Wed were clipped to M... and W... — those two specifically, because M and W are the widest capitals. The indicators now size themselves to their content.

Nightstand didn't cover the menu bar or the Dock. The window sat at .normal level while the alarm overlay used .screenSaver. A bedside clock with a lit Dock along the bottom rather defeats the point. Both windows now use the same level.

The Settings window was too small for its contents. A scrollbar appeared and the language picker was clipped at the bottom edge. The window is wider now, and the duplicated "Language" label — once as a section header, once as the row label — is down to one.

Nothing changed in alarm scheduling, playback, or wake-from-sleep. Unit tests: 70, all passing.

Install

Download Matuta-1.1.1.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.

한국어

README에 넣을 스크린샷을 찍다가 드러난 UI 버그 세 개를 고쳤습니다. 셋 다 영어에서만, 또는 눈으로 봐야만 보이는 것들이었습니다.

  • 요일 표시가 영어에서 잘렸습니다. 고정 폭 18pt가 한 글자짜리 ·에 맞춰져 있어서 Mon·WedM...·W...로 나왔습니다. M과 W가 대문자 중 가장 넓어 이 둘만 깨졌습니다. 이제 내용에 맞춰 늘어납니다.
  • 나이트스탠드가 메뉴 막대와 Dock을 덮지 못했습니다. 창 레벨이 .normal이었습니다. 침대 옆 시계인데 화면 아래가 빛나면 의미가 없어서, 알람 오버레이와 같은 레벨로 올렸습니다.
  • 설정 창이 내용보다 작았습니다. 스크롤바가 생기고 언어 선택기가 잘렸습니다. 창을 넓히고, 두 번 나오던 "언어" 라벨을 하나로 줄였습니다.

알람 예약·재생·절전 깨우기 동작은 바뀐 것이 없습니다. 단위 테스트 70개 통과.

알려진 사항: 스누즈 중 절전 깨우기는 아직 실사용 검증 전입니다. 중요한 일정에는 다른 알람을 함께 두시길 권합니다.

Matuta 1.1.0

Choose a tag to compare

@RAKKUNN RAKKUNN released this 04 Sep 02:49

Matuta now speaks English.

What's new

Korean and English, switched in-app. Matuta follows your system language by default. Open Settings (⌘,) and pick System / 한국어 / English — the entire app changes immediately, with no restart. That includes the nightstand view and the full-screen alarm overlay.

Time formatting follows your choice too, so switching to English gives you 7:00 AM rather than 오전 7:00.

Under the hood

The core library no longer produces sentences. It emits keys, and the view resolves them against the current language. Two things fall out of that:

  • Switching languages is instant, because there is no cached text to invalidate.
  • The core's tests assert on keys instead of Korean prose, so rewording a message no longer breaks them.

Unit tests: 63 → 70.

Install

Download Matuta-1.1.0.zip below, unzip, and drag Matuta.app to your Applications folder. Signed with a Developer ID and notarized by Apple, so it opens without warnings. Requires macOS 14.0 or later.

Known issues

  • Wake-from-sleep during snooze has not been field-tested yet. The code path and unit tests are in place, and wake-from-sleep for a normal alarm has been verified on real hardware — but the case where you hit snooze and the Mac then goes to sleep has not been measured. 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.

한국어

설정에서 한국어·영어를 바꿀 수 있습니다. 기본은 시스템 언어를 따르고, 설정(⌘,)에서 바꾸면 재시작 없이 앱 전체가 즉시 바뀝니다. 나이트스탠드와 알람 오버레이까지 포함됩니다. 시각 표기도 언어를 따라갑니다.

내부적으로 코어가 문장 대신 키를 내보내도록 바꿨습니다. 덕분에 전환이 즉시 이뤄지고, 코어 테스트가 한국어 문구에 의존하지 않게 되어 문구를 다듬어도 깨지지 않습니다. 테스트 63 → 70개.

알려진 사항: 스누즈 중 절전 깨우기는 아직 실사용 검증 전입니다. 일반 알람의 절전 깨우기는 실기기에서 확인했지만, 스누즈를 누른 뒤 맥이 절전에 들어간 경우는 측정하지 못했습니다. 중요한 일정에는 다른 알람을 함께 두시길 권합니다.

Matuta 1.0.0

Choose a tag to compare

@RAKKUNN RAKKUNN released this 04 Sep 00:46

macOS 알람 앱 첫 정식 배포입니다.

설치

아래 Matuta-1.0.0.zip을 받아 압축을 풀고 Matuta.app을 응용 프로그램 폴더로 옮기세요.

Developer ID 서명과 Apple 공증을 마쳤으므로 경고 없이 열립니다. macOS 14.0 이상이 필요합니다.

무엇을 하나

절전에서 깨어납니다. 알람 2분 전에 전원 이벤트를 예약해 맥을 깨웁니다. 덮개를 닫아둬도 울립니다. 기본 시계 앱이 못 하는 부분입니다.

어떤 음악으로든 깨웁니다. 입력 칸 하나에 링크를 붙여넣거나 파일을 끌어다 놓으면 앱이 판별합니다 — 내장 벨소리, 로컬 파일, 인터넷 라디오, Apple Music, Spotify, YouTube·웹.

소리가 안 나는 상황을 막습니다. 알람 시각에 출력을 내장 스피커로 되돌리고, 음소거를 풀고, 볼륨을 확보합니다. 외부 앱·웹처럼 재생 성공을 검증할 수 없는 소스는 백업음을 함께 깔아 무슨 일이 있어도 소리가 나게 합니다.

자기 전에 문제를 알려줍니다. 나이트스탠드 모드 하단에 상태가 뜹니다. 이어폰이 꽂혀 있거나 음소거이거나 볼륨이 낮으면 경고와 함께 한 번 눌러 고치는 버튼이 붙습니다. 정상일 때는 조용합니다.

스페이스바로 끕니다. 스누즈는 일부러 마우스로만 누르게 했습니다.

처음 실행할 때

Spotify나 Apple Music을 알람 소스로 쓰면 자동화 권한을 묻는 대화상자가 뜹니다. 허용해야 그 음악이 재생됩니다. 거부해도 백업음은 울리므로 늦잠으로 이어지지는 않습니다.

알려진 사항

  • 스누즈 중 절전 깨우기가 아직 실사용 검증을 거치지 않았습니다. 코드 경로와 단위 테스트는 갖췄고 일반 알람의 절전 깨우기는 실기기에서 확인했지만, 스누즈를 누른 뒤 맥이 절전에 들어간 경우는 아직 실측 전입니다. 중요한 일정에는 다른 알람을 함께 두시길 권합니다.
  • Apple Music 소스는 음악 앱에 재생 명령만 보내므로 큐 상태에 따라 원하는 곡이 아닐 수 있습니다. 이 경우에도 백업음이 함께 울립니다.

개발

Swift 6 · SwiftUI · 순수 SwiftPM (Xcode 프로젝트 파일 없음). 단위 테스트 63개.

판정과 계산은 전부 MatutaCore에 있고 테스트가 지킵니다. 알람음은 오디오 파일이 아니라 코드로 합성해서, 파일이 사라져 못 울릴 일이 없습니다.

MIT 라이선스입니다.