Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
appify — create the simplest possible Mac app from a shell script
#!/usr/bin/env bash
# Create a new super simple mac app
# Platform: Mac OS X
# Author: Thomas Aylott <oblivious@subtlegradient.com>
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"
@subtleGradient

This comment has been minimized.

Show comment Hide comment
@subtleGradient

subtleGradient Jul 19, 2011

@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 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

This comment has been minimized.

Show comment Hide comment
@mathiasbynens

mathiasbynens Jul 19, 2011

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.

Owner

mathiasbynens commented Jul 19, 2011

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

This comment has been minimized.

Show comment Hide comment
@andrewcase

andrewcase Jun 3, 2012

Great script guys! Thanks!

Great script guys! Thanks!

@subtleGradient

This comment has been minimized.

Show comment Hide comment
@subtleGradient

subtleGradient Jun 3, 2012

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

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

@jsbieber

This comment has been minimized.

Show comment Hide comment
@jsbieber

jsbieber Nov 1, 2012

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?

jsbieber commented Nov 1, 2012

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

This comment has been minimized.

Show comment Hide comment
@PacoH

PacoH Jul 5, 2014

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

PacoH commented Jul 5, 2014

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

This comment has been minimized.

Show comment Hide comment
@jayfresh

jayfresh Jul 28, 2014

same error message as PacoH for me, unfortunately!

same error message as PacoH for me, unfortunately!

@bhanquier

This comment has been minimized.

Show comment Hide comment
@bhanquier

bhanquier Dec 24, 2014

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!

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

This comment has been minimized.

Show comment Hide comment
@jrmedd

jrmedd Jan 19, 2015

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

jrmedd commented Jan 19, 2015

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

@gregd49

This comment has been minimized.

Show comment Hide comment
@gregd49

gregd49 Feb 28, 2015

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.

gregd49 commented Feb 28, 2015

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

This comment has been minimized.

Show comment Hide comment
@davidfavor

davidfavor Apr 14, 2015

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.

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

This comment has been minimized.

Show comment Hide comment
@andreif

andreif Jun 6, 2015

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

andreif commented Jun 6, 2015

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

@andreif

This comment has been minimized.

Show comment Hide comment
@bluejamesbond

This comment has been minimized.

Show comment Hide comment
@bluejamesbond

bluejamesbond Jun 15, 2015

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

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

@CosmicWebServices

This comment has been minimized.

Show comment Hide comment
@CosmicWebServices

CosmicWebServices Jul 2, 2015

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

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

@nueh

This comment has been minimized.

Show comment Hide comment
@nueh

nueh Jul 21, 2015

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

nueh commented Jul 21, 2015

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

@drew-kun

This comment has been minimized.

Show comment Hide comment
@drew-kun

drew-kun Oct 20, 2015

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

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?

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

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

This comment has been minimized.

Show comment Hide comment
@tilo

tilo Nov 12, 2015

+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 commented Nov 12, 2015

+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

This comment has been minimized.

Show comment Hide comment
@tilo

tilo Nov 12, 2015

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

tilo commented Nov 12, 2015

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

@yvanin

This comment has been minimized.

Show comment Hide comment
@yvanin

yvanin Jul 26, 2016

It started working (OS X 10.11.2) when I changed #!/bin/bash to #!/usr/bin/env bash at the first line of my .sh script

yvanin commented Jul 26, 2016

It started working (OS X 10.11.2) when I changed #!/bin/bash to #!/usr/bin/env bash at the first line of my .sh script

@holacode

This comment has been minimized.

Show comment Hide comment
@holacode

holacode Aug 6, 2016

use this awesome utility for creating .app package no error related to power pc
http://sveinbjorn.org/platypus

holacode commented Aug 6, 2016

use this awesome utility for creating .app package no error related to power pc
http://sveinbjorn.org/platypus

@pelizza

This comment has been minimized.

Show comment Hide comment
@pelizza

pelizza Aug 8, 2016

Hey guys,

Just put the correct shebang on your .sh file and everything will work fine. For instance: #!/bin/bash.
Also, don't forget to add execution permission for your .sh file: chmod +x myFile.sh.
With these steps, there is no PowerPC error :)

pelizza commented Aug 8, 2016

Hey guys,

Just put the correct shebang on your .sh file and everything will work fine. For instance: #!/bin/bash.
Also, don't forget to add execution permission for your .sh file: chmod +x myFile.sh.
With these steps, there is no PowerPC error :)

@davidroettger

This comment has been minimized.

Show comment Hide comment
@davidroettger

davidroettger Aug 15, 2016

Hi,
my script looks like this

#!/bin/bash
cd /Users/dr/Documents/Leo/leo-editor
python launchLeo.py

and i added the execution permission for my .sh file.

The applified application dies immediately and I see the following entry in the console log:

15/08/16 12:52:55,087 com.apple.xpc.launchd[1]: (com.apple.xpc.launchd.oneshot.0x10000046.leo[12195]) Service exited with abnormal code: 1

