How oscarcreatess/airpointer works
AirPointer is a macOS app that turns a paired AirPods case into a cursor and tap/gesture controller. The user enables Accessibility, connects and orients the case, calibrates the screen, teaches taps, then toggles a live session with a global shortcut. The graph captures documented setup, pointing, gesture, audio, and helper-program responsibilities. Edges follow shown app/session calls or README-described runtime links; unsampled subsystem relationships are omitted where ownership is unclear.
Main entry points: ClosedCaseSession.swift Closed-case session · AppHome.swift Session orchestration · AirPointer.swift App lifecycle · SetupAssistant.swift Setup assistant
Components 26
App control
- App lifecycle
Sources/AirPointer/App/AirPointer.swift - Global shortcut
Sources/AirPointer/App/PointerShortcut.swift - Session orchestration
Sources/AirPointer/App/AppHome.swift
Setup and interface
- Setup assistant
Sources/AirPointer/Interface/SetupAssistant.swift - Accessibility guide
Sources/AirPointer/Interface/AccessibilityGuide.swift - Home and settings
Sources/AirPointer/Interface/AirPointerHome.swift - Menu bar UI
Sources/AirPointer/Interface/StatusBarUI.swift - Notch flow
Sources/AirPointer/Interface/NotchFlow.swift - Case lessons
Sources/AirPointer/Interface/CaseLessons.swift - Tap teaching
Sources/AirPointer/Interface/TapTest.swift
Pointer session
- Closed-case session
Sources/AirPointer/Session/ClosedCaseSession.swift - AirPods discovery
Sources/AirPointer/Session/ClosedCaseAirPods.swift - Motion mapping
Sources/AirPointer/Session/Orientation.js - Tap recognition
Sources/AirPointer/Session/ClosedCaseTap.swift - Headphone tap input
Sources/AirPointer/Session/HeadphoneTapInput.swift - Drag lock
Sources/AirPointer/Session/DragLock.swift - Twist scrolling
Sources/AirPointer/Session/TwistScroll.swift - Slide control
Sources/AirPointer/Session/SlideControl.swift - Cursor sizing
Sources/AirPointer/Session/CursorSize.swift - Audio protection
Sources/AirPointer/Session/AudioOutputGuard.swift
Bluetooth helpers
- Bluetooth restore
Sources/ClosedCaseRestore/ClosedCaseRestore.swift - Motion helper
Sources/ClosedCaseMotion
Other components
- Mac user
- macOS
- AirPods case
- Cursor and clicks
Connections 33
- Mac user → App lifecycle: launches
README.md - Mac user → Setup assistant: completes setup
README.md - Setup assistant → Accessibility guide: requests permission
Sources/AirPointer/Interface/SetupAssistant.swift - Mac user → Global shortcut: presses
README.md - App lifecycle → Session orchestration: starts
Sources/AirPointer/App/AirPointer.swift - Session orchestration → Closed-case session: creates session
Sources/AirPointer/App/AppHome.swift - App lifecycle → Home and settings: shows
Sources/AirPointer/App/AirPointer.swift - App lifecycle → Setup assistant: shows
Sources/AirPointer/App/AirPointer.swift - App lifecycle → Notch flow: installs
Sources/AirPointer/App/AirPointer.swift - Global shortcut → Session orchestration: toggles session
Sources/AirPointer/App/AppHome.swift - Session orchestration → Menu bar UI: updates state
Sources/AirPointer/App/AppHome.swift - Session orchestration → Home and settings: updates state
Sources/AirPointer/App/AppHome.swift - Session orchestration → Setup assistant: updates state
Sources/AirPointer/App/AppHome.swift - Session orchestration → Tap teaching: opens
- Closed-case session → AirPods discovery: selects device
Sources/AirPointer/Session/ClosedCaseSession.swift - Closed-case session → Bluetooth restore: runs helper
Sources/AirPointer/Session/ClosedCaseSession.swift - Closed-case session → Motion helper: starts sensors
README.md - Motion helper → Closed-case session: streams motion
README.md - Closed-case session → Motion helper: sends heartbeat
README.md - Closed-case session → Motion mapping: maps motion
README.md - Closed-case session → Tap recognition: recognizes taps
Sources/AirPointer/Session/ClosedCaseSession.swift - Tap recognition → Headphone tap input: reads input
Sources/AirPointer/Session/ClosedCaseTap.swift - Closed-case session → Drag lock: handles gestures
Sources/AirPointer/Session/ClosedCaseSession.swift - Closed-case session → Twist scrolling: handles rotation
- Closed-case session → Slide control: dispatches slides
Sources/AirPointer/Session/ClosedCaseSession.swift - Closed-case session → Cursor sizing: resizes cursor
Sources/AirPointer/Session/ClosedCaseSession.swift - Closed-case session → Audio protection: protects audio
Sources/AirPointer/Session/ClosedCaseSession.swift - Motion mapping → Cursor and clicks: provides position
README.md - Tap recognition → Cursor and clicks: posts clicks
README.md - Cursor and clicks → macOS: controls cursor
README.md - AirPods case → Motion helper: supplies motion
README.md - AirPods case → Headphone tap input: supplies taps
- Case lessons → Session orchestration: supports guidance