macos - 可执行文件是否总是在 MacOS 上打开终端窗口?

标签 macos terminal executable app-bundle

我使用的是 MacOS X,我对应用程序包类型的东西还很陌生。我正在编写一个程序来打开一个窗口并注册鼠标输入——而不是一个命令行工具。当我将我的代码(用 C 编写,如果这很重要)编译成一个可执行文件(一个“unix 可执行文件”)然后直接运行该文件(例如通过双击它)时,会弹出一个终端窗口,然后然后程序的窗口弹出。同样,如果我导航到可执行文件的目录并从命令行打开它,它会弹出打开的/another/终端窗口,然后是程序的窗口。

但是,如果我将可执行文件包装在一个包中(因此,我想,将其变成一个合适的“应用程序”),那么当我运行该应用程序时,无论是通过双击还是从命令行,程序的窗口都会打开并且没有创建新的终端窗口。这仅仅是“app bundle”架构的一个属性吗?或者有没有一种方法可以在不产生另一个终端窗口的情况下运行原始可执行文件?我怀疑我误解了一些基本的东西。提前致谢!

最佳答案

我相信您所看到的是正确的。为了不弹出单独的窗口,您需要将其封装到一个包中。

通过双击 bundle 或使用终端中的“打开”命令启动使用 Apple 的 Launch Services ,它维护着一个已知(已注册)应用程序的列表。当应用程序(bundle)被引入系统时,它会在 Launch Services 中注册并与其 URI(例如 com.apple.calculator)相关联,URI 存在于 bundle 的 Info.plist 中

Info.plist 中的其他项目告诉启动服务如何处理应用程序,例如检查是否超过操作系统的最低或最高版本,或者是否显示停靠项目。

一个单独的二进制文件没有关联的 Info.plist list ,因此它的行为无法改变,并且终端窗口会打开。

关于macos - 可执行文件是否总是在 MacOS 上打开终端窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30713057/

相关文章:

objective-c - 如何从文件名不是 URL 一部分的 URL 下载文件(iOS/Cocoa SDK)

objective-c - CMake编译swift项目

java - TestNG:如何在命令行上放置 java 方法的参数?

python - 使用 cx_Freeze 的下一步是什么?

macos - 在 Mac OSX Sierra 上重新打开相机并显示时 OpenCV 崩溃

macos - 操作系统 X : Show interface of application agent (UIElement)

python - 在 MacOs Python shell 中粘贴多行返回 SyntaxError

macos - zsh:找不到命令(对于 $EDITOR)

java - 我已经设法编译了 java 程序,但我无法执行它

linux通过完整路径执行二进制文件