AU validation errors

You'r right. I'm getting reports of validation failure on that build too. Time to start digging. Does anyone know of a tool tht can check the dependencies of an executable and see if they actually exist on a given system? I can use the "otool" command to see what the dependencies are but it doesn't tell you if they are present. The only way to do that is to actually try and load the plugin I suppose but auval doesn't always tell you WHY a plugin didn't load, just that it was unable to open.

Here's the latest.


Symbol not found: __tlv_bootstrap Referenced from: /Library/Audio/Plug-Ins/Components/DrumGator.component/Contents/MacOS/DrumGator Expected in: /usr/lib/libSystem.B.dylib
 

From a customer using OS X 10.6.8 and LP 9.1.8

2015-10-23 00:40:18.788 auvaltool[351:a07] Error loading /Library/Audio/Plug-Ins/Components/DrumGator.component/Contents/MacOS/DrumGator: dlopen(/Library/Audio/Plug-Ins/Components/DrumGator.component/Contents/MacOS/DrumGator, 262): Symbol not found: __tlv_bootstrap
Referenced from: /Library/Audio/Plug-Ins/Components/DrumGator.component/Contents/MacOS/DrumGator
Expected in: /usr/lib/libSystem.B.dylib
in /Library/Audio/Plug-Ins/Components/DrumGator.component/Contents/MacOS/DrumGator
FATAL ERROR: OpenAComponent: result: 4294967246,0xFFFFFFCE

On my development system, I dumped the symbol table for libSystem.B.dylib, and I don't see the symbol  __tlv_bootstrap, but my plugin runs just fine.
 

That's not a juce symbol, or anything from the AU framework as far as I know. Must be some kind of compiler-generated or standard-library symbol.. Maybe try googling it? Probably just means you need to tweak a build setting somewhere.

Google was not much help on that. To be honest, most customers don't get that error so I'm going to look elsewhere for now. Most customers who have run auval only get this

TESTING OPEN TIMES: COLD: FATAL ERROR: OpenAComponent: result: -1,0xFFFFFFFF validation result: couldn't be opened

with no indication of why the plug couldn't be opened. Funny this is that it runs fine on my Mac and validates perfectly, which some subset of custmers get validation errors. It this point I think I'm going to open a support ticket with Apple to see if they can provide any insight.


262): Symbol not found: __tlv_bootstrap

Looks like this one only happens on machines running OS X 10.6.8. All the others (10.9 and later) just say 

FATAL ERROR: OpenAComponent: result: -1,0xFFFFFFFF

A few of customers' machines have trouble reading Info.plist. For example, one customer with 10.10.5 got this:


AU Validation Tool
    Version: 1.6.1a1 
    Copyright 2003-2013, Apple Inc. All Rights Reserved.
    Specify -h (-help) for command options
