Entitlements for a virtual audio driver including IOUserClient

Dear Sirs,

I’d like to write a virtual audio driver that also exchanges data with a application and thus probably also offers a driver extension using IOUserClient.

My first implementation was based on the sample https://developer.apple.com/documentation/audiodriverkit/creating_an_audio_device_driver and everything works fine and as expected on my development machine and I can install/uninstall the dext from within my application. But I had to learn that I will not be given the required entitlement com.apple.developer.driverkit.family.audio as AudioDriverKit seems to be not intended to be used for virtual drivers.

So I found out that this sample should be used as starting point for virtual audio drivers: https://developer.apple.com/documentation/coreaudio/creating_an_audio_server_driver_plug-in. But this sample does not include a dext offering the IOUserClient interface which I think I need.

The next sample I found was https://developer.apple.com/documentation/coreaudio/building_an_audio_server_plug-in_and_driver_extension . This doesn’t use AudioDriverKit and it includes IOUserClient so it seems to be a good start. Nevertheless it also requires some entitlements which are com.apple.developer.driverkit and com.apple.developer.driverkit.transport.usb. The client also probably needs the entitlement com.apple.developer.driverkit.userclient-access. Would I be given these entitlements for a pure virtual audio driver and why would I need com.apple.developer.driverkit.transport.usb?

And is there a chance that AudioDriverKit will also be opened for virtual drivers as it seems to be a much more modern approach and doesn’t require a reboot for installing?

Thanks and best regards, Johannes

Replies

AudioDriverKit currently does not support virtual audio devices and entitlements will not be granted for those types of audio drivers.

You will need to use AudioServerPlugIn if you want to implement a virtual audio device, which does require a reboot, or at least needs to restart the coreaudiod process.

  • Thanks for the reply, which confirms my findings. So still my questions are open: would I be given the mentioned entitlements for a virtual driver running as a AudioServerPlugIn? And is Apple thinking about opening the AudioDriverKit also for virtual drivers or is there a technical background which impedes this?

Add a Comment

AudioServerPlugIn is not supported on iOS and is not supported in the App Store. You will need to have your app/driver use an installer, and that is the only option if you want to create virtual audio drivers.

Thanks for this answer - I'm still searching for answers to:

  • Why is the entitlement com.apple.developer.driverkit.transport.usb needed for the "Audio Server Plugin with Driver Extension" sample ?
  • Would you be granted all the mentioned entitlements (com.apple.developer.driverkit, com.apple.developer.driverkit.transport.usb and com.apple.developer.driverkit.userclient-access) for a virtual audio driver if it is a "AudioServer Plugin" ?
  • How would you write a virtual audio driver for iOS ?
  • Does Apple think about opening AudioDriverKit also for virtual drivers or are there any technical limitations making this impossible (though it seems to work) ?

Best, Johannes

  • Thats only if the Audio Server PlugIn needs to talk to a driver extension. If you want to make a virtual audio device with the Audio Server PlugIn driver, you do NOT need a driver kit extension.

    You don't need those entitlements since you don't need a driver extension for virtual audio devices.

    Audio Server PlugIn is only support on macOS, not iOS. You cannot create virtual audio devices for iOS.

  • I have an application which talks to the driver through IOUserClient. So I think I will need a dext and that's why I decided to use building_an_audio_server_plug-in_and_driver_extension as starting point. And so I'm quite sure I need com.apple.developer.driverkit and com.apple.developer.driverkit.userclient-access. Will I be granted these entitlements for a virtual driver? But I don't know why I should need com.apple.developer.driverkit.transport.usb which is also used in this sample.

Add a Comment