【问题标题】:GUI-less App Bundle无 GUI 应用程序包
【发布时间】:2010-02-12 08:48:53
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: objective-c cocoa command-line


    【解决方案1】:

    彼得的答案(使用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 (或路径上的其他位置)中安装或首次运行。

    【讨论】:

    • 确实如此,但彼得的回答可能更接近开发人员试图实现的目标。
    • @Ken:同意。提问者可能正在寻找 LSUIElement 应用程序。但是,我发现有机会拥有一个使用应用程序包的仅限控制台的应用程序。以防万一它对其他人有用,我会留下这个答案。
    • 这也是一个有用的答案,巴里,非常感谢。不过,Info.plist 中的 LSUIElement 条目让它变得非常简单。再次感谢。
    • @Matt - 同意;使用 LSUIElement。我将编辑我的答案以明确这一点,并且该信息实际上仅适用于您想使用应用程序包创建命令行应用程序(是的,我过去必须这样做)。
    【解决方案2】:

    我想创建一个没有 GUI 但确实有……一个应用程序包的帮助应用程序。

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

    【讨论】:

      猜你喜欢
      • 2017-12-11
      • 2012-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多