Saltare al contenuto

Verifica costruzione prescan

Prima che Capgo Cloud Build carichi il tuo progetto, il CLI esegue un prescan che individua problemi di credenziali, progetto e configurazione del magazzino localmente.

Eseguibile in modo autonomo:

Finestra del terminale
npx @capgo/cli@latest build prescan <appId> --platform ios

Sono presenti 80 controlli oggi. Preferisci ignorare gli ID dei controlli individuali piuttosto che disabilitare tutta la scansione.

Finestra del terminale
# 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 abilitati build prescan:

Finestra del terminale
npx @capgo/cli@latest build prescan <appId> --platform ios \
--skip ios/capacitor-server-url-shipped \
--warn ios/capacitor-server-cleartext

Il controllo sconosciuto fallisce rapidamente con un errore chiaro.

così ogni altro controllo protegge ancora la tua build.

Sezione intitolata “Evasioni globali (utilizzarle con parsimonia)”
BandieraEffetto
--no-prescanSaltare lo scansionamento intero
--prescan-ignore-fatal o --ignore-fatal su build prescan)Eseguisci lo scansionamento, stampa il rapporto, non blocca mai
--fail-on-warningsConsidera le avvertenze come fatali (CI)

--no-prescan e --prescan-ignore-fatal nascondi o bypassa tutti gli altri controlli. Utilizza le sovrapposizioni per-check al posto di questo quando disaccordi solo con una regola.

Usa l'id esatto in --prescan-skip / --prescan-warn.

Applica gradualmente significa che la scoperta è di sola informazione fino a 2026-08-14quindi può bloccare le costruzioni.

