小编All*_*len的帖子

核心音频用户空间插件驱动程序 - 防止来自另一个进程的数据交互的沙箱

我正在开发一个基于示例的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方法时)同样的事情发生在 项目方案设置中

任何人??

plugins xpc core-audio mach appstore-sandbox

8
推荐指数
1
解决办法
1090
查看次数

标签 统计

appstore-sandbox ×1

core-audio ×1

mach ×1

plugins ×1

xpc ×1