Entwickler gibt Einsicht: Wie Meta die Entwicklung der Facebook-App meisterte

2012 entwickelte Facebook seine iOS-App komplett neu. Jetzt gibt Meta Einblick, welche Größe die App inzwischen hat und was das für Probleme bereitet.

In Pocket speichern vorlesen Druckansicht 15 Kommentare lesen
Die App von Facebook für iOS auf dem iPhone

(Bild: Savvapanf Photo / Shutterstock.com)

Lesezeit: 5 Min.
Inhaltsverzeichnis

Albtraum oder Vorbild: Ein Blogpost über die Facebook-App für iOS im Entwicklerblog von Meta sorgt für gespaltene Reaktionen in der Entwicklergemeinde. Mehr als zehn Jahre, nachdem der Code der App komplett neu geschrieben wurde, zieht einer der Entwickler Bilanz. Seit dem Jahr 2012 waren nach seinen Angaben Tausende von Ingenieuren an der Weiterentwicklung beteiligt. In dem Post legt er außerdem dar, dass Meta das Standard-SDK von Apple kaum nutze und welche Schwierigkeiten sich durch den schieren Umfang der Codebasis in der Entwicklung zwischenzeitlich ergeben haben.

Laut dem Meta-Softwareentwickler Dustin Shahidehpour sei Facebook for iOS (FBiOS) die älteste mobile Codebasis bei Meta. Die App sei in C++, Objective-C und Swift entwickelt worden, schreibt er in dem Blogpost. Aufgrund der vielen dynamisch geladenen Bibliotheken (dylibs) und Klassen sei es inzwischen nicht mehr möglich, alle auf einmal in der Entwicklungsumgebung Xcode zu laden. Der große Umfang führe auch dazu, dass es einen ganzen Arbeitstag dauern würde, die App zu kompilieren, wenn nicht das Facebook-eigene Build-System Buck durch Caching den Vorgang beschleunigen würde.

Die Facebook-App überrascht beim Download aus dem App Store auch viele Nutzer mit ihrer Größe: 300 Megabyte müssen geladen werden. Schon im Jahr 2017 wurde der Speicherplatzbedarf kritisiert. Folglich stößt der Post im Meta-Blog im Netz nicht nur auf Begeisterung: "Ich glaube, Shahidehpours Beitrag ist ein Versuch, anzugeben, aber für mich liest es sich wie ein Hilferuf", kommentiert der bekannte Apple-Blogger John Gruber den Blogpost und spielt auf das kreative Chaos im Code an, das Shahidehpour als gewollt bezeichnet. Gruber zitiert das Gesetz von Conway, eine Aussage des US-amerikanischen Informatikers Melvin Conway aus dem Jahre 1968, das besagt, dass die Kommunikationsstrukturen in einem Unternehmen großen Einfluss auf Software haben.

Zu ähnlichen Einschätzungen kommen Kommentatoren im sozialen Netzwerk Mastodon. "Ich weiß nicht, ob der Artikel inspirierend sein sollte, aber für mich war er ein Minenfeld voller roter Fahnen", schreibt dort ein Entwickler. Ein anderer gibt sich als ehemaliger Facebook-Mitarbeiter zu erkennen und deutet an, dass sich die Komplexität auf die tägliche Arbeit negativ ausgewirkt habe: "Was ich gesehen habe, ist, dass der Code ein Haufen von internem Code ist, der in keiner Weise der traditionellen iOS-Entwicklung ähnelt."

Dabei wurde Facebooks Neustart bei der Entwicklung im Jahr 2012 zunächst positiv begleitet. Das Unternehmen entschied sich seinerzeit dafür, Facebook für iOS als native App neu aufzusetzen, nachdem die App zuvor jahrelang nur eine Art nativer Rahmen mit Webviews war, die HTML5-Seiten anzeigten. Dies hatte laut dem Blogpost aus dem Jahr 2012 den Vorteil, dass ein Großteil des gleichen Codes für iOS, Android und das mobile Web verwendet werden konnte. Nachteile zeigten sich in der Geschwindigkeit und Zuverlässigkeit, sodass schließlich alle Zeichen auf Neustart standen.

Zwei Jahre später, im Jahr 2014, kämpfte die App laut dem aktuellen Post aber schon wieder mit Zuverlässigkeitsproblemen. Facebook machte Apples Daten-Framework Core Data als Ursache aus, weil sich Apples Lösung nach Darstellung von Meta nicht für die Multithread-Architektur des Newsfeeds geeignet habe. Aus dieser Problemlage heraus entwickelte Facebook das von React inspirierte UI-Framework ComponentKit, das heute noch für die Benutzeroberflächen und die Daten genutzt werde.

Im Jahr 2015 folgte ein weiterer Wendepunkt in der Architektur. Die App hatte zu der Zeit aufgrund von immer mehr Funktionen eine so lange Ladezeit, dass sie mit bis zu 30 Sekunden an die Grenze geriet, ab der iOS die Ausführung einer App beendet. Facebook behalf sich mit dynamisch geladenen Bibliotheken (dylib), da diese nicht vor der main-Funktion der App geladen werden müssen. Doch aus dieser Lösung, die einen schnellen Start der App ermöglichte, erwuchsen auch neue Herausforderungen. Dazu zählten Abstürze, wenn etwa aus der App heraus auf Funktionen einer dynamischen Bibliothek zugegriffen werden sollte, die noch gar nicht geladen war. Um diese Probleme zu beheben, setzte Facebook in den Folgejahren auf sein Open-Source-Build-Tool Buck und ein neues Plugin-System in der App. Dieses zeigte mögliche Probleme bereits während des Erzeugens der App auf und nicht erst während der Laufzeit beim Nutzer.

Weitere Herausforderungen erwuchsen ab dem Jahr 2020 aus Apples Strategie, neue APIs zunehmend nur noch in der Programmiersprache Swift anzubieten. Für die Facebook-App ergab sich ein Problem durch den Gebrauch von C++, das nicht zusammen mit Swift-Code verwendet werden konnte.

Nachdem Meta viele Jahre lang das offizielle SDK von Apple nach Möglichkeit eher gemieden hat, zeigen sich die Entwickler aktuellen Entwicklungen gegenüber aufgeschlossener. So könnte SwiftUI als deklarative API für die Benutzeroberfläche Teile von ComponentKit überflüssig machen. Auch andere Verbesserungen in den Apple-SDKs werden positiv gesehen und machten Eigenentwicklungen überflüssig, heißt es in dem Blogpost. Dass Facebook ähnlich wie bei seiner Messenger-App in naher Zukunft eine deutliche Verschlankung plant, lassen die Entwickler hingegen nicht durchblicken.

(mki)