连接特定USB设备时自动打开OS X应用程序

时间:2014-12-11 16:27:41

标签: objective-c macos cocoa usb

我正在编写OS X应用程序,并希望在连接特定USB设备时打开应用程序(特别是 相机)。

根据我的研究,一个解决方案是利用launchd在USB时自动打开应用程序 通过创建具有特定条件的plist文件来连接。我什么时候能够打开应用程序 任何USB设备连接如(iPhone或Pen Drive),但无法找到方法 连接相机时打开应用程序。下面是我用于launchd的plist快照:

<key>LaunchEvents</key>
    <dict>
        <key>com.apple.iokit.matching</key>
        <dict>
            <key>com.apple.device-attach</key>
            <dict>
                <key>bDeviceClass</key>
                <integer>0</integer>
                <key>bDeviceSubClass</key>
                <integer>0</integer>
                <key>bDeviceProtocol</key>
                <integer>0</integer>
                <key>IOProviderClass</key>
                <string>IOUSBDevice</string>
                <key>IOMatchStream</key>
                <true/>
                <key>IOMatchLaunchStream</key>
                <true/>
            </dict>
        </dict>

    </dict>

我的问题是:

  1. 有没有其他方法可以在不使用launchd的情况下自动打开应用程序。一世 看过那些特定USB设备打开的应用程序 iPhone连接时甚至可以像iPhoto和iTunes一样连接 很多自定义应用。
  2. 如果除了launchd之外别无其他方式 是否有可能将launchd修改为仅在相机打开时才打开应用程序 连接到系统。
  3. 提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

分享我的研究和工作解决方案,以便其他人可以根据需要使用。

在我进一步研究之后,似乎OS X ImageCapture将设备映射到com.apple.ImageCapture2 plist文件中的自动打开应用程序路径。

如果您在终端上运行defaults -currentHost read com.apple.ImageCapture2,您将获得类似的列表(如果该应用没有使用自动打开功能,则可能为空):

"00000000-0000-0000-0000-000004A93AAA" =     {
        ICADeviceTypeKey = ICADeviceTypeCamera;
        autolaunchApplicationPath = "";
    };
    HotPlugActionArray =     (
   );
    HotPlugActionPath = "";
    LastHotPlugActionPath = "";

此处HotPlugActionPath是密钥,分配给此密钥的任何应用程序路径将在连接到系统时打开。您还可以使用persistentID字符串(00000000-0000-0000-0000-000004A93AAA)和autolaunchApplicationPath将特定应用程序分配给特定设备。我以编程方式编辑了这个plist文件并在此处指定了我的应用程序路径,它的工作原理和我一样。