Mohammad Khalid
(01)Case study← All work

Continuity for a Mac and an Android phone. A menu-bar app and a 98 KB phone app share the clipboard, one-time codes, notifications, files, photos, mirroring and Find My Phone over your own Wi-Fi, end-to-end encrypted, with no account and no cloud.

Index
01 / 10
Stack
Swift · Java · Android SDK
Live
github.com/iamkhalid2/macindroid ↗
Fig. 01 · SpectrumOne emission line per tool, each at a fixed wavelength, so projects built with the same tool light the same line.

Overview

Apple makes a Mac and an iPhone feel like one device. Macindroid does that for a Mac and an Android phone, as far as the two systems allow. Set it up once by clicking and scanning (no Terminal, no cable, no account) and it disappears into the menu bar, finds the phone with Bonjour and reconnects within seconds, even with the phone's screen off.

Key Features

  • Universal clipboard: text and images both ways in about a quarter of a second; copies a password manager marks as concealed are never sent
  • One-time codes: a sign-in code from a text or an app notification is on the Mac's clipboard within about a second, hidden from clipboard managers and cleared after two minutes
  • Notifications on the Mac: with Reply and the app's own buttons, cleared on both sides together
  • Files, links and photos: drop files on the menu-bar icon or Share from the phone, send the open browser tab to the phone, and new photos and screenshots drop down from the menu bar ready to drag
  • Mirroring and Find My Phone: the phone in a Mac window with sound through bundled scrcpy, and a ring that sounds even on silent
  • Self-updating: the Mac checks the signed GitHub release; the phone app updates from the Mac over the encrypted link, never from the internet

Technical Details

A native AppKit menu-bar app in Swift (Network, CryptoKit) and an Android app in plain Java built with the bare SDK tools: no Xcode project, no Gradle and no third-party libraries. Pairing agrees a key with X25519 and shows a six-digit code on both screens so a device in the middle would be caught; everything after is AES-256-GCM with HKDF-SHA256 keys. Android 15 hides codes from notification readers, so the app links itself to the Mac as a companion device in Android's own pairing dialog. The code finder is tested against 117 messages in about 30 languages on desktop Java and on Android's runtime. Idle, the Mac app uses 0.0% CPU and 35 MB of memory. MIT licensed, released as a disk image and APK with checksums from one release.sh --publish.

→ Next project02 / 10

Kepler