You are on the right track, there is only one serious problem that you are facing.
If you run the application on the command line, you will get this output.
$ 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
As we can see, the executable did not automatically launch Contents/Resources/application.ini , as they say in the textbooks. This is a known issue, and a popular workaround among XULRunner users is to create a script stub to pass the required argument to the xulrunner binary.
Here is the script I took to to do just that.
#!/bin/sh runpath="`dirname "$0"`" contentsdir="`cd "$runpath"/.. > /dev/null && pwd`" exec "$runpath/xulrunner" --app "$contentsdir/Resources/application.ini"
Save this text in a file in the MacOS directory and give it permission to execute. For an example, I will use sampleapplication . Here is the command to set executable permissions.
chmod +x sampleapplication
Now modify your Info.plist to execute this script, instead of executing xulrunner directly, setting the CFBundleExecutable entry to match your script stub shell.
<key>CFBundleExecutable</key> <string>sampleapplication</string>
Now when you start the application, it should work. If you get the error message βThe application cannot be opened because its executable file is missing β, you may want to rename the application package or follow the recommendations on this issue to avoid the cache problem.
Bonus Information
You can delete the Contents/Frameworks/XUL.framework , it is no longer used, and placing the contents of XUL.framework in the MacOS folder is now the right place to place it .
You should also copy the dependentlibs.list file from the Contents/MacOS directory to the Contents/Resources directory, although XULRunner 33 seems to work fine without it.