Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,20 @@ jobs:
uses: dtolnay/rust-toolchain@stable
with:
components: clippy, rustfmt
- name: Install Linux desktop dependencies
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
libwebkit2gtk-4.1-dev \
build-essential \
libssl-dev \
libgtk-3-dev \
libayatana-appindicator3-dev \
librsvg2-dev \
libxdo-dev \
libasound2-dev \
libudev-dev \
pkg-config
- name: Install cargo-tarpaulin
uses: taiki-e/install-action@v2
with:
Expand Down
19 changes: 17 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -258,13 +258,28 @@ API로 읽는다. 두 가지를 모르면 시간을 크게 버린다.

## 플랫폼 범위

MVP는 **macOS + Windows**다.
MVP 데스크톱 범위는 Tauri의 크로스플랫폼 대상인 **macOS + Windows + Linux**다.

### 앞에 있는 앱 식별

Wave 2에서는 플랫폼별 활성 앱 조회를 하나의 경계로 분리해 다음의 **원시 식별자**를
읽는다.

- macOS: bundle ID
- Windows: 전체 경로가 아닌 실행 파일 basename
- Linux X11: desktop ID와 `WM_CLASS` 값

Wayland에서 안전한 compositor/desktop 어댑터가 없으면 활성 앱 식별을 추측하지 않고
`None`으로 둔다. 이때 앱별 프리셋은 선택하지 않으며 기본 4칸만 유지한다.

Windows와 Linux X11에서 읽은 원시 식별자를 프리셋으로 인식·적용하는 일, 그리고
레지스트리 다운로드·캐싱은 Wave 2 범위가 아니다. 별도 검토 Wave에서 다룬다.

iOS/iPadOS는 서드파티 앱이 전역 키 입력 주입이나 시스템 오버레이를 할 수 없어,
'앱이 다른 앱을 제어'하는 구조 자체가 OS 정책상 불가능하다. 태블릿은 하드웨어
스위치를 BT HID로 붙여 OS 내장 '스위치 제어'와 연동하고, 우리 앱은 설정·프로필
제공에 한정한다. **이 제약을 우회하는 방법을 찾으려 시도하지 않는다.**
Android(AccessibilityService + 오버레이)와 Linux는 MVP 이후 과제다.
Android(AccessibilityService + 오버레이) MVP 이후 과제다.

## 하지 말 것

Expand Down
25 changes: 22 additions & 3 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions apps/desktop/src-tauri/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -34,5 +34,11 @@ accessibility-sys = "0.2.0"
core-foundation = "0.10.1"
objc2 = "0.6.4"
objc2-app-kit = "0.3.2"

[target.'cfg(target_os = "windows")'.dependencies]
windows-sys = { version = "0.61.2", features = ["Win32_Foundation", "Win32_System_Threading", "Win32_UI_WindowsAndMessaging"] }

[target.'cfg(target_os = "linux")'.dependencies]
x11rb = "0.14.0"
# floating 창이 대상 앱의 포커스를 뺏지 않도록 NSPanel(nonactivating)로 승격할 때 사용한다.
# cargo add objc2 objc2-app-kit
Loading