Gerade noch über die verschlimmbesserte Funktion zum Hinzufügen von Apps zur Finder Toolbar gemeckert, und schon mit dem Problem konfrontiert, dort ein Shell Skript unterbringen zu wollen.
Man kann zwar ein Shell Skript per CMD-Drag’n’Drop in die Finder Toolbar ziehen, allerdings öffnet ein Klick auf dieses Skript selbiges im Text-Editor. Shell Skripte werden aus der Finder Toolbar heraus offensichtlich nicht ausgeführt. Es stellt sich also die Frage, wie man auf einfache Art und Weise aus einem Shell Skript eine native MacOS App macht, um diese dann in die Finder Toolbar zu ziehen.
MacOS App aus Shell Skript mit Hilfs-Skript erstellen
Die Lösung bedient sich eines Hilfs-Skriptes appify, das aus einem Shell Skript eine MacOS App generiert.
#!/usr/bin/env bash
Appify="$(basename "$0")"
if [ ! "$1" -o "$1" = "-h" -o "$1" = "--help" ]; then cat <
Copyright © 2011 Mathias Bynens
Copyright © 2011 Sencha Labs Foundation
Copyright © 2015 Axel Dietrich
EOF
exit; fi
# Options
appify_SRC="$1"
appify_FILE="$(basename $appify_SRC)"
appify_NAME="${2:-$(echo "$appify_FILE"| sed -E 's/.[a-z]{2,4}$//' )}"
appify_ROOT="$appify_NAME.appify/Contents/MacOS"
appify_RESOURCES="$appify_NAME.appify/Contents/Resources"
appify_INFO="$appify_NAME.appify/Contents/Info.plist"
# Create the bundle
if [[ -a "$appify_NAME.appify" ]]; then
echo "$PWD/$appify_NAME.appify already exists :(" 1>&2
exit 1
fi
mkdir -p "$appify_ROOT"
mkdir -p "$appify_RESOURCES"
touch "$appify_RESOURCES/$appify_NAME.icns"
# Copy the source into the bundle as the CFBundleExecutable
if [ -f "$appify_SRC" ]; then
cp "$appify_SRC" "$appify_ROOT/$appify_FILE"
echo "Copied $appify_ROOT/$appify_FILE" 1>&2
else
# Create a new blank CFBundleExecutable
cat <<-EOF > "$appify_ROOT/$appify_FILE"
#!/usr/bin/env bash
echo "This ('$0') is a blank appified script." 1>&2
exit 1
EOF
echo "Created blank '$appify_ROOT/$appify_FILE' be sure to edit this file to make it do things and stuff" 1>&2
fi
chmod +x "$appify_ROOT/$appify_FILE"
# Create the Info.plist
cat <<-EOF > "$appify_INFO"
CFBundlePackageType
APPL
CFBundleInfoDictionaryVersion
6.0
CFBundleName
$appify_NAME
CFBundleExecutable
$appify_FILE
CFBundleIdentifier
appified.$USER.$appify_FILE
CFBundleVersion
0.1
CFBundleGetInfoString
0.1 appified by $USER at `date`
CFBundleIconFile
$appify_NAME.icns
CFBundleShortVersionString
0.1
EOF
# Appify!
if [[ -a "$appify_NAME.app" ]]; then
echo "$PWD/$appify_NAME.app already exists :(" 1>&2
exit 1
fi
mv "$appify_NAME.appify" "$appify_NAME.app"
# Success!
echo -e "nBe sure to customize your $appify_INFO" 1>&2
echo "Optional: Put your own Icon(set) as $appify_NAME.icns in $appify_NAME.app/Contents/Resources" 1>&2
echo -e "Created $PWD/$appify_NAME.app. Done!n"
Das Skript wird unter dem Namen appify
im Home-Verzeichnis gespeichert und anschliessend im Terminal per chmod +x appify
ausführbar gemacht.
Mit dem Aufruf
$ ./appify das-shell-skript.sh
wird im selben Verzeichnis aus dem Shell Skript das-shell-skript.sh
eine MacOS App mit dem Namen das-shell-skript.app
generiert. Mit Angabe eines zusätzlichen Parameters “App Name”
$ ./appify das-shell-skript.sh "App Name"
lässt sich der MacOS App ein anderer Name geben.
Diese App lässt sich nun per CMD-Drag’n’Drop in die Finder Toolbar ziehen und von dort aus starten. Unschön könnte das Standard-Icon sein, dass MacOS dieser App in der Finder Toolbar gibt. Aber auch dafür gibt es eine unkomplizierte Lösung.
Das Icon einer MacOS App ändern
Der einfache Weg
- Zunächst eine rechteckige PNG-Grafik mit 512 x 512 px mit dem gewünschten Icon anlegen.
- Dann Doppel-Klick auf die PNG-Grafik; die Grafik wird im Previewer angezeigt.
- Nun mit CMD-C die Grafik in die Zwischenablage kopieren.
- Danach Rechtsklick auf die im ersten Schritt angelegte MacOS App und im Kontext-Menü “Get Info” anklicken.
- Im Popup-Info-Fenster ist oben links das (Standard-)Icon dieser App zu sehen. Dieses Icon anklicken; es sollte ein blauer Rahmen erscheinen.
- Nun mit CMD-V die eigene Grafik hineinkopieren.
Fertig!
Der Weg für Profis
Dabei wird das Icon direkt mit in die MacOS App eingebaut. Dazu erledigt das appify-Skript bereits die Vorarbeit, indem es eine Info.plist
Datei anlegt. In dieser ist unter anderem die Information enthalten, welchen Namen eine Icon(set)-Datei trägt, in der sich ein oder mehrere App-Icons für die MacOS App befindet.
- Wir benötigen zunächst eine *.icns Datei, in der das Icon unserer App abgespeichert ist. “icns” steht dabei für Iconset, da eine solche Datei auch App-Icons in unterschiedlichen Größen bevorraten kann. Im einfachsten Fall ist das nur ein Icon. Der Weg zu einem solchen *.icons File kann wie folgt aussehen:
- Terminal öffnen.
- Verzeichnis
das-shell-skript.iconset
anlegen. - In dieses Verzeichnis die gewünschte App-Icon-Grafik als
icon_512x512.png
kopieren. (Annahme: Es handelt sich um eine Grafik mit 512 x 512 px) - Den Befehl
iconutil -c icns das-shell-skript.iconset
ausführen.
Nun sollte im aktuellen Verzeichnis eine Datei
das-shell-skript.icns
existieren. Wenn ja, kann mitrm -rf das-shell-skript.iconset
das Iconset-Verzeichnis gelöscht werden. - Rechtsklick im Finder auf unsere MacOS App
das-shell-skript.app
. Es erscheint das Kontext-Menü. Dort “Show Package Contents” wählen. - Im Finder wird nun der Inhalt unserer MacOS App angezeigt. Dies sollte das Verzeichnis
Contents
sein. Doppelklick. - Auf der nächsten Ebene befindet sich die erwähnte Info.plist Datei sowie zwei Unterverzeichnisse. Doppelklick auf
Resources
. - Dort befindet sich eine (leere) Datei mit Namen
das-shell-skript.icns
. Diese durch die in Schritt 1 angelegte *.icns-Datei ersetzen.
Fertig! Aber halt! Viele Wege führen nach Rom.
Die Superhero-Methode für echte Männer
Benötigt die XCode Developer Tools.
- Terminal öffnen.
- Mit
sips -i das-shell-skript.png
aus der Grafik sozusagen die eigene Icon-Datei erstellen. - Die Grafik als Ressource speichern. Das geht mit dem Befehl
DeRez -only icns das-shell-skript.png > icon.rsrc
. - Einbinden dieser Ressource in unsere App mit
Rez -append icon.rsrc -o $'das-shell-skript.app/Iconr'
. - MacOS mitteilen, dass diese App jetzt ein Icon hat:
SetFile -a C das-shell-skript.app
.
Fertig!
[…] sichtbar” wechselt. Dazu bedienen wir uns des geballten Wissens aus dem vorigen Artikel Aus Shell Skript eine MacOS App erstellen und App Icon ändern und bauen sogar noch funktional völlig unnötige bells’n’whistles ein: In […]