Skip to content

Controlla turns your iPhone or iPad into a wireless keyboard and mouse for your Mac or Windows PC over WiFi. Control your computer from anywhere in the room with smooth joystick navigation, text input, and mouse clicks.

License

Notifications You must be signed in to change notification settings

okekedev/controlla

Repository files navigation

Controlla - Wireless Keyboard + Mouse Controller

Controlla turns your iPhone or iPad into a wireless keyboard and mouse for your Mac or Windows PC over WiFi. Control your computer from anywhere in the room with smooth joystick navigation, text input, and mouse clicks.

🌐 View Promo Page | App Store

Screenshots

Controller View Device Selection Connected

Features

  • Virtual Joystick Mouse Control - Smooth, game-controller-like cursor movement
  • Text Input - Type on your Mac from your iPhone/iPad
  • Mouse Clicks - Left and right click buttons
  • Keyboard Actions - Quick access to Enter, Backspace, and Space
  • Auto-Discovery - Finds your Mac automatically via Bonjour
  • Persistent Connection - Low-latency TCP connection for real-time control
  • Cross-Platform - Universal app for iPhone, iPad, and Mac

Monetization (Freemium)

  • Free: Virtual joystick + Mouse clicks (L/R buttons) - Full mouse control
  • Pro ($0.99/month): Text input + Keyboard actions (Enter, Backspace, Space)
  • 7-day free trial of Pro features
  • Family Sharing supported

Platform Support

  • Controller: iPhone, iPad, Mac
  • Receiver: Mac, Windows

Requirements

iOS/macOS App

  • iOS 15.0+ or macOS 12.0+
  • Xcode 16.4
  • WiFi network (devices must be on same network)

Windows App

  • Windows 10/11
  • .NET 8.0 SDK (for building from source)
  • WiFi network (devices must be on same network)

Architecture

WiFi Protocol

  • Service Discovery: Bonjour (_controlla._tcp)
  • Communication: HTTP over persistent TCP connection
  • Port: Auto-assigned by OS
  • Endpoints: /keyboard/text, /keyboard/key, /mouse/move, /mouse/click

Key Components

  • NetworkManager.swift - Handles Bonjour discovery, TCP connections, and command sending
  • InputSimulator.swift - Simulates keyboard/mouse input on Mac using CoreGraphics
  • ContentView.swift - SwiftUI UI with Controller and Receiver modes
  • HIDKeycodeMapper.swift - Character to HID keycode conversion

Joystick Features

  • x^4.5 acceleration curve for extended low-speed precision
  • 0.6-43 pixels per update (25ms intervals)
  • Sub-pixel accumulation for smooth movement
  • Send throttling to prevent queue buildup
  • Velocity smoothing (35%) for consistent feel

Project Structure

controlla/
β”œβ”€β”€ AirType/                  # iOS/macOS app source code
β”‚   β”œβ”€β”€ ContentView.swift    # SwiftUI UI with tabs and joystick
β”‚   β”œβ”€β”€ NetworkManager.swift # WiFi networking and Bonjour
β”‚   β”œβ”€β”€ InputSimulator.swift # Mac input simulation
β”‚   └── PaywallView.swift    # Subscription paywall
β”‚
β”œβ”€β”€ AirControllaWindows/      # Windows receiver app
β”‚   └── AirControllaWindows/
β”‚       β”œβ”€β”€ NetworkManager.cs      # TCP listener and mDNS
β”‚       β”œβ”€β”€ InputSimulator.cs      # Windows input simulation
β”‚       β”œβ”€β”€ MainWindow.xaml        # WPF UI
β”‚       └── AirControllaWindows.csproj
β”‚
β”œβ”€β”€ deployment/               # App Store deployment automation
β”‚   β”œβ”€β”€ api.py               # App Store Connect API client
β”‚   β”œβ”€β”€ metadata.py          # Metadata upload
β”‚   β”œβ”€β”€ screenshots.py       # Screenshot upload
β”‚   β”œβ”€β”€ metadata/            # App Store text content
β”‚   β”œβ”€β”€ screenshots/         # iOS and macOS screenshots
β”‚   └── AuthKey_*.p8         # API key (gitignored)
β”‚
β”œβ”€β”€ scripts/                  # Build and deployment scripts
β”‚   β”œβ”€β”€ archive_and_upload.sh         # iOS build
β”‚   β”œβ”€β”€ archive_and_upload_macos.sh   # macOS build
β”‚   β”œβ”€β”€ deploy.py                     # Metadata/screenshot automation
β”‚   └── upload_macos_screenshots.py   # macOS screenshot upload
β”‚
β”œβ”€β”€ docs/                     # GitHub Pages website
β”‚   β”œβ”€β”€ index.html           # Landing page
β”‚   β”œβ”€β”€ privacy.html         # Privacy Policy
β”‚   └── terms.html           # Terms of Use
β”‚
β”œβ”€β”€ DEPLOYMENT.md             # Complete deployment guide
β”œβ”€β”€ NEXT_STEPS.md             # Submission checklist
└── README.md                 # This file

