Skip to content

Latest commit

 

History

History
112 lines (66 loc) · 3.07 KB

File metadata and controls

112 lines (66 loc) · 3.07 KB

Trace 기술 스택

기본 방향

Trace는 macOS에 깊게 붙는 캡처 앱이므로 웹 기반 앱보다 네이티브 macOS 앱으로 개발한다. 화면 캡처, 전역 단축키, 메뉴바, 클립보드, 앱 전환 및 자동 전달 흐름은 macOS 네이티브 API를 쓰는 쪽이 제품 목표와 맞다.

권장 스택

언어

Swift

선택 이유:

  • macOS 네이티브 API와 가장 잘 맞는다.
  • AppKit, SwiftUI, Foundation, CoreGraphics 접근이 자연스럽다.
  • 배포 시 별도 런타임 의존성이 적다.

UI

SwiftUI + AppKit

역할 분리:

  • SwiftUI: 설정 창, 히스토리 창, 전달 대상 선택 창
  • AppKit: 메뉴바 앱, 화면 오버레이, 전역 이벤트 처리, 창 레벨 제어

SwiftUI만으로 모든 기능을 처리하기보다, macOS 시스템 동작과 밀접한 부분은 AppKit을 사용한다.

앱 형태

macOS menu bar app

Trace는 항상 빠르게 접근되어야 하므로 Dock 중심 앱보다 메뉴바/백그라운드 중심 앱이 적합하다.

화면 캡처

CoreGraphics 기반 캡처를 우선 검토한다. macOS 권한 정책은 permissions.md를 기준으로 한다.

필요한 역할:

  • 전체 화면 또는 디스플레이 이미지 확보
  • 사용자가 선택한 영역만 잘라 저장
  • PNG 이미지 생성

클립보드

NSPasteboard

필요한 역할:

  • 자동 복사 설정이 켜져 있으면 캡처 이미지를 클립보드에 자동 복사
  • 히스토리 이미지 다시 복사

실행 중인 앱 목록

NSWorkspace

필요한 역할:

  • 현재 실행 중인 앱 목록 조회
  • 앱 이름과 아이콘 표시
  • 사용자가 선택한 앱 식별

자동 전달

MVP의 자동 전달은 클립보드에 이미지를 복사한 뒤 선택한 앱을 활성화하고 붙여넣기 이벤트를 보내는 방식으로 구현한다. 세부 정책은 delivery.md를 기준으로 한다.

  • 자동 전달 캡처 상태에서 영역 선택
  • 전달 대상 앱 목록 표시
  • 사용자가 앱 선택
  • 선택한 앱 활성화
  • 붙여넣기 이벤트 전송
  • 성공 또는 실패 상태 기록

저장소

초기 MVP는 파일 시스템 + JSON 메타데이터를 우선 사용한다.

선택 이유:

  • 날짜별 폴더 저장 요구사항과 잘 맞는다.
  • MVP 규모에서는 SQLite가 꼭 필요하지 않다.
  • 사람이 파일 구조를 직접 확인하기 쉽다.

추후 검색, 태그, OCR, 대량 히스토리가 들어오면 SQLite 또는 SwiftData 전환을 검토한다.

테스트

XCTest

우선 테스트 대상:

  • 파일명 생성
  • 날짜별 저장 경로 생성
  • 메타데이터 기록
  • 캡처 모드 분기
  • 히스토리 정렬

비권장 스택

Electron

빠른 UI 개발에는 유리하지만, Trace의 핵심 기능이 macOS 시스템 기능에 붙어 있어 네이티브 브리지 비용이 커진다.

Tauri

Electron보다 가볍지만, macOS 화면 캡처와 자동 전달 같은 기능은 결국 Swift 네이티브 코드가 중요해진다.

웹 앱

전역 단축키, 화면 캡처 오버레이, 앱 자동 전달을 제품 수준으로 구현하기 어렵다.