Steam startet unter macOS nicht

Auf einem MacBook Air habe ich ein neues System aufgesetzt. Neben anderer Software, wollte ich unter anderem Steam installieren. Nach der Installation startete Steam und lud die entsprechenden Daten herunter. Danach beendete sich Steam selber. Auch der mehrmalige Versuch Steam zu Starten führte zum gleichen Fehlerbild. Das Löschen des Ordners mit den Applikationsdaten:

~/Library/Application Support/Steam

half leider ebenfalls nicht. Für die Fehlersuche startete ich Steam im Terminal:

cd /Applications/Steam.app/Contents/MacOS/
./steam_osx

Dort erschient folgende Ausgabe:

[2019-01-13 18:33:37] Startup - updater built Aug 22 2016 17:36:46
/BuildRoot/Library/Caches/com.apple.xbs/Sources/AppleFSCompression/AppleFSCompression-96.200.3/Common/ChunkCompression.cpp:49: Error: unsupported compressor 8
/BuildRoot/Library/Caches/com.apple.xbs/Sources/AppleFSCompression/AppleFSCompression-96.200.3/Libraries/CompressData/CompressData.c:353: Error: Unknown compression scheme encountered for file '/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/Exceptions.plist'
/BuildRoot/Library/Caches/com.apple.xbs/Sources/AppleFSCompression/AppleFSCompression-96.200.3/Common/ChunkCompression.cpp:49: Error: unsupported compressor 8
/BuildRoot/Library/Caches/com.apple.xbs/Sources/AppleFSCompression/AppleFSCompression-96.200.3/Libraries/CompressData/CompressData.c:353: Error: Unknown compression scheme encountered for file '/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/AppExceptions.bundle/Exceptions.plist'
[2019-01-13 18:33:38] Startup - updater built Jan  4 2019 15:25:44
found breakpad via in process memory: '/Users/seeseekey/Library/Application Support/Steam/Steam.AppBundle/Steam/Contents/MacOS/Frameworks/Breakpad.framework/Versions/A/Resources'
Installing breakpad crash handler
[2019-01-13 18:33:38] Steam requires that '/Users/seeseekey/Library/Application Support/Steam/Steam.AppBundle/Steam/Contents/MacOS' be on a case-insensitive filesystem.
SteamID:  0, universe Public
[2019-01-13 18:33:38] Steam requires that '/Users/seeseekey/Library/Application Support/Steam/Steam.AppBundle/Steam/Contents/MacOS' be on a case-insensitive filesystem.
[2019-01-13 18:33:38] Verifying installation...
[2019-01-13 18:33:38] Shutdown
[2019-01-13 18:33:38] Unable to read and verify install manifest /Users/seeseekey/Library/Application Support/Steam/Steam.AppBundle/Steam/Contents/MacOS/package/steam_client_osx.installed
[2019-01-13 18:33:38] Verification complete
[2019-01-13 18:33:38] Downloading update...
[2019-01-13 18:33:38] Checking for available updates...
[2019-01-13 18:33:38] Downloading manifest: client-download.steampowered.com/client/steam_client_osx
[2019-01-13 18:33:38] Error: Download failed: http error 0

Nach der Auswertung der Ausgabe ergab sich das es sich hier ebenfalls um ein Problem mit dem case-sensitiven Dateisystem auf dem macOS-Rechner handelte.

Steam verträgt case-sensitive Dateisysteme unter macOS nicht

Für dieses Problem bieten sich zwei Lösungen an. Bei der radikalen Lösung wird der Rechner bzw. die Partition neu aufgesetzt. Die andere Möglichkeit wäre es eine Partition zu erstellen, welche mit einem case-insensitiven Dateisystem betrieben wird und der entsprechende Application Support-Ordner per Hardlink zu dieser neuen Partition zeigen zu lassen. Schön ist keine der Lösungen, vor allem da sich jenes Problem durch die Anwendung (in diesem Fall Steam) lösen ließe. Meine pragmatische Lösung war es in diesem Fall Steam nicht zu installieren und stattdessen den Rechner produktiv zu nutzen.

Applikationsdaten unter macOS

Wenn eine Applikation unter macOS genutzt wird, speichert diese ihre Daten in einem Verzeichnis mit dem Namen Application Support. Je nachdem ob die App ohne oder mit einer Sandbox läuft, befindet sich dieser Ordner an einer unterschiedlichen Stelle. Bei Apps ohne Sandbox ist dies:

~/Library/Application Support/com.example.application/

