Ergänzen fehlender Xcode-Funktionen - Teil 3

Inken Marei Kolthoff 2016 Nov 10 • 7 Min

Nach Teil 1 und Teil 2 unserer Serie über fehlende Xcode Funktionen und wie man sich behelfen kann, folgen in diesem Eintrag mehr Informationen zu Fehlenden Code Conventions und TODO-Warnungen.

Fehlende Code Conventions und TODO-Warnungen

Swift erlaubt es - wie die meisten Programmiersprachen - das gleiche Funktionsverhalten einer App auf viele verschiedene
Weisen zu implementieren. Während man im Allgemeinen nicht sagen kann, dass es "die perfekte" Implementierung einer
Funktion gibt, kristallisieren sich dennoch mit der Zeit für jede Programmiersprache und Plattform eine ganze Menge von
zu vermeidenden und eher zu bevorzugenden Implementierungen heraus. Um möglichst hohe Code-Qualität zu erreichen, lohnt
es sich daher für jede längerfristig angelegte Arbeit – besonders wenn mehrere Entwickler beteiligt sind – Code-Konventionen zu erarbeiten und sich an diesen zu orientieren.

Während das offizielle Buch der Swift-Entwickler The Swift Programming Language
beim Erläutern der einzelnen verfügbaren Funktionen bereits viele sinnvolle Beispiele für guten Programmierstil vorgibt,
ist es diesbezüglich doch eher zu zeitaufwändig und unvollständig (wenn auch trotzdem lesenswert). Als offizielle
Apple-Quelle seien ergänzend die API Design Guidelines
empfohlen. Als bessere Alternative gibt es die zusammengefassten und mit Beispielen versehenen Swift Code Conventions
von GitHub und von
raywenderlich.com, an die auch wir uns bei Jamit Labs halten.

Das Open Source Projekt SwiftLint hat es sich zur Aufgabe gemacht, die GitHub
Conventions automatisiert in Xcode zu überprüfen. Nach einer Installation des SwiftLint-Tools via Homebrew (brew install swiftlint), kann nun jedes Projekt durch drei einfache Schritte um einen automatisierten Warnings- und Error-Generator
bei Nichteinhaltung von bestimmten Code-Konventionen erweitert werden:

  • Füge ein Build-Script mit diesem Inhalt für das App- oder Framework-Target hinzu:
if which swiftlint > /dev/null; then
    swiftlint
else
    echo "warning: SwiftLint not installed, download it from https://github.com/realm/SwiftLint"
fi

Hinweis: Man beachte, dass beim Einfügen des Scripts in das Build-Script-Feld in Xcode die Formatierung des Textes
verloren geht. Diese lässt sich mit ein paar Einrückungen jedoch schnell wieder herstellen, um den Code im Script
lesbarer zu halten.

  • Erstelle danach im Hauptverzeichnis des Projekts eine Datei namens .swiftlint.yml mit folgender Konfiguration (bei Bedarf änderbar):
# some rules are only opt-in
opt_in_rules:
- empty_count
- missing_docs

# paths to include during linting. `--path` is ignored if present.
included:
- Sources

# paths to ignore during linting. Takes precedence over `included`.
excluded:
- Carthage
- Sources/Constants

# configurable rules can be customized from this configuration file
line_length: 180

Als drittes sollte nun noch eine Einstellung von Xcode angepasst werden, da die Regel trailing_newline sonst beim
Standardverhalten von Xcode Warnungen wegen falsch gesetzter Leerzeichen meldet, die man ganz einfach vermeiden kann:
Gehe in die Einstellungen von Xcode ("Preferences"), wähle dort den Reiter "Text Editing" und stelle sicher, dass neben
"Automatically trim trailing whitespace" auch "Including whitespace-only lines" angehakt ist. Dies stellt sicher, dass
bei Umbrüchen und leer gelassenen Zeilen entstehende Leerzeichen automatisch gelöscht werden. Hier kann übrigens auch
gleich die Empfehlungslinie für die Zeilenbreite in Xcode angepasst werden unter "Page guide at column" - wir empfehlen
180 als Kompromiss zwischen ständigen Zeilenumbrüchen und Lesbarkeit von Code.

Diese drei Schritte sorgen dafür, dass bei jedem Entwickler, der den Swift Linter installiert hat, automatisch
Warnungen oder in bestimmten Fällen sogar Errors in Xcode generiert und angezeigt werden, wenn die konfigurierten
Konventionen nicht eingehalten werden. Falls jemand das Tool SwiftLint nicht installiert hat, wird wenigstens eine
Warnung angezeigt, dass der Swift Linter nicht installiert ist. Als netten Nebeneffekt zeigt SwiftLint zusätzlich auch
Code-Kommentare, die ein TODO: oder FIXME enthalten als Warnungen an, damit man diese nicht so schnell vergessen
oder übersehen kann.

Weiterführende Links