MacOS Finder: Spaltenreihenfolge dauerhaft ändern

Reihenfolge der Spalten im MacOS Finder dauerhaft ändern. Hier eine Schritt-für-Schritt-Anleitung, wie man die Spaltenreihenfolge geändert bekommt!

Die Reihenfolge der Spalten im MacOS Finder lässt sich einfach durch drag’n’drop den eigenen Bedürfnissen anpassen. Es ist jedoch zu beachten, dass sich die geänderte Reihenfolge stets nur auf das aktuelle Verzeichnis bezieht. Soll die aktuelle Reihenfolge für alle Ordner gelten, so ist der View Options Dialog via CMD + J zu öffnen und nach dem Ändern der Reihenfolge unten der Button “Use as Defaults” zu drücken.

Aber: Das reicht in der Regel nicht! MacOS merkt sich Ordner-spezfifische Einstellungen in der, in jedem Ordner vorhandenen, Datei .DS_Store. Und die in dieser Datei hinterlegten Einstellungen haben Vorrang vor den globalen Einstellungen, die via “Use as Defaults” eingestellt wurden (selbige werden in com.apple.finder.plist abgelegt, just for the Nerds).

Das Vorgehen, das bei mir zu dauerhaftem Erfolg geführt hat, ist wie folgt:

  1. Reihenfolge der Spalten im Finder anpassen.
  2. CMD + J und dann “Use as defaults”.
  3. Im Terminal sudo find /Users/<username>/ -name .DS_Store -delete eingeben, Return. Dies löscht alle(!) .DS_Store Dateien in allen Verzeichnissen. ACHTUNG! Eine Falscheingabe dieses Befehls kann zu ernsthaften Schäden am System führen. Wer nicht weiß, wie dieser Befehl funktioniert und was da genau passiert, BITTE LASSEN.
  4. Finder neu starten: Entweder im terminal mit killall Finder oder mit Alt + Rechtsklick auf das Finder-Icon im Dock und dort dann “Relaunch” wählen.

Hernach sollten vom Finder alle Verzeichnisse mit den Spalten in der gewünschten Reihenfolge anzeigen.

How to convert 3MF files to stl format on a Lin*x machine (including Mac)

3MF is a file format for 3D printers with inbuilt DRM. Some slicers are not able to read 3MF files. Here is a way to convert such files to STL.

If you need to convert a 3MF file to STL format you may find that there is no really simple solution. I found this very useful blog post by Zebethyal that describes how the command line tool 3mf2stl by Charles Shapiro can be compiled on a Mac to convert 3MF files to STL format. The required steps in all brevity:

  1. Install Homebrew
    Open terminal and type (all in one line)
    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null
    Hit return. Homebrew is downloaded and installed.
  2. Install libzip
    Type
    brew install libzip
    After hitting return, the libzip library will be installed.
  3. Download 3mf2stl
    Enter the following URL in your browser
    https://github.com/lemgandi/3mf2stl
    and download the 3mf2stl repository (green button to the right, download as ZIP).
    Unzip the file to a directory, e.g. ~/Documents/3mf2stl/
  4. Compile 3mf2stl
    Change to this directory
    cd ~/Documents/3mf2stl/
  5. and type
    make
    Hit return. The code will be compiled.

If the compilation was successful you will have an executable named 3mf2stl in this directory.
Usage is ./3mf2stl -i <input_file.3mf> -o <output_file.stl>

How to get rid of MacOS’ “one or more items can’t be changed because they are in use”

Sometimes MacOS locks files and you cannot copy, move, or delete them. Here is how to get rid of this "one or more items can't be changed because they are in use" behaviour.

MacOS can be annoying, at times. In this case I was struggling with a video file that could not be copied, moved, or deleted because MacOS persistet on telling me it “can’t be changed because [it is] in use”; cf. this screenshot of the popup message.

The Continue-Button might suggest that MacOS would perform the action if I clicked it. But after clicking continue, I was asked for my admin-password, the file would seemingly get copied (or moved etc.), and finally, the copied (or moved file etc.) would be deleted.

