macOS Tahoe의 비디오 월페이퍼 역공학

최신 macOS 버전에서 시네마틱 'Aerials'가 도입되면서 데스크톱 경험이 변화했지만, 시스템은 여전히 폐쇄된 정원이다. 사용자는 시스템 월페이퍼 선택기에 자신의 비디오 파일을 네이티브하게 추가할 수 없다. 여기서 Phosphene가 등장한다. 개발자 kageroumado가 만든 오픈소스 프로젝트로, 기본 시스템 프레임워크를 역공학하여 macOS Tahoe에 맞춤형 비디오 월페이퍼를 제공한다.

핵심 도전 과제: WallpaperExtensionKit

Phosphene은 단순히 데스크톱에 비디오를 겹치는 것이 아니라, System Settings → Wallpaper에 있는 네이티브 macOS 월페이퍼 선택기에 직접 통합된다. 이를 위해 개발자는 WallpaperExtensionKit.framework라는 시스템 자체 Aerials를 구동하는 애플의 비공개 프레임워크를 깊이 파고들어야 했다.

이 프레임워크는 비공개이므로 공개 SDK가 없다. Phosphene은 OS와 통신하기 위해 여러 가지 고급 기술을 사용한다:

  • 동적 로딩: 앱은 런타임에 개인 프레임워크를 로드하기 위해 dlopen을 사용한다.
  • 런타임 내러시프션: 앱과 시스템 간의 통신 프로토콜인 XPC 타입이 공개 헤더에 없으므로, Phosphene은 Swift의 Mirror 반사를 사용하여 이러한 타입을 파싱하고 상호작용한다.
  • 메서드 스위즐링: 전환 중에 잠금 화면이 회색으로 변하는 것을 방지하기 위해 개발자는 WallpaperSnapshotXPC 인코더를 스위즐링해야 했다. 시스템은 특정 코더 타입(NSXPCCoder)을 기대하지만, 실제 코더는 서브클래스이므로 이 런타임 수정이 없으면 스냅샷 인코딩에 실패한다.

시스템 아키텍처

Phosphene은 공유 App Group 컨테이너를 통해 통신하는 두 가지 주요 구성 요소로 나뉜다:

1. 메뉴 바 앱 (Phosphene.app)

이것은 관리 계층 역할을 한다. 비디오 라이브러리를 처리하고, 메타데이터를 관리하며, HEVC 최적화를 수행한다. 또한 시스템 리소스를 절약하기 위해 비디오의 저해상도 또는 저프레임 변형을 사전 렌더링할 수 있는 VideoOptimizationService도 포함한다.

2. 월페이퍼 확장 (PhospheneExtension.appex)

이것은 WallpaperAgent의 호스트이다. out-of-process로 실행되어 메인 메뉴 바 앱이 종료되어도 월페이퍼가 계속 재생된다. 이 확장은 AVSampleBufferDisplayLayer를 사용하여 원격 CAContext에 실제 렌더링을 처리한다.

성능 및 배터리 수명을 위한 엔지니어링

비디오 월페이퍼를 구현하는 데 있어 가장 큰 장애물 중 하나는 배터리 및 열 성능에 미치는 영향이다. Phosphene은 노트북 배터리를 소모하거나 열 스로틀링을 일으키지 않도록 정교한 PlaybackPolicy를 구현한다.

전력 인식 재생

PlaybackPolicy는 단일 진실의 원천 역할을 하며, 열 상태, 배터리 수준, AC 전원 상태, 게임 모드, 프레젠테이션 모드와 같은 다양한 입력을 네 가지 상태인 full, reduced, minimal, paused 중 하나로 통합한다.

지능형 폐색 감지

GPU 사이클을 절약하기 위해 Phosphene은 모든 디스플레이가 창으로 완전히 덮여 있는지 감지한다. 데스크톱이 더 이상 보이지 않을 때 렌더러는 완전히 일시停止되고, 데스크톱이 다시 노출될 때까지 유지된다.

갭 없는 루핑

표준 AVPlayerLayer는 원격 CAContext 내에서 자주 실패한다. 이를 해결하기 위해 개발자는 수동 디코드 파이프라인을 구현했다. 현재 루프에 하나의 AVAssetReader와 다음 루프에 미리 로드된 하나를 사용하고, 루프마다 증가하는 PTS(Presentation Time Stamp) 오프셋을 적용함으로써 엔진은 렌더러를 플러시하지 않고도 프레임 정확하고 결함 없는 루핑을 달성한다.

기술 요구 사항 및 제약 조건

Phosphene을 빌드하거나 설치하려는 사람들에게는 최신 macOS API에 의존하기 때문에 요구 사항이 엄격하다:

  • **OS:OS (26.0+), Tahoe: macOS Tahoe (26.0+), Tahoe 전용 SwiftUI 및 glassEffect() API에 의존하기 때문이다.
  • 하드웨어: Apple Silicon (arm64-apple-macos26.0).
  • 도구: Swift 6 엄격한 동시성이 활성화된 Xcode 17+.

결론

Phosphene은 비공개 애플 프레임워크 역공학의 모범 사례를 보여준다. 저자는 원래これを 상용 제품으로 의도했으나, 현재 프로젝트는 오픈소스로 공개되어 macOS가 고급 시각 효과를 처리하는 방식을 엿볼 수 있게 하고, 애플이 네이티브하게 허용하지 않는 수준의 정밀도로 사용자가 데스크톱을 커스터마이징할 수 있는 방법을 제공한다.

Sources