피드로 돌아가기
Dev.toInfrastructure
원문 읽기
macOS Tahoe 환경의 Focus Theft 해결을 통한 Safari MCP 안정성 확보
I had a focus guard. macOS Tahoe walked through it three times.
AI 요약
Context
Safari MCP가 배경에서 자동화를 수행하는 동안 사용자의 포커스를 강제로 탈취하는 Focus Theft 현상 발생. macOS Tahoe 업데이트 이후 AppleScript의 상태 변경 및 스크린샷 캡처 시 Safari가 암묵적으로 최상단으로 활성화되는 OS 레벨의 동작 변화로 인해 기존 Focus Guard 무력화.
Technical Solution
- osascriptFast(Swift daemon) 경로에 Focus Guard를 추가하여 5ms 수준의 Fast Path에서도 포커스 보호 적용
_focusGuardActive플래그 도입을 통한 중첩 호출 시의 중복 Save/Restore 방지NSRunningApplication.activate()의 비동기 특성을 고려하여 Fire-and-forget 방식에서await기반의 동기적 복구 구조로 변경- OS의 활성화 거부 가능성에 대비해 '앱 활성화 → 5ms 대기 → 상태 재검증 → Safari 강제 숨김(Hide)' 순의 다단계 Fallback 로직 설계
- Read-only 폴링 작업에
noFocusGuard: true옵션을 부여하여 사용자 의도적인 포커스 전환을 방해하지 않는 가드 범위 최적화
실천 포인트
1. OS API의 비동기 동작 여부를 확인하고 필수적으로 await 처리했는지 검토
2. 상태 변경 후 실제 반영 여부를 재확인하는 Verification 루틴 설계
3. 가드 로직 적용 시 Read-only 작업과 Mutation 작업을 분리하여 오버헤드 및 부작용 방지
4. OS 업데이트로 인한 암묵적 동작 변화 가능성을 고려한 Fallback 시나리오 확보