Skip to content

Instantly share code, notes, and snippets.

@ivan-leschinsky
Forked from splaisan/appify.sh
Created October 17, 2023 07:35
Show Gist options
  • Save ivan-leschinsky/d83c565fcb2d083a5cb89cbf503e80c5 to your computer and use it in GitHub Desktop.
Save ivan-leschinsky/d83c565fcb2d083a5cb89cbf503e80c5 to your computer and use it in GitHub Desktop.

Revisions

  1. @splaisan splaisan revised this gist Nov 25, 2015. 1 changed file with 59 additions and 29 deletions.
    88 changes: 59 additions & 29 deletions appify.sh
    Original file line number Diff line number Diff line change
    @@ -1,45 +1,75 @@
    #!/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.
    # script: appify.sh
    # minor edits from https://gist.github.com/advorak/1403124

    Appify takes a shell script as its first argument:
    # usage and cli args
    usage="Creates the simplest possible Mac app from a shell script.\n\
    Usage: `basename "$0"` -s <shell-script.sh> -n <app-name>\n\
    [optional: -i <icon.icn> -h <help>]\n\
    \n\
    Copyright (c) Thomas Aylott <http://subtlegradient.com/>\n\
    Modified by Mathias Bynens <http://mathiasbynens.be/>\n\
    Modified by Andrew Dvorak <http://OhReally.net/>\n\
    Modified by Stephane Plaisance (support for opt:arguments)"

    `basename "$0"` my-script.sh
    while getopts "s:n:i:h" opt; do
    case $opt in
    s) script=${OPTARG} ;;
    n) name=${OPTARG} ;;
    i) icon=${OPTARG} ;;
    h) echo -e ${usage} >&2; exit 0 ;;
    \?) echo "Invalid option: -$OPTARG" >&2; exit 1 ;;
    *) echo "this command requires arguments, try -h" >&2; exit 1 ;;
    esac
    done

    Note that you cannot rename appified apps. If you want to give your app
    a custom name, use the second argument:
    # test minimal argument
    if [ -z "${script}" ]; then
    echo "# no input script provided!"
    echo -e ${usage} >&2
    exit 1
    fi

    `basename "$0"` my-script.sh "My App"
    # test input files
    if [ ! -f "${script}" ]; then
    echo "# ${script} file not found!" >&2
    exit 1
    fi

    Copyright (c) Thomas Aylott <http://subtlegradient.com/>
    Modified by Mathias Bynens <http://mathiasbynens.be/>
    Modified by Andrew Dvorak <http://OhReally.net/>
    EOF
    exit; fi
    # test optional args
    if [ -z "${name}" ]; then
    APPNAME=$(basename "${script}" ".sh")
    else
    APPNAME=${name}
    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`
    if [ -a "${APPNAME}.app" ]; then
    echo "# $PWD/${APPNAME}.app already exists, use -n <appname>!" >&2
    exit 1
    fi

    APPNAME=${2:-$(basename "$1" ".sh")}
    DIR="$APPNAME.app/Contents"
    if [ -z "${icon}" ]; then
    # support for custom icon with default
    ICONFOLD="/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/"
    CUSTICON="${ICONFOLD}/GenericApplicationIcon.icns"
    else
    CUSTICON=${icon}
    fi

    if [ -a "$APPNAME.app" ]; then
    echo "$PWD/$APPNAME.app already exists :("
    exit 1
    if [ ! -f ${CUSTICON} ]; then
    echo "# ${CUSTICON} file not found!" >&2
    exit 1
    fi

    mkdir -p $DIR/{MacOS,Resources}
    # define output path
    DIR="${APPNAME}.app/Contents"
    mkdir -p $DIR/{MacOS,Resources} || (echo "error creating the App container" >&2; exit 1);

    # 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"
    cp "${CUSTICON}" "${DIR}/Resources/${APPNAME}.icns"
    cp "${script}" "${DIR}/MacOS/${APPNAME}"
    chmod +x "${DIR}/MacOS/${APPNAME}"

    cat <<EOF > $DIR/Info.plist
    <?xml version="1.0" encoding="UTF-8"?>
    @@ -60,4 +90,4 @@ cat <<EOF > $DIR/Info.plist
    </plist>
    EOF

    echo "$PWD/$APPNAME.app"
    echo "$PWD/${APPNAME}.app was created"
  2. @advorak advorak renamed this gist Nov 29, 2011. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  3. @advorak advorak revised this gist Nov 29, 2011. 1 changed file with 35 additions and 5 deletions.
    40 changes: 35 additions & 5 deletions appify
    Original file line number Diff line number Diff line change
    @@ -15,19 +15,49 @@ a custom name, use the second argument:
    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/MacOS"
    DIR="$APPNAME.app/Contents"

    if [ -a "$APPNAME.app" ]; then
    echo "$PWD/$APPNAME.app already exists :("
    exit 1
    fi

    mkdir -p "$DIR"
    cp "$1" "$DIR/$APPNAME"
    chmod +x "$DIR/$APPNAME"
    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"
    echo "$PWD/$APPNAME.app"
  4. @mathiasbynens mathiasbynens revised this gist Sep 17, 2011. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion appify
    Original file line number Diff line number Diff line change
    @@ -21,7 +21,7 @@ exit; fi
    APPNAME=${2:-$(basename "$1" ".sh")}
    DIR="$APPNAME.app/Contents/MacOS"

    if [[ -a "$APPNAME.app" ]]; then
    if [ -a "$APPNAME.app" ]; then
    echo "$PWD/$APPNAME.app already exists :("
    exit 1
    fi
  5. @mathiasbynens mathiasbynens revised this gist Jul 19, 2011. 1 changed file with 27 additions and 24 deletions.
    51 changes: 27 additions & 24 deletions appify
    Original file line number Diff line number Diff line change
    @@ -1,30 +1,33 @@
    #!/usr/bin/env bash
    #
    # url : https://gist.github.com/672684
    # version : 2.0.3
    # name : appify
    # description : Create the simplest possible mac app from a shell script.
    # usage : cat my-script.sh | appify MyApp
    # platform : Mac OS X
    # author : Thomas Aylott <[email protected]>

    APPNAME=${1:-Untitled}
    #!/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/>
    EOF
    exit; fi

    APPNAME=${2:-$(basename "$1" ".sh")}
    DIR="$APPNAME.app/Contents/MacOS"

    if [[ -a "$APPNAME.app" ]]; then
    echo "App already exists :'(" >&2
    echo "$PWD/$APPNAME.app"
    exit 1
    echo "$PWD/$APPNAME.app already exists :("
    exit 1
    fi

    mkdir -p "$APPNAME.app/Contents/MacOS"
    touch "$APPNAME.app/Contents/MacOS/$APPNAME"
    chmod +x "$APPNAME.app/Contents/MacOS/$APPNAME"

    DONE=false
    until $DONE ;do
    read || DONE=true
    [[ ! $REPLY ]] && continue
    echo "$REPLY" >> "$APPNAME.app/Contents/MacOS/$APPNAME"
    done
    mkdir -p "$DIR"
    cp "$1" "$DIR/$APPNAME"
    chmod +x "$DIR/$APPNAME"

    echo "$PWD/$APPNAME.app"
  6. @mathiasbynens mathiasbynens revised this gist Nov 12, 2010. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion appify
    Original file line number Diff line number Diff line change
    @@ -1,7 +1,7 @@
    #!/usr/bin/env bash
    #
    # url : https://gist.github.com/672684
    # version : 2.0.2
    # version : 2.0.3
    # name : appify
    # description : Create the simplest possible mac app from a shell script.
    # usage : cat my-script.sh | appify MyApp
  7. @mathiasbynens mathiasbynens revised this gist Nov 12, 2010. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions appify
    Original file line number Diff line number Diff line change
    @@ -23,6 +23,7 @@ chmod +x "$APPNAME.app/Contents/MacOS/$APPNAME"
    DONE=false
    until $DONE ;do
    read || DONE=true
    [[ ! $REPLY ]] && continue
    echo "$REPLY" >> "$APPNAME.app/Contents/MacOS/$APPNAME"
    done

  8. @mathiasbynens mathiasbynens revised this gist Nov 12, 2010. 1 changed file with 0 additions and 2 deletions.
    2 changes: 0 additions & 2 deletions appify
    Original file line number Diff line number Diff line change
    @@ -26,6 +26,4 @@ until $DONE ;do
    echo "$REPLY" >> "$APPNAME.app/Contents/MacOS/$APPNAME"
    done

    echo "" >> "$APPNAME.app/Contents/MacOS/$APPNAME"

    echo "$PWD/$APPNAME.app"
  9. @mathiasbynens mathiasbynens revised this gist Nov 12, 2010. 1 changed file with 8 additions and 4 deletions.
    12 changes: 8 additions & 4 deletions appify
    Original file line number Diff line number Diff line change
    @@ -1,7 +1,7 @@
    #!/usr/bin/env bash
    #
    # url : https://gist.github.com/672684
    # version : 2.0.1
    # version : 2.0.2
    # name : appify
    # description : Create the simplest possible mac app from a shell script.
    # usage : cat my-script.sh | appify MyApp
    @@ -20,8 +20,12 @@ mkdir -p "$APPNAME.app/Contents/MacOS"
    touch "$APPNAME.app/Contents/MacOS/$APPNAME"
    chmod +x "$APPNAME.app/Contents/MacOS/$APPNAME"

    while read SCRIPT_SOURCE_LINE; do
    echo "$SCRIPT_SOURCE_LINE" >> "$APPNAME.app/Contents/MacOS/$APPNAME"
    DONE=false
    until $DONE ;do
    read || DONE=true
    echo "$REPLY" >> "$APPNAME.app/Contents/MacOS/$APPNAME"
    done

    echo "$PWD/$APPNAME.app"
    echo "" >> "$APPNAME.app/Contents/MacOS/$APPNAME"

    echo "$PWD/$APPNAME.app"
  10. @subtleGradient subtleGradient revised this gist Nov 11, 2010. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions appify
    Original file line number Diff line number Diff line change
    @@ -1,7 +1,7 @@
    #!/usr/bin/env bash
    #
    # url : https://gist.github.com/672684
    # version : 2.0
    # version : 2.0.1
    # name : appify
    # description : Create the simplest possible mac app from a shell script.
    # usage : cat my-script.sh | appify MyApp
    @@ -11,7 +11,7 @@
    APPNAME=${1:-Untitled}

    if [[ -a "$APPNAME.app" ]]; then
    echo "App already exists" >&2
    echo "App already exists :'(" >&2
    echo "$PWD/$APPNAME.app"
    exit 1
    fi
  11. @subtleGradient subtleGradient revised this gist Nov 11, 2010. 1 changed file with 20 additions and 7 deletions.
    27 changes: 20 additions & 7 deletions appify
    Original file line number Diff line number Diff line change
    @@ -1,14 +1,27 @@
    #!/usr/bin/env bash
    # Create a new super simple mac app
    # Platform: Mac OS X
    # Author: Thomas Aylott <[email protected]>
    #
    # url : https://gist.github.com/672684
    # version : 2.0
    # name : appify
    # description : Create the simplest possible mac app from a shell script.
    # usage : cat my-script.sh | appify MyApp
    # platform : Mac OS X
    # author : Thomas Aylott <[email protected]>

    APPNAME=${1:-Untitled}

    if [[ -a "$APPNAME.app" ]]; then
    echo "App already exists" >&2
    echo "$PWD/$APPNAME.app"
    exit 1
    fi

    mkdir -p "$APPNAME.app/Contents/MacOS"
    cat > "$APPNAME.app/Contents/MacOS/$APPNAME" <<EOF
    #!/usr/bin/osascript
    say "Hello"
    EOF
    touch "$APPNAME.app/Contents/MacOS/$APPNAME"
    chmod +x "$APPNAME.app/Contents/MacOS/$APPNAME"

    while read SCRIPT_SOURCE_LINE; do
    echo "$SCRIPT_SOURCE_LINE" >> "$APPNAME.app/Contents/MacOS/$APPNAME"
    done

    echo "$PWD/$APPNAME.app"
  12. @subtleGradient subtleGradient created this gist Nov 11, 2010.
    14 changes: 14 additions & 0 deletions appify
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,14 @@
    #!/usr/bin/env bash
    # Create a new super simple mac app
    # Platform: Mac OS X
    # Author: Thomas Aylott <[email protected]>

    APPNAME=${1:-Untitled}

    mkdir -p "$APPNAME.app/Contents/MacOS"
    cat > "$APPNAME.app/Contents/MacOS/$APPNAME" <<EOF
    #!/usr/bin/osascript
    say "Hello"
    EOF
    chmod +x "$APPNAME.app/Contents/MacOS/$APPNAME"
    echo "$PWD/$APPNAME.app"