Aller au contenu principal

Capture d'écran

Capturez des screenshots App Store directement depuis les simulateurs iOS/iPadOS via des tests UI. Remplace fastlane snapshot.

Démarrage rapide

ascelerate screenshot init                  # Create config and helper in ascelerate/
ascelerate screenshot # Capture screenshots

Commandes

Exécuter

ascelerate screenshot                       # Capture screenshots
ascelerate screenshot run # Same as above

Utilise toujours ascelerate/screenshot.yml dans le répertoire courant.

Initialiser

ascelerate screenshot init

Crée ascelerate/screenshot.yml et ascelerate/ScreenshotHelper.swift dans le répertoire ascelerate/. Demande confirmation avant l'écriture. Ne remplace pas les fichiers existants.

Créer le helper

ascelerate screenshot create-helper         # Generates ScreenshotHelper.swift
ascelerate screenshot create-helper -o CustomHelper.swift

Encadrement

ascelerate screenshot frame                    # Frame screenshots with device bezels

Encadre les captures d'écran avec des contours d'appareil. Utilise les paramètres frameDevice et deviceBezel de la configuration. Peut être exécuté indépendamment après la capture.

Diagnostic

ascelerate screenshot doctor                   # Check config and environment

Vérifie la configuration et l'environnement : fichier de configuration, existence du projet/workspace, disponibilité de xcodebuild et simctl, simulateurs, version du fichier helper, fichiers de contour d'appareil et répertoires de sortie. Affiche une liste de contrôle avec des indicateurs de réussite/échec/avertissement.

Configuration (ascelerate/screenshot.yml)

workspace: MyApp.xcworkspace
# project: MyApp.xcodeproj # Use project instead of workspace
scheme: AppUITests
devices:
- simulator: iPhone 17 Pro Max
# frameDevice: true
# deviceBezel: ./bezels/iPhone 17 Pro Max.png
- simulator: iPad Pro 13-inch (M5)
# frameDevice: true
# deviceBezel: ./bezels/iPad Pro 13-inch (M5).png
languages:
- en-US
- de-DE
outputDirectory: ./screenshots
# framedOutputDirectory: ./screenshots/framed
clearPreviousScreenshots: true
eraseSimulator: false
localizeSimulator: true
overrideStatusBar: true
darkMode: false
disableAnimations: true
waitAfterBoot: 0
# waitAfterEraseAndReboot: 30 # Attente supplémentaire pour les alertes système de premier lancement (ex. Apple Intelligence)
# statusBarArguments: "--time '9:41' --dataNetwork wifi"
# testWithoutBuilding: true # Skip build, use existing xctestrun
# cleanBuild: false
# headless: false # Don't open Simulator.app
# helperPath: AppUITests/ScreenshotHelper.swift
# launchArguments:
# - -ui_testing
# configuration: Debug # Build configuration
# testplan: MyTestPlan # Xcode test plan name
# numberOfRetries: 0 # Retry failed languages (erase + reboot simulator)
# stopAfterFirstError: false # Stop all devices on first failure
# reinstallApp: false # Delete and reinstall app before tests
# xcargs: SWIFT_ACTIVE_COMPILATION_CONDITIONS=SCREENSHOTS

Utilisation dans les UITests

Ajoutez ScreenshotHelper.swift à votre cible UITest :

override func setUp() {
setupScreenshots(app)
app.launch()
}

func testScreenshots() {
screenshot("01-home")
app.buttons["Settings"].tap()
screenshot("02-settings")
}

Votre application peut détecter le mode screenshot :

if ProcessInfo.processInfo.arguments.contains("-ASC_SCREENSHOT") {
// Show demo data, hide debug UI, etc.
}

Le helper fournit également disableAnimationsIfNeeded() pour désactiver les animations lorsque disableAnimations est activé dans la configuration :

override func setUp() {
setupScreenshots(app)
disableAnimationsIfNeeded()
app.launch()
}

