Passer à la navigation

Effectuer des vérifications de prescan

Avant que Capgo Cloud Build télécharge votre projet, le CLI exécute une pré-étude Détection locale de problèmes de credenciaux, de projet et de configuration de magasin.

Elle s'exécute également de manière indépendante :

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

Il y a 80 checks today. Prefer ignoring individual check ids over turning the whole scan off.

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

Alias standalone activé 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

Unknown check ids fail fast with a clear error.

Échappements mondiaux (utilisez-les avec parcimonie)

Échappements mondiaux (utiliser avec parcimonie)
FlagEffet
--no-prescanPasser la totalité de l'analyse
--prescan-ignore-fatal (ou --ignore-fatal context build prescan)Run scan, print report, never block
--fail-on-warningsTraitez les avertissements comme des erreurs fatales (CI)

--no-prescan and --prescan-ignore-fatal Considérer les avertissements comme mortels (CI) et remaining checks. Use per-check overrides instead when you only disagree with one rule.

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

Appliquer progressivement means the finding is information-only until 2026-08-14puis il peut bloquer les builds.

IdPlateformesCe qu'il vérifieAppliquer progressivement
shared/apikey-permissionios, androidAPI clé peut demander des builds natifs—
shared/app-existsios, androidL'identifiant d'application existe et est visible à la clé API—
shared/credentials-savedios, androidLes informations de connexion iOS/Android sont enregistrées localement—
shared/cap-sync-staleios, androidWeb assets built and Capacitor plugins synced—
shared/node-linker-layoutios, androidLa structure de node_modules fonctionne avec les chemins natifs Capacitor—
shared/bundle-id-consistencyios, androidCapacitor appId correspond à l'identifiant de bundle natif / applicationId—
IdPlateformesCe qu'il vérifieApplication de l'enforcement progressif
ios/p12-opensiosiOS .p12 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 n'est pas expiré—
ios/profile-bundle-matchiosL'identifiant 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-sanityiOSInfo.plist a des clés de version / d'identité requises—
ios/asc-key-validiOSLes champs de la clé API d'App Store Connect semblent valides—
ios/asc-key-accessiOSASC API clé peut accéder à l'application (distante)—
ios/plist-bundle-id-formatiosLe format de CFBundleIdentifier est valideOui
ios/plist-version-short-formatiosLe format de CFBundleShortVersionString est valideOui
ios/plist-version-build-formatiosLe format de CFBundleVersion est valideOui
ios/plist-encryption-complianceiosL'entête ITSAppUsesNonExemptEncryption 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 et de multitâche 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-configsiosBundle id is consistent across Xcode configsOui
ios/xcode-enable-bitcode-leftoveriosLaisser ENABLE_BITCODE est suppriméOui
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-targetsiosLes cibles d'applications multiples sont gérées intentionnellementOui
ios/entitlements-vs-profile-capabilityiosLes autorisations correspondent aux capacités de profilOui
ios/entitlements-aps-environment-vs-modeiosL'environnement APS correspond au mode de distributionOui
ios/entitlements-associated-domains-formatiosLe format des domaines associés est valideOui
ios/entitlements-app-groups-formatiosLa forme d'App Groups est valideOui
ios/capacitor-server-url-shippediosserver.url is not left as a live-reload / remote shell endpoint for store buildsOui
ios/capacitor-server-cleartextiosserver.cleartext n'est pas activé pour la productionOui
ios/capacitor-allow-navigation-wildcardiosserver.allowNavigation n'est pas un saut de page sauvageOui
ios/pods-not-installediosLes Pods CocoaPods / workspace sont présents lors de l'utilisation de Pods.Oui
ios/pods-lock-missingiosPodfile.lock fixe les versions des podsOui
ios/pods-capacitor-missingiosPodfile configure CapacitorOui
ios/spm-package-resolved-missingiosLe Package.resolved SPM est présentOui
ios/spm-capacitor-dependency-missingiosPackage.swift déclare CapacitorOui
ios/appicon-empty-or-placeholderiosL'icône AppIcon.appiconset existe et n'est pas videOui
ios/appicon-referenced-file-missingiosLes fichiers d'icône Contents.json existent sur le disqueOui
ios/appicon-marketing-missingiosUne icône de marketing de 1024×1024 existeOui
ios/spm-deployment-target-consistencyiosLe cible de déploiement SPM est cohérentOui
IdPlateformesCe qu'il vérifieAppliquer progressivement
android/keystore-opensandroidClé de stockage 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 cap—
android/gradle-props-heuristicsandroidHeuristiques de gradle.properties pour les ruptures de build courantes—
android/play-sa-jsonandroidLe fichier JSON de compte de service est présent lorsque configuré.—
android/flavor-existsandroidLe produit flavor demandé existe—
android/agp8-package-attrandroidL'attribut package du fichier Manifest est supprimé pour AGP 8+—
android/manifest-well-formedandroidAndroidManifest.xml est analysé—
android/manifest-tag-typoandroidTypographes courants de balises de manifeste—
android/manifest-namespace-uriandroidLa valeur de la balise xmlns:android est correcte—
android/manifest-missing-prefixandroidLes attributs Android utilisent la préfixe android: —
android/manifest-exported-missingandroidandroid:exported est défini là où cela est requis—
android/manifest-multiple-uses-sdkandroidSeul un élément uses-sdk est utilisé—
android/manifest-duplicate-componentandroidAucun composant n'est dupliqué—
android/manifest-unique-permissionandroidLes permissions personnalisées sont uniques—
android/manifest-hardcoded-debuggableandroiddebuggable=true n'est pas expédié—
android/manifest-mock-locationandroidACCESS_MOCK_LOCATION n'est pas expédié—
android/manifest-exported-unprotectedandroidLes composants exportés sont protégés—
android/manifest-query-all-packagesandroidJustification de QUERY_ALL_PACKAGES—
android/manifest-deeplink-validandroidLes filtres d'intention deeplink semblent valides—
android/applicationid-presentandroidL'identifiant d'application est déclaré dans app/build.gradle—
android/capacitor-build-gradle-appliedandroidLe fichier capacitor.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 lorsque des saveurs existent—
android/google-services-fileandroidgoogle-services.json présent lors de l'application du plugin—
android/local-properties-committedandroidlocal.properties n'est pas commit avec des secrets—
android/sdk-floorsandroidles min/compile/target SDK étages semblent valides—
android/target-sdk-playandroidtargetSdk répond aux exigences de Play—
android/min-sdk-capacitorandroidminSdk répond aux exigences de Capacitor—
android/version-fieldsandroidversionCode / versionName sont présents—
android/play-sa-accessandroidle compte de service Play peut accéder à l'application (distante)—

Exemple : shell Next.js distant / URL serveur shell

Section intitulée « Exemple : shell Next.js distant / URL serveur shell »

Envoyer un shell natif qui charge une production server.url C'est un modèle Capacitor pris en charge. Drapeaux de prescan ios/capacitor-server-url-shipped car il s'agit souvent d'un résidu de live-reload.

Le reconnaître sans désactiver d'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