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

Objective c 连接特定USB设备时自动打开OS X应用程序,objective-c,macos,cocoa,usb,Objective C,Macos,Cocoa,Usb,我正在编写一个OSX应用程序,希望在连接特定USB设备时打开该应用程序(特别是 摄像机) 根据我的研究,一个解决方案是使用launchd在USB连接时自动打开应用程序 通过创建具有特定条件的plist文件进行连接。我可以在 任何USB设备都像iPhone或笔驱动器一样连接,但无法找到唯一的连接方式 连接摄像头后打开应用程序。下面是我用于启动的plist快照: <key>LaunchEvents</key> <dict> <key&

我正在编写一个OSX应用程序,希望在连接特定USB设备时打开该应用程序(特别是 摄像机)

根据我的研究,一个解决方案是使用launchd在USB连接时自动打开应用程序 通过创建具有特定条件的plist文件进行连接。我可以在 任何USB设备都像iPhone或笔驱动器一样连接,但无法找到唯一的连接方式 连接摄像头后打开应用程序。下面是我用于启动的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>
LaunchEvents
com.apple.iokit.matching
com.apple.device-attach
电子课堂
0
b设备子类
0
蛭霉素
0
IOProviderClass
电子设备
IOMatchStream
IOMatchLaunchStream
我的问题是:

  • 是否有其他方法可以在不使用launchd的情况下自动打开应用程序。我 已经看到了当特定USB设备启动时打开的应用程序 当iPhone连接时,就像iPhoto和iTunes一样连接,甚至 许多自定义应用程序
  • 如果除了发射没有别的办法那么 是否可以将启动的应用程序修改为仅在相机启动时打开 已连接到系统

  • 提前感谢您的帮助。

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

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

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


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

    我不知道launchd的工作方式,但我觉得如果你能让它工作的话,它是最好的方式。自动启动应用程序的另一种方法是创建“登录项”。这是一个迷你应用程序,当用户登录(比如Dropbox)并安静地照看一些东西时,它会在后台运行。(比如上传文件)。这样做的缺点是,用户可以关闭它们,然后你就会失去你的功能。我相信这是由ImageCaptureCore处理的。从未使用过它。@PierreBernard,ImageCaptureCore的ICCameraDevice确实有一个类似于
    autolaunchApplicationPath
    的属性,但我不确定如何使用它,因为它是特定于ICCameraDevice的,并且它的实例只有在应用程序运行时才可用,我希望它始终工作@RASS在后台安装一个迷你应用程序也是一个好主意,但我认为在这里我可以使用混合方法,比如,在任何USB连接时启动该迷你应用程序,然后该迷你应用程序可以检查连接的设备是否是我感兴趣的设备,然后打开主应用程序。
    "00000000-0000-0000-0000-000004A93AAA" =     {
            ICADeviceTypeKey = ICADeviceTypeCamera;
            autolaunchApplicationPath = "";
        };
        HotPlugActionArray =     (
       );
        HotPlugActionPath = "";
        LastHotPlugActionPath = "";