Requesting Permission for System Audio Recording Only from VST3/AU

Hey y’all,

For those that don’t know, Mac has recently added the ability to create audio stream taps which lets you record and reroute audio from another process.

I’ve been spending the last week trying to get this implemented in a plugin and I am SOOO close.

The final hurdle I have is getting the permission to record system audio. This permission is very undocumented, no public API, and I think relatively new. This is the description key that goes into the plist for the app trying to use it
NSAudioCaptureUsageDescription

What I’ve come to realize though is that the plugin itself doesn’t need the permissions but rather the host. If I manually grant the permission to say Juce AudioPluginHost, it works. I know permission requesting from the plugin is possible as you can set things like microphone access etc. My worry though is every host has to implement this themselves, and as the permission is relatively new, no hosts support it yet.

But hoping anyone can clarify on how the permission granting from the plugin → host works. And would be nice to know if this is a dead end, in which case I will probably have to launch a separate process and do some IPC stuff

Hi, short answer is a dynamic library cannot have its own entitlements.
This is per process.

The exception is AUv3.

So unfortunately the only possible workaround is having some IPC and have a separate standalone app that your plug-in calls and then pass that data to it…

Yeah just ended up doing this anyway since I couldn’t figure it out. However, I still am interested in knowing for stuff like microphone access, why / how you can set this permission from the projucer and then the host will ask for the permission.

Does the host need to specifically have an implementation to request the permission or something ?

Since JUCE options are per project where you’ll have multiple targets,
permissions (sandbox, hardening, etc) aren’t useful for all targets.

You cannot decide for the host.

So, those permissions on the JUCE project will be valid for:

  • Standalone apps (where you’re the host…)
  • AUv3 (where plug-in by design runs as a process)

simple dynamic lib bundles won’t be using it (although they have the entitlements)