IdPiattaformeCosa controllaApplica gradualmente
shared/apikey-permissioniOS, AndroidAPI può richiedere costruzioni native
shared/app-existsiOS, AndroidL'ID dell'app esiste e è visibile per la chiave API
shared/credentials-savediOS, AndroidI credenziali richiesti per iOS/Android sono salvate localmente
shared/cap-sync-staleiOS, AndroidGli asset web sono stati costruiti e i plugin Capacitor sono sincronizzati
shared/node-linker-layoutiOS, AndroidLa struttura dei moduli node funziona con le vie native Capacitor
shared/bundle-id-consistencyiOS, AndroidL'ID dell'app Capacitor corrisponde all'ID del pacchetto nativo / applicationId
IdPiattaformeCosa controllaApplicazione graduale
ios/p12-opensiosIl certificato di firma iOS .p12 si apre con la password fornita
ios/p12-expiryiosIl certificato di firma iOS non è scaduto
ios/profile-expiryiosIl profilo di provisioning iOS non è scaduto
ios/profile-bundle-matchiOSIl bundle ID del profilo di provisioning corrisponde all'app
ios/profile-type-vs-modeiOSIl tipo di profilo corrisponde al modello app_store / ad_hoc
ios/cert-profile-pairingiOSIl certificato è incorporato nel profilo di provisioning
ios/targets-coverediOSTutti i target iOS hanno un profilo di provisioning
ios/infoplist-sanityiOSIl file Info.plist contiene le chiavi di versione e identità richieste
ios/asc-key-validiOSI campi chiave di App Store Connect API sembrano validi
ios/asc-key-accessiOSL'ASC API chiave può accedere all'applicazione (remota)
ios/plist-bundle-id-formatiOSIl formato di CFBundleIdentifier è valido
ios/plist-version-short-formatiOSIl formato di CFBundleShortVersionString è valido
ios/plist-version-build-formatiOSIl formato di CFBundleVersion è valido
ios/plist-encryption-complianceiOSITSAppUsesNonExemptEncryption è dichiarato
ios/plist-ats-arbitrary-loadsiosNSAllowsArbitraryLoads non è abilitato per la produzione
ios/plist-launch-storyboardiosLa schermata di lancio è dichiarata
ios/plist-orientations-multitaskingiosLe impostazioni dell'orientamento / multitasking sono coerenti
ios/plist-orientations-presentiosUISupportedInterfaceOrientazioni è dichiarata
ios/plist-display-nameiosIl nome di visualizzazione è impostato
ios/plist-background-modes-sanityiosI valori di UIBackgroundModes sembrano validi
ios/xcode-deployment-target-capacitoriosIl target di distribuzione iOS soddisfa i requisiti di Capacitor
ios/xcode-signing-teamiosIl team di firma è impostato
ios/xcode-bundle-id-mismatch-across-configsiosL'ID del bundle è coerente tra le configurazioni di Xcode
ios/xcode-enable-bitcode-leftoveriosIl residuo di ENABLE_BITCODE è eliminato
ios/xcode-swift-version-sanityiosLa configurazione della versione Swift sembra sensata
ios/xcode-no-app-targetiosIl progetto Xcode ha un obiettivo di applicazione
ios/xcode-multiple-app-targetsiosGli obiettivi di applicazione multipli vengono gestiti intenzionalmente
ios/entitlements-vs-profile-capabilityiosLe autorizzazioni corrispondono alle capacità del profilo
ios/entitlements-aps-environment-vs-modeiosaps-environment corrisponde al modello di distribuzione
ios/entitlements-associated-domains-formatiosIl formato dei domini associati è valido
ios/entitlements-app-groups-formatiosIl formato dei gruppi di applicazioni è valido
ios/capacitor-server-url-shippediosserver.url non viene lasciato come endpoint di caricamento dinamico / shell remoto per le costruzioni di store
ios/capacitor-server-cleartextiosserver.cleartext non è abilitato per la produzione
ios/capacitor-allow-navigation-wildcardiosserver.allowNavigation non è un divieto generale
ios/pods-not-installediOSI CocoaPods Pods / workspace sono presenti quando si utilizzano Pods
ios/pods-lock-missingiOSIl file Podfile.lock blocca le versioni dei pod
ios/pods-capacitor-missingiOSIl file Podfile gestisce Capacitor
ios/spm-package-resolved-missingiOSIl pacchetto SPM Package.resolved è presente
ios/spm-capacitor-dependency-missingiOSIl file Package.swift dichiara Capacitor
ios/appicon-empty-or-placeholderiOSL'AppIcon.appiconset esiste e non è vuoto
ios/appicon-referenced-file-missingiOSI file icon di Contents.json esistono sul disco
ios/appicon-marketing-missingiOSIcona di marketing 1024×1024 esiste
ios/spm-deployment-target-consistencyiOSIl target di distribuzione SPM è coerente
IDPiattaformeCosa controllaEsecuzione graduale
android/keystore-opensandroidIl keystore Android si apre con le password fornite
android/keystore-expiry__CAPGO_KEEP_0__Il certificato di firma Android non è scaduto
android/cordova-vars-present__CAPGO_KEEP_0__Il file cordova.variables.gradle è presente dopo la sincronizzazione con cap
android/gradle-props-heuristics__CAPGO_KEEP_0__Le heuristici per le proprietà gradle per i comuni errori di build
android/play-sa-json__CAPGO_KEEP_0__Il file JSON del servizio Play è presente quando configurato
android/flavor-exists__CAPGO_KEEP_0__Il flavor del prodotto richiesto esiste
android/agp8-package-attr__CAPGO_KEEP_0__Manifesto pacchetto= attributo eliminato per AGP 8+
android/manifest-well-formedAndroidAndroidManifest.xml analizza
android/manifest-tag-typoAndroidTipi di tag manifesto comuni
android/manifest-namespace-uriAndroidURI dello spazio dei nomi android è corretto
android/manifest-missing-prefixAndroidAttributi Android utilizzano la prefisso android:
android/manifest-exported-missingAndroidandroid:exported è impostato dove richiesto
android/manifest-multiple-uses-sdkAndroid Solo un elemento sdk utilizzato
android/manifest-duplicate-componentandroid Nessun componente duplicato
android/manifest-unique-permissionandroidI permessi personalizzati sono unici
android/manifest-hardcoded-debuggableandroiddebuggable=true non distribuito
android/manifest-mock-locationandroidACCESS_MOCK_LOCATION non distribuito
android/manifest-exported-unprotectedandroidI componenti esportati sono protetti
android/manifest-query-all-packagesandroidQUERY_ALL_PACKAGES giustificazione
android/manifest-deeplink-validandroidIl filtro di deeplink sembra valido
android/applicationid-presentandroidL'ID dell'applicazione è dichiarato in app/build.gradle
android/capacitor-build-gradle-appliedandroidcapacitor.build.gradle esiste quando viene applicato
android/gradle-wrapper-presentandroidSono presenti i file del wrapper Gradle
android/flavor-dimensionsandroidIl numero di dimensioni di sapore è dichiarato quando esistono sapore
android/google-services-fileandroidgoogle-services.json presente quando il plugin viene applicato
android/local-properties-committedAndroidlocal.properties non è committato con le chiavi segrete
android/sdk-floorsAndroidmin/compile/target SDK piani sembrano validi
android/target-sdk-playAndroidtargetSdk soddisfa le richieste di Play
android/min-sdk-capacitorAndroidminSdk soddisfa Capacitor richieste
android/version-fieldsAndroidversionCode / versionName sono presenti
android/play-sa-accessAndroidL'account del servizio Play può accedere all'applicazione (remota)

L'invio di una shell nativa che carica una produzione server.url è un pattern di supporto Capacitor. Le flag di prescan ios/capacitor-server-url-shipped perché spesso è un residuo di live-reload lasciato.

Riconoscerlo senza disabilitare altre verifiche:

Finestra del terminale
npx @capgo/cli@latest build request <appId> --platform ios \
--prescan-skip ios/capacitor-server-url-shipped

O mantenere la visibilità come avviso:

Finestra del terminale
npx @capgo/cli@latest build request <appId> --platform ios \
--prescan-warn ios/capacitor-server-url-shipped