Skip to content

Instantly share code, notes, and snippets.

@jbott
Forked from advorak/appify.sh
Last active August 29, 2015 14:26
Show Gist options
  • Save jbott/b20af49b377cf1e04ddd to your computer and use it in GitHub Desktop.
Save jbott/b20af49b377cf1e04ddd to your computer and use it in GitHub Desktop.
appify — create the simplest possible Mac app from a shell script (adds an application icon) (Working with ZSH with spaces in the name)
#!/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"
mkdir -p "$DIR/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"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment