我创建了一个辅助应用程序,用于监视 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];
当然,我可以在主应用程序中添加另一个观察者,但我想避免这种情况。
明白了,我必须添加临时权利例外:
<key>com.apple.security.temporary-exception.apple-events</key>
<array>
<string>mainAppBundleIdentifier</string>
</array>
如果您将应用程序放入应用程序组,您可以向主应用程序发送信号以终止自身。
10.8 中推荐的 IPC 方式是使用 NSXPCConnection。
的代码