Introduction au CI/CD pour les projets Swift
Le développement moderne d'applications mobiles et de bureau en Swift nécessite non seulement un code de qualité, mais aussi un processus fiable d'intégration et de livraison. CI/CD (Continuous Integration / Continuous Deployment) est une pratique qui permet d'automatiser la compilation, les tests et le déploiement des applications. Pour les projets Swift, en particulier sous iOS et macOS, GitHub Actions est l'un des outils les plus pratiques et populaires.
Dans cet article, nous allons voir comment configurer un pipeline CI/CD complet pour les projets Swift en utilisant GitHub Actions. Vous apprendrez à automatiser la compilation, à exécuter des tests unitaires et même à envoyer l'application sur TestFlight ou le Mac App Store.
Pourquoi GitHub Actions pour Swift ?
GitHub Actions offre des fonctionnalités intégrées pour travailler avec l'écosystème Apple. Contrairement aux services tiers, il est entièrement intégré au dépôt et ne nécessite pas de configuration supplémentaire de plugins. Les principaux avantages :
- Minutes gratuites pour les dépôts publics (jusqu'à 2000 minutes par mois)
- Actions prêtes à l'emploi pour Xcode, SwiftLint, CocoaPods et SPM
- Prise en charge des runners macOS avec Xcode préinstallé
- Configuration flexible via des fichiers YAML
Configuration de base du CI pour un projet Swift
Commençons par un pipeline simple qui compilera le projet et exécutera les tests à chaque push sur la branche main ou lors de la création d'une Pull Request.
Créez le fichier .github/workflows/swift-ci.yml à la racine du dépôt :
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' | xcprettyCe workflow exécute deux étapes principales : la compilation du projet et l'exécution des tests. Notez l'utilisation de xcpretty — un utilitaire qui formate la sortie de Xcodebuild dans un format lisible.
Vérification supplémentaire de la qualité du code
Ajoutons une analyse statique avec SwiftLint. Cela aidera à maintenir un style de code uniforme dans l'équipe :
jobs: lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: SwiftLint uses: norio-nomura/action-swiftlint@3.2.1 with: args: --strictDésormais, à chaque commit, la conformité du code aux règles de SwiftLint sera vérifiée. Si des violations sont trouvées, le workflow se terminera par une erreur.
CI/CD avancé : tests et déploiement
Après la configuration de base, on peut passer à des scénarios plus complexes. Considérons un pipeline qui inclut :
- La compilation pour plusieurs simulateurs
- Les tests avec couverture de code
- La publication automatique sur TestFlight (pour iOS) ou le Mac App Store
Compilation et tests avec couverture
Pour collecter les données de couverture des tests, utilisez le flag -enableCodeCoverage YES :
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