从Cocoa应用程序内部执行外部应用程序

从Cocoa应用程序内部执行外部应用程序,cocoa,plugins,Cocoa,Plugins,首先,让我明确指出,我需要它的不是简单的(显然,我想要的不仅仅是执行另一个应用程序) 我需要什么: 使用外部应用程序的功能扩展我的主应用程序(类似于“插件”) 这些外部插件必须与主应用程序分开(在代码/实现方面) 外部插件必须能够无缝集成到主应用程序中 用户不应将外部应用程序视为“外部”应用程序 实施必须遵守应用商店条款和沙箱指南 示例(尽管我头脑中的想法不是100%清楚): 主机应用程序启动 外部应用程序有一个窗口(及其自己的功能) 一旦外部应用程序被执行,它的窗口现在就成为宿主应用程序

首先,让我明确指出,我需要它的不是简单的(显然,我想要的不仅仅是执行另一个应用程序)

我需要什么:

  • 使用外部应用程序的功能扩展我的主应用程序(类似于“插件”)
  • 这些外部插件必须与主应用程序分开(在代码/实现方面)
  • 外部插件必须能够无缝集成到主应用程序中
  • 用户不应将外部应用程序视为“外部”应用程序
  • 实施必须遵守应用商店条款和沙箱指南
示例(尽管我头脑中的想法不是100%清楚):

  • 主机应用程序启动
  • 外部应用程序有一个窗口(及其自己的功能)
  • 一旦外部应用程序被执行,它的窗口现在就成为宿主应用程序的“工作表”
我不知道我所描述的是否可行。不过,我还是需要听听你在这方面的意见。我对这个问题做了很多研究,虽然我即将提出通过外部脚本(通过php、python、AppleScript等获取输入并提供一些输出)来扩展主机应用程序的整个概念,但这并不包括“插件”有自己的用户界面的情况


有什么想法吗?(一个示例或一些具体的参考资料将是理想的…

有一个新的API,它可以精确地满足您的需求:

XPC服务API是libSystem的一部分,它为与Grand Central Dispatch(GCD)和launchd集成的基本进程间通信提供了一种轻量级机制。XPCServicesAPI允许您创建称为XPCServices的轻量级助手工具,以代表您的应用程序执行工作

关于这一点,报纸上有很好的讨论

你所描述的很多东西确实是可能的,但不一定很难。然而,正如你自己所说,你的“例子”并不完全连贯。您希望第二个应用程序是独立的,但不希望它看起来是“外部的”;这些力量并不完全可以调和。由于明显的原因,您不太可能接管一个已经独立运行的应用程序。但你可以开始自己的过程


通常的体系结构是有几个守护进程或服务为您执行任务,以及一个控制进程,该进程还处理所有用户界面。如上所述,邮件是这样工作的。

您是否有关于OS X或iOS应用程序的问题?我想您可以使用。加载后,它们将在主应用程序上下文中执行,因此可以使用UI。我不认为这是一个沙箱问题,因为所有捆绑包都将被签名并包含在主应用程序捆绑包中,但我不能给出权威的答案。如果您想要特权分离,请查看“XPC服务”,但这些服务(据我所知)没有访问UI.Wow的权限。谢谢我一定会调查一下,然后再打给你。:-)