Are AUv3s on macOS Supported?

I’m having a terrible time trying to get a macOS AUv3 to build and be recognised in any host, primarily Logic.

Here’s the steps:

  • Clone juce develop
  • Navigate to examples/Plugins/SamplerPluginDemo.h
  • Add extraPluginFormats: AUv3 at the top, just above END_JUCE_PIP_METADATA
  • Run cmake -G Xcode at the root level
  • Build the SamplerPlugin_AUv3 target
  • Find the built SamplerPlugin.appex and copy it to /Applications
  • Load Logic and check the “Plug-In Manager”
    • Desired: SamplerPlugin by JUCE appears in the list
    • Actual: No SamplerPlugin anywhere

I assume these are the correct steps? Has anyone else successfully built and run a JUCE example plugin as AUv3?

I also tried the AUv3SynthPlugin to no avail.

This isn’t quite right. The appex should be bundled inside a .app, and the outer app needs to be run in order to register the appex. If you’re using JUCE’s CMake support, and you have both the Standalone and AUv3 formats enabled, then building the Standalone target will also build the AUv3 target and move it into the correct location in the standalone .app bundle. After building the standalone, you also need to run it in order to register the AUv3.

Lots of the standard AU debugging stuff still applies. killall -9 AudioComponentRegistrar can be useful to force a rescan of all the plugins. There’s also a button in Logic’s plugin manager to invalidate the AU cache and force a rescan. It can be helpful to change the plugin’s ID code temporarily if you think the plugin should be showing up and all else has failed.

You can use auval -al to list all of the known plugins, and then grep for the plugin you’re currently working on. To distinguish between AUv2 and AUv3 versions, check whether the plugin’s file path ends with .component or .appex. This might be a bit quicker than loading Logic repeatedly.

2 Likes

Ok, this does actually work so thanks!

Doing this seems to be the quickest command:

auval -l | grep "AUv3"            
aumu Oyej Manu  -  JUCE: SamplerPlugin     (file:///Applications/SamplerPlugin.app/Contents/PlugIns/SamplerPlugin.appex/) [AUv3]

However this fails to load (the Standalone does load ok).

auval -v aumu Oyej Manu
--------------------------------------------------
VALIDATING AUDIO UNIT: 'aumu' - 'Oyej' - 'Manu'
--------------------------------------------------
Manufacturer String: JUCE
AudioUnit Name: SamplerPlugin
Component Version: 8.0.0 (0x80000)

* * PASS
--------------------------------------------------
TESTING OPEN TIMES:
COLD:
2024-07-09 19:49:20.409 auvaltool[25196:4984278] Error: Failed to connect to remote view because of Error Domain=NSCocoaErrorDomain Code=4099 "The connection to service created from an endpoint was invalidated from this process." UserInfo={NSDebugDescription=The connection to service created from an endpoint was invalidated from this process.}
FATAL ERROR: OpenAComponent: result: 4099,0x1003

I’m not sure if this is a problem with this plugin or more generally though. I’m going to take a deeper look tomorrow.

Thanks for the pointer!

Update: The ArpeggiatorPlugin seems to work

Thanks, I’m also able to repro this crash. I think it’s because the AUv3 attempts to load a wave file resource that isn’t available at runtime. I think this is only an issue with this example.

I also found an issue in the AUv3 SurroundPlugin demo, which seems to be caused by a mismatch between the JUCE and AUv3 bus counts.

I’ll try to put together some fixes for these issues tomorrow.

1 Like

Ok thanks. As I have this working now there’s no rush from my end. I really just needed an example AUv3 on macOS so I could add support to Tracktion Engine. There are surprisingly few (none that I could find freely) out there.

2 Likes

Is this is the one I’ve tried getting fixed a while ago?

I’ve actually made one AUv3 “instrument” which is also open source and free …
https://tick.talaviram.com/

1 Like

Apple has published some sample projects for AUv3 that run on macOS, for example: Creating Custom Audio Effects | Apple Developer Documentation

Quick tip: To find which app extensions are active on macOS, which includes any installed AUv3 plugins, use:

pluginkit -mv | grep example
2 Likes

Thanks. I’ve downloaded, installed and run it and can see the .appex in the app bundle but for some reason it’s not appearing in auval -l.

Thanks for the tip!

If you don’t need source code, you can find some free AUv3 plug-ins on the Mac App Store. Just search for “auv3”. (This is also why AUv3 needs to be inside an app, so it can be distributed by the App Store.)

1 Like

Thanks, I should have thought of this :man_facepalming:

I’ve added a few fixes for the issues I flagged earlier. With these changes in place, the SamplerPlugin and SurroundPlugin AUv3 should both pass auval.

The issues I found ended up being different to the issue that you reported. In any case, I also pushed an initial fix for your issue. There are more details in that thread.

2 Likes

You could try Wotja:

Best wishes, Pete