This tool was born from a practical need: creating a reliable presentation clicker for friends and professors that was trivial to distribute.
Unlike Python-based alternatives, this native Swift application requires no runtime environment or dependencies. I focused heavily on Zero-Configuration UX—specifically solving the "Dynamic IP" problem. Since most users don't have static IPs, the app handles network discovery automatically, making it accessible even to non-technical users.
- Native Menu Bar Integration: Lives quietly in your status bar for quick access.
- Zero-Config Connection: Automatically detects your local IP and generates a dynamic QR code.
- Cross-Platform Remote: Control your presentation from any iOS, Android, or Windows Mobile device through a standard browser.
- HID Simulation: Leverages macOS Accessibility APIs to simulate physical arrow key presses.
- Low Latency: Optimized for instant response times over local Wi-Fi.
For recruiters and developers, this project showcases:
- Embedded HTTP Server: Built using Apple's
Networkframework (NWListener). It handles incoming POST requests to trigger slide changes via a lightweight protocol. - Dynamic Network Discovery (Key Feature): Most home and university networks use dynamic IPs. I implemented a robust UDP-based discovery logic that identifies the active interface's IP in real-time, ensuring the generated QR code works instantly on any network.
- CoreGraphics HID Simulation: Leverages
Quartzevents to simulate physical arrow key presses at the system level. - macOS Security Model: While Accessibility permissions are a one-time mandatory step in macOS's security model, the app gracefully checks
AXIsProcessTrusted()to provide a clear setup flow for the user.
PPTRemote/
├── PPTRemoteApp.swift # App entry point & Lifecycle management
├── MenuBarView.swift # SwiftUI-based Menu Bar UI & QR Generation
├── HTTPServer.swift # Custom NWListener implementation (No dependencies)
├── KeySender.swift # Quartz event simulation logic
└── index.html # Mobile-optimized remote interface
- Launch: Open
PPTRemote.appfrom the build folder. - Permissions: On first run, enable Accessibility permissions in
System Settings > Privacy & Security(required to simulate key presses). - Connect: Click the menu bar icon and scan the QR code with your phone.
- Present: Tap "Next" or "Prev" on your phone to control your slides.
The current version focuses on simplicity, but the architecture allows for easy expansion:
- Custom Macros: Support for custom key combinations (e.g., volume control, window switching).
- Presentation Timer: Display a countdown timer on the mobile interface.
- Multiple App Support: Tailored layouts for Keynote, PDF viewers, and web-based slide decks.
Developed with ❤️ by Flavio De Musso