It took a lot of searching until I, finally, came across the solution in this thread. I did not dig into the gory details of the cause but it has something to do with the so-called extended file attributes. You can see if a file has extended file attributes when you do a ls in the terminal. If there is an @ on the right-hand side of the file permissions this file has extended attributes set. As was the case with my video file:

> ls
-rwxr-xr-x@ 1 zzz  staff  42164199 Dec 19 18:58 MAH07541.MP4

Using the -l@ flag we can see the extended attributes that are set for the file:

> ls -l@
-rwxr-xr-x@ 1 zzz  staff  42164199 Dec 19 18:58 MAH07541.MP4
	com.apple.FinderInfo	      32

So in my case it’s the com.apple.FinderInfo attribute that was causing the problem. As soon as I deleted the extended attribute using

> xattr -d com.apple.FinderInfo MAH07541.MP4

everything was back to normal and the file could be copied, moved, or deleted.

Be careful when you are fiddling with the extended attributes since they can also store resources or essential file metadata. A user in the above mentioned thread says that it is “…always safe to delete com.apple.FinderInfo”. Well, that is something you will have to decide on your own.

How to run Netgear ProSafe Utility on MacOS

Netgear does not offer a Mac-Version for their ProSafe Plus Utility. Since it doesn't run reliably with Wine, you'll have to use virtualizers like Parallels or VirtualBox.

Netgear is offering his switch management software “ProSafe Plus” for Windows. And for Windows only. Well, they just might have not noticed that there is at least one other very popular operating system in the market. Such things happen.

To still run ProSafe on a Mac and avoid the overhead involved by installing hardware virtualizing suits like “Parallels Desktop” or “VirtualBox”, I tried to use the compatibility layer software WINE to run ProSafe.

WINE

WINE requires XQuartz first, then Wine for MacOS can be installed. After that you can right click an arbitrary Windoze *.exe file and “open with…” Wine. Unfortunately, the ProSafe Plus Utility did not install smoothly. Had to restart the installation process a couple of times but could start the ProSafe Utility only once. Digging into Wine’s website winehq.org you will find that other users already reported about problems with the installation of ProSafe. To sum it up: No easy way this time. Let’s do it the hard way.

VirtualBox

The hard way means that you will have to use a hardware virtualizer like VirtualBox or Parallels Desktop. And, apparently, you will need Windoze. Luckily, I had an old Windoze 7 installation CD lying around. The first step is to install the free virtualizer VirtualBox by Oracle. The installation process is pretty straightforward and to just run the ProSafe Utility you should be fine with the standard settings suggested by the installer.

You will, most likely, have assigned an ISO-Image of your copy of Windoze during installation. After VirtualBox has been installed, start the Windoze Virtual Machine and get your copy of Windoze installed in the Virtual Machine. That might take some time. After successful installation of Windoze you can reboot, log into your Windoze account and install Netgear’s ProSafe Utility.

After installation of the ProSafe Utility fire it up and, if all went well, you might see a screen similar to the following one. The ProSafe utility scans the network and will list all discovered switches. My switch, a GS108PEv3, hast been found and I am, finally and after all that hassle, ready to configure the switch.

Zugriff auf Photo Stream Bilder auf dem Mac ohne Photos App

Man kann auf dem Mac auf die Bilder des Photo Streams auch OHNE Photos App zugreifen. Hier wird der zugehörige Lösungsweg beschrieben.

Der Use Case: Mit dem iPhone, iPad oder iPod geknipste Bilder können über die sog. “My Photo Stream”-Funktionalität automatisch auf die jeweils anderen, verbundenen Geräte übertragen werden. Das ist praktisch. Es wäre aber noch praktischer, wenn diese Bilder ebenso automatisch auf den Mac synchronisiert würden. Das ist möglich, erfordert aber ein paar Handgriffe. Insbesondere, wenn man eine Lösung sucht, bei der man nicht die Photos App verwenden möchte und die Bilder in einem beliebigen Zielordner landen sollen. Hier das Vorgehen, inspiriert durch einen Artikel auf bockenhauer.com, den es dort allerdings nicht mehr gibt.

Wie funktioniert’s?

