我刚刚在OS X应用程序中启用了沙盒,现在我的Core Audio代码无效。特别是,当我调用AUGraphAddNode
时,它会返回错误invalidComponentID
,只是说“操作无法完成”。不过,在此之前,许多其他Core Audio调用似乎都能正常工作。
它似乎不是直接的沙箱违规,因为在控制台中没有来自sandboxd的任何消息,但是当我关闭沙盒时它肯定有效。有谁知道为什么会发生这种情况?我唯一可以想象的是,它可能正在尝试读取我无法访问的文件,尽管我认为这会给我一个沙盒错误。
更新
为了澄清,我已经尝试启用每个沙盒权利,但问题仍然存在。
我也在一定程度上缩小了这个问题。如果我尝试添加组件类型为kAudioUnitType_MusicDevice
且子类型为kAudioUnitSubType_DLSSynth
的节点,则该调用仅会失败。
更新2:
我找到了一个hacky解决方法。如果我添加临时异常授权以启用对用户的整个主目录的读写访问,则不再发生错误。这显然不理想,所以我继续寻找更好的选择。我试图通过为更具体的子目录添加权利来缩小所需的访问权限,但这不起作用。
答案 0 :(得分:1)
我最近向应用程序商店提交了我遇到此问题的应用程序,并且因使用我问题的上次更新中提到的临时例外权利而被拒绝。有人指出this article讨论了这个问题。
事实证明,遗憾的是,标准沙盒文档中没有记录另一项权利:com.apple.security.temporary-exception.audio-unit-host
。这将允许音频单元(如DLSSynth,它需要大于主机环境的沙盒允许的权限)在主机环境中运行,前提是用户在运行时授予权限。
我不确定这个解决方案有多长期,因为此权利也被归类为临时例外,但根据Apple的说法,这是现在的方法。
答案 1 :(得分:0)
如果您使用Core Audio进行麦克风输入,请不要忘记将其添加到目标摘要和应用权利文件中的沙箱权利中。
答案 2 :(得分:0)