Swift... 100% nativ

cubido
Mittwoch, 11. Dezember 2019

In diesem letzten Teil der Reihe über iOS Entwicklung möchte ich mich nun sozusagen mit der Königsdisziplin der App Entwicklung beschäftigen.

Mit Swift betritt man ein völlig neues Universum, nämlich das Universum von Apple und man merkt auch sehr schnell, dass hier vieles nicht so ist, wie man es eigentlich gewohnt ist. Das betrifft natürlich vorwiegend Entwickler, die bisher nur unter Windows entwickelt haben.

Die zuletzt vorgestellten Frameworks verwenden ja auch größtenteils gängige Frontend-Technologien und Frontend-Entwickler arbeiten immer häufiger mit Macs von Apple. Für diese Leute ist der Umstieg dann nicht ganz so schwierig, da sie zumindest mit dem Betriebssystem MacOS und dessen generellen Look and Feel bereits vertraut sind.

Was ist Swift?

Im Gegensatz zu den Technologien, die in den vorangegangenen Berichten vorgestellt wurden, handelt es sich bei Swift nicht um ein Framework, sondern um eine von Apple entwickelte Programmiersprache. Man kann damit neben Apps für iOS auch Software für iPadOS, macOS, tvOS, watchOS und Linux entwickeln. Was man hingegen, zumindest nicht ohne Weiteres, tun kann ist, Apps für Android zu entwickeln.

Dabei ist Swift eine recht junge Programmiersprache. Version 1.0 wurde erst im September 2014 von Apple veröffentlicht.

Warum sollte man sich das antun?

Viele stellen sich diese oder ähnliche Fragen: Soll man Swift lernen? Lohnt sich der Aufwand? Die Antwort ist natürlich auch hier wieder: Hängt davon ab, was man machen möchte. Jedoch werden jene Fälle, die den Einsatz von nativer Entwicklung mit Swift zwingend erforderlich machen, immer weniger. Das liegt einerseits an einer steigenden Anzahl wirklich guter Frameworks und Technologien für Cross-Plattform-Entwicklung und andererseits eben auch daran, dass man immer seltener einzig und alleine für iOS-Geräte entwickelt.

Eine App muss heute praktisch immer auf iOS und Android laufen und man möchte sie ja nicht zweimal entwickeln und dann zwei völlig getrennte Produkte warten. Doppelter Aufwand ist nun einmal wirtschaftlich nicht besonders effektiv.

Für eine App, wie jene aus unserem Beispiel kann man ganz klar sagen, dass eine native Implementierung mittels Swift nicht nötig ist. Weder die zu erwartenden Performancevorteile, noch der direkte Zugriff auf Systemfunktionen rechtfertigen hier den Aufwand, sich überhaupt erst in Swift einzuarbeiten.

Keine Frage, Swift ist schnell. Man vergleicht es gerne mit C/C++ und wenn es darum geht, Anwendungen zu schreiben, die eine derartige Performance erfordern, wird Swift die richtige Wahl sein bzw. kommt man kaum um Swift herum. Für alles andere kann man genauso gut React Native, Capacitor oder Xamarin verwenden.

Bitte anschnallen, steile Lernkurve voraus!

Zuerst die gute Nachricht: Es gibt für iOS Entwicklung mit Swift eine unglaublich große Anzahl an guten Tutorials, Online-Video-Kursen und Foren aller Art.

Die schlechte Nachricht: Man benötigt das alles auch wirklich.

Hat man noch nie für iOS entwickelt, so muss man vor allem zwei Dinge lernen:

  • die Bedienung der Entwicklungsumgebung XCode
  • die Programmiersprache Swift

Und wenn man bisher noch wenig mit Geräten von Apple zu tun hatte, dann muss man sich auch mit der Bedienung von MacOS anfreunden, denn XCode läuft nur unter Apples eigenem Betriebssystem und es ist lizenzrechtlich nicht gestattet, dieses auf anderer Hardware als der von Apple zu installieren, auch wenn es technisch durchaus möglich ist, MacOS auch auf einer VM unter Windows laufen zu lassen.

