Skip to content

Instantly share code, notes, and snippets.

@subtleGradient
Created November 11, 2010 16:03
Show Gist options
  • Save subtleGradient/672684 to your computer and use it in GitHub Desktop.
Save subtleGradient/672684 to your computer and use it in GitHub Desktop.
appify. Create the simplest possible mac app from a shell script
#!/usr/bin/env bash
#
# url : https://gist.github.com/672684
# version : 2.0.2
# 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"
touch "$APPNAME.app/Contents/MacOS/$APPNAME"
chmod +x "$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"
@mathiasbynens
Copy link

appify v2.0.1 assumes my-script.sh has a newline at the end of the file. If not, it will chop off the last line, effectively breaking the generated app. I’ve fixed this in my fork of this gist, by replacing the while read loop with this:

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

Paul: http://mathiasbynens.be/notes/shell-script-mac-apps#chrome-bootstrappers

@subtleGradient
Copy link
Author

Updated to your 2.0.2!
Thanks Mathias!

@subtleGradient
Copy link
Author

@mathiasbynens
Copy link

You could also add [[ ! $REPLY ]] && continue after line 25, which will cause all redundant newlines to be skipped. (See my fork.)

@subtleGradient
Copy link
Author

Maybe it should just cp the file in there instead and avoid all these silly issues.

@mathiasbynens
Copy link

Hey @subtleGradient, I just rewrote appify so it uses cp which avoids a lot of problems. Check it out: https://gist.github.com/674099

@andreif
Copy link

andreif commented Jun 6, 2015

It wouldn't work on OS X 10.10 until I added $APPNAME.app/Contents/Info.plist containing at least <plist><dict></dict></plist>

@phasstw
Copy link

phasstw commented Aug 9, 2016

I created an app, but it won't execute when I double-click on the bundle. It is just a #!/bin/sh script that has a echo "hello world" statement in it for testing purposes. Can someone give me some guidance on how to get my app to run from clicking on the bundle? Appify did not create a Info.plist file for me, maybe this is the issue? What needs to be in that file? Thanks!

@oubiwann
Copy link

oubiwann 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