Delphi als Turbo für die mobile Entwicklung
Mobile Apps entwickeln mit Delphi, Teil 1

Von seinen Wurzeln her ist Delphi eine Windows-Entwicklungsumgebung, doch seine Stärken zahlen sich in der Cross-Plattform-Entwicklung, auch für die mobilen Systeme, aus. Die Philosophie des Rapid Application Development (RAD) steht für schnelle Umsetzung durch visuelle Entwicklung und einen optimierten Compiler. Über einen grafischen Designer lassen sich Apps rasch zusammenstellen. Delphi unterstützt Windows, macOS, iOS, Android und Linux. Dies bedeutet Zeitersparnis – eine einzige Codebasis kann mehrere Plattformen bedienen.
Delphi-Anwendungen werden in Maschinencode kompiliert und benötigen keine Runtimes. Entsprechend entfallen externe Abhängigkeiten und Versionierungskonflikte. Das Ergebnis sind performante Apps und ein unkomplizierter Deployment-Prozess.
Cross-Plattform-Ansatz
Der Delphi-Compiler generiert aus einer Codebasis native Apps für die genannten Systeme, einschließlich Android und iOS. Um plattformspezifische Unterschiede in der Benutzeroberfläche zu realisieren, werden Multi-Device-Ansichten und eine Live-Gerätevorschau genutzt. Damit lassen sich Layouts für verschiedene Bildschirmgrößen und Ausrichtungen anpassen und simulieren. So kann man beispielsweise denselben Dialog für ein Smartphone kompakter gestalten als für ein Tablet oder den Desktop. Die Anwendungslogik bleibt dabei einheitlich. Falls nötig, können jedoch plattformspezifische Codeabschnitte über Compiler-Direktiven eingebunden werden. Delphi erlaubt es mit {$IFDEF}-Schaltern, bestimmte Funktionen nur auf Android oder iOS auszuführen, falls Hardware oder OS-APIs es erfordern. Insgesamt verfolgt Delphi das Prinzip „Write once, compile everywhere“.
FireMonkey für das UI
FireMonkey (FM) bildet die Grundlage für das plattformübergreifende GUI und die Anwendungslogik. Technisch handelt es sich um ein modernes, hardwarebeschleunigtes Framework. FM abstrahiert die plattformabhängigen Details, das heißt, alle relevanten UI-Komponenten (Buttons, Listen, Eingabefelder und dergleichen) sind in FM plattformneutral implementiert, können jedoch das native Look and Feel der Zielplattform annehmen. Über Styles lässt sich festlegen, ob ein Steuerelement im nativen Stil des Betriebssystems gezeichnet wird oder im anpassbaren FM-Stil.
Neben der Oberfläche stellt FM auch zahlreiche plattformspezifische Dienste und Komponenten bereit. Der Zugriff auf Kamera, GPS-Sensor, Beschleunigungsmesser und andere Hardware gelingt über einheitliche Klassen, egal ob auf Android oder iOS. Ebenso sind nichtvisuelle Komponenten für Datenbankzugriff (zum Beispiel FireDAC für SQLite, MySQL et cetera) oder REST-Webservices integriert, die auf allen Plattformen gleichermaßen funktionieren.
UI-Designer, Drag and Drop, Komponentenmodell
In Delphi nutzt man einen grafischen Designer und eine umfangreiche Komponentenbibliothek. Die IDE ermöglicht ein „What you see is what you get“-Design der Oberfläche. Man kann per Drag and Drop Steuerelemente aus der Tool-Palette auf das Formular ziehen und anordnen (Bild 1).