Getting Started

Mac (Receiver)

  1. Build and run on Mac
  2. Switch to "App Mode" tab
  3. Select "Receiver" mode
  4. Grant Accessibility permissions when prompted
  5. App will show "Ready - [Your Mac Name]"

Windows (Receiver)

  1. Download AirControlla.exe from Releases
  2. Run the executable (Windows will prompt for firewall access - allow it)
  3. The app will show "Receiver Mode" and wait for connection
  4. Both devices must be on the same WiFi network

Building from source:

cd AirControllaWindows/AirControllaWindows
dotnet restore
dotnet build
dotnet run

Creating distributable .exe:

dotnet publish -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true
# Output: bin/Release/net8.0-windows/win-x64/publish/AirControlla.exe

iPhone/iPad (Controller)

  1. Build and run on iPhone/iPad
  2. Ensure you're on the same WiFi as your Mac/PC
  3. Go to "Devices" tab
  4. Select your computer from the discovered devices list
  5. Use the joystick, text input, and buttons to control your computer

Technical Details

Permissions

macOS: Accessibility permissions required for input simulation (prompted on first launch)

Windows: Firewall access required for network communication (prompted on first launch). For full input simulation, run as Administrator.

Network Security

  • Only works on same WiFi network
  • No internet connection required
  • No data leaves local network
  • Bonjour service automatically secured by WiFi encryption

Input Simulation

  • Keyboard: CGEvent API with HID keycode mapping
  • Mouse Movement: Relative delta positioning
  • Mouse Clicks: CGEvent mouse button simulation
  • Coordinate System: Top-left origin (standard macOS screen coordinates)

App Store Deployment

Automated deployment system using App Store Connect API:

# Build iOS and macOS
./scripts/archive_and_upload.sh
./scripts/archive_and_upload_macos.sh

# Upload screenshots and metadata
python3 scripts/deploy.py --screenshots
python3 scripts/upload_macos_screenshots.py

See DEPLOYMENT.md for complete guide and NEXT_STEPS.md for submission checklist.

GitHub Pages Setup

The docs/ folder contains the website hosted at https://okekedev.github.io/controlla/

To enable:

  1. Push to GitHub
  2. Go to Settings β†’ Pages
  3. Source: Deploy from branch main / folder /docs
  4. URLs:

These URLs are required for App Store submission.

License

Source Available - Commercial Software

This source code is publicly available for transparency and educational purposes. See LICENSE for details.

TL;DR:

  • βœ… View, study, and learn from the code
  • βœ… Report bugs and contribute improvements
  • βœ… Use for educational purposes
  • ❌ Commercial use or redistribution
  • ❌ Publishing competing apps
  • ❌ Using the "Controlla" trademark

For commercial licensing inquiries, contact: https://sundai.us

Support

Built with Swift 6, SwiftUI, Network framework, and CoreGraphics.


Optimized for iOS 15+ / macOS 12+ and Xcode 16.4

About

Controlla turns your iPhone or iPad into a wireless keyboard and mouse for your Mac or Windows PC over WiFi. Control your computer from anywhere in the room with smooth joystick navigation, text input, and mouse clicks.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •