如何在启用了沙盒的帮助应用程序中终止我的应用程序?

时间:2012-12-23 19:51:06

标签: objective-c macos cocoa sandbox

我创建了一个帮助应用程序,它监视iTunes并启动/终止主应用程序。

发射效果很好。 唯一的问题是我不允许因沙盒而终止主应用程序。 我得到了这3个日志:

12/23/12 8:45:37.522 PM appleeventsd[70]: Sandboxed application with pid 8293 attempted to lookup App:"Significator 2"/8877/0x0:0x150150 ???? sess=100011 but was denied due to sandboxing. (handleMessage()/appleEventsD.cp #2007) com.apple.coreservices.appleevents.peer.0x7fd9c2401f00.xpcq


12/23/12 8:45:37.000 PM kernel[0]: Sandbox: sandboxd(8888) deny mach-lookup com.apple.coresymbolicationd


12/23/12 8:45:37.873 PM sandboxd[8888]: ([8293]) SignificatorHelp(8293) deny appleevent-send ch.ilijatovilo.significator-2

我已经尝试在帮助应用程序中将其终止:

NSRunningApplication *app = [[NSRunningApplication runningApplicationsWithBundleIdentifier:[self mainApplicationBundle].bundleIdentifier] objectAtIndex:0];
[app terminate];

当然,我可以在主应用程序中添加另一个观察者,但我想避免这种情况。

3 个答案:

答案 0 :(得分:3)

知道了,我不得不添加临时权利例外:

<key>com.apple.security.temporary-exception.apple-events</key>
<array>
    <string>mainAppBundleIdentifier</string>
</array>

答案 1 :(得分:1)

如果您将应用放在Application Group中,则可以向主应用发送信号以终止自己。

答案 2 :(得分:0)

在10.8中推荐使用IPC的方法是使用NSXPCConnection。

请参阅Sandboxing with NSXPCConnection

上的代码