Eigenschaften der Elemente (Beschriftungen, Farben, Layout-Optionen) werden im Objektinspektor angepasst. Dieses Vorgehen beschleunigt die UI-Entwicklung, da man das Layout direkt sieht und iterativ verfeinern kann, anstatt es ausschließlich im Code zu beschreiben.
Auch komplexere Funktionen lassen sich über nichtvisuelle Komponenten abbilden, beispielsweise für Datenbankverbindungen, Timer, HTTP-Clients, Location-Services und vieles mehr. Man bindet diese ein, konfiguriert die Eigenschaften und bindet die Ereignisse. Delphi folgt dem ereignisgesteuerten Paradigma: Jedem UI-Element können Eventhandler zugeordnet werden. Ein Doppelklick auf einen Button im Designer erzeugt zum Beispiel eine Prozedur ButtonClick im Code, die mit dem Klick-Ereignis verknüpft ist. Der Entwickler ergänzt die gewünschte Aktion in diese Methode. Debugging und Testing sind ebenfalls in die IDE integriert: Delphi erlaubt das Setzen von Breakpoints und das Untersuchen von Variablen, auch wenn die App auf einem Mobilgerät läuft.
Einrichtung der Entwicklungsumgebung
Installieren Sie RAD Studio (Delphi) in einer aktuellen Version. Für Android ist die Installation des Android SDK erforderlich, inklusive der passenden API-Level und Build-Tools. Wichtig ist, dass ein unterstütztes NDK (Native Development Kit) installiert ist, da Delphi dieses für das Kompilieren von ARM-Code nutzt. Hat man das SDK konfiguriert, kann Delphi für Android direkt auf dem Windows-PC kompilieren. Es entstehen native APK-Dateien, die auf Android-Geräten lauffähig sind. Als Entwicklungsgerät kann ein Android-Smartphone dienen (USB-Debugging in den Entwickleroptionen aktivieren und per USB an den PC anschließen) oder ein Android-Emulator. Hinweis: Delphi generiert native ARM-basierte Android-Apps. Diese können nur eingeschränkt auf den üblichen Emulatoren unter Windows für Android (x86-/x64-Image) ausgeführt werden. Deutlich performanter ist ein Android-Emulator auf einem ARM-PC, wie beispielsweise einem Apple Mac-Book mit M1- bis M4-Prozessor. Über das Netzwerk kann eine Verbindung zu einem solchen Emulator hergestellt werden.
Für die iOS-Entwicklung sind die Anforderungen strenger, da Apple verlangt, dass iOS-Apps mit der Apple-Toolchain gebaut und signiert werden. Delphi löst dies durch den Platform Assistant (PAServer). Das ist ein Serverprogramm, das auf einem Mac läuft und von RAD Studio aus angesprochen wird. In der Praxis richtet man also einen Mac mit macOS ein, auf dem Xcode installiert ist, und startet dort den PAServer. In RAD Studio wird dieser Mac als Remote verwendet und die verfügbaren Devices werden angezeigt (Bild 2).

Wenn man nun ein iOS-Projekt baut, überträgt Delphi den Code an den PAServer und nutzt im Hintergrund den Apple-Compiler, um eine IPA-Datei zu erzeugen. Diese wird dann vom Mac aus auf das angeschlossene iPhone/iPad installiert (Xcode beziehungsweise Apple erlauben Debug-Deployments auf eigene Geräte, erfordern aber ein Entwicklerprofil). Voraussetzung ist, dass man im Apple Developer Program registriert ist und ein passendes Provisioning Profile sowie ein Entwicklungszertifikat eingerichtet hat. Das entspricht dem üblichen iOS-Deployment-Prozess.
Ist alles konfiguriert, kann man direkt aus RAD Studio heraus die App mit Run auf dem iOS-Gerät starten. Der Workflow ist dabei: Delphi –> PAServer (Mac) –> Gerät. Die Debugger-Kommunikation funktioniert über WLAN/LAN, sodass Breakpoints und Logging auch beim iOS-Device nutzbar sind.
Erstes Projekt
Für diese Serie wird eine mobile App (iOS, Android) programmiert, welche folgende Funktionen aufweist:
- Aufnahme eines Bildes mit der Fotokamera: Nutzung der plattformübergreifenden Bibliothek zur Ansteuerung der Kamera.
- Ermittlung des geografischen Standorts zum Zeitpunkt der Aufnahme: Nutzung der plattformübergreifenden Bibliothek zur Ermittlung der Geo-Position.
- Anzeige der Informationen in einer scrollbaren Liste: individuelle Konfiguration der Listenelemente.
- Speicherung der Daten: in einer lokalen SQLite-Datenbank und/oder in der Cloud.
Die einzelnen Funktionen werden schrittweise umgesetzt und die Meilensteine innerhalb dieser Serie besprochen. Den Projektfortschritt kann man auf GitHub verfolgen. In diesem Artikel starten wir ein neues geräteübergreifendes App-Projekt (Bild 3) und bringen die noch inhalts- und funktionsleere App auf Android und iOS zum Starten. Das UI wird im nächsten Schritt realisiert.

Ein neues Projekt für eine geräteübergreifende App anlegen (Bild 3)
AutorFazit und Ausblick
Die Entwicklung von mobilen Apps mit Delphi basiert auf einem Rapid-Application-Development-Ansatz und nutzt die Cross-Plattform-Bibliothek FireMonkey. Nach dem Projektsetup in diesem Teil erfolgt im nächsten Teil der Serie der Aufbau des User-Interfaces, das auf Android und iOS eine gute Figur machen soll.