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.
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, 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.
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.
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.)
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.