Fonctionnement

  1. Build unique avec build-for-testing (ou ignoré si testWithoutBuilding: true)
  2. Pour chaque langue : démarre tous les simulateurs, localise, remplace la barre d'état
  3. Exécute les tests en parallèle sur tous les appareils
  4. Si numberOfRetries est défini et qu'un appareil échoue : réinitialise les simulateurs en échec, re-localise, redémarre et relance les tests
  5. Collecte les screenshots du cache par appareil vers le répertoire de sortie
  6. Encadre les captures d'écran avec des contours d'appareil (si frameDevice est activé)
  7. Les erreurs sont ignorées et le processus continue — les logs d'erreur sont enregistrés dans la sortie

Sortie

screenshots/
├── en-US/
│ ├── iPhone 17 Pro Max-01-home.png
│ ├── iPhone 17 Pro Max-02-settings.png
│ └── iPad Pro 13-inch (M5)-01-home.png
└── de-DE/
└── ...

Encadrement d'appareil

Encadrez les captures d'écran avec les contours d'appareils Apple.

info

Les contours d'appareils ne sont pas inclus avec ascelerate — téléchargez-les depuis Apple Product Bezels (compte Apple Developer requis). Le téléchargement est un fichier DMG contenant les contours PNG pour tous les appareils actuels.

Configuration

  1. Téléchargez le DMG Product Bezels depuis Apple Design Resources
  2. Extrayez les fichiers PNG de contour dans un dossier de votre projet (ex. ./bezels/)
  3. Activez l'encadrement par appareil dans la configuration :
devices:
- simulator: iPhone 17 Pro Max
frameDevice: true
deviceBezel: ./bezels/iPhone 17 Pro Max.png
- simulator: iPad Pro 13-inch (M5)
frameDevice: false

Sortie

Les captures d'écran encadrées sont enregistrées dans framedOutputDirectory (par défaut : {outputDirectory}/framed) :

screenshots/framed/
├── en-US/
│ └── iPhone 17 Pro Max-01-home.png
└── de-DE/
└── ...

Seuls les appareils avec frameDevice: true sont encadrés. L'encadrement s'exécute automatiquement après chaque langue pendant screenshot run, ou de manière autonome via screenshot frame.

Options

OptionDescription
clearPreviousScreenshotsVider le dossier de langue avant la collecte (uniquement si tous les appareils réussissent)
eraseSimulatorRéinitialiser le simulateur avant chaque langue
localizeSimulatorDéfinir la langue/locale du simulateur par langue
overrideStatusBarRemplacer la barre d'état (9:41, barres pleines, Wi-Fi)
statusBarArgumentsArguments personnalisés pour xcrun simctl status_bar
darkModeActiver le mode sombre sur les simulateurs
disableAnimationsDésactiver les animations pendant les tests
waitAfterBootSecondes d'attente après le démarrage du simulateur (défaut : 0)
waitAfterEraseAndRebootSecondes d'attente supplémentaires lorsque le simulateur est dans un état neuf — première langue de l'exécution, ou chaque fois que le simulateur a été effacé (via eraseSimulator: true ou un nouvel essai). Donne aux alertes système de premier lancement (par exemple "Apple Intelligence est prêt") le temps d'apparaître avant les captures d'écran.
testWithoutBuildingIgnorer le build, utiliser le fichier xctestrun existant
cleanBuildExécuter clean avant le build
headlessNe pas ouvrir Simulator.app
helperPathChemin vers ScreenshotHelper.swift pour la vérification de version
launchArgumentsArguments de lancement supplémentaires passés à l'application
configurationConfiguration de build (ex. Debug, Release)
testplanNom du plan de test Xcode
numberOfRetriesNombre de tentatives pour les langues échouées — réinitialise le simulateur, re-localise, redémarre et relance les tests. Seuls les appareils en échec sont relancés. Les résultats relancés sont marqués dans le tableau récapitulatif.
stopAfterFirstErrorArrêter tous les appareils après le premier échec
reinstallAppSupprimer et réinstaller l'application avant les tests
xcargsArguments supplémentaires passés à xcodebuild
frameDeviceActiver l'encadrement pour cet appareil (par appareil)
deviceBezelChemin vers le fichier PNG de contour d'appareil (par appareil)
framedOutputDirectoryRépertoire de sortie pour les captures encadrées (défaut : {outputDirectory}/framed)