Das erste, was einem auffällt, vor allem wenn man aus der Windows-Welt kommt, ist, dass Apple seinen ehemaligen Werbeslogan „Think Different“ offenbar immer noch sehr ernst nimmt. Man hat teilweise wirklich den Eindruck, als hätte man sich bei der Entwicklung von Swift und XCode richtig bemüht, möglichst viele Dinge anders zu machen, als die meisten Entwickler es gewohnt sind.

Wenn man sich dann näher mit Swift beschäftigt, dann bemerkt man sehr schnell, dass es sich dabei mittlerweile um eine sehr ausgereifte Sprache handelt. Man findet auch sämtliche gängigen Features anderer Sprachen ebenfalls in Swift vor, nur heißen diese meist anders, als man es kennt.

„This“ heißt „self“, “Interfaces” heißen “Protocols” und anonyme Methoden bzw Funktionen nennen sich “Closures”. Ganz besonders böse finde ich das Schlüsselwort „let“. Dieses deklariert in Swift ein Konstante, wohingegen es z.B. in JavaScript eine Variable deklariert.

Die Beispielapplikation

Ein letztes Mal haben wir hier noch unsere App reproduziert, die wir zuletzt mit React Native, Capacitor oder Xamarin entwickelt hatten, eine kleine Businessapp mit klassischem Aufbau, welche Daten und Bilder von einem Webservice lädt und diese Daten dann in Form einer Liste samt dazugehöriger Detailansicht anzeigt. Außerdem wurde auf gängige Sensordaten und die Kamera zugegriffen sowie verschiedene Formularfelder dargestellt.

Bei der Wahl der Entwicklungsumgebung waren wir klarerweise etwas eingeschränkt.

Die Entwicklung mit XCode geht dann allerdings schnell von der Hand, sobald man einmal eingearbeitet ist. Bis dahin quält man sich etwas mit Handhabung dieser Software.

Der grafische Editor für das Layout der Bedienungsoberfläche der App bietet alles, was man benötigt, ist aber mehr als nur sperrig zu bedienen. Vor allem das Erstellen eines flexiblen Layouts für unterschiedliche Displaygrößen unter Verwendung sogenannter Constraints bedarf einiger Übung und vor allem braucht man gute Nerven. Hat man diese Sache aber einmal im Griff, ist man äußerst flexibel bei der Gestaltung der Benutzeroberfläche.

Klarerweise auch nicht weiter problematisch verhält es sich mit dem Ansteuern von Sensoren aller Art, befindet man sich doch in einer systemnahen Programmierumgebung mit direktem Zugriff auf so ziemlich alles was iOS zu bieten hat.

Weiß man einmal nicht mehr weiter, so wird man im Web sehr schnell fündig. Die schier endlose Anzahl an Video-Tutorials, Foren und Blogs stellt hier wirklich eine große Hilfe dar.

Fazit

Man könnte durchaus in Versuchung kommen, zu sagen „An meine Apps lasse ich nur Wasser und Swift“ – von Wasser würde ich an dieser Stelle übrigens ganz dringend abraten – und die daraus resultierenden Vorteile, dass man mit Swift sozusagen den direkten Weg geht, liegen auch ganz klar auf der Hand. Die Nachteile wiegen aber ähnlich schwer und gerade das macht die Entscheidung nicht unbedingt leichter.

Für herkömmliche Business Apps wie jene aus unserem Beispiel kann man eindeutig sagen, dass man dafür nicht extra Swift zu lernen braucht. Vor allem dann, wenn man bereits Know How in der einen oder anderen Frontend Technologie hat, ist man mit Capacitor oder React Native wesentlich schneller am Ziel.

Einzig für Anwendungen bei denen hohe Performance ein entscheidendes Kriterium darstellt, wird man auf Swift nicht verzichten können. Hier befinden wir uns dann aber schon im Bereich von Echtzeit-Anwendungen wie sie bei Audio- und Musikproduktion, 3D-Animation oder auch Spielen anzutreffen sind. Für alles andere stellt Swift eigentlich nur einen übertriebenen Aufwand dar.

Verfasst von Thomas Polaschek

Weitere Blogbeiträge

zum Thema Development

Updates for innovators: Abonnieren Sie unseren Blog