Skip to content
Create a gist now

Instantly share code, notes, and snippets.

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 <oblivious@subtlegradient.com>
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
[[ ! $REPLY ]] && continue
echo "$REPLY" >> "$APPNAME.app/Contents/MacOS/$APPNAME"
done
echo "$PWD/$APPNAME.app"
@subtleGradient

@mathiasbynens FTW!
Much better.

I tried to make it work using cp before but couldn't get it working for some strange reason. I forget the original issue I ran into.

@mathiasbynens

Feel free to backport these changes into your original gist if you like! It’s still your script :) I’ll update my blog post accordingly.

@andrewcase

Great script guys! Thanks!

@subtleGradient

Be sure to check out Appify UI also: https://github.com/subtleGradient/Appify-UI

@jsbieber

I used this today to on a .sh script of mine. When launching the app it states: "You can't open the application...because PowerPC applications are no longer supported. I'm running Mountain Lion. My .sh script runs fine natively, it is small and just uses a couple curl lines to download some tar.gz files. Any ideas?

@PacoH

OS X 10.8.5:
You can’t open the application “My App.app” because it is not supported on this type of Mac

@jayfresh

same error message as PacoH for me, unfortunately!

@bhanquier

Same problem, the end result seems to be a PowerPC app. I guess it's just a matter of changing one of the triggers (?) but which one… If somebody has an idea, it would be great!

@jrmedd

I got around that PowerPC issue by ensuring that #!/bin/bash was at the top of my script ;)

@gregd49

Running on mac OSX 10.10.2
I had trouble with the powerpc error.
I had to add the #!/bin/bash line to my shell script as noted above.
I had to modify my plist to be correct as noted previously.
In particular I had to change CFBundleSignature from ???? to a 4 character string.
It then worked for me.

@davidfavor

Can someone post a simple .plist file that does the following...

1) Allows App to be a drag + drop target.

2) Passes dropped files into script $* to allow files to be dropped on App.

I'll also look around + if I find a good example, post it here.

Thanks.

@andreif

I made it to work on OS X 10.10 by adding file $APPNAME.app/Contents/Info.plist containing <plist><dict></dict></plist>

@bluejamesbond

Neat idea. However, what directory does the script run in so that I can use relative paths?

@CosmicWebServices

-bash: /Users/--------/Desktop/appify.sh: Permission denied

@nueh

@CosmicWebServices
chmod +x /Users/--------/Desktop/appify.sh

@Drewshg312

OS X 10.10.5: You can’t open the application “My App.app” because it is not supported on this type of Mac
:disappointed:

adding the Info.plist with next content didn't help:

<?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>MyApp</string>
    <key>CFBundleGetInfoString</key>
    <string>MyApp</string>
    <key>CFBundleIconFile</key>
    <string>MyApp</string>
    <key>CFBundleName</key>
    <string>MyApp</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
</dict>
</plist>

Any ideas how to make it work on Yosemite?

@tilo

+1 any idea on how to make this work on OS X 10.10 or higher?
I'm not familiar with the OS X plists internals... could somebody please post a working example?

@tilo

I worked for me after I ran this: /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -f MyAppName.app

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.