Einführung in CI/CD für Swift-Projekte
Die moderne Entwicklung von mobilen und Desktop-Anwendungen in Swift erfordert nicht nur qualitativ hochwertigen Code, sondern auch einen zuverlässigen Integrations- und Bereitstellungsprozess. CI/CD (Continuous Integration / Continuous Deployment) ist eine Praxis, die es ermöglicht, das Erstellen, Testen und Bereitstellen von Anwendungen zu automatisieren. Für Swift-Projekte, insbesondere unter iOS und macOS, ist GitHub Actions eines der bequemsten und beliebtesten Tools.
In diesem Artikel werden wir besprechen, wie man eine vollwertige CI/CD-Pipeline für Swift-Projekte mit GitHub Actions einrichtet. Sie erfahren, wie Sie Builds automatisieren, Unit-Tests ausführen und sogar die App an TestFlight oder den Mac App Store senden.
Warum GitHub Actions für Swift?
GitHub Actions bietet integrierte Funktionen für die Arbeit mit dem Apple-Ökosystem. Im Gegensatz zu Drittanbieterdiensten ist es vollständig in das Repository integriert und erfordert keine zusätzliche Konfiguration von Plugins. Die Hauptvorteile:
- Kostenlose Minuten für öffentliche Repositories (bis zu 2000 Minuten pro Monat)
- Fertige Actions für Xcode, SwiftLint, CocoaPods und SPM
- Unterstützung für macOS-Runner mit vorinstalliertem Xcode
- Flexible Konfiguration über YAML-Dateien
Grundlegende CI-Einrichtung für ein Swift-Projekt
Beginnen wir mit einer einfachen Pipeline, die das Projekt erstellt und bei jedem Push in den Branch main oder bei der Erstellung eines Pull Requests Tests ausführt.
Erstellen Sie die Datei .github/workflows/swift-ci.yml im Stammverzeichnis des Repositories:
name: Swift CI
on: push: branches: [ main ] pull_request: branches: [ main ]
jobs: build-and-test: runs-on: macos-latest steps: - uses: actions/checkout@v4 - name: Select Xcode version run: sudo xcode-select -s /Applications/Xcode_15.2.app - name: Build run: xcodebuild build -scheme MyApp -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 15,OS=17.2' | xcpretty - name: Run tests run: xcodebuild test -scheme MyApp -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 15,OS=17.2' | xcprettyDieser Workflow führt zwei Hauptschritte aus: das Erstellen des Projekts und das Ausführen von Tests. Beachten Sie die Verwendung von xcpretty – einem Dienstprogramm, das die Ausgabe von Xcodebuild in ein lesbares Format umwandelt.
Zusätzliche Code-Qualitätsprüfung
Fügen wir eine statische Analyse mit SwiftLint hinzu. Dies hilft, einen einheitlichen Codestil im Team beizubehalten:
jobs: lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: SwiftLint uses: norio-nomura/action-swiftlint@3.2.1 with: args: --strictJetzt wird bei jedem Commit überprüft, ob der Code den SwiftLint-Regeln entspricht. Wenn Verstöße gefunden werden, wird der Workflow mit einem Fehler beendet.
Fortgeschrittenes CI/CD: Testen und Bereitstellen
Nach der grundlegenden Einrichtung können wir zu komplexeren Szenarien übergehen. Betrachten wir eine Pipeline, die Folgendes umfasst:
- Erstellen für mehrere Simulatoren
- Testen mit Codeabdeckung
- Automatische Veröffentlichung in TestFlight (für iOS) oder im Mac App Store
Erstellen und Testen mit Abdeckung
Verwenden Sie das Flag -enableCodeCoverage YES, um Daten zur Testabdeckung zu sammeln:
jobs: test-coverage: runs-on: macos-latest steps: - uses: actions/checkout@v4 - name: Test with coverage run: | xcodebuild test \ -scheme MyApp \ -sdk iphonesimulator \ -destination 'platform=iOS Simulator,name=iPhone 15,OS=17.2' \ -enableCodeCoverage YES \ -derivedDataPath Build/DerivedData | xcpretty - name: Upload coverage to Codecov uses: codecov/cod