macOS Sierra: Warum einige Programme nicht mehr laufen
Jedes Systemupdate birgt natürlich immer das Risiko, dass bestimmte Programme nicht mehr korrekt funktionieren - beispielsweise weil bestimmte Schnittstellen aufgegeben wurden oder Apple Framework-Änderungen vornahm. Mit macOS Sierra wird es gleich eine ganze Reihe an Programmen treffen. Nach dem Update auf Sierra zeigt direkt schon das Logo jener Apps, dass keine Ausführung möglich ist und der Nutzer nach Alternativen schauen muss. Der Grund dafür ist die Abschaffung von "Garbage Collecting", das Apple mit Mac OS X 10.5 im Jahr 2007 eingeführt hatte. Betroffen sind viele Apps, die in den Jahren 2007 bis 2009 auf den Markt kamen und seitdem nicht neuentwickelt wurden. "Du kannst diese Version des Programms „XY“ nicht mit dieser Version von macOS verwenden." lautet übrigens jene Fehlermeldung, die man sicher nicht sehen will. Leider ist es etwas schwieriger, dies vorab zu überprüfen. Eine kurze Anleitung gibt es am Ende des Artikels.
Apple und Garbage CollectingApple sah sich vor mehr als zehn Jahren mit der Problematik konfrontiert, dass andere moderne Anwendungsumgebungen allesamt auf automatische Speicherverwaltung setzten - daher musste eine Lösung her, damit Umsteiger von anderen Sprachen nicht vor große Hürden gestellt werden. Anders als die momentan in Objective-C und Swift vorhandene Möglichkeit, mittels ARC (Automatic Reference Counting) schon beim Kompilieren automatisch Speicherbereiche zu verwalten, griff der Garbage Collector ein, während ein Programm lief. Es wurde analysiert, welche Speicherbereiche noch benötigt werden und welche freizugeben sind.
Frühe ProblemeDa aber weder Objective-C noch die gesamten Frameworks darauf ausgelegt sind, führte dies zwangsläufig zu einer Vielzahl von Problemen: Häufiger konnte der Garbage Collector nicht verlässlich analysieren, welche Gruppen von untereinander verbundenen Speicherbereichen im RAM bleiben mussten und welche überflüssig sind. Andersherum kam es auch vor, dass der Garbage Collector manche Speicherbereiche freigeben hat, obwohl diese noch von anderen Bestandteilen benötigt wurden.
Xcode - Apples PilotprojektApple stellte die mit OS X 10.5 Leopard erschienene Version der Xcode-Programmierumgebung auf den Garbage Collector um - wohl um Probleme mit der automatischen Speicherverwaltung zu erkennen zu beheben. Xcode setzte aber nicht alle im System beinhalteten Frameworks ein, sodass manche gar nicht mit dem Garbage Collector verwendet werden konnten, weil zu viele Bugs auftraten.
Schwache PerformanceEin großes Problem stellte auch die Performance des Garbage Collectors dar: Ein Programm, welches viele Objekte anlegt und (normalerweise) sofort wieder freigibt, brauchte ein Vielfaches des Speichers im Vergleich zu einem Programm mit manueller Speicherverwaltung. Es war in diversen Situationen aus Sicht des Entwicklers einfach nicht vorhersehbar, wann der Garbage Collector mit dem Aufräumen anfing.
Das sehr schnelle Aus für den Garbage CollectorDen Todesstoß des Garbage Collectors setzte wahrscheinlich iOS: Auf dem Mac war der Performance-Verlust zwar merklich, aber zu verschmerzen. Auf dem ersten iPhone mit viel weniger RAM mussten die Entwickler zu Anfang den Speicher wieder manuell verwalten, da de Ressourcen zu schnell erschöpft gewesen wären. Eine neue Lösung musste her - und diese heißt ARC (Automatic Reference Counting), löste den Garbage Collector auf dem Mac ab und steht auch auf iOS zur Verfügung. Schon mit OS X 10.8 Mountain Lion kündigte Apple an, den Garbage Collector irgendwann einzumotten. Dies ist jetzt mit macOS Sierra vollzogen.
Wie kann ich feststellen, ob die App Garbage Collecting verwendet?Eine Vorabprüfung fällt leider sehr umständlich aus. Erforderlich dazu ist, dass auf dem Mac Xcode installiert wurde. Anschließend muss folgende Eingabe ins Terminal erfolgen, der Befehl verweist auf Programme im Applications-Order:
otool -oV Applications/PROGRAMMNAME.app/Contents/MacOS/PROGRAMMNAME | tail -3Sollte das Terminal nun den Bestandteil "OBJC_IMAGE_SUPPORTS_GC" ausgeben, dann startet die App unter macOS Sierra nicht mehr, da der Garbage Collector zum Einsatz kommt. Dies hier würde bedeuten, dass die App unter macOS Sierra den Dienst verweigert:
Contents of (__DATA,__objc_imageinfo) section
version 0
flags 0x6 OBJC_IMAGE_SUPPORTS_GC
Der einfachere Weg ist natürlich, dem Hersteller zu schreiben oder auf den jeweiligen Produktseiten nachzulesen, ob macOS Sierra auch unterstützt wird.