2599280

Warum ab iOS 15 Apps schneller starten können

16.07.2021 | 15:35 Uhr |

Mit iOS 15 führt Apple eine neue Technik ein, mit der Entwickler den Start von Apps deutlich beschleunigen können. Möglich wird das – Apple-typisch – durch eine Reduktion auf das Wesentliche im Code.

Seit es iOS gibt, optimiert Apple regelmäßig viel unter der Oberfläche des Mobilsystems und sorgt für viele kleine Verbesserungen, die bei der Keynote in aller Regel keine Erwähnung finden: Bestenfalls Software-Entwickler setzen sich damit auseinander. So auch mit dem brandneuen iOS 15 und iPadOS 15, das eine neue Technik für den App-Start mitbringt. Diese wird den Start von Apps auf dem Mobilsystem deutlich beschleunigen.

Kleiner Hinweis in den Release-Notes

Noah Martin , Entwickler praktischer Apps wie Screenie und QuickRes , ist beim Lesen der Release-Notes von Xcode 13 auf einen interessanten Satz aufmerksam geworden:

„All programs and dylibs built with a deployment target of macOS 12 or iOS 15 or later now use the chained fixups format. This uses different load commands and LINKEDIT data, and won’t run or load on older OS versions.“

Das neue Chained-Fixups-Format ändert laut dieses Hinweises den Umgang der Apple-Betriebssysteme macOS 12 und iOS 15. Allerdings gab es hier keinen zusätzlichen Hinweis, weshalb sich Martin dazu entschloss, das Rätsel per Reverse-Engineering zu lösen. Dabei fand er heraus , dass für iOS 15/iPadOS 15 (und macOS 12) optimierte Apps künftig deutlich schneller starten dürften.

App-Start deutlich gerafft

Grundsätzlich sind Apps unter macOS und iOS als App-Bundles angelegt. Das bedeutet, dass Apps – anders als etwa unter Windows – mit den meisten nötigen Bauteilen innerhalb eines Pakets ausgestattet sind: Apps sind im Grunde Ordner, die alle möglichen Programmbestandteile enthalten. Wer einen Mac besitzt, kennt das vielleicht: Ein Rechtsklick auf eine App im Finder samt Auswahl des Menüpunkts „Paketinhalt zeigen“ erlaubt den Blick in das Innere der App. Zusätzlich laden Apps aber auch sogenannte geteilte Bibliotheken (Shared Librarys) mit dem Dynamic Linker-Prozess (dyld), die dann in den RAM des Rechners, um dort schnell verfügbar zu sein, solange das Programm läuft. Genau hier setzt die neue Technik in iOS 15 und MacOS 12 an.

Chains, Fixups und Pointer

Technisch bedingt ist der RAM nämlich zerstückelt: Er besteht aus sogenannten Pages, die ihrerseits jeweils nur 16 Kilobyte Kapazität haben. Der dyld-Prozess packte bisher nach und nach diese Tables voll, wodurch der App-Start verzögert wurde. Apple hat das Problem mittels sogenannter Chains, Fixups und Pointer gelöst: Statt die einzelnen App-Bestandteile und die Shared Libraries nach und nach separat in den RAM zu laden. Ein sogenannter Pointer kann bis zu 64 Gigabyte große Apps auf diese Weise per Chain kodieren und über die Fixups miteinander verbinden. Was komplex klingt, ist im Grunde simpel: Die RAM-Inhalte werden nicht mehr wie in auf einer Karte, sondern in einer Kette miteinander verbunden. Das spart enorme Mengen sogenannter Metadaten, die sonst für die Verwaltung aufgewendet werden, was die ganze RAM-Verwaltung deutlich effizienter gestaltet. Zusätzlich werden RAM-Pages, die länger nicht verwendet wurden, komprimiert.

RAM effektiver nutzen und Apps schneller starten

Daraus resultieren laut Noah Martin zwei Effekte: Einerseits wird die Menge des verfügbaren Arbeitsspeichers optimiert. Und andererseits sorgt die gezielte Verteilung der Binärinhalte im Speicher für einen schnelleren App-Start. Bei seinen Tests konnte Martin eine bis zu fünfzigprozentige Ersparnis an Metadaten, die über den dyld-Prozess eingespielt werden, was letztlich RAM schont und Apps schneller starten lässt.

Tipp für Entwickler

Die Technologie grefit automatisch bei der Kompilierung von iOS/iPadOS 15- und macOS-12-Apps via Xcode 13 ein, wodurch sie auch nur hier zum Einsatz kommen kann: Ältere Versionen der Betriebssysteme können die Technik nicht verwenden. Entwicklern, die nicht ausschließlich für die neueste iOS- und iPadOS-Version entwickeln, legt Noah Martin daher nahe, sich auf die klassischen Methoden der App-Optimierung zu konzentrieren: Code reduzieren, dynamische Frameworks reduzieren, Apps klein halten.

Macwelt Marktplatz

2599280