无需启动应用程序即可提供 OSX 服务?

2024-02-27

我已经成功实现了“无面服务”(带有 .service 扩展名的仅后台应用程序)并使其正常工作(请参阅这个问题 https://stackoverflow.com/q/27264360/433373), 基于苹果的文档 https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/SysServices/introduction.html#//apple_ref/doc/uid/10000101-SW1以及网络上的其他教程。

现在,我想通过我现有的单窗口 GUI 应用程序宣传一项服务。

我已经设置了应用程序的 Info.plist 文件来宣传该服务,并在构建应用程序时安装它。

但是当我从上下文菜单调用该服务时在(例如)TextEdit.app 中(我的服务根据特定标准为所选文本着色),我的应用程序启动,主窗口和所有内容。更糟糕的是,我右键单击辅助监视器中的 TextEdit 窗口,因此我的应用程序的主窗口会立即出现在辅助监视器中,然后快速重新定位到主监视器中(这可能与我的以窗口为中心的逻辑,但没关系......)。

我想提供服务(即在我的应用程序中提供提供服务的类 实例化并执行其方法以响应请求),而我的应用程序不会出现在 Dock 上或显示其窗口和主菜单。

Is this possible? Safari advertises "Search With Google", so it should be possible...

EDIT:现在想来,“Search With Google”每次都必须启动 Safari 才能工作,所以这条评论不适用。

也许我可以添加一些逻辑-applicationWillFinishLaunching/-applicationDidFinishLaunching确定应用程序是否正在响应服务而启动,并跳过创建窗口(注意缺少withOptions:在 OSX 中)?

但仍然感觉不对。


它确实有一个蹩脚的版本withOptions: -- NSApplicationLaunchIsDefaultLaunchKey告诉您您的应用程序是否已启动:

打开或打印文件,以执行服务操作,如果应用程序已保存将恢复的状态,或者应用程序启动在某种其他意义上不是默认启动

所以在你的applicationDidFinishLaunching您可以查看该键是否在通知中并设置为NO。不幸的是,判断它是服务之外的可能性之一的主要方法是,您必须检测并记录您是否还获得了application:openFile:, etc.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无需启动应用程序即可提供 OSX 服务? 的相关文章

随机推荐