Mac OS 桌面音频主机应用程序无法加载某些 AVAudioUnit 插件

Posted

技术标签:

【中文标题】Mac OS 桌面音频主机应用程序无法加载某些 AVAudioUnit 插件【英文标题】:Mac OS Desktop Audio Host Application Fails To to Load Some AVAudioUnit Plugins 【发布时间】:2020-09-21 22:37:12 【问题描述】:

我已经构建了一个音频主机应用程序,它可以托管 Auv3 格式的虚拟乐器和效果插件。虽然虚拟乐器加载正常,但许多效果插件无法加载。我需要 Apple 帮助解决这些插件无法加载的原因。

以下是无法加载的插件列表: Altiverb、Lexicon Reverb、AUMatrixReverb、AUNewPitch、AURogerBeep、AUReverb2、AUSampleDelay

以下是可以正确加载的插件列表:Native Instruments(全部)、Spectrasonics Omnisphere、上面未列出的所有其他 Apple AU 插件。

需要注意的是,两个不加载的非 Apple 插件都需要带有许可证的 iLok 加密狗。安装 iLok 并在出现错误时授权软件。请注意,这些在 Logic Pro 和 Digital performer 上运行良好。使用需要 iLok 的插件是否需要特殊代码、权限或代码签名?不确定是否是这个原因,但值得探讨。

当尝试加载 Altiverb 时,错误消息是:

致命错误:100000

发生了致命的包装器引导错误。该软件无法加载。请联系软件发行商以获得使用此软件的支持。

加载效果失败。错误:Error Domain=NSOSStatusErrorDomain Code=-1 "kCFStreamErrorHTTPParseFailure / kCFSocketError / kCFStreamErrorDomainCustom / kCSIdentityUnknownAuthorityErr / qErr / telGenericError / dsNoExtsMacsBug / kMovieLoadStateError / cdevGenErr: 无法解析请求/响应。//自定义到有问题的流类型//队列element not found during delete // 不是 SysErr,只是占位符 // 一般错误;灰色 cdev w/o alert"

尝试加载 Lexicon 时,错误消息为: 2020-09-21 09:38:42.609730-0700 Composer Bot Desktop[14189:5425867] [audiocomp] APComponent.mm:397 CFBundle 0x12d9226e0 /Audio/Plug-Ins/Components/LexConcertHall.component>(捆绑,不是已加载):无法加载捆绑包:捆绑包“LexConcertHallAU”无法加载,因为它已损坏或缺少必要的资源。 (dlopen_preflight(/Library/Audio/Plug-Ins/Components/LexConcertHall.component/Contents/MacOS/LexConcertHall):没有找到合适的图像。确实找到了: /Library/Audio/Plug-Ins/Components/LexConcertHall.component/Contents/MacOS/LexConcertHall: mmap() errno=13 at address=0x1798E1000, size=0x003AC000 segment=__DATA in Segment::map() 映射 /Library/Audio /Plug-Ins/Components/LexConcertHall.component/Contents/MacOS/LexConcertHall) 加载效果失败。错误:Error Domain=NSOSStatusErrorDomain Code=-1 "kCFStreamErrorHTTPParseFailure / kCFSocketError / kCFStreamErrorDomainCustom / kCSIdentityUnknownAuthorityErr / qErr / telGenericError / dsNoExtsMacsBug / kMovieLoadStateError / cdevGenErr: 无法解析请求/响应。//自定义到有问题的流类型//队列element not found during delete // 不是 SysErr,只是占位符 // 一般错误;灰色 cdev w/o alert"

