Thanks Quinn — your explanation of the framework-linkage trick was exactly the pointer we needed. To answer your question first: no, ShazamKit didn't appear in otool -L on that executable — it's an Xcode Debug build, so the executable only imports the debug-dylib stub, and ShazamKit is imported one hop down by that dylib.
That prompted two more controls, and they solved it:
Rebuilding the helper with a direct static ShazamKit import (confirmed via otool -L) and spawning it as an inherit child: still error 202, same shazamd deny. The child's own linkage doesn't matter.
Linking ShazamKit into the parent executable instead (a tiny sandboxed fork/exec launcher, no exception anywhere): the unmodified inherit child now matches — including through two levels of nesting.
So the sandbox extension appears to be derived from the profile owner's linkage and flows down to inherit children. That explains my app exactly: my main executable never linked ShazamKit (only the spawned helper does), hence the denial, hence the temporary-exception having been load-bearing.
My path forward is clear — link ShazamKit in the main app and drop the temporary-exception. Thanks for steering me to the mechanism; I wouldn't have found it without that hint. One last thing, purely for completeness: if "a child's own static import doesn't extend an inherited sandbox" is something you'd consider a gap rather than intended behaviour, say the word and I'll file Feedback with the reproduction — otherwise I'm all set.
Topic:
Media Technologies
SubTopic:
General
Tags: