2026-06-07 00:39:16 +02:00
2026-06-07 00:35:25 +02:00
2026-06-07 00:35:25 +02:00
2026-06-07 00:35:25 +02:00
2026-06-07 00:35:13 +02:00
2026-06-07 00:35:25 +02:00
2026-06-07 00:35:25 +02:00
2026-06-07 00:35:25 +02:00
2026-06-07 00:39:16 +02:00
2026-06-07 00:35:25 +02:00

OmniMTP

Ein schneller (34× schneller als direkter microSD-Zugriff), nativer macOS-MTP-Client für die Nintendo Switch.
Übertrage NSP-, XCI- und NRO-Dateien per USB-C, ohne die microSD-Karte auszubauen.

macOS License C++20 Universal


OmniMTP Screenshot

Herkunft: OmniMTP ist eine Weiterentwicklung von heziMTP, dem ursprünglichen Projekt-Repository.

Funktionen

  • Direkter USB-C-Transfer — kommuniziert mit DBI oder Sphaira im MTP-Modus über USB, ohne SD-Kartenwechsel
  • Schnell — USB-3.0-Unterstützung mit adaptiver Chunk-Größe; realistisch 60150+ MB/s, abhängig von Switch und Kabel
  • Zwei-Panel-Dateibrowser — Mac-Dateisystem links, Switch rechts; Dateien per Drag & Drop zwischen beiden Seiten verschieben
  • Mehrfachübertragung — mehrere Dateien mit Cmd+Klick oder Shift+Klick auswählen und gemeinsam ziehen
  • Große Dateien — Dateien >4 GB werden korrekt unterstützt
  • Automatische Geräteerkennung — einstecken und loslegen, kein manuelles Scannen nötig
  • Modernes macOS-UI — natives Dark Mode, SF Pro, macOS-12+-Fensterdesign
  • Keine Abhängigkeiten — libusb ist statisch eingebunden; nichts extra installieren

Voraussetzungen

  • Mac: macOS 12 Monterey oder neuer (Universal Binary — Apple Silicon + Intel)
  • Switch: Custom Firmware mit DBI oder Sphaira
  • Kabel: ein Kabel mit Datenübertragung (kein reines Ladekabel)

Erste Schritte

1. Switch vorbereiten

In DBI: Tools → MTP Responder

In Sphaira: Tools → MTP

USB-C-Kabel anschließen und den Bildschirm offen lassen

2. Aus dem Quellcode bauen

git clone https://github.com/helzeiah/OmniMTP.git
cd OmniMTP
./build.sh          # Release-Build
./build.sh run      # bauen + starten

Oder manuell:

cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(sysctl -n hw.logicalcpu)
open build/OmniMTP.app

Build-Abhängigkeiten (werden von CMake automatisch geladen):

  • libusb 1.0.27
  • keine weiteren externen Abhängigkeiten

3. Dateien übertragen

  • Links den Mac durchsuchen, rechts die Switch
  • Ziehen: links → rechts = hochladen, rechts → links = herunterladen
  • Doppelklick auf eine lokale Datei lädt sie bei aktiver Verbindung direkt hoch
  • Rechtsklick für Kontextmenü (Auf Switch hochladen / Auf Mac laden / Löschen)
  • Add Files öffnet einen nativen Datei-Dialog für Mehrfach-Uploads

Wie schnell ist es?

Verbindung Typische Geschwindigkeit
USB 2.0 2545 MB/s
USB 3.0 (Switch OLED / direktes USB-C 3.x) 60150+ MB/s

Die Geschwindigkeit hängt von der microSD-Schreibgeschwindigkeit (Uploads) und der USB-Verbindung ab. Eine schnelle UHS-I-Karte plus USB-3.0-Kabel bringt das meiste raus.

Hinweis zur Installation (macOS Gatekeeper)

Da OmniMTP nicht mit einem Apple-Developer-Zertifikat notarisiert ist, zeigt macOS beim ersten Start eine Warnung „Unbekannter Entwickler“. Das ist bei Open-Source-Apps außerhalb des App Store normal.

So öffnest du die App:

Option A — Rechtsklick (am einfachsten)
Rechtsklick (oder Control-Klick) auf OmniMTP.appÖffnen → im Dialog erneut Öffnen. Das musst du nur einmal machen.

Option B — Terminal

xattr -r -d com.apple.quarantine /Applications/OmniMTP.app
# oder wo auch immer du die App abgelegt hast:
xattr -r -d com.apple.quarantine ~/Downloads/OmniMTP.app

Option C — Systemeinstellungen
Systemeinstellungen → Datenschutz & Sicherheit → Bereich Sicherheit → Trotzdem öffnen.


Fehlerbehebung

Die App erkennt meine Switch nicht

  • Prüfe, ob DBI oder Sphaira im MTP-Modus läuft (nicht nur im Home-Menü)
  • Probiere ein anderes USB-C-Kabel — viele Ladekabel haben keine Datenleitungen
  • Klicke in der App auf Scan

Fehler „Operation not supported“

  • DBI/Sphaira auf eine aktuelle Version aktualisieren
  • Sphaira: sicherstellen, dass du im Menü MTP Install bist

Geplante Erweiterungen

  • Breitere MTP-Geräteunterstützung — die MTP/USB-Schicht ist geräteunabhängig. Android-Handys, Kameras und andere MTP-Geräte sollten mit kleinen Anpassungen an Erkennung und Protokoll funktionieren
  • Ordner-Upload (rekursiv)
  • Unterbrochene Übertragungen fortsetzen
  • Warteschlange umsortieren
  • Dateien auf dem Gerät umbenennen

Bauen

./build.sh           # Release (Standard)
./build.sh debug     # Debug-Build
./build.sh run       # Release + starten
./build.sh clean     # Build-Verzeichnisse löschen

Das Build-System lädt libusb aus dem Quellcode und kompiliert es statisch — kein Homebrew oder Systempakete nötig.

Architektur

src/
├── main.mm               Einstiegspunkt (NSApp + WKWebView)
├── ui/
│   ├── App.hpp/.mm       Backend: Geräteüberwachung, lokale/remote Dateien, Transfers
│   ├── WebUI.hpp/.mm     Bridge: WKWebView-Setup + JS↔C++ Message Handler
│   └── webroot/          Frontend: HTML/CSS/JS (ohne Build-Schritt, ohne Frameworks)
├── mtp/
│   ├── MTPProtocol.hpp   MTP-Konstanten, Container-Format, Datenstrukturen
│   ├── MTPSession.*      USB/libusb-Transport, Chunked Transfers
│   └── MTPOperations.*   High-Level-MTP-Operationen (GetObject, SendObject, …)
└── transfer/
    └── TransferEngine.*  Hintergrund-Warteschlange mit Fortschrittsanzeige

Die UI ist eine WKWebView-basierte HTML/CSS/JS-App, die über native Message Passing mit einem C++20-MTP-Backend spricht. Kein Electron, kein Node, keine externe Runtime — nur AppKit + WebKit + libusb.

Lizenz

MIT — siehe LICENSE.

Description
No description provided
Readme MIT 828 KiB
Languages
C++ 40.1%
Objective-C++ 26.9%
JavaScript 16%
CSS 8.9%
CMake 3.3%
Other 4.8%