macOS는 그리드를 되찾아야 한다

1 week ago 11

(blog.hopefullyuseful.com)

  • macOS의 Spaces는 Leopard 시절 사용자 지정 3x3 그리드로 가상 데스크톱을 실제 화면처럼 다루게 했고, 브라우저·편집기·Xcode·시뮬레이터를 공간 기억으로 오갈 수 있게 했음
  • Mission Control은 macOS Lion에서 가상 데스크톱을 가로 한 줄로 제한했고, 키보드로 특정 화면까지 미끄러져 이동하거나 단축키 번호를 기억해야 해서 공간 기억을 깨뜨렸음
  • Total Spaces는 느려짐을 만들었고 나중에는 시스템 Dock 수정과 SIP 우회에 의존했으며, Yabai/Aerospace 같은 윈도 매니저는 풀스크린 앱과 작업별 전용 공간 선호와 맞지 않았음
  • GridLion은 InstantSpaceSwitcher가 애니메이션 없이 space를 전환하는 것을 보고 나온 해결책으로, 잠긴 Mission Control API 대신 단일 행 네이티브 space를 모델링해 그리드처럼 보여줌
  • LLM은 하루 만에 동작하는 시제품을 만드는 데 도움을 줬지만 UI의 느낌은 사람의 피드백 루프가 필요했고, GridLion에 남은 API 한계 때문에 그리드 기반 Spaces는 다시 OS 기능이어야 함

Leopard Spaces가 만든 공간 기억

  • macOS 10.5 Leopard의 Spaces는 가상 데스크톱을 macOS에 가져왔고, 사용자가 공간을 원하는 그리드로 배치할 수 있게 했음
  • 3x3 그리드는 9개 화면처럼 쓰였고, 가운데 웹 브라우저, 위쪽 웹 편집기, 왼쪽 위 Xcode, 그 아래 iOS 시뮬레이터처럼 앱과 작업을 고정할 수 있었음
  • 특정 위치로 한 번의 키 입력으로 이동하는 방식은 실제 별도 물리 디스플레이를 보는 것처럼 근육 기억과 공간 기억을 만들었음
  • EasyBeats Drum Machine의 16개 시퀀싱 화면 그리드도 Apple의 Spaces 배치에서 직접 영향을 받았음

Lion 이후 사라진 그리드

  • macOS Lion은 Mission Control을 도입하면서 가상 데스크톱을 가로 한 줄로 제한했음
  • 가로 한 줄에서는 키보드로 특정 화면까지 이동하려면 계속 수평으로 이동해야 했고, 직접 단축키를 쓰더라도 브라우저가 7번 화면인지 8번 화면인지 기억해야 했음
  • 이 변화는 데스크톱을 공간 위치로 기억하는 방식을 유지하기 어렵게 만들었음
  • Total Spaces 같은 대안도 있었지만, 느려짐이 생겼고 시스템 Dock 수정에 의존했으며 나중에는 SIP 우회가 필요해졌음

윈도 매니저보다 작업별 공간

  • Yabai, Aerospace 같은 윈도 매니저는 모든 사용자에게 같은 방식의 해법이 되지 않았음
  • 창을 데스크톱 위에서 정리하는 방식은 책상 위 종이를 옮기는 느낌에 가깝고, 필요한 것은 모든 것이 그대로 남아 있는 별도 작업대에 가까웠음
  • macOS의 풀스크린 앱과 분할 모드는 작업 하나에 전용 영역을 주는 방식이라 그리드 기반 space 탐색과 더 잘 맞았음

GridLion의 구현 방식

  • InstantSpaceSwitcher는 시스템 수정 없이 macOS의 space 전환 애니메이션을 제거했고, 애니메이션 없는 전환을 본 뒤 그리드 탐색 문제를 풀 수 있다는 가능성이 생겼음
  • macOS는 Mission Control API 대부분을 잠가 두기 때문에 문서화된 API로 데스크톱을 추가하거나 재배치할 수 없음
  • GridLion은 네이티브 space 위에 가벼운 래퍼를 두고, macOS의 단일 행 space를 내부 모델에서 그리드처럼 보여주는 방식을 택했음
  • LLM의 도움으로 하루 만에 투박하지만 동작하는 시제품이 만들어졌고, 며칠 사용한 뒤 더 다듬어진 도구가 필요해졌음
  • 약 한 달 뒤 만족할 만한 수준에 도달했고, 앱 이름은 macOS Lion에서 생긴 문제와 그리드를 합쳐 GridLion이 됐음

권한과 배포 장벽

  • 전역 키보드 단축키를 잡고 space를 탐색하려면 macOS의 Accessibility 권한이 필요함
  • macOS 권한 흐름은 iOS처럼 승인 즉시 끝나지 않고, 설정을 열고 사용자가 특정 토글을 찾아 켠 뒤 추가 보안 프롬프트를 승인해야 함
  • space의 작은 미리보기를 만들려면 Screen and System Audio Recording 권한도 필요하며, 보이지 않는 창과 화면의 미리보기 스냅샷 때문에 더 강한 경고 대화상자가 나타남
  • GridLion은 해당 권한 없이도 동작하지만, 미리보기 기능을 쓰려면 권한이 필요함
  • 신뢰를 만들기 위해 앱은 사용자가 요청한 업데이트 확인과 라이선스 키 검증 외에는 네트워크를 건드리지 않도록 해야 했음
  • GridLion은 space 정보를 얻기 위해 비공개 API를 호출하므로 App Store에 올릴 수 없음
  • App Store 밖 판매를 위해 구매, 세금, 환불을 처리하는 Merchant of Record가 필요했고 Paddle, GumRoad, Lemon Squeezy가 후보가 됐음
  • Lemon Squeezy는 License code API를 제공해 구매자에게 라이선스 키를 주고 활성화·비활성화·검증 메서드를 제공함
  • Lemon Squeezy 승인은 실제 가치와 용도가 있는 제품을 판다는 점을 보여줘야 했고, 스크린캐스트와 소셜 미디어 계정 증명이 필요했음
  • 승인 전에도 테스트 계정을 사용할 수 있어 앱과의 통합을 쉽게 설정하고 테스트할 수 있었음

LLM과 남은 한계

  • LLM은 구체적인 API 결과나 대규모 데이터셋 쿼리처럼 목표가 명확한 작업에서는 결과를 보고 반복하기 쉬움
  • 사용자 인터페이스는 많은 부분이 느낌에 달려 있어, 사용자에게 보이는 기능은 사람이 피드백 루프 안에 있어야 함
  • 거의 10년 동안 네이티브 Mac/iOS 작업을 하지 않았던 상황에서는 LLM이 도움이 됐지만, 같은 앱을 예전 방식으로도 비슷한 시간에 만들고 더 많이 배웠을 수 있다는 의문이 남았음
  • GridLion은 space 그리드 탐색과 재배치, 빠르고 안정적인 동작, 디스플레이별 그리드 크기와 단축키 설정을 목표로 갖췄음
  • space를 한 디스플레이에서 다른 디스플레이로 옮기거나 창을 한 space에서 다른 space로 옮기는 작업에는 신뢰할 수 있는 API가 없음
  • GridLion은 Mission Control과 함께 동작하므로 이런 작업은 Mission Control로 처리할 수 있음
  • 특정 앱이 실행될 때 항상 특정 그리드 위치에 나타나게 하는 기능은 원래 macOS Spaces에 있었지만, GridLion에는 아직 남은 과제로 남아 있음
  • 그리드 기반 Spaces는 다음 macOS에서 다시 네이티브 OS 기능으로 돌아오는 편이 가장 바람직함
Read Entire Article