Wir schalten sowohl auf dem gewünschten mobilen Gerät, also iPhone, iPad oder iPod, als auch auf dem Mac die “My Photo Stream”-Funktion ein. Danach landen alle mit dem mobilen Gerät aufgenommenen Bilder sowohl (und wie bisher) im “Camera Roll”-Ordner und (neu) zusätzlich in einem Ordner mit dem Namen “My Photo Stream”. Zeitgleich werden die Bilder auf alle verbundenen Geräte in deren “My Photo Stream” Ordner gespiegelt. Beim Mac gibt es aber einen solchen Ordner nicht. Stattdessen werden die Photo Stream Bilder in einen Unterordner des Photos App Packages gelegt. Die hier beschriebene Lösung greift auf diesen Ordner zu und verschiebt die Bilder in einen Wunsch-Zielordner.

My Photo Stream auf dem Mac

Eine kurze Schritt-für-Schritt-Anleitung, um einen “My Photo Stream”-Ordner auf dem Mac zu emulieren.

  1. Photo Stream einschalten. Das ist an vielen anderen Stellen im Netz schon detailliert beschrieben, bspw. hier. Die Kurzversion für’s iPhone: Settings → iCloud → Photos → “My Photo Stream” einschalten. Und für den Mac: System Preferences → iCloud → dort rechts bei Photos den Options-Button klick → “My Photo Stream” einschalten. Kann man alternativ auch über die Settings der Photos App einschalten, aber viele Weg, Rom, etc. pp. NB: Weder “iCloud Photo Library” noch “iCloud Photo Sharing” müssen eingeschaltet sein, damitdie hier beschriebene Lösung funktioniert.
  2. exiv2 installieren, falls noch nicht vorhanden. Die Lösung setzt zum Umbenennen der jpeg-Dateien auf Basis der im jpeg-Header (hoffentlich) vorhandenen EXIF-Informationen auf exiv2. Das Tool lässt sich einfach via (home)homebrew installieren, und zwar so:
    $ brew install exiv2
    Wenn der Packet-Manager brew noch nicht vorhanden ist, dann natürlich erst einmal homebrew installieren…
  3. Shell Datei anlegen. Das folgende Shell-Skript den eigenen Bedürfnissen anpassen und dann in einem Verzeichnis bspw. als photostream.sh speichern.
    #!/bin/bash
    
    # Alle Photo Stream Bilder in den Ordner ~/Downloads/MyPhotoStream/_tmp kopieren
    find ~/Pictures/Photos\ Library.photoslibrary/Masters/ -type f -exec cp "{}" ~/Downloads/MyPhotoStream/_tmp/ \;
    
    # in das _tmp Verzeichnis wechseln
    cd ~/Downloads/MyPhotoStream/_tmp
    
    # Mit dem Programm exiv2 das Aufnahmedatum aus den EXIF-Daten jeder jpg-Datei auslesen.
    # Der Parameter -t setzt das modification date der Dateien auf ihr Aufnahmedatum.
    # Der Parameter -r benennt die Dateien um: Es wird dem Dateinamen das Aufnahmedatum im ISO8601-Format vorangestellt.
    /usr/local/bin/exiv2 -t -r'%Y%m%d_ :basename:' rename $(ls)
    
    # Die Bilder aus dem aktuellen _tmp Verzeichnis in das darüberliegende "MyPhotoStream" Verzeichnis verschieben
    find . -type f -exec mv "{}" .. \;
    
    # Abschließend die Bilder aus dem Photostream-Ordner löschen
    rm -r ~/Pictures/Photos\ Library.photoslibrary/Masters/*
    rm -r ~/Pictures/Photos\ Library.photoslibrary/Thumbnails/*
    
  4. photostream.sh Rechte setzen. Mit
    $ chmod 700 photostream.sh
    die Rechte der Shell-Datei auf “ausführbar” setzen.
  5. Automatisieren. Wir richten einen Daemon ein, der einmal pro Minute unser photostream.sh Skript aufruft. Auf diese Weise werden Bilder-Neuankömmlinge aus dem Photo Stream regelmässig und zeitnah aus dem Photos App Unterordner in unseren Zielordner überführt. Dazu wird eine Datei mit folgendem Inhalt an einem beliebigen Ort mit dem Namen com.NAME.photostream.plist angelegt. NAME kann frei gewählt werden.
    
    
    
    
       Label
       com.NAME.photostream
       ProgramArguments
       
           /Volumes/Macintosh HD/Users/USER/photostream.sh
       
       StartInterval
       60
    
    
    
    In der Datei ist NAME in <string>com.NAME.photostream</string> entsprechend des beim Anlegen der Datei gewählten Dateinamens zu ändern. Auch der Pfad /Volumes/Macintosh HD/Users/USER/photostream.sh muß so angepasst werden, dass er korrekt auf die photostream.sh Shell-Datei zeigt. Das StartInterval von 60 entspricht 60 Sekunden, d.h. das Skript wird einmal pro Minute aufgerufen. Wer weniger häufig nach neuen Bildern im Photo Stream nachschauen möchte, kann den Wert einfach nach oben setzen.
  6. Daemon aktivieren. Wir müssen dem Daemon/Agent manager launchd noch mitteilen, dass es einen neuen Daemon gibt, um den er sich kümmern soll. Das geschieht auf der Kommandozeile mit dem folgenden Befehl:
    $ launchctl load com.NAME.photostream.plist
    Auch hier ist NAME entsprechend zu ersetzen.

Fertig! Wenn’s erstmal läuft, läuft’s wie geschnitten Brot. Auch mit El Capitan und ohne AirDrop. 😉

MacOS: Neuen “Öffnen mit”-Service zum Dienste-Menü hinzufügen

Eine Datei oder einen Ordner per Rechtsklick im MacOS-Lieblingsprogramm öffnen? Das geht in wenigen Schritten mit dem Automator.

Der Rechtsklick auf eine Datei oder einen Ordner im Finder öffnet das Kontextmenü. Dortens, ganz unten, befindet sich das Dienste-Untermenü, in dem Applikationen zusätzliche Funktionalitäten unterbringen können. Der Viren-Scanner ClamXav, jahrelang kostenlos und nun leider kostenpflichtig, nistet sich bspw. dort ein und ermöglicht auf diese Weise das Scannen einzelner Dateien.

das Rechtsklick-Dienste-Menü

Dienst-Menü erweiterbar

Dieses Service-Menü kann mit eigenen Diensten erweitert werden. Hier ein Beispiel für die Erstellung eines Dienste, der das Öffnen von Dateien oder Ordnern in Sublime Text ermöglicht. Dazu verwenden wir den Automator, eine Applikation, die jeder MacOS-Installation von Haus aus beiliegt.

Schritt-für-Schritt zum neuen Dienst

  1. Automator starten. Entweder Finder öffnen, dann CMD+Shift+A und in der Dateiliste die Automator.app Doppelklicken. Oder Spotlight mit CMD+Space aufrufen, “auto” tippen und Return. (Unterstellt, dass Spotlight den automator vorschlägt.)
  2. Automator-Typ wählen. Im Popdown-Fenster “Service” auswählen, dann mit dem Choose-Button bestätigen.
    Service im Automator wählen
  3. Service receives und Action wählen. Im “Service receives selected”-Drop-Down “files or folders” wählen.
    Im Suchfeld oben links “run shell” eingeben. In der darunterliegenden Liste an Aktionen sollte nur noch “Run Shell Script” erscheinen. Diese Aktion per Drag’n’Drop in das Workflow-Feld rechts ziehen.
    Services receives und Run Shell Skript Aktion
  4. Pass input und Shell Skript. Die Datei- und Ordner-Namen sollen als Kommandozeilenargumente an das Shell Skript übergeben werden. Dafür im “Pass input”-Drop-Down den Wert “as arguments” wählen.
    Anschliessend noch in das Eingabefenster der “Run Shell Skript”-Aktion den Pfad zum Sublime Text-Executable gefolgt von -n "$@" eintragen.
    Argumente und auszuführende Datei
  5. Den neuen Service mit CMD+S unter einem beliebigen Namen speichern, z.B. “Open in Sublime3”.

Fertig! Wer alles richtig gemacht hat, sieht im Finder nach Rechtsklick auf eine Datei oder einen Ordner “Open in Sublime3” als neuen Eintrag im Services-Untermenü, like diz:

fertiger Dienst im Finder

PS für Neunmalkluge

Ich höre sie schon rufen: “Was soll das denn mit der ‘Run Shell Script’-Aktion? Das geht doch alles viel einfacher mit ‘Open Finder Items’!” Stimmt. Und stimmt nicht. Der Ansatz mit “Open Finder Items” ist in diesem Artikel beschrieben, allerdings werden die Dateien/der Ordner damit in den Projektbaum des aktuell geöffneten Projektes eingefügt. Die hier beschriebene Verwendung von “Run Shell Script” verhindert dies und öffnet Dateien und Ordner in einem neuen Workspace in Sublime. Besser ist das.

Mac OS versteckte Dateien anzeigen (und wieder verstecken)

Der Mac OS Finder zeigt versteckte Dateien nicht an. Darum sind sie ja auch versteckt. Aber sie lassen sich leicht sichtbar machen. Und ebenso leicht wieder verstecken.

Hinter MacOS werkelt ein *nix-System. Auf diesen Systemen ist es üblich, dass Dateien, die mit einem Punkt beginnen, also beispielsweise .htaccess, vom Dateibetrachter nicht angezeigt werden. Manchmal möchte man die versteckten Dateien aber doch sehen.

Die Terminal Methode

  1. Terminal öffnen.
  2. Mit dem folgenden Befehl wird dem Finder mitgeteilt, dass er alle Dateien anzeigen soll.
    $ defaults write com.apple.finder AppleShowAllFiles TRUE
    
  3. Noch ein
    $ killall Finder
    hinterher. Damit wird der Finder neu gestartet.

Fertig!

Die sichtbar gemachten Dateien können genauso leicht wieder versteckt werden, indem am Ende des oben stehenden Befehls “TRUE” durch “FALSE” ersetzt wird. Danach wieder killall Finder und die Dateien sind versteckt.

Wer das häufiger braucht, möchte es aber vielleicht ein wenig komfortabler haben.

Die Profi-Methode mit Toggle-Button in der Finder-Toolbar

Wir bauen uns einen hübschen Toggle-Button für die Finder-Toolbar, der auf Knopfdruck zwischen “Dateien versteckt” und “Dateien 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 Abhängigkeit des aktuellen Status “sichtbar” oder “versteckt” verändert sich das Aussehen des Icons in der Toolbar. Toll!

  1. Wir benötigen zunächst ein Skript, das den aktuellen Sichtbarkeitsstatus ermittelt, diesen dann wechselt und das Icon austauscht. Den folgenden Kode kopieren und als toggleHidden.sh im Home-Verzeichnis /Users/ speichern. NB: Alle folgenden Schritte gehen davon aus, dass die zugehörigen Dateien im Home-Verzeichnis liegen!
    #!/bin/bash
    
    # get current visibility status
    isVisible="$(defaults read com.apple.finder AppleShowAllFiles)"
    
    # toggle visibility and change app icon
    rm ~/$'toggleHidden.app/Iconr'
    sleep 1
    if [ "$isVisible" = FALSE ]; then
      defaults write com.apple.finder AppleShowAllFiles TRUE
      Rez -append ~/toggleHidden-on.rsrc -o ~/$'toggleHidden.app/Iconr'
      sleep .2
      Rez -append ~/toggleHidden-on.rsrc -o ~/$'toggleHidden.app/Iconr'
    else
      defaults write com.apple.finder AppleShowAllFiles FALSE
      Rez -append ~/toggleHidden-off.rsrc -o ~/$'toggleHidden.app/Iconr'
      sleep .2
      Rez -append ~/toggleHidden-off.rsrc -o ~/$'toggleHidden.app/Iconr'
    fi
    
    # force changes by restarting Finder
    sleep .2 && killall Finder
    
  2. Mithilfe des appify-Skripts (Hinweise im verlinkten Artikel beachten!) zaubern wir aus toggleHidden.sh eine MacOS App toggleHidden.app. Dazu ein Terminal-Fenster öffnen und den Befehl
    $ appify toggleHidden.sh
    ausführen. Im selben Verzeichnis liegt nun die App toggleHidden.app.
  3. Wir brauchen zwei Icons für die beiden Status. Rechteckig, bspw. mit den Abmessungen 128 x 128 px.
    Icon für versteckte Dateien sichtbarversteckte Dateien sichtbar, Datei toggleHidden-128x128-on.png
    Icon für versteckte Dateien sichtbarversteckte Dateien unsichtbar, Datei toggleHidden-128x128-off.png
    Die sind doch ganz hübsch. Örchz.
  4. Aus den Icon-Grafiken müssen zur späteren Verwendung Ressourcen produziert werden. Dafür werden ein paar Werkzeuge benötigt, die zu den XCode Command Line Tools gehören. Beim ersten Aufruf des folgenden Tools sips im Terminal sollte MacOS von sich aus fragen, ob die Command Line Tools installiert werden. Sobald die Tools verfügbar sind im Terminal folgende Befehle eingeben, um den ersten Schritt zu den Grafik-Ressourcen zu absolvieren.
    $ sips -i toggleHidden-128x128-on.png
    $ sips -i toggleHidden-128x128-off.png
    
  5. Jetzt die Ressourcen extrahieren.
    $ DeRez -only icns toggleHidden-128x128-on.png > toggleHidden-on.rsrc
    $ DeRez -only icns toggleHidden-128x128-off.png > toggleHidden-off.rsrc
    
  6. Initiale Bindung des Off-Icons an unsere App.
    $ Rez -append toggleHidden-off.rsrc -o $'toggleHidden.app/Iconr'
    
  7. Und MacOS mitteilen, dass diese App jetzt ein Icon hat.
    $ SetFile -a C toggleHidden.app
    
  8. Letzter Schritt! Im Finder in das Home-Verzeichnis wechseln, bspw. über das Finder-Menü “Go” und dann “Home”. Per CMD + Drag’n’Drop unsere App toggleHidden.app in die Finder Toolbar ziehen. Wichtig: Erst CMD drücken und gedrückt halten. Dann Datei packen und in die Finder Toolbar ziehen. MacOS ist da sehr “picky” was den Ablauf dieser Drag’n’Drop-Operation anbelangt.

Nun sollte unser wunderschönes Icon in der Toolbar prangen und in etwa so aussehen.

toggleHidden App in der Finder Toolbar: OFF

Nach einem Klick auf den Kreis wird der Finder neu gestartet, das Icon getauscht und fortan alle versteckten Dateien angezeigt. Das könnte dann so aussehen.

toggleHidden App in der Finder Toolbar: ON

Have fun!

Aus Shell Skript eine MacOS App erstellen und App Icon ändern

Wie mache ich aus einem Shell Skript eine MacOS App für die Finder Toolbar? Und wie ändere ich das Icon einer App?

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

  1. Zunächst eine rechteckige PNG-Grafik mit 512 x 512 px mit dem gewünschten Icon anlegen.
  2. Dann Doppel-Klick auf die PNG-Grafik; die Grafik wird im Previewer angezeigt.
  3. Nun mit CMD-C die Grafik in die Zwischenablage kopieren.
  4. Danach Rechtsklick auf die im ersten Schritt angelegte MacOS App und im Kontext-Menü “Get Info” anklicken.
  5. Im Popup-Info-Fenster ist oben links das (Standard-)Icon dieser App zu sehen. Dieses Icon anklicken; es sollte ein blauer Rahmen erscheinen.
  6. 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.

  1. 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 mit rm -rf das-shell-skript.iconset das Iconset-Verzeichnis gelöscht werden.

  2. Rechtsklick im Finder auf unsere MacOS App das-shell-skript.app. Es erscheint das Kontext-Menü. Dort “Show Package Contents” wählen.
  3. Im Finder wird nun der Inhalt unserer MacOS App angezeigt. Dies sollte das Verzeichnis Contents sein. Doppelklick.
  4. Auf der nächsten Ebene befindet sich die erwähnte Info.plist Datei sowie zwei Unterverzeichnisse. Doppelklick auf Resources.
  5. 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.

  1. Terminal öffnen.
  2. Mit sips -i das-shell-skript.png aus der Grafik sozusagen die eigene Icon-Datei erstellen.
  3. Die Grafik als Ressource speichern. Das geht mit dem Befehl DeRez -only icns das-shell-skript.png > icon.rsrc.
  4. Einbinden dieser Ressource in unsere App mit Rez -append icon.rsrc -o $'das-shell-skript.app/Iconr'.
  5. MacOS mitteilen, dass diese App jetzt ein Icon hat: SetFile -a C das-shell-skript.app.

Fertig!

MacOS Mavericks: Apps in Finder Toolbar ergänzen

Apps können nach wie vor per Drag'n'Drop in die Toolbar-Leiste des Finders gezogen werden. Der Teufel steckt aber im Detail.

Bisher war immer alles ganz einfach und intuitiv beim MacOS. Aber das Betriebssystem kommt in die Jahre. Alternative Formulierung: Die Entwickler sind auch nur Menschen. Aber warum Sachen, die gut und einfach funktionierten, verkompliziert werden, will sich nicht erschließen.

So ist das beispielsweise mit der Funktion geschehen, die das Hinzufügen eigener Apps in die Toolbar des Finders erlaubt. Der Prozess vor Mavericks: Im Finder in das Verzeichnis mit der App oder dem Automator Skript wechseln, das zur Finder-Toolbar hinzugefügt werden soll. Dann die App/das Skript per Drag’n’Drop in die Toolbar-Leiste an die gewünschte Stelle ziehen. Fertig.

Der Ablauf ist bei Mavericks zwar fast identisch, aber dann doch eben gerade so anders, dass man erst einmal wie Ochs vor’m Berg steht. Es funktioniert weiterhin per Drag’n’Drop, allerdings muss nun die CMD-Taste beim Ziehen gedrückt sein! Oder noch genauer: Erst die CMD-Taste drücken und gedrückt halten. Dann auf die gewünschte App klicken und diese auf die Toolbar-Leiste ziehen. Dann Maustaste lösen und CMD-Taste lösen.

Das kann man ja beim besten Willen nicht als Prozessoptimierung betrachten. Und es soll mir auch keiner kommen und behaupten, es hätten mit der alten Methode ohne CMD-Taste zu viele Leute “aus Versehen” Apps in die Toolbar-Leiste des Finders gezogen… Aber Problem erkannt, Problem gebannt! 🙂

MacOS ForkLift2 Favoriten exportieren

Rechnerwechsel und die ForkLift2 Favoriten für den späteren Import auf dem neuen Rechner exportieren? Geht nicht. Aber es gibt einen Workaround.

ForkLift2 von BinaryNights ist eine funktionsreiche Alternative für den MacOS-Finder und wir vom Hersteller selber mit “[…] most advanced file manager and FTP + SFTP + Amazon S3 + WEBDav client for Mac OS X (10.7 +)” beworben. In der Tat macht ForkLift2 vieles sehr gut, allerdings fehlt die Möglichkeit, die Liste der eingetragenen FTP-Server und weiterer Favoriten zu exportieren, um sie auf einem anderen Rechner zu importieren.

Der Workaround.

  1. Die Datei
    ~/Library/Preferences/com.binarynights.ForkLift2.plist
    von dem Rechner aus sichern, der als Favoriten-Quelle dient.
  2. Auf dem Zielrechner in dasselbe Verzeichnis wechseln.
  3. Die Aktivitätsanzeige (activity monitor) starten und den Prozess cfprefsd stoppen.
  4. Die gesicherte Datei com.binarynights.ForkLift2.plist in das Verzeichnis (Schritt 2) des Zielrechners kopieren.

NB: Zwischen dem Stoppen des cfprefsd-Prozesses und dem Kopieren der Datei sollte nicht zu viel Zeit vergehen, da MacOS den cfprefsd-Prozess automatisch wieder startet.

NB: In der Datei sind nur die Konfigurationsinformationen der Favoriten gespeichert, nicht jedoch deren Passwörter! Für den Transfer der Passwörter gibt es scheinbar keine Lösung. Will heißen, alle Passwörter müssen “von Hand” neu eingegeben werden.

Dieser Workaround wurde von BinaryNights auf Nachfrage eines Nutzers bei Twitter genannt. Warum es keine native Ex-/Import-Funktion gibt, die insbesondere auch die Passwörter transferiert, ist ein wenig rätselhaft.