Aller directement au contenu

Exécuter les vérifications de prescan

Avant Capgo Cloud Build télécharge votre projet, le CLI exécute une préscan qui détecte les problèmes de credenciaux, de projet et de configuration de magasin localement.

Il s'exécute également en mode standalone :

Fenêtre de terminal
npx @capgo/cli@latest build prescan <appId> --platform ios

Il existe 80 vérifications aujourd'hui. Il est préférable d'ignorer les identifiants de vérification individuels plutôt que de désactiver la vérification complète.

Fenêtre de terminal
# 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-separated
npx @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-loads

Aliases de ligne de commande standalone activés build prescan:

Fenêtre de terminal
npx @capgo/cli@latest build prescan <appId> --platform ios \
--skip ios/capacitor-server-url-shipped \
--warn ios/capacitor-server-cleartext

Les identifiants de vérification inconnus échouent rapidement avec un message d'erreur clair.

Échappements mondiaux (utilisez-les avec parcimonie)

Section intitulée “Échappements mondiaux (utilisez-les avec parcimonie)”
DrapeauEffet
--no-prescanIgnorer l'ensemble de l'analyse
--prescan-ignore-fatal (ou --ignore-fatal sur build prescan)Exécuter l'analyse, imprimer le rapport, ne jamais bloquer
--fail-on-warningsConsidérer les avertissements comme mortels (CI)

--no-prescan et --prescan-ignore-fatal cacher ou contourner tous les contrôles restants. Utilisez les surcharges par contrôle au lieu de cela lorsque vous n'êtes d'accord qu'avec une règle.

Utilisez l'identifiant exact --prescan-skip / --prescan-warn.

Enforce progressif signifie que les résultats sont uniquement informatifs jusqu'à 2026-08-14puis il peut bloquer les builds.

