我正在开发一个基于示例的coreaudio用户空间hal插件developer.apple.com/library/mac/samplecode/AudioDriverExamples/Introduction/Intro.html
在插件实现中,我计划从另一个进程(即CFMessagePort)获取音频数据
但是,我在控制台中尝试创建端口CFMessagePortCreateLocal时出现以下错误...
sandboxd [251] :( [2597])coreaudiod(2597)deny mach-register com.mycompnay.audio
我做了一些googlging并来到这篇文章
技术问答QA1811 https://developer.apple.com/library/mac/qa/qa1811/_index.html 关于在plist中添加AudioServerPlugIn_MachServices但仍未成功.
还有什么我需要做的才能使这项工作(如添加权利,代码签名)或这不是正确的方法.我不确定MesssagePort机制是否可以在沙箱下运行.XPC服务是否可行?
非常感谢您的宝贵时间.任何帮助是极大的赞赏
更新1:
我应该在音频插件中创建一个远程端口而不是本地.有了这个说法,使用plist中的AudioServerPlugIn_MachServices属性.现在没有sandboxd [559] :( [552])coreaudiod(552)在控制台中拒绝mach-lookup/register消息.
但是,在我的音频hal插件(客户端)我有
CFStringRef port_name = CFSTR("com.mycompany.audio.XPCService");
CFMessagePortRef port = CFMessagePortCreateRemote(kCFAllocatorDefault, port_name);
port已返回值0.我在另一个应用程序中尝试了这个并且它工作得很好.
这是我的服务器端:
CFStringRef port_name = CFSTR("com.mycompany.audio.XPCService");
CFMessagePortRef port = CFMessagePortCreateLocal(kCFAllocatorDefault, port_name, &callback, NULL, NULL);
CFRunLoopSourceRef runLoopSource =
CFMessagePortCreateRunLoopSource(nil, port, 0);
CFRunLoopAddSource(CFRunLoopGetCurrent(),
runLoopSource,
kCFRunLoopCommonModes);
CFRunLoopRun();
Run Code Online (Sandbox Code Playgroud)
我确实得到了关于此的控制台消息.
com.apple.audio.DriverHelper [1314]:名为SimpleAudioPlugIn.driver的插件需要扩展名为com.mycompnay.audio.XPCService的mach服务的沙箱.
谁知道为什么?
更新2
我注意到当我使用带有coreaudiod的调试模式时,它成功获得了mach服务的对象引用.(当我尝试xpc_service方法时)同样的事情发生在 项目方案设置中
任何人??