Ausführen einer Anwendung, die auf Mac OS X, wenn eine bestimmte Art von USB-Gerät angeschlossen ist?
Brauche ich zum implementieren einer Mac-OS-X-Anwendung. In meiner Anwendung muss ich zwei Dinge tun:
- Ausführen /Öffnen einer Anwendung bei einer bestimmten Art von USB-Gerät an das system angeschlossen ist.
- Die Daten Lesen von USB und laden Sie Sie auf einen web-server.
Ich habe nicht viel Erfahrung in der Mac-OS-X-Entwicklung. Kann bitte jemand vorschlagen, der die besten Dokumente, um meine Ziele zu erreichen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es hängt wirklich davon ab, welche Art von Anwendung, die Sie suchen.
Sieht es aus, wie es keine Möglichkeit gibt, es zu tun in einer ähnlichen Weise zu
udev zum Beispiel.
Kontrovers Lösungen wäre:
Und in der Tat könnte man ein Programm schreiben, mit libusb die Handhabung dieser Art von Aufgaben nach einer bestimmten config Datei
das wäre auch cross-Plattform seit libusb unterstützt etliche Plattformen.
Können Sie launchd. Versucht man launchd und man launchd.plist.
Scheint es, dass launchd kann die Arbeit mit USB-Veranstaltungen, auch wenn diese Funktion schlecht dokumentiert ist.
Ich fand es auf: Mann xpc_set_event_stream_handler
Hier ist ein Beispiel. Wenn Sie den folgenden in:
~/Library/LaunchAgents/com.example.plist
, das Programm sollte starten, wenn ein USB-Gerät angeschlossen ist.launchd
statt einer Xcode app (zB./path/to/program
ist ein shell-Skript). Das shell-Skript wieder gestartet wird alle 10 Sekunden und ich kann nicht finden, eine Kommandozeile alternative formxpc_set_event_stream_handler()
oder jeder Weg, um entfernen Sie die Falle aus dem stream.Abhängig von der Art des Geräts, das Sie möglicherweise in der Lage, eine Anwendung zu öffnen, die automatisch über die iPhoto - /Bild-Capture-Einstellungen. Dass funktioniert nur für eine beschränkte Klasse von Geräten, für die eine Anwendung auf dem computer bereits vorhanden und erfordert das ändern der Einstellungen auf dem computer manuell.
Im Allgemeinen, es gibt keine Möglichkeit, automatisch ausführen beliebiger Anwendungen auf CD/DVD/USB einlegen, weil es ein Sicherheits-problem.
Julien Pilet Antwort für mich gearbeitet. Jedoch, um es zu bekommen, um nicht ständig die app neu starten, wenn das Gerät noch angeschlossen ist, die beim schließen der app, musste ich:
xpc_set_event_stream_handler()
in meiner app delegierenapplicationDidFinishLaunching
:IOMatchLaunchStream/true
Schlüssel/Wert-paar dercom.apple.device-attach
dict in der plist. Dies ist zusätzlich zu denIOMatchStream
key schon da. Nicht sicher, warum, dass hat dort zu sein, fand ich einen Verweis auf diese hier: http://asciiwwdc.com/2013/sessions/702Vergessen Sie auch nicht, sich zu registrieren die plist mit dem system mit
Beachten Sie, dass dies scheint zu funktionieren, aber ich bekomme nie die NSLog-Nachricht aus der xpc-stream handler.
Können Sie die Ordner-Aktionen zum ausführen eines Befehls auf dem Berg. Dies würde davon ausgehen, dass das Gerät immer die Halterungen an der gleichen Stelle, also /Volumes/My\ Geräte - /- wenn-Peripheriegeräte, Hinzugefügt oder entfernt wurden zwischen mounts, mount-Punkt ändern kann. Erfahren Sie mehr über die Ordner-Aktionen durch Rechtsklick auf ein Verzeichnis und klicken Sie auf "Ordner-Aktionen-Setup". Der trick wäre, um sicherzustellen, dass das Gerät immer die Halterungen an der gleichen Stelle.
Alternativ können Sie in der Lage sein zu verwenden launchd zum ausführen eines Befehls auf dem Berg. Dieser link kann helfen. Preiselbeere ist eine großartige app zum Bearbeiten von Dämonen.
Entweder Weg, Sie könnte verwenden Sie den Ordner-Aktion oder Dämon zu rufen, ein einfaches Skript zu packen, den Inhalt des Geräts und laden Sie Sie auf, wo immer Sie bitte.