Passer à la navigation principale

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 les problèmes de credenciaux, de projet et de configuration de magasin localement.

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.

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

IdentifiantPlateformesCela vérifieAppliquez 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 d'application Capacitor correspond à l'ID de bundle natif / applicationId
IdPlateformesCe qu'il vérifieApplication de l'enforcement progressif
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 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-sanityiOSInfo.plist contient les clés de version / identité requises
ios/asc-key-validiOSLes champs de clé API d'App Store Connect ressemblent valides
ios/asc-key-accessiosL'ASC API 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-complianceiosLa déclaration ITSAppUsesNonExemptEncryption est effectuéeOui
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 répond aux exigences de CapacitorOui
ios/xcode-signing-teamiosL'équipe de signature est configuréeOui
ios/xcode-bundle-id-mismatch-across-configsiosL'identifiant de l'ensemble est cohérent entre les configurations XcodeOui
ios/xcode-enable-bitcode-leftoveriosENABLE_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 une cible d'applicationOui
ios/xcode-multiple-app-targetsiosLes cibles d'applications multiples sont traité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-formatiosFormat de domaines associés est valideOui
ios/entitlements-app-groups-formatiosFormat d'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 saut de page généralOui
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 configure CapacitorOui
ios/spm-package-resolved-missingiOSLe package SPM .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-missingiOSicône de 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-opensandroidLe coffre-fort 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__Le fichier cordova.variables.gradle est présent après la synchronisation cap
android/gradle-props-heuristics__CAPGO_KEEP_0__Les heuristiques de gradle.properties pour les ruptures de build courantes
android/play-sa-json__CAPGO_KEEP_0__Le fichier JSON de compte service Play est présent lorsqu'il est configuré
android/flavor-exists__CAPGO_KEEP_0__Le goût produit demandé existe
android/agp8-package-attr__CAPGO_KEEP_0__Le package de manifeste attribute supprimé pour AGP 8+
android/manifest-well-formedandroidLe fichier AndroidManifest.xml est analysé
android/manifest-tag-typoandroidLes typos de balises de manifeste courants
android/manifest-namespace-uriandroidL'URI de namespace android est correcte
android/manifest-missing-prefixandroidLes attributs Android utilisent la préfixe android:
android/manifest-exported-missingandroidL'attribut android:exported est défini là où cela est requis
android/manifest-multiple-uses-sdkandroidSeulement un élément sdk utilisé
android/manifest-duplicate-componentandroidPas de composants dupliqués
android/manifest-unique-permissionandroidLes permissions personnalisées sont uniques
android/manifest-hardcoded-debuggableandroiddebuggable=true non expédié
android/manifest-mock-locationandroidACCESS_MOCK_LOCATION non 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 deeplinks ont des filtres d'intent 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-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)

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.

Reconnaître cela 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