--------------------------------------------------
VALIDATING AUDIO UNIT: 'aufx' - 'DG02' - 'BAYU'
2015-11-01 12:42:39.658 auvaltool[6753:987100] 12:42:39.658 WARNING:   >compload> AudioComponentPluginLoader.cpp:445: ParseInfoPlistArray: CA-2A.component -- file:///Library/Audio/Plug-Ins/Components/: trouble parsing Info.plist's AudioComponents; entry: <CFBasicHash 0x7f9e8ad0b750 [0x7fff73861ed0]>{type = mutable dict, count = 7,
entries =>
    2 : <CFString 0x7f9e8ad0b800 [0x7fff73861ed0]>{contents = "manufacturer"} = <CFString 0x7f9e8ad09d70 [0x7fff73861ed0]>{contents = "CWSY"}
    7 : <CFString 0x7f9e8ad0abf0 [0x7fff73861ed0]>{contents = "factoryFunction"} = <CFString 0x7f9e8ad0ac50 [0x7fff73861ed0]>{contents = "AUWrapperFactory"}
    8 : <CFString 0x7f9e8ad09e70 [0x7fff73861ed0]>{contents = "subtype"} = <CFString 0x7f9e8ad09eb0 [0x7fff73861ed0]>{contents = "comp"}
    9 : <CFString 0x7fff73835400 [0x7fff73861ed0]>{contents = "description"} = <CFString 0x7f9e8ad0aab0 [0x7fff73861ed0]>{contents = "CA-2A Compressor"}
    10 : <CFString 0x7f9e8ad09f70 [0x7fff73861ed0]>{contents = "type"} = <CFString 0x7f9e8ad09fb0 [0x7fff73861ed0]>{contents = "aufx"}
    11 : <CFString 0x7f9e8ad09e00 [0x7fff73861ed0]>{contents = "name"} = <CFString 0x7f9e8ad0acb0 [0x7fff73861ed0]>{contents = "Cakewalk: CA-2A"}
    12 : <CFString 0x7f9e8ad09ff0 [0x7fff73861ed0]>{contents = "version"} = <CFString 0x7f9e8ad0a030 [0x7fff73861ed0]>{contents = "0x00020000"}
}
2015-11-01 12:42:39.974 auvaltool[6753:987100] 12:42:39.974 WARNING:   >compload> AudioComponentPluginLoader.cpp:445: ParseInfoPlistArray: Sonarworks%20Reference%203%20plugin.component -- file:///Library/Audio/Plug-Ins/Components/: trouble parsing Info.plist's AudioComponents; entry: <CFBasicHash 0x7f9e8ad09df0 [0x7fff73861ed0]>{type = mutable dict, count = 7,
entries =>
    2 : <CFString 0x7f9e8ad159c0 [0x7fff73861ed0]>{contents = "manufacturer"} = <CFString 0x7f9e8ad09e70 [0x7fff73861ed0]>{contents = "SoWo"}
    7 : <CFString 0x7f9e8ad09e30 [0x7fff73861ed0]>{contents = "factoryFunction"} = <CFString 0x7f9e8ad09ee0 [0x7fff73861ed0]>{contents = "SonarworksAUFactory"}
    8 : <CFString 0x7f9e8ad15400 [0x7fff73861ed0]>{contents = "subtype"} = <CFString 0x7f9e8ad0b760 [0x7fff73861ed0]>{contents = "PSTh"}
    9 : <CFString 0x7fff73835400 [0x7fff73861ed0]>{contents = "description"} = <CFString 0x7f9e8ad08960 [0x7fff73861ed0]>{contents = "Sonarworks Reference 3 AU plug-in"}
    10 : <CFString 0x7f9e8ad0b7a0 [0x7fff73861ed0]>{contents = "type"} = <CFString 0x7f9e8ad0a0b0 [0x7fff73861ed0]>{contents = "kAudioUnitType_Effect"}
    11 : <CFString 0x7f9e8ad155a0 [0x7fff73861ed0]>{contents = "name"} = <CFString 0x7f9e8ad15620 [0x7fff73861ed0]>{contents = "Sonarworks: Sonarworks Reference 3 AU plug-in"}
    12 : <CFString 0x7f9e8ad174c0 [0x7fff73861ed0]>{contents = "version"} = <CFNumber 0x300040a37 [0x7fff73861ed0]>{value = +50332682, type = kCFNumberSInt64Type}
}
--------------------------------------------------
Manufacturer String: Bayou Media
AudioUnit Name: Drum Gator
Component Version: 1.0.3 (0x10003)
Component's Bundle Version: 1.0.3
* * PASS
--------------------------------------------------
TESTING OPEN TIMES:
COLD:
FATAL ERROR: OpenAComponent: result: -1,0xFFFFFFFF

I had a couple of customers do a directory listing of the component folder and got some curious permissions.


drwxrwxrwx@ 6 plaiss  staff  204 23 oct 12:34 Contents
/Library/Audio/Plug-ins/Components/DrumGator.component/Contents:
total 16
-rwxrwxrwx@ 1 plaiss  staff  1221 23 oct 03:05 Info.plist
drwxrwxrwx@ 3 plaiss  staff   102 23 oct 12:34 MacOS
-rwxrwxrwx@ 1 plaiss  staff     9 23 oct 03:05 PkgInfo
drwxrwxrwx@ 4 plaiss  staff   136 23 oct 12:34 Resources
/Library/Audio/Plug-ins/Components/DrumGator.component/Contents/MacOS:
total 9640
-rwxrwxrwx@ 1 plaiss  staff  4934652 23 oct 03:05 DrumGator
/Library/Audio/Plug-ins/Components/DrumGator.component/Contents/Resources:
total 16
-rwxrwxrwx@ 1 plaiss  staff   786 23 oct 03:05 DrumGator.rsrc
-rwxrwxrwx@ 1 plaiss  staff  2842 23 oct 03:05 RecentFilesMenuTemplate.nib

