모바일 기기를 맥의 보조 입력 장치로 쓰는 시도는 많았습니다. 대부분 전용 앱을 폰과 맥 양쪽에 깔아야 해서 번거로웠습니다. MacPilot 은 브라우저 하나로 이 문제를 가볍게 해결합니다.

외부 의존성 없는 네이티브 서버 구성

맥 내부에서 가벼운 웹 서버를 띄워 모바일 기기 접속을 처리합니다. Swift 기반 메뉴바 앱이 NWListener 로 HTTP 서버와 WebSocket 서버를 직접 구동하는 방식입니다. 외부 라이브러리나 프레임워크를 전혀 쓰지 않고 로컬 네트워크 통신을 직접 구현했습니다. 구조가 단순합니다. 이 구조 덕에 폰에서는 별도 앱을 깔지 않고 사파리나 크롬 브라우저로 맥에 바로 접속합니다. 접속 시 화면에 뜨는 QR 코드를 스캔하면 끝입니다. 개발 환경을 구성할 때도 불필요한 의존성을 덜어냈습니다. XcodeGen 을 사용해 프로젝트 파일을 동적으로 생성하고 빌드합니다. 상시 구동 서버로 등록하고 싶다면 launchd 설정을 적용하면 됩니다. 로그인할 때 백그라운드에서 알아서 실행되므로 매번 Xcode를 켤 이유가 없습니다.

Quartz Event Services를 활용한 입력 주입

브라우저에서 보낸 터치 제스처와 키 입력은 WebSocket을 타고 맥으로 넘어옵니다. 맥 내부의 이벤트 인젝터가 CGEvent 를 생성해 OS 수준에서 하드웨어 마우스와 키보드가 움직이는 것처럼 이벤트를 밀어 넣습니다. 반응 속도가 빠릅니다. 단순 클릭뿐 아니라 두 손가락 스크롤, 핀치 줌, 세 손가락 쓸어넘기기 같은 복잡한 트랙패드 제스처를 매끄럽게 처리합니다. 텍스트 입력 시 유니코드를 직접 주입하므로 한글과 이모지 타이핑도 문제없습니다. 로컬 네트워크 안에서만 통신하므로 외부 클라우드로 데이터가 유출될 걱정도 없습니다. 모든 패킷은 공유기 내부에서만 돌기 때문에 보안 위협이 적습니다. 신뢰도가 높습니다.

스트림덱을 대체하는 커스텀 매크로 덱

단순 입력 장치를 넘어 하드웨어 스트림덱 기능까지 소프트웨어로 구현했습니다. 자주 쓰는 단축키 조합, 텍스트 스니펫, 앱 실행 링크를 카드 형태로 배치해 터치 한 번으로 실행합니다. 여러 단계를 순서대로 실행하는 멀티스텝 매크로 기능도 지원합니다. 효율성이 높습니다. 설정 데이터는 맥 로컬 저장소에 보관하며 연결된 여러 모바일 기기 간에 실시간으로 동기화됩니다. 하드웨어 장비를 따로 사지 않아도 주머니 속 폰이 훌륭한 보조 컨트롤러로 변신합니다.

Claude Code를 활용해 빌드한 이 작은 오픈소스는 복잡한 상용 앱을 대체하기에 충분합니다. 가볍게 띄워 쓸 무선 컨트롤러가 필요하다면 검토할 만합니다.

요약

  • 모바일 브라우저와 맥 간의 로컬 네트워크 직접 통신으로 별도 앱 설치 부담을 완벽히 제거합니다.
  • 외부 라이브러리 없이 NWListener와 CGEvent를 활용해 가볍고 빠른 네이티브 입력 주입 시스템을 구현합니다.
  • Claude Code를 사용해 엔드투엔드로 개발된 모범적인 소규모 오픈소스 프로젝트 사례 제시