"Tauri API는 흔한 95%를 덮어. 남은 5%에선 문을 잠그는 대신 OS 자체의 열쇠를 쥐여줘."
크로스 플랫폼 API로 안 될 때
Tauri 창 API는 일부러 크로스 플랫폼으로 만들어져서, OS마다 있는 별난 구석을 다 열어주진 못해. 가끔은 네이티브 윈도잉 층을 직접 불러야 해. macOS는 AppKit/Cocoa(objc2 크레이트로), Windows는 Win32 API(windows-rs로), Linux는 GTK. Tauri는 자기 추상 안에 널 가두지 않아. 바닥의 핸들에 손을 뻗어 OS랑 직접 말할 수 있게 해줘. 그 뒷문이 있어서 Tauri로 진지한 네이티브 앱을 만들 수 있는 거야.
Cinder 사례: Frontmost 활성화
scaffold 트랙의 macOS 포커스 버그 기억나? 클릭은 먹는데 키 입력은 안 먹던 그 dev 바이너리. 그리고 같은 뿌리에서 나온 다른 증상으로, always-on-top으로 떠 있는 창이 key window가 안 되는 문제도 있었어. macOS는 key window한테만 키보드 이벤트를 보내는데, 제대로 활성화된 앞쪽 앱이 아닌 프로세스는 영영 그 자격을 못 얻을 수 있거든. Tauri의 set_focus()만으론 안 고쳐졌어. 진짜 해결책은 Cocoa까지 내려가는 거였어. set_activation_policy(Regular)로 프로세스를 올리고, objc2로 NSApplication.activate()를 직접 부르는 거지.
가두고, 못 박고, 이유를 적어둬
네이티브 코드는 플랫폼을 타니까 #[cfg(target_os = "macos")] 뒤에 있어야 해 — 다른 플랫폼은 그게 없는 셈 치고 깔끔히 컴파일되게. objc2 크레이트는 버전을 못 박아 두고(Cinder는 objc2-app-kit이랑 objc2-foundation을 고정해뒀어), 이런 코드는 다음에 읽는 사람한테 하나도 안 뻔하니까 왜 있는지 주석을 달아. 네이티브 뒷문은 힘이 세고 그만큼 잘못 쓰기도 쉬워. 이 코드가 무게를 지고 있다고 생각하고, 어떤 버그를 막고 있는지 적어둬.