To benefit others and my future self, I thought I'd list some of the others issues I had to deal with when trying to bring AUv3 to Mac using Catalyst. Most of the issues I had to address was due to auval not liking something and hence Logic Pro using that as a reason not to list my plug-ins. Here we go:
It's better to explicitly report supported channel configurations. If you support things like side chain etc. Just override - (NSArray<NSNumber *> *)channelCapabilities in your AU subclass.
fullState requires you to report to provide values for "type", "subtype" and "manufacturer" in the dictionary. I have a custom implementation of fullState and wasn't setting these values.
Last thing that drove me nuts was that, during auval runs, my AU extension would crash but the auval would report as this:
Checking parameter setting
Using AudioUnitSetParameter
Using AudioUnitScheduleParameter
ERROR: -66745 IN CALL AudioUnitRender
Turns out auval seems to be sending parameter address that's garbage value Not sure if it's intentional or not. But it does it 8 times.
Initially, I thought there was a bug in my code. But the same thing happens in the Apple's sample code I mentioned in the original post. You can reproduce this yourself, just paste this code inside the internalRenderBlock method and watch the debugs in Mac's Console app:
#import <os/log.h>
///...
auto event = realtimeEventListHead;
while (event != NULL) {
if (event->head.eventType == AURenderEventParameter || event->head.eventType == AURenderEventParameterRamp) {
os_log_error(OS_LOG_DEFAULT, "AUv3DEMO ParameterAddress: %llu", event->parameter.parameterAddress);
}
event = event->head.next;
}
I used this command: auval -v aufx fltr Demo
In addition to printing out 3 valid parameter addresses, it prints out 2798869411, 10 times. I've now added a check to my code to ensure param address is a valid value.
I've also mentioned this issue on Apple's mailing list: https://lists.apple.com/archives/coreaudio-api/2021/Jun/msg00017.html