CI/CD-Pipeline für Swift: Einrichtung von Grund auf unter macOS und Linux

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Ihr Swift-Projekt verdient einen automatischen Himmel: CI/CD von Grund auf aufbauen

\n\n

Sie haben ein cooles Swift-Paket oder eine App geschrieben. Der Code fliegt, die Tests laufen lokal, Sie fühlen sich wie ein Rockstar. Aber dann machen Sie einen Push – und der Albtraum beginnt: «Läuft es auch unter Linux?», «Bestehen die Tests unter macOS?», «Habe ich vielleicht vergessen, SwiftLint zu starten?».

\n\n

Kommt Ihnen das bekannt vor? Wenn ja, brauchen Sie eine CI/CD-Pipeline für Swift. Es ist wie ein Autopilot für Ihren Code: Er baut selbstständig, testet, prüft den Stil und deployed sogar. In diesem Artikel richten wir eine CI/CD-Pipeline für Swift von Grund auf am Beispiel von GitHub Actions ein. Sie erhalten fertigen, funktionierenden Code, den Sie kopieren und noch heute verwenden können.

\n\n
Spoiler: Nach der Einrichtung erhalten Sie bei jedem Commit grüne Häkchen, anstatt vor der Konsole zu ergrauen.
\n\n

Warum CI/CD für Swift kein Luxus, sondern eine Notwendigkeit ist

\n\n

Swift lebt in zwei Welten: macOS (Xcode, CocoaPods, Carthage) und Linux (Vapor, SwiftNIO, Server-Projekte). Ohne CI/CD riskieren Sie:

\n\n
    \n
  • Einen Kompilierungsfehler auf einer anderen Plattform zu übersehen
  • Den Linter nicht zu starten (und der Code sieht dann aus wie nach einem Bombenangriff)
  • Stunden mit manuellem Deployment zu verschwenden
  • Zeit mit der Suche nach Regressionen zu verlieren
\n\n

Eine richtig konfigurierte Swift CI/CD-Pipeline löst all diese Probleme. Sie arbeitet 24/7, trinkt keinen Kaffee und sagt nicht «bei mir funktioniert es». Los geht's!

\n\n

Schritt 1: Das Werkzeug auswählen – GitHub Actions

\n\n

Wir verwenden GitHub Actions – das ist das integrierte CI/CD in GitHub, und für Swift ist es ideal. Gründe:

\n\n
    \n
  • Kostenlos für öffentliche Repositories (2000 Minuten pro Monat)
  • macOS-Runner – Build unter Xcode möglich
  • Linux-Runner – für Server-Swift-Projekte
  • Fertige Actions für SwiftLint, Tests, Deployment
\n\n

Wenn Sie GitLab, Bitbucket oder Jenkins verwenden – die Prinzipien sind dieselben, aber die YAML-Syntax unterscheidet sich.

\n\n

Schritt 2: Grundlegende Struktur einer CI/CD-Pipeline für Swift

\n\n

Jede Pipeline besteht aus drei Phasen:

\n\n
    \n
  1. Build – Projekt-Build (SPM oder Xcode)
  2. Test – Ausführen von Unit-Tests
  3. Lint – Überprüfung des Codestils (optional, aber sehr empfehlenswert)
\n\n

Zusätzlich kann ein Deployment hinzugefügt werden (z. B. auf einen Server oder in TestFlight).

\n\n

Datei .github/workflows/swift-ci.yml erstellen

\n\n

Erstellen Sie im Stammverzeichnis Ihres Repositories den Ordner .github/workflows/ und darin die Datei swift-ci.yml. Hier ist eine minimale funktionierende Pipeline:

\n\n
name: Swift CI/CD Pipeline\n\non:\n  push:\n    branches: [ main, develop ]\n  pull_request:\n    branches: [ main ]\n\njobs:\n  build-and-test:\n    runs-on: ubuntu-latest\n\n    steps:\n    - name: Checkout code\n      uses: actions/checkout@v3\n\n    - name: Setup Swift\n      uses: swift-actions/setup-swift@v1\n      with:\n        swift-version: "5.9"\n\n    - name: Build\n      run: swift build\n\n    - name: Run tests\n      run: swift test
\n\n

Diese CI/CD-Pipeline für Swift wird bei jedem Push oder Pull Request in main/develop ausgelöst. Sie baut das Projekt und führt die Tests unter Ubuntu aus. Einfach? Ja. Aber lassen Sie uns etwas Magie hinzufügen.

\n\n

Schritt 3: macOS und Xcode zur Build-Matrix hinzufügen

\n\n

Swift-Entwickler arbeiten oft unter macOS, während der Server-Teil unter Linux läuft. Um sicherzustellen, dass das Projekt überall gebaut wird, verwenden wir eine Matrix-Strategie:

\n\n
jobs:\n  build-and-test:\n    strategy:\n      matrix:\n        os: [ubuntu-latest, macos-latest]\n        swift-version: ["5.8", "5.9"]\n\n    runs-on: ${{ matrix.os }}\n\n    steps:\n    - uses: actions/checkout@v3\n\n    - name: Setup Swift\n      uses: swift-actions/setup-swift@v1\n                

Blogs

Buchempfehlungen