复制步骤 在我将根据要求提供的包含文件夹中,打开 xcode 项目 AudioFramework.xcodeproj 选择方案:AudioFrameworkDemo 运行项目 应该出现一个混合板 在左侧的第一个通道中,选择顶部的 Audio FX 单元格(不是 Input) 在下拉列表中,选择 Altiverb 或 Lexicon(如果您有任何这些插件) 如果您没有这些产品,您可以尝试任何其他需要 iLok 加密狗的第三方插件。 (同样,我们不知道 iLok 是否是罪魁祸首) 您可能会看到一条错误消息,指出这些插件无法在存在调试器的情况下运行。 因此,当应用程序仍在运行时: 在下面的 Dock 中,右键单击 AudioFramework->Options->Keep in Dock 退出应用程序,这次从扩展坞再次启动。 重复上述步骤。

您可以在 Github 上查看源代码:

https://github.com/dmann200/AudioFramework

【问题讨论】:

【参考方案1】:

我收到了来自 PACE 反盗版的答复,iLok 加密狗制造商。他们告诉我以下内容解决了我的问题并允许插件运行:

原来需要在Signing and Capabilities->Hardened Runtime下的项目中添加以下能力

允许未签名的可执行内存 禁用库验证

PACE 的完整信息在这里:

包装所需的权利

如果您要包装需要公证的应用程序,或者如果您要公证包含包装捆绑包(如受 PACE 保护的插件)的主机应用程序,则需要添加 com.apple.security.cs .allow-unsigned-executable-memoryentitlement 签名时。为此,您应该创建一个至少包含以下内容的权利文件(根据需要添加您自己所需的权利):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.security.cs.allow-unsigned-executable-memory</key>
    <true/>
</dict>
</plist>

我们的一位工程师表示“必须通过权利来解决‘不同团队 ID’(可能还有其他一些)的问题”。他提供了几周前他帮助过的另一件事的以下信息:


我不是这方面的专家,但我认为解决此问题的务实方法是调整您的应用程序的权利 plist。您需要添加以下权利:com.apple.security.cs.disable-library-validation。

我看到 DAW 供应商在最近的版本中一直在这样做,其 plist 与此类似:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.security.cs.allow-unsigned-executable-memory</key>
    <true/>
    <key>com.apple.security.cs.disable-library-validation</key>
    <true/>
    <key>com.apple.security.device.audio-input</key>
    <true/>
    <key>com.apple.security.personal-information.addressbook</key>
    <true/>
</dict>
</plist>

【讨论】:

【参考方案2】:

关于上面的回答,

通讯录访问是不相关的,当然。 allow-unsigned-executable-memory 不是必需的(在运行时修改自己代码的应用中使用)

所以我认为唯一需要的权利密钥是 com.apple.security.cs.disable-library-validation

但是,根据我的经验,您还必须检查沙箱是否已禁用。

这已经浪费了很多时间! :)

【讨论】:

【参考方案3】:

我的应用程序出现了同样的错误,该应用程序会显示在其他 Mac 上,但从来没有我的。第一个答案帮助我找到了解决方案:

    如第一个答案中所述,在 xcode 中打开“允许无符号可执行内存” 像往常一样使用 PACE wraptool 包装的应用程序,包括公证参数(--notarize-username 和 --notarize 密码) 使用 xcode 生成的授权文件运行 codesign
    codesign -f --options=runtime -s MySignID --entitlements myApp.entitlements MyApp.app
    可选,使用 codesign -d 检查应用是否列出了 com.apple.security.cs.allow-unsigned-executable-memory 权利
   codesign -d --entitlements :- MyApp.app

【讨论】:

以上是关于Mac OS 桌面音频主机应用程序无法加载某些 AVAudioUnit 插件的主要内容,如果未能解决你的问题,请参考以下文章

FinalShell Mac OS版,Linux版安装及教程

Mac OS X sudo docker 无法连接到 Docker 守护程序。 docker 守护进程是不是在此主机上运行?

Virtualbox 中的 Internet 连接无法正常工作(Mac OS X 主机/Windows XP 来宾)

Mac OS X 虚拟音频驱动程序

Rogue Amoeba 发布用于 Mac OS X 的音频路由应用 Loopback

Meteor - 脚本在刷新/仅在某些路由上无法正确加载 Web 音频缓冲区