Contrôles de pré-scan du build
Copiez un prompt de configuration avec les étapes d'installation et le guide markdown complet pour ce plugin.
Avant que le Capgo Cloud Build n'envoie votre projet, le CLI exécute un prescan qui détecte localement les problèmes d'identifiants, de projet et de configuration de store.
Il peut aussi s'exécuter seul :
npx @capgo/cli@latest build prescan <appId> --platform iosIl y a 80 des vérifications aujourd'hui. Préférez ignorer les ID de vérification individuels plutôt que de désactiver tout le scan.
Ignorer des vérifications spécifiques
Section intitulée « Ignorer certains contrôles »# Skip one check entirely (example: intentional Capacitor server.url / Next.js shell)npx @capgo/cli@latest build request <appId> --platform ios \ --prescan-skip ios/capacitor-server-url-shipped
# Run the check but never block on it (error becomes warning)npx @capgo/cli@latest build request <appId> --platform ios \ --prescan-warn ios/capacitor-server-url-shipped
# Repeatable or comma-separatednpx @capgo/cli@latest build request <appId> --platform ios \ --prescan-skip ios/capacitor-server-url-shipped \ --prescan-warn ios/capacitor-allow-navigation-wildcard,ios/plist-ats-arbitrary-loadsAlias standalone activés build prescan:
npx @capgo/cli@latest build prescan <appId> --platform ios \ --skip ios/capacitor-server-url-shipped \ --warn ios/capacitor-server-cleartextUnknown check ids fail fast with a clear error.
Contournements globaux (à utiliser avec parcimonie)
Section intitulée « Escapes globaux (à utiliser avec parcimonie) »| Option | Effet |
|---|---|
--no-prescan | Ignorer l'intégralité du scan |
--prescan-ignore-fatal (ou --ignore-fatal sur build prescan) | Run scan, print report, never block |
--fail-on-warnings | Traiter les warnings comme des erreurs fatales (CI) |
--no-prescan et --prescan-ignore-fatal masquer ou contourner tous contrôles restants. Utilisez plutôt des overrides par contrôle si vous n'êtes pas d'accord avec une seule règle.
Consulter le catalogue
Section intitulée « Catalogue de vérifications »Utilisez l'id exact dans --prescan-skip / --prescan-warn.
Application progressive signifie que le résultat est purement informatif jusqu'à 2026-08-14, ce qui peut bloquer les builds.
| Id | Plateformes | Vérifications effectuées | Application progressive |
|---|---|---|---|
shared/apikey-permission | ios, android | La clé API peut demander des builds natifs | — |
shared/app-exists | ios, android | L'id de l'app existe et est visible pour la clé API | — |
shared/credentials-saved | ios, android | Les identifiants iOS/Android requis sont enregistrés localement | — |
shared/cap-sync-stale | iOS, Android | Assets web compilés et plugins Capacitor synchronisés | — |
shared/node-linker-layout | iOS, Android | L'arborescence node_modules fonctionne avec les chemins natifs Capacitor | — |
shared/bundle-id-consistency | iOS, Android | L'appId Capacitor correspond au bundle id / applicationId natif | — |
| Id | Plateformes | Vérifications effectuées | Application progressive |
|---|---|---|---|
ios/p12-opens | iOS | Le fichier .p12 iOS s'ouvre avec le mot de passe fourni | — |
ios/p12-expiry | iOS | Le certificat de signature iOS n'est pas expiré | — |
ios/profile-expiry | iOS | Le profil de provisionnement n'est pas expiré | — |
ios/profile-bundle-match | iOS | Le bundle ID du profil de provisionnement correspond à l'app | — |
ios/profile-type-vs-mode | iOS | Le type de profil correspond au mode app_store / ad_hoc | — |
ios/cert-profile-pairing | iOS | Le certificat est intégré au profil de provisionnement | — |
ios/targets-covered | ios | Tous les targets iOS possèdent un profil de provisionnement | — |
ios/infoplist-sanity | ios | Info.plist contient les clés de version / d'identité requises | — |
ios/asc-key-valid | ios | Les champs clés API d'App Store Connect semblent valides | — |
ios/asc-key-access | ios | La clé API d'ASC peut accéder à l'app (à distance) | — |
ios/plist-bundle-id-format | ios | Le format du CFBundleIdentifier est valide | Oui |
ios/plist-version-short-format | ios | le format CFBundleShortVersionString est valide | Oui |
ios/plist-version-build-format | ios | le format CFBundleVersion est valide | Oui |
ios/plist-encryption-compliance | ios | ITSAppUsesNonExemptEncryption est déclaré | Oui |
ios/plist-ats-arbitrary-loads | ios | NSAllowsArbitraryLoads n'est pas activé pour la production | Oui |
ios/plist-launch-storyboard | iOS | L'écran de lancement est déclaré | Oui |
ios/plist-orientations-multitasking | iOS | Les paramètres d'orientation / multitâche sont cohérents | Oui |
ios/plist-orientations-present | iOS | UISupportedInterfaceOrientations est déclaré | Oui |
ios/plist-display-name | iOS | Le nom d'affichage est configuré | Oui |
ios/plist-background-modes-sanity | ios | Les valeurs UIBackgroundModes semblent valides | Oui |
ios/plist-scene-lifecycle-xcode27 | ios | L'app adopte le cycle de vie UIScene lors du build avec Xcode 27+ (requis par le SDK d'iOS 27) | Oui |
ios/xcode-deployment-target-capacitor | ios | La cible de déploiement iOS respecte les exigences de Capacitor | Oui |
ios/xcode-signing-team | ios | L'équipe de signature est configurée | Oui |
ios/xcode-bundle-id-mismatch-across-configs | iOS | Le bundle ID est cohérent dans les configs Xcode | Oui |
ios/xcode-enable-bitcode-leftover | iOS | Le résidu ENABLE_BITCODE est supprimé | Oui |
ios/xcode-swift-version-sanity | iOS | Le paramètre de version Swift semble correct | Oui |
ios/xcode-no-app-target | iOS | Le projet Xcode possède une cible d'application | Oui |
ios/xcode-multiple-app-targets | iOS | La gestion de plusieurs cibles d'application est intentionnelle | Oui |
ios/entitlements-vs-profile-capability | iOS | Les entitlements correspondent aux capacités du profil | Oui |
ios/entitlements-aps-environment-vs-mode | iOS | L'aps-environment correspond au mode de distribution | Oui |
ios/entitlements-associated-domains-format | iOS | Le format des Associated Domains est valide | Oui |
ios/entitlements-app-groups-format | iOS | Le format des App Groups est valide | Oui |
ios/capacitor-server-url-shipped | iOS | server.url n'est pas configuré comme un endpoint de live-reload / shell distant pour les builds destinés aux stores | Oui |
ios/capacitor-server-cleartext | iOS | server.cleartext n'est pas activé pour la production | Oui |
ios/capacitor-allow-navigation-wildcard | iOS | server.allowNavigation n'est pas un wildcard global | Oui |
ios/pods-not-installed | iOS | Les Pods CocoaPods / workspace sont présents lors de l'utilisation de Pods | Oui |
ios/pods-lock-missing | iOS | Le Podfile.lock verrouille les versions des pods | Oui |
ios/pods-capacitor-missing | iOS | Le Podfile lie Capacitor | Oui |
ios/spm-package-resolved-missing | iOS | Le fichier SPM Package.resolved est présent | Oui |
ios/spm-capacitor-dependency-missing | ios | Package.swift déclare Capacitor | Oui |
ios/appicon-empty-or-placeholder | ios | AppIcon.appiconset existe et n'est pas vide | Oui |
ios/appicon-referenced-file-missing | ios | Les fichiers d'icône Contents.json existent sur le disque | Oui |
ios/appicon-marketing-missing | ios | L'icône marketing 1024×1024 existe | Oui |
ios/spm-deployment-target-consistency | iOS | La cible de déploiement SPM est cohérente | Oui |
| Id | Plateformes | Vérifications effectuées | Application progressive |
|---|---|---|---|
android/keystore-opens | et android | Le keystore Android s'ouvre avec les mots de passe fournis | — |
android/keystore-expiry | et android | Le certificat de signature Android n'est pas expiré | — |
android/cordova-vars-present | et android | cordova.variables.gradle est présent après cap sync | — |
android/gradle-props-heuristics | et android | heuristiques gradle.properties pour les erreurs de build courantes | — |
android/play-sa-json | et android | le JSON du Play service-account est présent lorsqu'il est configuré | — |
android/flavor-exists | et android | le product flavor demandé existe | — |
android/agp8-package-attr | et android | l'attribut Manifest package= a été supprimé pour AGP 8+ | — |
android/manifest-well-formed | et android | Analyse du fichier AndroidManifest.xml | — |
android/manifest-tag-typo | et android | Erreurs de frappe courantes dans les balises du manifest | — |
android/manifest-namespace-uri | et android | L'URI du namespace xmlns:android est correcte | — |
android/manifest-missing-prefix | et android | Les attributs Android utilisent le préfixe android: | — |
android/manifest-exported-missing | et android | android:exported est défini lorsque nécessaire | — |
android/manifest-multiple-uses-sdk | et android | Un seul élément utilise sdk | — |
android/manifest-duplicate-component | et android | Aucun composant en double | — |
android/manifest-unique-permission | et android | Les permissions personnalisées sont uniques | — |
android/manifest-hardcoded-debuggable | et android | debuggable=true n'est pas inclus | — |
android/manifest-mock-location | et android | ACCESS_MOCK_LOCATION n'est pas inclus | — |
android/manifest-exported-unprotected | et android | Les composants exportés sont protégés | — |
android/manifest-query-all-packages | et android | Justification pour QUERY_ALL_PACKAGES | — |
android/manifest-deeplink-valid | et android | Les intent-filters de Deeplink semblent valides | — |
android/applicationid-present | et android | L'applicationId est déclarée dans app/build.gradle | — |
android/capacitor-build-gradle-applied | et android | capacitor.build.gradle existe lors de l'application | — |
android/gradle-wrapper-present | et android | Les fichiers Gradle wrapper sont présents | — |
android/flavor-dimensions | et android | Les dimensions de flavor sont déclarées si des flavors existent | — |
android/google-services-file | et android | google-services.json est présent lors de l'application du plugin | — |
android/local-properties-committed | et android | local.properties n'est pas commit avec des secrets | — |
android/sdk-floors | et android | min/compile/target SDK semblent valides | — |
android/target-sdk-play | et android | le targetSdk respecte les exigences du Play Store | — |
android/min-sdk-capacitor | et android | le minSdk respecte les exigences de Capacitor | — |
android/version-fields | et android | versionCode / versionName sont présents | — |
android/play-sa-access | et android | le compte de service Play peut accéder à l'app (à distance) | — |
Exemple : shell distant Next.js / server.url
Section intitulée « Exemple : shell Next.js distant / server.url »Déployer un shell natif qui charge une production server.url est un pattern Capacitor supporté. Prescan signale ios/capacitor-server-url-shipped car il s'agit souvent d'un résidu de live-reload.
Acquittez-le sans désactiver les autres vérifications :
npx @capgo/cli@latest build request <appId> --platform ios \ --prescan-skip ios/capacitor-server-url-shippedOu gardez la visibilité sous forme d'avertissement :
npx @capgo/cli@latest build request <appId> --platform ios \ --prescan-warn ios/capacitor-server-url-shipped