如何为 OS X 打包独立的 xulrunner 应用程序?
How to package a standalone xulrunner app for OS X?
我正在尝试为 OS X 10.9+ 创建一个 xulrunner 应用程序。我需要它是独立的,即不需要任何额外的附加软件(包括 Firefox)与应用程序一起安装在盒子上。
我无法 google 获得有关如何执行此操作的最新指南。看来我已经解决了这里描述的每个问题:https://bugzilla.mozilla.org/show_bug.cgi?id=923979
最后一个是:
$ 打开 MyApp.app
文件 /Path/To/MyApp.app 的 LSOpenURLsWithRole() 失败,错误为 -10810。
这是我目前所拥有的:
https://drive.google.com/file/d/0BxRquYs2Nx92ZTZaVjk0QThMN2c/view?usp=sharing
如何为现代 (v36+) xulrunner 应用程序创建 OS X .app?
您的方向是正确的,您面临的只是一个主要问题。
如果您运行通过命令行应用程序,您会得到这样的输出。
$ SampleApplication.app/Contents/MacOS/xulrunner
Mozilla XULRunner 33.0
Usage: xulrunner [OPTIONS]
xulrunner APP-FILE [APP-OPTIONS...]
OPTIONS
--app specify APP-FILE (optional)
-h, --help show this message
-v, --version show version
--gre-version print the GRE version string on stdout
APP-FILE
Application initialization file.
APP-OPTIONS
Application specific options
如我们所见,可执行文件不会像教程所说的那样自动 运行 和 Contents/Resources/application.ini
。这是一个已知问题,XULRunner 用户中流行的解决方法是创建存根 shell 脚本以将所需参数传递给 xulrunner
二进制文件。
这是我为此编写的脚本。
#!/bin/sh
runpath="`dirname "[=11=]"`"
contentsdir="`cd "$runpath"/.. > /dev/null && pwd`"
exec "$runpath/xulrunner" --app "$contentsdir/Resources/application.ini"
将此文本保存到您的 MacOS
目录中的文件中并赋予其可执行权限。例如,我将使用 sampleapplication
。这是设置可执行权限的命令。
chmod +x sampleapplication
现在,通过设置 CFBundleExecutable
条目以匹配存根 shell 脚本,修改您的 Info.plist
以执行此脚本而不是直接执行 xulrunner
。
<key>CFBundleExecutable</key>
<string>sampleapplication</string>
现在当您 运行 您的应用程序时,它应该可以工作。如果您收到错误提示“The application cannot be opened because its executable is missing”,您可能需要重命名应用程序包,或者按照该问题中的建议来避免缓存问题。
奖金信息
您可以删除 Contents/Frameworks/XUL.framework
目录,it is no longer used and placing the XUL.framework contents in the MacOS folder is now the correct place to put them。
您还应该将 dependentlibs.list
文件从 Contents/MacOS
复制到 Contents/Resources
目录,尽管没有它 XULRunner 33 似乎运行良好。
我正在尝试为 OS X 10.9+ 创建一个 xulrunner 应用程序。我需要它是独立的,即不需要任何额外的附加软件(包括 Firefox)与应用程序一起安装在盒子上。
我无法 google 获得有关如何执行此操作的最新指南。看来我已经解决了这里描述的每个问题:https://bugzilla.mozilla.org/show_bug.cgi?id=923979
最后一个是:
$ 打开 MyApp.app 文件 /Path/To/MyApp.app 的 LSOpenURLsWithRole() 失败,错误为 -10810。
这是我目前所拥有的:
https://drive.google.com/file/d/0BxRquYs2Nx92ZTZaVjk0QThMN2c/view?usp=sharing
如何为现代 (v36+) xulrunner 应用程序创建 OS X .app?
您的方向是正确的,您面临的只是一个主要问题。
如果您运行通过命令行应用程序,您会得到这样的输出。
$ SampleApplication.app/Contents/MacOS/xulrunner
Mozilla XULRunner 33.0
Usage: xulrunner [OPTIONS]
xulrunner APP-FILE [APP-OPTIONS...]
OPTIONS
--app specify APP-FILE (optional)
-h, --help show this message
-v, --version show version
--gre-version print the GRE version string on stdout
APP-FILE
Application initialization file.
APP-OPTIONS
Application specific options
如我们所见,可执行文件不会像教程所说的那样自动 运行 和 Contents/Resources/application.ini
。这是一个已知问题,XULRunner 用户中流行的解决方法是创建存根 shell 脚本以将所需参数传递给 xulrunner
二进制文件。
这是我为此编写的脚本。
#!/bin/sh
runpath="`dirname "[=11=]"`"
contentsdir="`cd "$runpath"/.. > /dev/null && pwd`"
exec "$runpath/xulrunner" --app "$contentsdir/Resources/application.ini"
将此文本保存到您的 MacOS
目录中的文件中并赋予其可执行权限。例如,我将使用 sampleapplication
。这是设置可执行权限的命令。
chmod +x sampleapplication
现在,通过设置 CFBundleExecutable
条目以匹配存根 shell 脚本,修改您的 Info.plist
以执行此脚本而不是直接执行 xulrunner
。
<key>CFBundleExecutable</key>
<string>sampleapplication</string>
现在当您 运行 您的应用程序时,它应该可以工作。如果您收到错误提示“The application cannot be opened because its executable is missing”,您可能需要重命名应用程序包,或者按照该问题中的建议来避免缓存问题。
奖金信息
您可以删除 Contents/Frameworks/XUL.framework
目录,it is no longer used and placing the XUL.framework contents in the MacOS folder is now the correct place to put them。
您还应该将 dependentlibs.list
文件从 Contents/MacOS
复制到 Contents/Resources
目录,尽管没有它 XULRunner 33 似乎运行良好。