App-Entwicklung mit Apple Swift, Teil 4 Continuous Integration mit Swift und Jenkins
Kontinuierliche Integration macht es möglich, Apps mit minimalem Aufwand zu optimieren und zu testen. Auch im Falle von Swift ist diese Praxis vorgesehen. Apple setzt dabei auf Jenkins.
Anbieter zum Thema

Kontinuierliche Integration (Continuous Integration, CI) ist eine Praxis in der Software-Entwicklung, um Code-Änderungen effektiv zu prüfen und Bugs aufzuspüren. Dadurch läuft die Entwicklung schneller und effektiver und schwere Bugs werden üblicherweise vermieden.
Dabei geht es auch darum, möglichst häufig Code zu übermitteln und regelmäßige Builds zu erstellen, wodurch das Feedback kleinschrittig und dementsprechend schnell erfolgt. Auch Apple hat deshalb in seiner Programmiersprache Swift den Einsatz von Continuous Integration vorgesehen. Dadurch soll sich die App-Entwicklung in iOS und macOS deutlich effizienter gestalten.
Warum kontinuierliche Integration?
Continuous Integration kann Integrationsprobleme von Software-Bestandteilen vermeiden. Anders als beim reinen Extreme Programming (XP), in dem Tests lokal auf dem Rechner des Entwicklers durchgeführt werden, kommen im Rahmen der Continuous Integration üblicherweise Test-Server zum Einsatz. Diese prüfen die Code-Bestandteile automatisch auf schwere Fehler und informieren den Entwickler anschließend über die Ergebnisse. Beide Varianten sollen verhindern, dass die Code-Basis, vor allem bei mehreren Entwicklern, korrumpiert wird.
CI in der Praxis
In der Praxis läuft das folgendermaßen ab: Ein Entwickler nimmt an einem Projekt teil und zieht sich die Code-Basis aus dem Repository. Im Rahmen der Entwicklung ändert und ergänzt er den vorhandenen Code, bei größeren Projekten kann das auch gleichzeitig bei mehreren Entwicklern der Fall sein. Dabei können sich natürlich Fehler einschleichen.
Je mehr der Entwicklungs-Baum wächst, desto höher wird das Risiko, dass es im Zuge der Integration zu Konflikten kommt, der sogenannten „Integrations-Hölle“: Die Code-Basis weicht extrem von der ursprünglich angedachten Richtlinie ab, die Zusammenführung wird immer komplexer.
Genau hier greift CI ein: Code-Änderungen werden kleinschrittig auf einem Server eingepflegt und direkt auf Fehler und Integrierbarkeit geprüft. Continuous Integration stellt somit eine zusätzliche Schicht der Qualitätssicherung sicher. Auf diese Weise soll die „Integrations-Hölle“ vermieden werden.
CI mit Swift verwenden
Apple Swift besitzt als moderne Programmiersprache natürlich auch die Option, Continuous Integration zu verwenden. Apple hat dafür ein eigenes CI-System online bereitgestellt, das auf Basis des CI-Tools Jenkins arbeitet und mit einer Reihe von MacOS- und Linux-Nodes arbeitet.
Stand August 2018 sorgen insgesamt 36 macOS-Nodes und 9 Linux-Nodes für die nötige Rechenleistung zum Prüfen vorhandener Code-Fortschritte. Doch natürlich muss für die CI mit Swift nicht zwangsläufig das Apple-System samt Jenkins verwendet werden: Auch Dienste wie Travis, CircleCI, BuddyBuild oder GitHub besitzen entsprechende CI-Nodes.
Kontinuierliche Integration mit XCode-Bots
Alternativ können auch sogenannte XCode-Bots verwendet werden, was eine einfache Integration eines CI-Servers in kleinen Unternehmen ermöglicht: Alles, was dafür benötigt wird, ist ein macOS-Rechner im Netzwerk, der zum XCode-Server umfunktioniert werden muss. Der Rechner sollte möglichst viel Speicherplatz und Rechenleistung besitzen, ein Mac Pro kann diese Aufgabe zum Beispiel übernehmen.
Auf diesem Rechner muss, neben macOS, die kostenlose IDE XCode installiert werden. Anschließend lässt sich über die XCode-Einstellungen im Reiter „Server & Bots“ der XCode-Server aktivieren. Andere XCode-User können sich anschließend auf den Server verbinden und dort ihren Code auf den im Simulator der XCode-Software verfügbaren Devices testen.
Code verbessern mit zusätzlichen Online-Diensten
Abgesehen von der XCode-Bots-Option, die Apple-typisch relativ simpel gehalten ist, verhält sich Swift bei der Continuous Integration nicht anders als jede andere Programmiersprache. Einzig die Tatsache, dass Swift primär für Apple-Projekte gedacht ist, kann den ein oder anderen Service für diese Aufgabe disqualifizieren.
Dafür können praktische Online-Tools dabei helfen, die Reports, die beim CI-Verfahren erstellt werden, besser zu verstehen. So bietet der Webservice CodeCov die Möglichkeit, Reports genau zu analysieren und zu verwalten und auf diese Weise den Workflow noch ein wenig zu optimieren. Und falls Fehler aufgetreten sind, kann ein Dienst wie Codebeat dabei helfen, den Code nicht nur zu verbessern, sondern auch zu optimieren.
Continuous Integration in Swift anwenden
Insgesamt ist die Continuous Integration problemlos unter Swift möglich. Verschiedene Plattformen und Tools helfen dabei, das Entwicklungs-Paradigma effektiv anzuwenden. Da Swift auch nur eine Programmiersprache ist, gelten hier im Großen und Ganzen die gleichen Continuous-Integration-Rahmenbedingungen wie bei anderen Sprachen. Mit der Einschränkung, dass das Testing je nach Projekt möglicherweise XCode-Hintergrund haben sollte. Dafür optimiert CI den Entwicklungsprozess maßgeblich, weshalb es durchaus sinnvoll ist, sie auf jedes große und kleine Projekt anzuwenden.
(ID:45451557)