Apps, welche in einer Sandbox laufen, haben ihren Quellpunkt im Dateisystem allerdings im Pfad:

~/Library/Containers/com.example.application/

Damit befindet sich das Application Support-Verzeichnis bei Apps, welche in einer Sandbox laufen, im Pfad:

~/Library/Containers/com.example.application/Data/Library/Application Support/

Nützlich ist z.B. wenn Daten einer Applikation von einer macOS-Installation zu einer anderen Installation verschoben werden sollen.

IntelliJ IDEA in den case-sensitiven Modus schalten

Bei einer normalen macOS-Installation ist das Dateisystem, egal ob HFS+ oder APFS case-insensitiv. Allerdings besteht bei beiden Dateisystemen die Möglichkeit sie case-sensitive zu betreiben. Das bedeutet das eine Datei mit dem Namen test.txt und eine Datei Test.txt zwei unterschiedliche Dateien sind. Bei case-insensitiven Dateisystemen wäre dies nicht der Fall. Bei einem Start der Java-IDE IntelliJ IDEA auf einem solchen case-sensitiven Dateisystem kommt es zu folgender Meldung:

Filesystem Case-Sensitivity Mismatch
The project seems to be located on a case-sensitive file system.
This does not match the IDE setting (controlled by property "idea.case.sensitive.fs")

Hintergrund ist das IntelliJ IDEA für die Betriebssysteme Windows und macOS annimmt das diese mit einem case-insensitiven Dateisystem betrieben werden.

Der entsprechende Eintrag befindet sich im Help-Menü

Über den Menüpunkt Help -> Edit Custom Properties… kann diese Verhalten korrigiert werden. Wenn dieser Punkt zum ersten Mal auswählt wird, erscheint eine Nachfrage ob die entsprechende Datei angelegt werden soll. Anschließend wird die Datei in IntelliJ IDEA geöffnet. Dort muss der Wert:

idea.case.sensitive.fs=true

hinzugefügt werden. Nach einem Neustart der IDE wird das neue Verhalten übernommen.

Verbleibende Zeit im Batteriebetrieb anzeigen

Bei batteriebetriebenen Apple-Geräten wie der MacBook-Serie gab es in früheren Versionen des Betriebssystems eine Anzeige der noch verbleibenden Zeit im Batteriebetrieb. Diese war zu sehen wenn das Akkusymbol in der Menüleiste angeklickt wurde. In neueren Versionen von macOS ist diese Angabe leider nicht mehr zu finden.

Die Angabe der verbleibenden Zeit ist verschwunden

Warum diese Angabe entfernt wurde ist unklar; allerdings kann sie anderweitig im System angezeigt werden. Eine Variante ist die Nutzung der Aktivitätsanzeige. In dieser findet sich im Tab Energie im unteren Bereich eine Anzeige der verbleibenden Zeit.

In der Aktivitätsanzeige kann die Angabe der verbleibenden Zeit noch gefunden werden

Neben dem Weg über die Aktivitätsanzeige, kann die verbleibende Zeit alternativ über das Terminal ermittelt werden. Dazu muss dort:

pmset -g batt

eingeben. Anschließend erscheint eine Ausgabe nach dem Schema:

-InternalBattery-0 (id=5331033)	74%; discharging; 2:29 remaining present: true

Die Zahl vor dem remaining gibt hierbei die verbleibende Zeit an.

jar-Datei in eine exe-Datei verpacken

Bei der Entwicklung von Java-Applikationen kommt am Ende meist eine jar-Datei (die Kurzform von Java Archive) heraus. Soll diese Datei an Otto Normalverbraucher unter Windows ausgeliefert werden, so wundert sich dieser sicherlich etwas. Immerhin erwarten die meisten Normalverbraucher eine ausführbare Datei in Form einer exe-Datei. Mit Hilfe des Tools Launch4j ist das genau das möglich. Launch4j wrappt die jar-Datei und erzeugt eine ausführbare exe-Datei. Daneben kann Launch4j einfache Starter erzeugen, ohne das ganze in eine ausführbare Datei zu wrappen.

Die Projektseite von Launch4j

Launch4j erzeugt zwar ausführbare Dateien für Windows, allerdings kann das es selber neben Windows auch unter macOS und Linux genutzt werden. Die offizielle Seite des Projektes ist unter launch4j.sourceforge.net zu finden. Lizenziert ist Launch4j unter der BSD-Lizenz und damit freie Software. Der Quellcode ist auf SourceForge zu finden, daneben existiert ein Mirror auf GitHub.