无GUI的应用程序包

9
我想创建一个没有GUI但可以访问应用程序包的辅助应用程序。我查看了Xcode命令行项目模板,但这些模板只生成可执行文件。我如何创建类似于命令行工具的东西,它不会显示应用程序菜单,但提供对.app中捆绑资源的访问?我是否考虑得不正确?
谢谢。
2个回答

16

Peter的回答(使用LSUIElement)可能是您要找的。偶尔,我也想创建一个同时具有应用程序包和命令行应用程序的实际命令行应用程序。如果其他人遇到相同的情况,这里是我发现的...

应用程序包不是可执行文件。真正的可执行文件在其中: MyApp.app/Contents/MacOS/MyApp 是名为MyApp的应用程序的实际Mach-O可执行文件。标准的Xcode模板将应用程序链接到AppKit.framework,并具有定义可执行文件的main()函数的main.m,该函数启动了一个NSApplication实例。但是,您可以将任何可执行文件放入应用程序包中,包括仅控制台的应用程序。只需将应用程序模板中的main()函数替换为控制台应用程序的main()函数,并从应用程序的链接框架中删除AppKit.framework。

如果想要完全避免使用Objective-C,可以将main.m替换为声明main函数的main.c(尽管如果替换main()函数的内容,则main.m中没有必要使用Objective-C)。

要从控制台运行应用程序,您必须指定实际的可执行文件而不是应用程序包,因此您必须在命令行中输入MyApp.app/Contents/MacOS/MyApp。当我将应用程序包用于控制台应用程序(以提供链接的框架,资源等)时,我经常创建指向可执行文件的符号链接,并在安装或第一次运行时将符号链接放在/usr/local/bin(或路径上的其他地方)。


1
都是正确的,但 Peter 的答案可能更接近于开发者想要实现的目标。 - Ken
1
@Ken:同意。提问者可能正在寻找一个LSUIElement应用程序。然而,我有时会使用一个仅限控制台的应用程序来使用应用程序包。以防对其他人有用,我将保留这个答案。 - Barry Wark
这也是一个很有帮助的答案,Barry,所以谢谢。不过,在Info.plist中的LSUIElement条目使它变得非常简单。再次感谢。 - Matt Long
@Matt - 同意;使用LSUIElement。我会编辑我的答案,以明确这一点,并且该信息仅适用于您想要创建带有应用程序包的命令行应用程序(是的,我过去曾经不得不这样做)。 - Barry Wark

11

我想创建一个没有图形用户界面、但有应用程序包的辅助应用。

这被称为代理,您可以通过创建一个常规应用程序并将其 LSUIElement 键设置为字符串“1”来创建它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接