微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

以下是无法加载的插件列表: Altiverb,词汇混响,AUMatrixReverb,AUNewPitch,AURogerBeep,AUReverb2,AUSampleDelay

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

请注意,两个未加载的非Apple插件都需要带有许可证的iLok加密狗。发生错误时,将连接iLok并授权该软件。请注意,它们在Logic Pro和Digital Performer上运行良好。使用需要iLok的插件是否需要特殊的代码,权限或代码签名?不确定是否是原因,但值得探讨。

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

致命错误:100000

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

无法加载效果错误错误域= NSOsstatusErrorDomain代码= -1“ kcfStreamErrorHTTPParseFailure / kcfSocketError / kcfStreamErrorDomainCustom / kCSIdentityUnkNownAuthorityErr / qErr / telGenericError / dsNoExtsMacsBug / kMovieLoadStateError / cdevGenErr:无法解析自定义队列/请求/响应的流。删除过程中未找到元素//不是SysErr,只是一个占位符//一般错误;灰色cdev没有警报”

当尝试加载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):找不到合适的图像。找到了: /库/音频/插件/组件/LexConcertHall.component/Contents/MacOS/LexConcertHall:mmap()errno = 13,地址= 0x1798E1000,大小= 0x003AC000 segment = __ DATA在Segment :: map()映射中/ Library / Audio /Plug-Ins/Components/LexConcertHall.component/Contents/MacOS/LexConcertHall) 无法加载效果错误错误域= NSOsstatusErrorDomain代码= -1“ kcfStreamErrorHTTPParseFailure / kcfSocketError / kcfStreamErrorDomainCustom / kCSIdentityUnkNownAuthorityErr / qErr / telGenericError / dsNoExtsMacsBug / kMovieLoadStateError / cdevGenErr:无法解析自定义队列/请求/响应的流。删除过程中未找到元素//不是SysErr,只是一个占位符//一般错误;灰色cdev没有警报”

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

您可以在Github上查看源代码

https://github.com/dmann200/AudioFramework

解决方法

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

事实证明,需要在“签名和功能”->“强化运行时”下向项目添加以下功能

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

来自PACE的完整消息在这里:

包装所需的权利

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

<?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>
,

关于上面的回答,

  • 地址簿访问是不相关的,这是肯定的。
  • allow-unsigned-executable-memory 不是必需的(在运行时修改自己代码的应用中使用)

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

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

它已经失去了很多时间! :)

,

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?