Zurück zu den Projekten
aktiv v0.2.1

MacPhone

Ein natives macOS-Device-Lab, das ein echtes Bluetooth-LE-Gerät in einen Emulator bridgt.

MacPhone startet und steuert viele Android-Emulatoren und iOS-Simulatoren von einem Mac aus und bridgt ein echtes Bluetooth-LE-Gerät direkt in einen Emulator — es spiegelt den vollständigen GATT-Baum auf den virtuellen Controller des Emulators, sodass On-Device-Apps die echten Services, Characteristics und das Advertisement sehen, ganz ohne Dongle.

MacPhone overview dashboard listing connected Android emulators and iOS simulators
Problem

Das Schwierige beim Testen einer hardwarenahen Mobile-App ist nicht die App — es ist, ein echtes BLE-Gerät vor Code zu bringen, der in einem Emulator läuft.

Was ich gebaut habe

Eine SwiftUI-App, die AVDs und Xcode-Simulatoren verwaltet, sich über CoreBluetooth mit einem physischen BLE-Gerät verbindet, dessen vollständigen GATT-Baum spiegelt und ihn über ein virtuelles Bumble-Peripheral auf dem netsim-Controller des Android-Emulators neu broadcastet — Lese-, Schreib- und Notify-Verkehr wird in beide Richtungen weitergeleitet.

Ergebnis

Die getestete emulierte App sieht die echten Services und den Live-Verkehr des Geräts, und Sessions werden sauber abgebaut, ohne verwaiste Peripherals.

Zielgruppe

Für Mobile-Entwickler, die hardwarenahe Apps testen, ohne mit physischen Geräten und BLE-Dongles zu jonglieren.

Entwickler-Setup

source without GitHub CLI git clone https://github.com/jx-grxf/MacPhone.git && cd MacPhone
source with GitHub CLI gh repo clone jx-grxf/MacPhone && cd MacPhone
latest release open https://github.com/jx-grxf/MacPhone/releases/tag/v0.2.1
download stable macos with GitHub CLI gh release download v0.2.1 -R jx-grxf/MacPhone -p 'MacPhone-0.2.1.dmg'
download stable archive with GitHub CLI gh release download v0.2.1 -R jx-grxf/MacPhone -p 'MacPhone-0.2.1.zip'

Highlights

  • Verwaltet Android-Emulatoren (AVDs) und Xcode-iOS-Simulatoren parallel in einer Oberfläche.
  • Bridgt ein echtes BLE-Gerät über CoreBluetooth in den Emulator und spiegelt den vollständigen GATT-Baum.
  • Leitet Lese-/Schreibzugriffe und Notifications in beide Richtungen weiter — die App unter Test sieht die echte Hardware.
  • Baut Sessions sauber ab: trennt abgestandene Clients und räumt das Bridge mit dem Elternprozess auf.