Cocoa:向现有GUI App添加命令行功能

时间:2015-08-14 17:07:00

标签: objective-c macos cocoa command-line

我有一个现有的GUI mac应用程序,我想添加命令行调用。例如,GUI应用程序名为" Gallifrey"查找扮演Dr. Who和任选伴侣的演员。 GUI有一个年份的文本字段和一个"和伴随"的复选框。和一个查找按钮。从命令行,我想它会是:

> gallifrey -y2014 -c 
> Peter Capaldi, Jenna Coleman

我在apple-dev http://lists.apple.com/archives/cocoa-dev/2009/Oct/msg01480.html

上发现了这个解决方案

这仍然是建议的解决方案吗?我考虑将逻辑移动到XPC服务并捆绑一个单独的命令行目标,但这看起来不必要地复杂化。

编辑:要明确,我不会问如何解析args,我已经完成了这个,只是如何决定启动GUI与仅返回答案。

2 个答案:

答案 0 :(得分:0)

选项1

将您的所有应用程序代码移动到一个框架中(您自己的应用程序包中的框架)。

制作单独的GUI和CLI应用程序目标,并使它们都链接到具有所有必需功能的框架。

  • 链接框架使所有内容在同一进程中可用,因此需要更改代码量,并且不需要担心XPC。

  • 缺点是您的CLI不是独立的可执行文件,但需要存在于应用程序包中。

答案 1 :(得分:0)

选项2

修改您的public static Map<String, String> tabs = new HashMap<String, String>(); 功能,并在其中决定是否返回答案而不是启动tabs.put(handleName, handle); 。通过这种方式,您可以在技术上保留一个应用程序,一个可执行文件,它支持两种启动方式。