Die Motivation hinter J2ObjC

J2ObjC begann aus Frustration, der Frustration, die mehrere Entwicklungsteams damit hatten, ihre Web- und mobilen Produkte schnell zu iterieren, ohne dass sie in der Funktionalität auseinanderlaufen mussten. Viele der Clientprodukte von Google wurden mit GWT für Webanwendungen (jetzt J2CL) und der Android API für Android-Mobilgeräte erstellt. So blieben iPod/iPad-Apps übrig, die entweder JavaScript-Webanwendungen oder handschriftlich in Objective-C sein mussten. Obwohl GWT- und Android-Apps Geschäftslogikcode (ohne UI) gemeinsam nutzen konnten, gab es keine Lösung, um diesen Code mit iOS-Apps zu teilen.

Es wurden mehrere Ansätze zur Lösung dieses Problems untersucht. XMLVM sah sehr vielversprechend aus, aber auf seiner iOS-Übersetzer-Seite wurde angegeben, dass das Projekt gesperrt wurde (es war jetzt wieder aktiv und stellt eine gute Alternative zu diesem Projekt dar). Andere Übersetzungstools führten eine einmalige Codekonvertierung durch, die zusätzliche Bearbeitungsschritte erforderte, bevor die Ausgabe erfolgreich erstellt und ausgeführt wurde.

Ein neues Projekt ist geboren

Viele Ingenieure dachten von Anfang an, dass ein Übersetzer wie J2ObjC nicht möglich sei. Es ist in der Tat unmöglich, ein Tool zu erstellen, das den gesamten Java-Anwendungscode genau in iOS übersetzen und gleichzeitig seine Semantik perfekt erhalten kann. Das liegt daran, dass iOS strenge Designstandards für Benutzeroberflächen hat und seine Nutzer sehr aufmerksam sind, wenn eine App diese nicht einhält. Unserer Meinung nach besteht die einzige Möglichkeit, eine erstklassige und schnelle iOS-Benutzeroberfläche zu erhalten, darin, sie in Objective-C mit den iOS SDK-Frameworks von Apple zu schreiben.

Wie die meisten Entwickler aus den Grenzen der Differenzialrechnung gelernt haben, kann es jedoch sehr nützlich sein, an das Unmögliche heranzukommen. Daher haben wir eine Reihe von Grenzwerten festgelegt, um die Erfolgschancen von J2ObjC zu erhöhen:

  • Unterstützt nur die clientseitige Entwicklung. Befehlszeilentools und Servercode könnten theoretisch übersetzt werden, aber bei diesem Anwendungsfall werden wahrscheinlich Probleme auftreten, die nicht von J2ObjC behandelt werden.
  • Unterstützen Sie nur Geschäftslogikcode und halten Sie sich weit, weit weg von Benutzeroberflächen-APIs (wie die alten Karten in ihren Außenecken, „Hier gibt es Monster“ auf).
  • Legen Sie das iOS Foundation Framework fest, keine allgemeinere Basis.
  • Prüfen Sie mit den Instrumenten von Xcode die akzeptable Leistung und Arbeitsspeichernutzung, nachdem Sie die Best Practices von Apple für die Speicherverwaltung implementiert haben.
  • Konzentrieren Sie sich nur auf das, was von den Anwendungsentwicklern benötigt wird, und nicht auf das, was der Vollständigkeit halber nötig ist. Die Anforderungen realer Anwendungen steuern die Projektanforderungen.

Wir finden es praktisch, kann auch helfen

Wir haben J2ObjC als Open-Source-Software zur Verfügung gestellt, da einige interne Projekte damit das Problem der gemeinsamen Nutzung von Java-Geschäftslogik für iOS-Apps lösen konnten. Mehrere Teams verlassen sich jetzt auf den Übersetzer und wir sind dabei, neue Funktionen hinzuzufügen und viele Fehler zu beheben. Wir würden uns freuen, wenn andere Teams für mobile Apps es ausprobieren und uns mitteilen, was funktioniert und was verbessert werden muss.

Wir finden die Arbeit an dem Projekt auch lohnenswert. Die zwei schwierigsten Aufgaben für einen Java-Übersetzer sind 1) das korrekte Parsen, die Typprüfung und das Auflösen der Java-Quelle und 2) die Bereitstellung einer konformen Java-Laufzeitumgebung. Die erste Aufgabe wird vom Javac-Compiler gut ausgeführt und die Laufzeitumgebung (einschließlich ihrer Einheitentests) basiert auf der Android-libcore-Bibliothek. Nun müssen wir erst noch abstrakte Syntaxbäume mutieren und eine allgemein leicht zu behebende Quellausgabe generieren, um Fehler zu beheben. Wenn Sie an Java-Tools oder -Compilern interessiert sind, melden Sie sich bei uns an! Es gibt noch viel zu tun, und wir würden uns über Ihre Hilfe freuen.