我已经成功实施了一项"不露面的服务" (具有.service扩展名的仅限后台应用)并根据this question和网络上的其他教程将其投放(请参阅Apple's documentation)。
现在,我想通过我现有的单窗口GUI应用程序宣传服务。
我已经设置了我的应用程序的Info.plist文件来宣传该服务,并在构建应用程序时安装它。
但是当我从上下文菜单中调用服务(比如)TextEdit.app(我的服务根据特定标准为所选文本着色)时,我的应用程序启动了,主要窗口和所有内容。更糟糕的是,我右键单击辅助监视器中的TextEdit窗口,因此我的应用程序的主窗口在辅助监视器中立即显示,然后快速重新定位进入主显示器(这可能与我的窗口居中逻辑有关,但没关系......)。
我想提供服务(即,有我的应用程序中提供服务的类 实例化并执行其方法以响应请求),没有我的应用程序出现在Dock上或显示其窗口和主菜单。
这可能吗? Safari广告"使用Google搜索",所以应该可以......
编辑:现在我想到了,"用Google搜索"必须每次都启动Safari才能工作,所以这句话不适用。
也许我可以在-applicationWillFinishLaunching
/ -applicationDidFinishLaunching
中添加一些逻辑来确定是否正在启动应用以响应服务,并跳过创建窗口(注意缺少withOptions:
在OSX)?
但是,这感觉不对。
答案 0 :(得分:3)
它确实有withOptions:
的蹩脚版本 - NSApplicationLaunchIsDefaultLaunchKey
会告诉您应用程序是否已启动:
打开或打印文件,执行服务操作,如果应用程序已保存将要恢复的状态,或者应用程序启动是否在其他意义上不是默认启动
因此,在applicationDidFinishLaunching
中,您可以查看该密钥是否在通知中并设置为NO
。不幸的是,告诉它是除了服务之外的其他可能性的主要方式,你必须检测并记录你是否还有application:openFile:
等。