Neutralino erzeugt aktuell ausführbare Dateien für macOS, jedoch keine von Apple favorisierten AppBundles. Will man Neutralino Apps für macOS an andere User weitergeben, müssen diese signiert und von Apple notarisiert sein. D.h. es bleibt dem Programmierer überlassen, mit der ausführbaren Datei und den dazugehörenden Resourcen ein macOS AppBundle zu bauen.
Das Problem mit den Neutralino App Resourcen
Alle Resourcen, also i.d.R. HTML-, CSS- und JS-Files speichert Neutralino komprimiert in einer einzigen Datei namens resources.neu. Neutralino erwartet die Datei im gleichen Ordner wie die ausführbare Datei. Greift Neutralino auf die Resourcen zu, wird ein temporären Ordner erzeugt.
Genau hier liegt das Problem: Wird der temporäre Ordner in AppBundle/Contents/MacOS neben der ausführbaren Datei erzeugt, stellt Apple’s Gatekeeper eine Manipulation fest und erklärt die Signatur für ungültig.
Neutralino macOS AppBundles dauerhaft signieren und notarisieren
Das Problem kann über einen cleveren Trick verhindert werden:
- Die Datei resources.neu wird samt dem extensions folder in /AppBundle/Contents/Resources gespeichert.
- Die ausführbare Neutralino-Datei wird als /AppBundle/Contents/MacOS/main gespeichert.
- Im gleichen Ordner platzieren wir ein Bash-Skript namens bootstrap, welches main mit genau den Parametern startet, die es benötigt um Resourcen und Extensions im richtigen Ordner zu suchen.
- Über die Info.plist verlinken wir dann anstatt main, die bootstrap-Datei.
Das Ergebnis ist ein Neutralino macOS AppBundle, wie es Apple’s Gatekeeper liebt :-)
Das Neutralino AppBundle-Grundgerüst und die Build-Scripts zum Automatisieren des kompletten Build-Vorgangs findet Ihr hier:
Neutralino Build-Automation für macOS und Windows AppBundles.