我已经成功实现了“无面服务”(带有 .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(使用前将#替换为@)