os is 10.11.5

Hi,
my script looks like this

#!/bin/bash
cd /Users/dr/Documents/Leo/leo-editor
python launchLeo.py

and i added the execution permission for my .sh file.

The applified application dies immediately and I see the following entry in the console log:

15/08/16 12:52:55,087 com.apple.xpc.launchd[1]: (com.apple.xpc.launchd.oneshot.0x10000046.leo[12195]) Service exited with abnormal code: 1

os is 10.11.5

@labor4

This comment has been minimized.

Show comment Hide comment
@labor4

labor4 Nov 21, 2016

here's a hack to make it open in Mac Terminal:
https://github.com/labor4/ya-appify

labor4 commented Nov 21, 2016

here's a hack to make it open in Mac Terminal:
https://github.com/labor4/ya-appify

@oubiwann

This comment has been minimized.

Show comment Hide comment
@oubiwann

oubiwann Dec 9, 2016

I forked this and added option-parsing, overridable icons file, and some other bits: https://gist.github.com/oubiwann/453744744da1141ccc542ff75b47e0cf

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

@aleclarson

This comment has been minimized.

Show comment Hide comment
@aleclarson

aleclarson Jul 26, 2017

Trying to run Electron without using electron-packager.

I can get open MyApp.app in the Terminal to work.

But not when I double-click from the Finder, or right-click and select "Open".

Here are the repro steps:

  • Create MyApp.app/Contents/MacOS/MyApp
  • Modify the shell script:
#!/bin/bash
cd $(dirname "$0")/../../..
./node_modules/.bin/electron .
  • Call chmod +x MyApp.app/Contents/MacOS/MyApp
  • Confirm open MyApp.app works as intended
  • Confirm double-clicking in the Finder does nothing

Any help would be awesome.

Edit

Looks like it wasn't working because node_modules/.bin/electron spawns a child process.

This works as intended:

../node_modules/electron/dist/Electron.app/Contents/MacOS/Electron .

aleclarson commented Jul 26, 2017

Trying to run Electron without using electron-packager.

I can get open MyApp.app in the Terminal to work.

But not when I double-click from the Finder, or right-click and select "Open".

Here are the repro steps:

  • Create MyApp.app/Contents/MacOS/MyApp
  • Modify the shell script:
#!/bin/bash
cd $(dirname "$0")/../../..
./node_modules/.bin/electron .
  • Call chmod +x MyApp.app/Contents/MacOS/MyApp
  • Confirm open MyApp.app works as intended
  • Confirm double-clicking in the Finder does nothing

Any help would be awesome.

Edit

Looks like it wasn't working because node_modules/.bin/electron spawns a child process.

This works as intended:

../node_modules/electron/dist/Electron.app/Contents/MacOS/Electron .
@Panther22881

This comment has been minimized.

Show comment Hide comment
@Panther22881

Panther22881 Mar 14, 2018

can any one help???
im only new to mac and command line entry im trying to see if any on can turn 2 commands into a ON / OFF switch/toggle? that i can just click to open from desktop or something with a status icon so you know it on or off

ON:
"sudo pmset -b sleep 0; sudo pmset -b disablesleep 1"

OFF:
sudo pmset -b sleep 5; sudo pmset -b disablesleep 0

can any one help???
im only new to mac and command line entry im trying to see if any on can turn 2 commands into a ON / OFF switch/toggle? that i can just click to open from desktop or something with a status icon so you know it on or off

ON:
"sudo pmset -b sleep 0; sudo pmset -b disablesleep 1"

OFF:
sudo pmset -b sleep 5; sudo pmset -b disablesleep 0

@willbprog127

This comment has been minimized.

Show comment Hide comment
@willbprog127

willbprog127 Mar 30, 2018

Thanks so much for this!

I tried the Automater way of doing it, but it wasn't ideal. After removing the parameter variable from my command ("$@"), it worked fine...the applified app wouldn't launch with it there.

willbprog127 commented Mar 30, 2018

Thanks so much for this!

I tried the Automater way of doing it, but it wasn't ideal. After removing the parameter variable from my command ("$@"), it worked fine...the applified app wouldn't launch with it there.

@Bachsau

This comment has been minimized.

Show comment Hide comment
@Bachsau

Bachsau Apr 14, 2018

When you're troubleshooting problems, it might look like changes to the shebang line or such things could do the trick, but they do not. The problem is that macOS caches app information which might result in things not working even after you modified the bundle. If that is the case, just run "touch" on your application's bundle. That will make macOS re-read your Info.plist.

Bachsau commented Apr 14, 2018

When you're troubleshooting problems, it might look like changes to the shebang line or such things could do the trick, but they do not. The problem is that macOS caches app information which might result in things not working even after you modified the bundle. If that is the case, just run "touch" on your application's bundle. That will make macOS re-read your Info.plist.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment