Skip to content

Instantly share code, notes, and snippets.

@mathiasbynens
Forked from subtleGradient/appify
Created November 12, 2010 13:46
Show Gist options
  • Select an option

  • Save mathiasbynens/674099 to your computer and use it in GitHub Desktop.

Select an option

Save mathiasbynens/674099 to your computer and use it in GitHub Desktop.
appify — create the simplest possible Mac app from a shell script
#!/bin/bash
if [ "$1" = "-h" -o "$1" = "--help" -o -z "$1" ]; then cat <<EOF
appify v3.0.1 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 "$PWD/$APPNAME.app already exists :("
exit 1
fi
mkdir -p "$DIR"
cp "$1" "$DIR/$APPNAME"
chmod +x "$DIR/$APPNAME"
echo "$PWD/$APPNAME.app"
@tilo

tilo commented Nov 12, 2015

Copy link
Copy Markdown

+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

tilo commented Nov 12, 2015

Copy link
Copy Markdown

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

@yvanin

yvanin commented Jul 26, 2016

Copy link
Copy Markdown

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

holacode commented Aug 6, 2016

Copy link
Copy Markdown

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

@pelizza

pelizza commented Aug 8, 2016

Copy link
Copy Markdown

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

Copy link
Copy Markdown

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

labor4 commented Nov 21, 2016

Copy link
Copy Markdown

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

@oubiwann

oubiwann commented Dec 9, 2016

Copy link
Copy Markdown

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

@aleclarson

aleclarson commented Jul 26, 2017

Copy link
Copy Markdown

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

Copy link
Copy Markdown

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

willbprog127 commented Mar 30, 2018

Copy link
Copy Markdown

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.

@Geri-Borbas

Copy link
Copy Markdown

Adding plist and make sure that schell scripts and plist values have the same name as the app made it work fine.

@thedzy

thedzy commented Oct 21, 2018

Copy link
Copy Markdown

You can grab out of my frameworks and just edit the script continained.
https://github.com/thedzy/Run-script-as-an-Applicaiton

@mdfalcon104

Copy link
Copy Markdown

How to add icon to this mac app generated?

@timelessthee

Copy link
Copy Markdown

You can grab out of my frameworks and just edit the script continained.
https://github.com/thedzy/Run-script-as-an-Applicaiton

Thank you for this. Much appreciated.

@Inthenew

Copy link
Copy Markdown

don't do /Users/--------/Desktop/appify.sh: Permission denied
instead do sh /Users/--------/Desktop/appify.sh

@mgdmdz

mgdmdz commented Jul 28, 2022

Copy link
Copy Markdown

Hi, is there an option to run the app as hidden?

@80N35

80N35 commented Aug 3, 2022

Copy link
Copy Markdown

This is the only "appify" script that is working on Catalina. Thanks, friend. Do you want to fork Conky-Mac with me. I have great configs but really haven't done serious code since the 90's in LA.

@craigfrancis

Copy link
Copy Markdown

On an ARM64 Mac, it kept prompting me to install Rosetta; adding the LSArchitecturePriority to the /Contents/Info.plist seems to work (although this is cached somehow, so I had to change the CFBundleIdentifier to get Rosetta to check again):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>CFBundleExecutable</key>
	<string>run</string>
	<key>CFBundleIdentifier</key>
	<string>com.testing</string>
	<key>LSArchitecturePriority</key>
	<array>
		<string>arm64</string>
	</array>
	<key>LSRequiresNativeExecution</key>
	<true/>
</dict>
</plist>

@janbill292-ctrl

Copy link
Copy Markdown

Creating lightweight Mac applications from shell scripts is an efficient way to simplify software distribution and improve the user experience. As developers continue building tools for the Apple ecosystem, providing clear installation methods becomes equally important. Resources explaining Direct Install Delta Executor iOS help users understand how compatible iOS applications can be installed quickly, complementing the broader goal of making software deployment faster and more accessible across Apple devices.

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