Objective c 连接特定USB设备时自动打开OS X应用程序
我正在编写一个OSX应用程序,希望在连接特定USB设备时打开该应用程序(特别是 摄像机) 根据我的研究,一个解决方案是使用launchd在USB连接时自动打开应用程序 通过创建具有特定条件的plist文件进行连接。我可以在 任何USB设备都像iPhone或笔驱动器一样连接,但无法找到唯一的连接方式 连接摄像头后打开应用程序。下面是我用于启动的plist快照: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&
<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
我的问题是:
提前感谢您的帮助。分享我的研究和工作解决方案,以便其他人可以在需要时使用 在我进一步研究之后,似乎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 = "";