CI/CD pour projets Swift : GitHub Actions de A à Z

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction au CI/CD pour les projets Swift

\n

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 des modifications. Continuous Integration (CI) et Continuous Delivery (CD) sont des pratiques qui permettent d'automatiser la compilation, les tests et le déploiement des applications. GitHub Actions est un outil intégré à GitHub qui convient parfaitement aux projets Swift fonctionnant sur iOS et macOS.

\n

Dans cet article, nous allons parcourir le cycle complet de configuration du CI/CD pour Swift : de la configuration de base au déploiement sur l'App Store et TestFlight. Vous apprendrez comment accélérer le développement, éviter le « facteur humain » et assurer la stabilité de votre application.

\n\n

Composants principaux du CI/CD pour Swift

\n

Avant de passer à la configuration, il est important de comprendre les étapes qui composent le pipeline pour les projets Swift :

\n
    \n
  • Compilation (Build) — compilation du projet avec Xcode ou xcodebuild.
  • \n
  • Tests (Test) — exécution des tests unitaires et des tests UI.
  • \n
  • Linting (Lint) — vérification du style de code (par exemple avec SwiftLint).
  • \n
  • Archivage (Archive) — création du fichier .ipa ou .app pour le déploiement.
  • \n
  • Déploiement (Deploy) — envoi de la compilation vers TestFlight ou l'App Store.
  • \n
\n

GitHub Actions permet de combiner toutes ces étapes dans un seul fichier YAML stocké dans le dépôt.

\n\n

Configuration de GitHub Actions pour Swift : guide pas à pas

\n\n

1. Création du fichier workflow

\n

Créez un dossier .github/workflows à la racine du dépôt et ajoutez un fichier ci.yml :

\n
name: Swift CI/CD\n\non:\n  push:\n    branches: [ main, develop ]\n  pull_request:\n    branches: [ main ]\n\njobs:\n  build-and-test:\n    runs-on: macos-latest\n\n    steps:\n    - uses: actions/checkout@v4\n\n    - name: Select Xcode version\n      run: sudo xcode-select -s /Applications/Xcode_15.0.app/Contents/Developer\n\n    - name: Build and test\n      run: |\n        xcodebuild clean test \\\n          -project YourApp.xcodeproj \\\n          -scheme YourApp \\\n          -destination 'platform=iOS Simulator,name=iPhone 15,OS=17.0' \\\n          -resultBundlePath TestResults \\\n          CODE_SIGNING_ALLOWED=NO\n    - name: Upload test results\n      uses: actions/upload-artifact@v4\n      with:\n        name: test-results\n        path: TestResults.xcresult
\n

Ce workflow s'exécute à chaque push sur main et develop, ainsi que sur les pull requests. Il effectue une compilation propre et exécute tous les tests sur le simulateur iPhone 15 avec iOS 17.

\n\n

2. Ajout du linting et de l'analyse statique

\n

Pour maintenir un style de code uniforme, ajoutez une étape avec SwiftLint :

\n
- name: Run SwiftLint\n  run: |\n    brew install swiftlint\n    swiftlint --strict
\n

Si vous utilisez SPM (Swift Package Manager), vous pouvez ajouter une analyse statique avec swift analyze (disponible dans Swift 5.9+) :

\n
- name: Static analysis\n  run: swift analyze --strict
\n\n

3. Configuration du CD : déploiement vers TestFlight

\n

Pour la livraison automatique des compilations vers TestFlight, des certificats et des profils de signature sont nécessaires. La méthode la plus sûre consiste à utiliser GitHub Secrets pour stocker les clés :

\n
jobs:\n  deploy:\n    needs: build-and-test\n    runs-on: macos-latest\n    if: github.ref == 'refs/heads/main'\n\n    steps:\n    - uses: actions/checkout@v4\n\n    - name: Install provisioning profile\n      env:\n        PROVISIONING_PROFILE: ${{ secrets.PROVISIONING_PROFILE_BASE64 }}\n      run: |\n        echo "$PROVISIONING_PROFILE" | base64 --decode > ~/Library/MobileDevice/Provisioning\\ Profiles/profile.mobileprovision\n\n    - name: Build and archive\n      run: |\n        xcodebuild archive \\\n          -project YourApp.xcodeproj \\\n          -scheme YourApp \\\n          -archivePath $                

Blogs

Book Recommendations