IdentifiantPlateformesCe qu'il vérifieEnforce progressif
shared/apikey-permissionios, androidLa clé API peut demander des builds natifs
shared/app-existsios, androidL'ID de l'application existe et est visible pour la clé API
shared/credentials-savedios, androidLes informations de connexion iOS/Android sont enregistrées localement
shared/cap-sync-staleios, androidLes assets web sont construits et les plugins Capacitor sont synchronisés
shared/node-linker-layoutios, androidLa disposition de node_modules fonctionne avec les chemins natifs Capacitor
shared/bundle-id-consistencyios, androidL'ID de l'application Capacitor correspond à l'ID de la charge utile native / à l'ID de l'application
IdPlateformesCe qu'il vérifieApplication progressive de la mise en œuvre
ios/p12-opensiosLe certificat de signature iOS s'ouvre avec le mot de passe fourni
ios/p12-expiryiosLe certificat de signature iOS n'est pas expiré
ios/profile-expiryiosLe profil de provisionnement iOS n'est pas expiré
ios/profile-bundle-matchiosLe ID de bundle du profil de provisionnement correspond à l'application
ios/profile-type-vs-modeiosLe type de profil correspond au mode app_store / ad_hoc
ios/cert-profile-pairingiosLe certificat est intégré au profil de provisionnement
ios/targets-coverediosTous les cibles iOS ont un profil de provisionnement
ios/infoplist-sanityiosLe fichier Info.plist contient les clés de version / identité requises
ios/asc-key-validiosLes champs de la clé App Store Connect API de l'application ressemblent à des champs valides
ios/asc-key-accessiosLa clé API ASC peut accéder à l'application (distante)
ios/plist-bundle-id-formatiosLe format CFBundleIdentifier est valideOui
ios/plist-version-short-formatiosLe format CFBundleShortVersionString est valideOui
ios/plist-version-build-formatiosLe format CFBundleVersion est valideOui
ios/plist-encryption-complianceiosITSAppUsesNonExemptEncryption est déclaréOui
ios/plist-ats-arbitrary-loadsiosNSAllowsArbitraryLoads n'est pas activé pour la productionOui
ios/plist-launch-storyboardiosL'écran de démarrage est déclaréOui
ios/plist-orientations-multitaskingiosLes paramètres d'orientation / multitasking sont cohérentsOui
ios/plist-orientations-presentiosUISupportedInterfaceOrientations est déclaréOui
ios/plist-display-nameiosLe nom d'affichage est définiOui
ios/plist-background-modes-sanityiosLes valeurs de UIBackgroundModes semblent validesOui
ios/xcode-deployment-target-capacitoriosLa cible de déploiement iOS répond aux exigences de CapacitorOui
ios/xcode-signing-teamiosL'équipe de signature est définieOui
ios/xcode-bundle-id-mismatch-across-configsiosLe numéro de bundle est cohérent dans les configurations XcodeOui
ios/xcode-enable-bitcode-leftoveriosLa suppression de l'héritage de Bitcode est effectuéeOui
ios/xcode-swift-version-sanityiosLa version Swift est configurée de manière raisonnableOui
ios/xcode-no-app-targetiosLe projet Xcode a un cible d'applicationOui
ios/xcode-multiple-app-targetsiosPlusieurs cibles d'applications sont gérées intentionnellementOui
ios/entitlements-vs-profile-capabilityiosLes autorisations correspondent aux capacités du profilOui
ios/entitlements-aps-environment-vs-modeiosaps-environment correspond au mode de distributionOui
ios/entitlements-associated-domains-formatiosLe format des domaines associés est valideOui
ios/entitlements-app-groups-formatiosLe format App Groups est valideOui
ios/capacitor-server-url-shippediosserver.url ne doit pas être laissé en tant que point d'entrée de rechargement en direct / de shell distant pour les builds de magasinOui
ios/capacitor-server-cleartextiosserver.cleartext n'est pas activé pour la productionOui
ios/capacitor-allow-navigation-wildcardiosserver.allowNavigation n'est pas un wildcard généralOui
ios/pods-not-installediosLes CocoaPods Pods / workspace sont présents lors de l'utilisation de PodsOui
ios/pods-lock-missingiosPodfile.lock fixe les versions des podsOui
ios/pods-capacitor-missingiosPodfile relie CapacitorOui
ios/spm-package-resolved-missingiosLe Package.resolved SPM est présentOui
ios/spm-capacitor-dependency-missingiosLe fichier Package.swift déclare CapacitorOui
ios/appicon-empty-or-placeholderiosL'ensemble d'icônes AppIcon existe et n'est pas videOui
ios/appicon-referenced-file-missingiosLes fichiers d'icônes de Contents.json existent sur le disqueOui
ios/appicon-marketing-missingiosL'icône de marketing 1024×1024 existeOui
ios/spm-deployment-target-consistencyiosLe cible de déploiement SPM est cohérentOui
IdPlateformesCe qu'il vérifieExécution progressive
android/keystore-opensandroidClé Android s'ouvre avec les mots de passe fournis
android/keystore-expiryandroidLe certificat de signature Android n'est pas expiré
android/cordova-vars-presentandroidcordova.variables.gradle est présent après la synchronisation de cap
android/gradle-props-heuristicsandroidLes heuristiques de gradle.properties pour les ruptures de build courantes
android/play-sa-jsonandroidLe compte de service Play est présent lorsqu'il est configuré
android/flavor-existsandroidLe goût de produit demandé existe
android/agp8-package-attrandroidLe package de l'attribut de manifest supprimé pour AGP 8+
android/manifest-well-formedandroidLe fichier AndroidManifest.xml est analysé
android/manifest-tag-typoandroidTypographie des balises de manifeste commune
android/manifest-namespace-uriandroidL'URI de namespace xmlns:android est correcte
android/manifest-missing-prefixandroidLes attributs Android utilisent la préfixe android:
android/manifest-exported-missingandroidLa propriété android:exported est définie là où nécessaire
android/manifest-multiple-uses-sdkandroidSeul un élément uses-sdk est utilisé
android/manifest-duplicate-componentandroidAucun composant ne peut être dupliqué
android/manifest-unique-permissionandroidLes permissions personnalisées sont uniques
android/manifest-hardcoded-debuggableandroiddebuggable=true ne sera pas expédié
android/manifest-mock-locationandroidACCESS_MOCK_LOCATION ne sera pas expédié
android/manifest-exported-unprotectedandroidLes composants exportés sont protégés
android/manifest-query-all-packagesandroidLa justification de QUERY_ALL_PACKAGES
android/manifest-deeplink-validandroidLes filtres d'intent Deeplink semblent valides
android/applicationid-presentandroidL'identifiant d'application est déclaré dans app/build.gradle
android/capacitor-build-gradle-appliedandroidcapacitor.build.gradle existe lors de l'application
android/gradle-wrapper-presentandroidLes fichiers de wrapper Gradle sont présents
android/flavor-dimensionsandroidLes dimensions de saveur sont déclarées lorsqu'il existe des saveurs
android/google-services-fileandroidgoogle-services.json est présent lors de l'application du plugin
android/local-properties-committedandroidles propriétés locales ne sont pas mises en cache avec des secrets
android/sdk-floorsandroidles étages min/compile/target SDK apparaissent valides
android/target-sdk-playandroidla version cible SDK répond aux exigences de Play
android/min-sdk-capacitorandroidla version minSDK répond aux exigences de Capacitor
android/version-fieldsandroidles versionsCode / versionName sont présentes
android/play-sa-accessandroidle compte de service Play peut accéder à l'application (distante)

Exemple : shell de serveur distant Next.js / server.url shell

Section intitulée “Exemple : shell de serveur distant Next.js / server.url shell”

L'envoi d'un shell natif qui charge une production server.url est un modèle Capacitor pris en charge. Les drapeaux de pré-lecture ios/capacitor-server-url-shipped car il s'agit souvent d'un résidu de rechargement en direct.

Le reconnaître sans désactiver les autres vérifications :

Fenêtre de terminal
npx @capgo/cli@latest build request <appId> --platform ios \
--prescan-skip ios/capacitor-server-url-shipped

Ou garder la visibilité comme un avertissement :

Fenêtre de terminal
npx @capgo/cli@latest build request <appId> --platform ios \
--prescan-warn ios/capacitor-server-url-shipped