Awake는 Mac에서 오래 걸리는 작업이 끝날 때까지 시스템 잠자기를 막아주는 macOS 메뉴바 앱이다. 사용자는 현재 실행 중인 앱이나 윈도우를 선택하고 보호 세션을 시작한다. 선택한 대상이 종료되면 Awake가 자동으로 전원 유지 상태를 해제한다.
대표 시나리오는 터미널/tmux에서 Codex를 돌리거나, 빌드, 업로드, 다운로드, 렌더링처럼 사용자가 자리를 비운 뒤에도 끝까지 진행되어야 하는 작업이다.
중요한 제품 원칙: Awake는 macOS가 제공하는 전원 assertion을 사용해 일반 유휴 잠자기와 디스플레이 잠자기를 제어한다. 사용자가 lid-closed 모드를 켜면 보호 세션 동안 관리자 권한으로 macOS의 sleep disabled 설정을 켜고, 세션 종료 시 정상 sleep 설정으로 복구한다.
- 기술 스택
- 아키텍처
- 기능별 개발 명세
- 앱/윈도우 선택 정책
- macOS 전원 관리 정책
- macOS 권한 정책
- 데이터와 저장 구조
- 구현 계획
- Codex 개발 워크플로우
- 테스트 전략
- 릴리즈와 배포
- Codex 작업 지침
- 메뉴바 앱으로 실행
- 단축키 또는 메뉴바에서 보호 대상 선택 화면 열기
- 현재 실행 중인 앱/윈도우 목록 표시
- 사용자가 하나 이상의 대상을 선택
- 선택 즉시 보호 세션 시작
- 보호 세션 중 macOS 전원 assertion 유지
- 선택한 대상이 모두 종료되면 자동 해제
- 사용자가 수동으로 세션 종료 가능
- 권한 부족 또는 환경 제약을 명확하게 표시
- 덮개 닫힘 상태에서도 보호 세션을 유지하는 고급 모드
- 고급 모드 종료 후 macOS sleep 설정 복구
- SwiftPM 기반 macOS 메뉴바 앱
- 메뉴바 상태 아이콘
command+shift+a전역 단축키- 실행 중 앱 목록과 감지 가능한 윈도우 수 표시
- 다중 앱 선택
- IOKit 기반 system idle sleep 방지
- display sleep 방지 기본 활성화
- closed-display 환경을 위한 best-effort network active assertion 선택 가능
- 관리자 권한 기반 lid-closed sleep disabled 모드
- lid-closed 모드 시작 시 화면보호기 실행
- 메뉴바에서 macOS sleep 설정 수동 복구
- lid-closed helper 진단, 설치/복구, 제거 액션
- lid-closed 세션 시간/배터리 안전 종료 설정
- 로그인 시 자동 실행 설정
- 선택한 앱 프로세스가 모두 종료되면 자동 해제
- 자동 종료 알림
.app번들 생성 스크립트
개발 실행:
swift run Awake앱 번들 생성:
chmod +x scripts/build-app.sh
scripts/build-app.sh
open build/Awake.app릴리즈 패키지 생성:
scripts/package-release.sh 0.1.0GitHub Releases용 고정 다운로드 URL:
https://github.com/ium-team/Awake/releases/latest/download/Awake.zip
기본 단축키:
- 보호 대상 선택 창 열기:
command+shift+a
전원 assertion 확인:
pmset -g assertions