如何防止子流程在扩展坞中弹跳?

鲍里斯·普罗哈斯卡(Boris Prohaska)

我有一个产生子流程的应用程序。这些子流程需要位于同一应用程序捆绑包中的XPCServices。

我的主应用程序的可执行文件位于 my.app/Contents/MacOS/my

我的XPC服务位于 my.app/Contents/XPCServices/com.my.service.xpc

当子进程驻留在中my.app/Contents/Resources/mysubprocess,并且启动了应用程序时,我的子进程无法连接到XPC服务(为什么?),但是它没有显示在Dock中。

另一方面,如果子进程中my.app/Contents/MacOS/mysubprocess的子进程成功连接到我的XPC服务(主应用程序不需要此XPC服务中的任何内容),则子进程突然在Dock中获得自己的弹跳图标。我猜OS X会检测是否从内部启动了某些东西,*.app/Contents/MacOS/*并将其视为应用程序。

我显然需要它以这种方式工作,子进程可以连接到XPC服务,但是子进程保持隐藏状态,并且不会出现在Dock中。我曾尝试在运行时将LSUIElement和LSBackgroundOnly注册到我的用户默认设置,但这并不能解决问题。如果我将LSUIElement写入用户默认值,则我的主应用程序将不会获得主菜单,这也是不希望的(但在LSUIElementNO绝对正确的情况下)。

基本上,我有两个问题:当我将子my.app/Contents/MacOS/进程二进制文件移到外部时,它找不到XPCServices。我觉得有点奇怪,因为如果子流程位于in,则服务的相对路径保持不变my.app/Contents/Resources/我还在[NSBundle mainBundle]调试子流程时进行了检查,即使它位于Resources文件夹中,它也具有有效的路径是否有办法以某种方式告诉我的子进程应该在哪里寻找我的XPC服务?

另一种方法是,我可以防止子进程在Dock中反弹。我的主应用程序需要其图标和菜单。因此,有没有一种方法可以在运行时指定子进程即使在my.app/Contents/MacOS/文件夹中也不会启动Dock图标

谢谢你

马可·马瑟(Marco Masser)

根据Apple Developer的文档,开发人员可以编写的XPC服务必须驻留在您应用程序的捆绑包中My.app/Contents/XPC Services您的应用只能连接到驻留在其中的XPC服务,而这些XPC服务只能从它们所在的捆绑包中的应用连接到。

(请注意,Apple在其系统框架中提供的XPC服务的工作方式有所不同:/System/Library/PrivateFrameworks/WebKit2.framework包含使用WebKit2框架的任何进程使用的XPC服务。但是,框架再次连接到该XPC服务,而不是应用程序本身。)

如果您的子进程的二进制文件不在中,则可能是无法连接到XPC服务的原因My.app/Contents/MacOS/我不确定,但是您可以从驻留在任意位置的任意二进制文件连接到XPC服务,这MacOS听起来似乎像个错误。但是我认为这不是因为XPC服务仅在代码签名确定的情况下才起作用,并且在MacOS目录中放置任意二进制文件会破坏该代码签名。

至于停靠图标:您如何生成子流程?使用NSTask?常规应用程序本身是否使用XPC服务?如果不是,是否有任何原因导致子流程本身不是应用程序?这样,XPC服务可以位于子进程的/Contents/XPC Services目录中,并且一切正常。

编辑:想到的另一种解决方案:不要使用XPC,而是通过Distributed Objects与您的子流程进行对话的单独流程。因为这不需要任何特殊的文件夹结构或类似的东西,所以您可以将所有辅助二进制文件放置在所需的任何位置,从而可以避免Dock图标弹跳的问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何防止子流程在扩展坞中反弹?

来自分类Dev

如何使圆在窗口中弹跳?

来自分类Dev

如何在opensuse 13.1中弹跳dnsmasq

来自分类Dev

如何防止Grid的子级扩展?

来自分类Dev

在SceneKit中弹跳骨头的头发

来自分类Dev

无法让球在 pygame 中弹跳

来自分类Dev

防止子窗体扩展

来自分类Dev

防止子窗体扩展

来自分类Dev

如何阻止QApplication在扩展坞中显示?

来自分类Dev

在SpriteKit中弹跳时检测Sprite碰撞

来自分类Dev

在本机反应中弹跳动画视图

来自分类Dev

libgdx防止弹跳

来自分类Dev

如何防止参数扩展?

来自分类Dev

如何防止对象扩展?

来自分类Dev

如何强制Octave从扩展坞以GUI模式启动?

来自分类Dev

如何知道扩展坞中正在使用的图标?

来自分类Dev

如何检查我的戴尔是否有扩展坞端口?

来自分类Dev

如何知道扩展坞中正在使用的图标?

来自分类Dev

使用扩展坞时如何优化电池寿命?

来自分类Dev

如何加快与子流程的通信

来自分类Dev

如何:与子流程进行通信

来自分类Dev

如何使用子流程Popen?

来自分类Dev

如何捕获子流程错误

来自分类Dev

如何捕获子流程错误

来自分类Dev

如何在python中弹出子列表的内容?

来自分类Dev

如何让子 div 的内容从父 div 中弹出?

来自分类Dev

如何终止在子流程中打开的所有子流程

来自分类Dev

如何防止表格单元扩展

来自分类Dev

Node.js如何从流程ID获取子流程