Я слушаю NSWorkspaceDidMountNotification и NSWorkspaceDidUnmountNotification для подключения устройства USB и уведомлений о размонтировании.
Это не то, для чего эти уведомления. Это том для монтирования и размонтирования уведомлений, и том может быть получен с устройства, не являющегося USB-устройством. Образы дисков, устройства FireWire, оптические диски и карты флэш-памяти - это все устройства, которые не являются устройствами USB. (Карта может быть в устройстве чтения карт USB, но карта не является устройством чтения.)
Я думаю, что путь вперед - это IOKit.
Правильно.
Но у меня такое ощущение, что это для программирования низкого уровня.
Correct.
Есть ли другой способ найти их?
Вы не можете полностью отключить I / O Kit, но есть ярлык, который может спасти вам некоторую работу. Это структура дискового арбитража.
Зарегистрируйте дисковый обратный вызов и Дисковый обратный вызов . Каждая функция обратного вызова, которую вы реализуете, принимает DADiskRef
. Вы можете передать это в функцию DADiskCopyIOMedia
, чтобы получить сервисный порт для медиа-объекта I / O Kit для диска.
Я понятия не имею, что делать дальше, за исключением того, что вам потребуется освободить служебный порт, как описано в этой документации. Кроме того, вам все равно придется отфильтровывать устройства, отличные от USB, но, по крайней мере, у вас будет объект мультимедиа I / O Kit для этого.
Еще одна вещь: это решение и используемые в настоящее время уведомления NSWorkspace, вероятно, не будут работать, если iPod не настроен на использование или не поддерживает режим диска. iPhone и iPod touch являются наиболее актуальным примером. Если это так, то вам просто придется использовать I / O Kit от начала до конца - ни DiskArb, ни NSWorkspace не сделают эту работу за вас.