Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
appify — create the simplest possible Mac app from a shell script (adds an application icon)
#!/bin/bash
if [ "$1" = "-h" -o "$1" = "--help" ]; then cat <<EOF
appify v3.0.0 for Mac OS X - http://mths.be/appify
Creates the simplest possible Mac app from a shell script.
Appify takes a shell script as its first argument:
`basename "$0"` my-script.sh
Note that you cannot rename appified apps. If you want to give your app
a custom name, use the second argument:
`basename "$0"` my-script.sh "My App"
Copyright (c) Thomas Aylott <http://subtlegradient.com/>
Modified by Mathias Bynens <http://mathiasbynens.be/>
Modified by Andrew Dvorak <http://OhReally.net/>
EOF
exit; fi
# OSX_VERSION is currently unused, though knowing this may help, since the
# GenericApplicationIcon.icns file may be located elsewhere pre-10.6.x
OSX_VERSION=`sw_vers -productVersion`
APPNAME=${2:-$(basename "$1" ".sh")}
DIR="$APPNAME.app/Contents"
if [ -a "$APPNAME.app" ]; then
echo "$PWD/$APPNAME.app already exists :("
exit 1
fi
mkdir -p $DIR/{MacOS,Resources}
# Copy Apple's GenericApplicationIcon to our application.
# - TODO: provide command-line options for specifying an icon to use
# (maybe even allow the user to specify an)
cp "/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/GenericApplicationIcon.icns" "$DIR/Resources/$APPNAME.icns"
cp "$1" "$DIR/MacOS/$APPNAME"
chmod +x "$DIR/MacOS/$APPNAME"
cat <<EOF > $DIR/Info.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleExecutable</key>
<string>$APPNAME</string>
<key>CFBundleGetInfoString</key>
<string>$APPNAME</string>
<key>CFBundleIconFile</key>
<string>$APPNAME</string>
<key>CFBundleName</key>
<string>$APPNAME</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
</dict>
</plist>
EOF
echo "$PWD/$APPNAME.app"
@advorak

This comment has been minimized.

Copy link
Owner Author

commented Nov 29, 2011

I've added the ability to use a custom *.icns file (this creates an Info.plist and $APPNAME.icns file)...

I don't know much about bash scripting and want to learn more about using 'getopt' in order to introduce options that the user can use to specify a custom icon filename, as well as other options...

@splaisan

This comment has been minimized.

Copy link

commented Nov 25, 2015

@kliuless

This comment has been minimized.

Copy link

commented Jun 17, 2016

Thanks for this. Confirmed working on El Capitan.

@Atcold

This comment has been minimized.

Copy link

commented Jun 19, 2016

Missing -o -z "$1" in your line 3, before ].

@Atcold

This comment has been minimized.

Copy link

commented Jun 19, 2016

And this script breaks when apps name have spaces in it, whereas the original version was robust in this matter.
See instructions:

Note that you cannot rename appified apps. If you want to give your app
a custom name, use the second argument:
    appify my-script.sh "My App"
@mems

This comment has been minimized.

Copy link

commented Jun 22, 2016

To fix errors for app name with spaces:

@@ -34,1 +34,1 @@
- mkdir -p $DIR/{MacOS,Resources}
+ mkdir -p "$DIR"/{MacOS,Resources}
@@ -44,1 +44,1 @@
- cat <<EOF > "$DIR/Info.plist"
+ cat <<EOF > $DIR/Info.plist
@sandalsoft

This comment has been minimized.

Copy link

commented Jul 9, 2016

Anyone know how to make the appify'd app appear in the ⌘-tab application switcher, display the namenext to the  in the top left and show up in the dock? My app runs fine, but it's hard to go back and forth to the app once the window loses focus without a dock icon or ⌘-tab'ing to it.

This screenshot shows this behavior: http://c.b0.io/gfGK The appify'd app is active and has focus, but does not have it's name in the top left corner of the desktop and does not show up in the application switcher. Not pictured is the lack of a dock icon. (the application switcher is faded because it was hard to get a screenshot while ⌘-tab'ing). The app is a shell script that calls a Java GUI app, in case that matters.

@WindProphet

This comment has been minimized.

Copy link

commented Aug 26, 2016

You can’t open the application “exec” because PowerPC applications are no longer supported.

such a problem appear

@dreamcarrior

This comment has been minimized.

Copy link

commented Oct 30, 2016

yvanin commented on Jul 26 in https://gist.github.com/mathiasbynens/674099 solved the problem "You can’t open the application “exec” because PowerPC applications are no longer supported." by the following method:
It started working (OS X 10.11.2) when I changed #!/bin/bash to #!/usr/bin/env bash at the first line of my .sh script

And you have to make sure that your original script has similar lines to set up the environment

!/bin/bash

Otherwise, you will have to go into $APPNAME.app/Contents/MacOS/$APPNAME and add the environment line at the top of the script.

@oubiwann

This comment has been minimized.

Copy link

commented Dec 9, 2016

I forked this and added option-parsing, overridable icons file, and some other bits: https://gist.github.com/oubiwann/453744744da1141ccc542ff75b47e0cf

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.