Everything has rwxrwxrwx@, whereas on my system it's more like rwx-r--r-- for everything. Also notice the @ indicating extended attributes. I'm going to have them list the extended attributes as well to see if there are any clues there.

 

Did you build it with the deployment target set so that it'd be compatible with these older systems?

The deployment target is set to OS X 10.7. I understand that this may not work on older systems but the main problem is that it fails validation on 10.7 and newer. I have one or two customers who don't have this problem on 10.10.5 (including my development system) but most report validation failure. The missing symbol is only reported by a couple of users with 10.6.8, which is most likely caused by my deployment target setting and is therefore a separate issue. Since most users are on 10.7 and later, i want to solve that problem first. I sent several users a diagnostic script that runs auval and looks at the AU component area of the filesystem, the idea being to look for anything out of the ordinary. That's how I got some of the results I posted earler. In several cases, auval was unable to parse the Plist.info file but in some cases it just reports failure to open the component.

On getting more data from customers, it looks like OS X has quarantined my AU component. I'm guessing that either my executable, the installer, or both need to be signed using my Apple developer ID.


-rwxrwxrwx@ 1 philippelaiss  staff  1221 23 oct 03:05 Info.plist
    com.apple.quarantine      57 
drwxrwxrwx@ 3 philippelaiss  staff   102  3 nov 22:49 MacOS
    com.apple.quarantine      57 
-rwxrwxrwx@ 1 philippelaiss  staff     9 23 oct 03:05 PkgInfo
    com.apple.quarantine      57 
drwxrwxrwx@ 4 philippelaiss  staff   136  3 nov 22:49 Resources
    com.apple.quarantine      57 

I was recently able to obtain another Mac on which I was able to reproduce the problem. It turns out that OS X was quarantining the plugin. However, after removing the quarantine, AU validation continues to fail with no indication of why. As a test I downloaded a copy of Reaper and Reaper loads and runs the AU just fine! Also, this particular Mac has an older version of GarageBand, which also runs the AU with no complaints. This just keeps getting more and more frustrating.

I thought auval always gives a reason for failure.. Does it say nothing at all?

I got this one recently.


TESTING OPEN TIMES:
COLD:
Nov 10 21:44:08 Shannels-MacBook-Pro.local auvaltool[1239] <Warning>: CGSConnectionByID: 0 is not a valid connection ID.
Nov 10 21:44:08 Shannels-MacBook-Pro.local auvaltool[1239] <Warning>: CGSConnectionByID: 0 is not a valid connection ID.
Nov 10 21:44:08 Shannels-MacBook-Pro.local auvaltool[1239] <Warning>: CGSConnectionByID: 0 is not a valid connection ID.
Nov 10 21:44:08 Shannels-MacBook-Pro.local auvaltool[1239] <Warning>: Invalid Connection ID 0
FATAL ERROR: OpenAComponent: result: -1,0xFFFFFFFF
    
 

Sounds like it can't even load the binary, so presumably there's a dependency problem, or architecture mismatch.

Possibly but then why does it load with no problems in Reaper?

Reaper does tricks with child processes to allow it to load plugins with different architectures, that might be the reason.

Possibly, byt that doesn't explain why it works on my development machine but not my Macbook Pro. Both have the same version of OS X and the  same version of Logic Pro.

Hmm, that is odd.. Sorry, nothing else springs to mind..

I have finally solved this issue. My plugin checks for the presence of a valid license file on initialization. If a valid license file is not found, it pops up a message box telling the user that it will be runnning in trial mode. The problem seems to be that, because auval is a command line program, it crashes when the plugin creates the message box. It appears that Logic Pro spawns a copy of auval to scan its plugins, which causes validation to fail. This also explains why Reaper doesn't have this problem, as it does not call auval. Ifter removing the popup, validation works perfectly.

Yep. Yet another reason why I always recommend never popping up any kind of window, especially before the plugin's UI is visible.

TBH I should probably figure out a way of asserting when people do this kind of thing..

I am having an issue with a plug-in by SSL, specifically their new Bus Compressor. Every time Logic starts up it rescan the plugin because I noticed the plug-in version is listed as invalid. Does anyone know how to fix this?

Contact the manufacturer for tech support.