Passer à la navigation

Vérifiez les contrôles de prescan

Avant que Capgo Cloud Build télécharge votre projet, le CLI exécute un pré-scanner qui détecte localement les problèmes de mot de passe, de projet et de configuration de magasin.

Il s'exécute également en mode indépendant :

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

Il existe 80 vérifications aujourd'hui. Préférez 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

Alias 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.

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 des erreurs fatales (CI)

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

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

Appliquer progressivement signifie que la découverte est uniquement informative jusqu'à ce que 2026-08-14puis elle peut bloquer les builds.

IdentifiantPlateformesCe qu'il vérifieAppliquer progressivement
shared/apikey-permissioniOS, AndroidAPI 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 structure de node_modules fonctionne avec les chemins natifs Capacitor
shared/bundle-id-consistencyiOS, AndroidL'ID de l'application Capacitor correspond à l'ID de l'application natif / applicationId
IdPlateformesCe qu'il vérifieAppliquer progressivement
ios/p12-opensiosLe certificat de signature iOS .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 iOS n'est pas expiré
ios/profile-bundle-matchiOSL’ID de l'ensemble de la 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é dans le 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é API d'App Store Connect ressemblent à des champs valides
ios/asc-key-accessiosL'ASC 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-complianceiosLe chiffrement non exempt d'impôt 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-presentiosLes orientations d'interface utilisateur prises en charge sont déclaréesOui
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 remplit les exigences de CapacitorOui
ios/xcode-signing-teamiosL'équipe de signature est configuréeOui
ios/xcode-bundle-id-mismatch-across-configsiosL'identifiant de l'application est cohérent entre les configurations XcodeOui
ios/xcode-enable-bitcode-leftoveriosLa propriété ENABLE_BITCODE est suppriméeOui
ios/xcode-swift-version-sanityiosLa version Swift est configurée de manière raisonnableOui
ios/xcode-no-app-targetiosLe projet Xcode a une cible d'applicationOui
ios/xcode-multiple-app-targetsiOSPlusieurs cibles d'application sont gérées intentionnellementOui
ios/entitlements-vs-profile-capabilityiOSLes autorisations correspondent aux capacités du profilOui
ios/entitlements-aps-environment-vs-modeiOSL'environnement APS correspond au mode de distributionOui
ios/entitlements-associated-domains-formatiOSLe format Associated Domains est valideOui
ios/entitlements-app-groups-formatiosLe format App Groups est valideOui
ios/capacitor-server-url-shippediosserver.url n'est pas 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 tampon universelOui
ios/pods-not-installediOSLes CocoaPods Pods / espace de travail sont présents lors de l'utilisation de PodsOui
ios/pods-lock-missingiOSLe Podfile.lock fixe les versions des podsOui
ios/pods-capacitor-missingiOSLe Podfile relie CapacitorOui
ios/spm-package-resolved-missingiOSLe package SPM Package.resolved est présentOui
ios/spm-capacitor-dependency-missingiOSLe fichier Package.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 de Contents.json existent sur le disqueOui
ios/appicon-marketing-missingiOSIcone marketing de 1024×1024 existeOui
ios/spm-deployment-target-consistencyiOSLa cible de déploiement SPM est cohérenteOui
IDPlateformesCe qu'il vérifieApplication de l'application
android/keystore-opensandroidClés de stockage Android s'ouvre avec les mots de passe fournis
android/keystore-expiry__CAPGO_KEEP_0__Le certificat de signature Android n'est pas expiré
android/cordova-vars-present__CAPGO_KEEP_0__cordova.variables.gradle est présent après la synchronisation de cap
android/gradle-props-heuristics__CAPGO_KEEP_0__Heuristiques de gradle.properties pour les ruptures de build courantes
android/play-sa-json__CAPGO_KEEP_0__Le fichier JSON de compte de service Play est présent lorsqu'il est configuré
android/flavor-exists__CAPGO_KEEP_0__Le goût de produit demandé existe
android/agp8-package-attr__CAPGO_KEEP_0__Le package de manifeste attribut supprimé pour AGP 8+
android/manifest-well-formedandroidLe fichier AndroidManifest.xml est analysé
android/manifest-tag-typoandroidLes fautes de frappe de balises de manifeste courantes
android/manifest-namespace-uriandroidL'URI de namespace 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-sdkandroidSeule une utilisation de l'élément sdk est autorisée
android/manifest-duplicate-componentandroidAucun composant ne doit être répété
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-packagesandroidQUERY_ALL_PACKAGES justification
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 présent lors de l'application du plugin
android/local-properties-committedandroidlocal.properties n'est pas commit avec des secrets
android/sdk-floorsandroidles étages min/compile/target SDK semblent valides
android/target-sdk-playandroidla version SDK cible répond aux exigences de Play
android/min-sdk-capacitorandroidla version SDK min 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)

L'expédition d'une coquille native qui charge une production server.url est un modèle Capacitor pris en charge. Les drapeaux de prescan ios/capacitor-server-url-shipped car il s'agit souvent d'un résidu de rechargement en direct.

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