Universal Binary 2: Was ist mit älteren macOS-Versionen?
Schon bei der Migration von PowerPC- zu Intel-Prozessoren führte Apple ein neues App-Format ein, um PowerPC- und Intel-Versionen in einer App zu vereinen. Nutzer mussten sich im Idealfall keinerlei Gedanken machen – macOS wählte den passenden auszuführenden Code automatisch aus. Bei der Umstellung von Intel- auf Apple-eigene Prozessoren steht Apple nun vor genau dem selben Problem und führt daher das "Universal Binary 2"-Format ein – doch dies scheint nur ein Marketing-Name zu sein.
Für den ARM-Umstieg erfand Apple das Rad nicht neu: Das Mach-O-Binärformat für ausführbare Dateien passte Apple nicht an – es ist noch genau das selbe Format, welches Apple beim damaligen Intel-Umstieg verwendete. Daher lassen sich rein vom Binärformat der ausführbaren Datei noch Apps erstellen, welche in Mac OS X 10.4 lauffähig sind.
Es ist sogar möglich, eine ausführbare Datei für ARM, Intel und PowerPC zu erzeugen, wie der Entwickler von TenFourFox
dokumentiert. Bei TenFourFox handelt es sich um einen Port moderner Firefox-Versionen für betagte PowerPC-Macs.
Sollte also ein App-Hersteller derzeit 10.12 oder 10.13 unterstützen, aber eine ARM-Version ankündigen, ist nicht damit zu rechnen, dass die App plötzlich nicht mehr mit macOS 10.12 oder 10.13 zusammenarbeitet – das Binärformat wird auch von älteren Betriebssystemen erkannt.
Einschränkung: FrameworksDas Binärformat von ausführbaren Dateien erlaubt es, selbst Mac-Betriebssysteme zu unterstützen, welche 10 Jahre oder älter sind. Doch werden kaum Entwickler von modernen Mac-Apps diese Option nutzen, da mit Schwierigkeiten aus einer anderen Richtung zu rechnen ist: Apple passte über die Jahre diverse Programmierbibliotheken an und fügte neue hinzu, welche sich nicht in älteren Betriebssystemversionen wiederfinden. Daher ist es in den allermeisten Fällen für die App-Entwickler nicht wirtschaftlich, noch ältere Systemversionen zu unterstützen.
Terminal: lipoApple liefert ein interessantes Terminal-Programm namens "lipo" aus: Hiermit kann man feststellen, welche Architekturen ein Programm unterstützt. Das Kommando…
lipo -archs /Applications/Keynote.app/Contents/MacOS/Keynote
…gibt beispielsweise aus, welche Prozessorarchitekturen von Apple Keynote unterstützt werden (im aktuellen Fall nur x86/Intel). Aber lipo ist auch dafür gedacht, bestimmte Architekturen aus einer App zu entfernen oder um ein "Universal Binary" per Hand zusammenzubauen.