Zum Inhalt springen
bork.media
✕
Apps · 5 Min. lesen · Sommer 2026

Ein Code, zwei Telefone

Wie Babytakt mit Kotlin Multiplatform aufs iPhone kam — ohne die App zweimal zu schreiben.

Babytakt begann als Android-App. Irgendwann stand die Frage im Raum: Wie kommt sie aufs iPhone, ohne dass ich sie ein zweites Mal schreibe?

Compose oder Flutter?

Beide zeichnen ihre Oberfläche selbst, gestalterisch gibt es kaum einen Unterschied. Den Ausschlag gaben die Zahlen: Mit Compose Multiplatform blieben 337 gemeinsame Tests, die Verschlüsselung und das Datenformat unangetastet — ein Flutter-Neubau hätte deutlich länger gedauert und bei null angefangen.

Dazu kam: Der Kern der App war vom ersten Tag an als gemeinsames Modul angelegt. Der Weg war vorbereitet, er musste nur gegangen werden.

Das iPhone-Ziel findet Fehler, bevor es ein iPhone gibt

Die iOS-Ziele habe ich früh eingetragen. Selbst auf dem Windows-Rechner, der gar kein iPhone bauen kann, prüft der Übersetzer den gemeinsamen Code dann gegen den kleinsten gemeinsamen Nenner statt gegen Android. In der ersten Minute fand er zehn Stellen, die heimlich an Java hingen — auf Android unsichtbar, auf dem iPhone ein Abbruch.

Stück für Stück in die Mitte

Die Navigation wanderte aus der Android-Hülle in den gemeinsamen Teil; die Hauptdatei schrumpfte von 1.189 auf 221 Zeilen. Die Momentkarte — vorher 235 Zeilen Android-Zeichencode — entsteht heute auf beiden Telefonen aus derselben Beschreibung, bis auf den Pixel gleich groß.

Was wirklich zur Plattform gehört, steht hinter drei schmalen Anschlüssen. iOS kennt zum Beispiel keinen kurzen Hinweis am unteren Rand — also wird er nachgebaut. Und die Fotoauswahl auf dem iPhone kommt ganz ohne Berechtigungsfrage aus.

Rechnen beide Telefone wirklich gleich?

Bei Verschlüsselung reicht „sieht gut aus” nicht. Feste Testwerte, erzeugt mit einem unabhängigen Werkzeug, prüfen, dass Android und iPhone Byte für Byte dasselbe rechnen. Erst dann darf ein Eintrag das Telefon verlassen.

Weiterlesen

Weitere Notizen