【发布时间】:2010-02-12 08:48:53
【问题描述】:
我想创建一个没有 GUI 但可以访问应用程序包的辅助应用程序。我正在查看 Xcode 命令行项目模板,但这些都只是生成可执行文件。如何创建类似于命令行工具的东西,它不提供应用程序菜单但提供对 .app 中捆绑资源的访问?我是不是想错了?
谢谢。
【问题讨论】:
标签: objective-c cocoa command-line
我想创建一个没有 GUI 但可以访问应用程序包的辅助应用程序。我正在查看 Xcode 命令行项目模板,但这些都只是生成可执行文件。如何创建类似于命令行工具的东西,它不提供应用程序菜单但提供对 .app 中捆绑资源的访问?我是不是想错了?
谢谢。
【问题讨论】:
标签: objective-c cocoa command-line
彼得的答案(使用LSUIElement)可能就是您要找的。有时,我想创建一个实际的命令行应用程序,它也有一个应用程序包。如果其他人遇到相同的情况,这就是我发现的......
应用程序包不是可执行文件。真正的可执行文件隐藏在其中:MyApp.app/Contents/MacOS/MyApp 是名为 MyApp 的应用程序的实际 Mach-O 可执行文件。标准 Xcode 模板将应用程序链接到 AppKit.framework,并有一个 main.m,它为启动 NSApplication 实例的可执行文件定义了 main() 函数。但是,您可以将任何可执行文件放入应用程序包中,包括仅限控制台的应用程序。只需将应用程序模板中main.m 中的main() 函数替换为您的控制台应用程序main() 函数,然后从应用程序的链接框架中删除AppKit.framework。
如果你愿意,如果你想完全避免使用 Objective-C,你可以用声明 main 函数的 main.c 替换 main.m(尽管如果你替换内容,main.m 中没有任何特定于 Objective-C 的内容main() 函数)。
要从控制台运行您的应用程序,您必须指定实际的可执行文件,而不是应用程序包,因此您必须在命令行中键入 MyApp.app/Contents/MacOS/MyApp。当我将应用程序包用于控制台应用程序(以提供链接的框架、资源等)时,我经常创建一个指向可执行文件的符号链接,并将符号链接放在 /usr/local/bin (或路径上的其他位置)中安装或首次运行。
【讨论】:
我想创建一个没有 GUI 但确实有……一个应用程序包的帮助应用程序。
这称为代理,您可以通过创建一个常规应用程序并将其LSUIElement 键设置为字符串“1”来创建一个。
【讨论】: