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

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

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

Il y a 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

Pseudonymes autonomes 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 fatals (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 les résultats sont uniquement des informations jusqu'à ce que 2026-08-14, puis il peut bloquer les builds.

IdentifiantPlateformesCela vérifieAppliquez progressivement
shared/apikey-permissionios, androidAPI peut demander des builds natifs
shared/app-existsios, androidL'identifiant d'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'identifiant d'application Capacitor correspond à l'identifiant de bundle natif / applicationId
IdPlateformesCe qu'il vérifieApplication de l'exécution progressive
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 la mise en forme de 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 clé App Store Connect API semblent 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-complianceiOSL'application utilise-t-elle une encryption non exemptée ?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 de l'UI 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'application est cohérent dans 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-formatiosLe format de Domaines Associés est valideOui
ios/entitlements-app-groups-formatiosLe format 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 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-missingiOSUne icô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-expiryandroidLe certificat de signature Android n'est pas expiré
android/cordova-vars-presentandroidLe fichier cordova.variables.gradle est présent après la synchronisation cap
android/gradle-props-heuristicsandroidLes heuristiques de gradle.properties pour les ruptures de build courantes
android/play-sa-jsonandroidLe fichier JSON de compte service Play est présent lorsqu'il est configuré
android/flavor-existsandroidLe goût produit demandé existe
android/agp8-package-attrandroidLe package de manifeste attribut supprimé pour AGP 8+
android/manifest-well-formedandroidLe fichier AndroidManifest.xml est analysé
android/manifest-tag-typoandroidLes erreurs 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-missingandroidL'attribut android:exported est défini où cela est requis
android/manifest-multiple-uses-sdkandroidSeulement un élément sdk utilisé
android/manifest-duplicate-componentandroidAucun composant ne doit être dupliqué
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 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 cibleSdk répond aux exigences de Play
android/min-sdk-capacitorandroidla version minSdk 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