Mac 应用程序包能够启动多个实例
Posted
技术标签:
【中文标题】Mac 应用程序包能够启动多个实例【英文标题】:Mac application bundle able to launch multiple instances 【发布时间】:2015-02-16 09:05:08 【问题描述】:问题:如何创建一个可以默认打开多个实例的Mac应用程序?
通常,Mac 应用程序包维护一个 Mac 程序实例。也就是说,如果我双击“VLC”,它将打开 VLC 程序。如果我再次双击,它将把以前的 VLC 窗口带到前台;它不会打开 VLC 的新实例。但是如果我在 VLC 上运行“open -n”,它会强制 VLC 打开第二个实例。
我正在创建一个 Mac 应用程序包,并希望用户第二次双击以启动该应用程序的第二个实例。我找不到在 Info.plist 中使用的任何相关键。有什么想法吗?
【问题讨论】:
XCode ?吗?爪哇? ... ? 使用 Oracle 的 AppBundler 捆绑的 Java 应用程序:java.net/projects/appbundler。在执行启动的 .app/Contents/MacOS 中生成“JavaAppLauncher”二进制文件。 JavaAppLauncher 二进制文件的创建发生在 main.m 中:java.net/projects/appbundler/sources/svn/show/appbundler/… JavaAppLauncher 是一个通用的 Mac 二进制启动器,它解析来自 Info.plist 的选项,然后使用这些选项启动 Java。它的源代码在这里:java.net/projects/appbundler/sources/svn/show/appbundler/…。我假设 Launcher 的相关性较低,并且应该有一种方法可以在 Bundle 级别控制这种单实例行为。这就是为什么我认为 Info.plist 中会有一个标志,但我没有看到任何相关内容。 【参考方案1】:将open -n
命令捆绑到应用程序包中的shell 脚本中,并让它启动您的主应用程序。
【讨论】:
偶然发现这个试图做类似的事情。当直接从终端调用 shell 脚本时,它似乎可以工作。在 shell 脚本的 info.plist 中指向 CFBundleExecutable 似乎不起作用。双击 finder 中的图标仍然只启动一个实例。似乎 macos 故意停止这种解决方法。以上是关于Mac 应用程序包能够启动多个实例的主要内容,如果未能解决你的问题,请参考以下文章
在 Mac OS X 上运行同一应用程序(Firefox、Opera 等)的多个实例?