#!/usr/bin/env bash # Based on https://gist.githubusercontent.com/oubiwann/453744744da1141ccc542ff75b47e0cf/raw/a28ece126d1ff7ec0bf851acce15175e4deceb7d/appify.sh set -eu set -o pipefail version=5.0 script=$(basename "$0") appname='' appicons="/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/GenericApplicationIcon.icns" appscript="" function usage { retval="$1" case "$retval" in 0) ;; *) exec 1>&2 ;; esac cat << EOF $script v${version} for for Mac OS X This version available at: https://stromberg.dnsalias.org/~strombrg/mactools/ Originally from: https://gist.github.com/oubiwann/453744744da1141ccc542ff75b47e0cf Usage: $script [options] Options: -h, --help Prints this help message, then exits --script Name of the script to 'appify' (required) --name Name of the application (required) --icons Name of the icons file to use when creating the app (defaults to $appicons) --version Prints the version of this script, then exits Description: Creates the simplest possible Mac app from a shell script. Appify has one required parameter, the script to appify: $script --script my-app-script.sh Note that you cannot rename appified apps. If you want to give your app a custom name, use the '--name' option $script --script my-app-script.sh --name "Sweet" Copyright: Copyright (c) Thomas Aylott Modified by Mathias Bynens Modified by Andrew Dvorak Rewritten by Duncan McGreggor Modified and adopted by Dan Stromberg EOF exit "$retval" } function version { echo "v${version}" exit 0 } while [ "$#" -ge 1 ] do case "$1" in -h|--help) usage 0 ;; --script) appscript="$2" shift ;; --name) appname="$2" shift ;; --icons) appicons="$2" shift ;; --version) version ;; *) echo "$0: unrecognized option: $1" 1>&2 usage 1 ;; esac shift done all_good=True if [ "$appscript" = "" ] then echo "$0: --script /where/ever is a required option" 1>&2 all_good=False elif [ ! -f "$appscript" ] then echo "Can't find the script '$appscript'" all_good=False fi if [ "$appname" = "" ] then echo "$0: --name is a required option" 1>&2 all_good=False fi if [ -d "$appname.app" ] then echo "The bundle '$appname.app' already exists" all_good=False fi if ! [ -f "$appicons" ] then echo "The icons file $appicons does not exist" all_good=False fi case "$all_good" in True) ;; False) echo "$0: one or more preflight checks failed. Exiting without creating an app bundle." 1>&2 exit 1 ;; *) echo "$0: Internal Error: \$all_good had a strange value: $all_good" 1>&2 exit 1 ;; esac appdir="$appname.app/Contents" mkdir -p "$appdir"/{MacOS,Resources} cp "$appicons" "$appdir/Resources/$appname.icns" cp "$appscript" "$appdir/MacOS/$appname" chmod +x "$appdir/MacOS/$appname" cat << EOF > "$appdir/Info.plist" CFBundleExecutable $appname CFBundleGetInfoString $appname CFBundleIconFile $appname CFBundleName $appname CFBundlePackageType APPL CFBundleSignature 4242 EOF echo "Things appear to have finished happy. Please move or copy $appname.app to /Applications now."