Saltare al contenuto

Costruisci controlli prescan

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

Esegue anche in modo autonomo:

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

Ci sono 80 verifiche oggi. Preferire ignorare gli ID delle singole verifiche 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 autonomi su 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

I check ids sconosciuti falliscono rapidamente con un chiaro errore.

Global escape (utilizza con parsimonia)

Global escapes (utilizza con parsimonia)
FlagFlag
--no-prescanEvita lo scansionamento completo
--prescan-ignore-fatal (or --ignore-fatal o build prescan)Esegui lo scan, stampa il report, non blocca
--fail-on-warningsConsidera le avvertenze come fatali (CI)

--no-prescan e --prescan-ignore-fatal nascondere o saltare tutti le verifiche rimanenti. Utilizza override per verifica quando disseni solo con una regola.

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

Imposta progressiva significa che la scoperta è informativa fino a quando 2026-08-14poi può bloccare le costruzioni.

IDPiattaformeCosa controllaApplicazione dell'ordinanza graduale
shared/apikey-permissioniOS, AndroidLa chiave API può richiedere costruzioni native—
shared/app-existsiOS, AndroidEsiste un ID dell'applicazione e è visibile alla chiave API—
shared/credentials-savediOS, AndroidI credenziali iOS/Android richiesti sono salvati localmente—
shared/cap-sync-staleiOS, AndroidGli asset web sono costruiti e i plugin Capacitor sincronizzati—
shared/node-linker-layoutiOS, Androidnode_modules layout funziona con Capacitor percorsi nativi—
shared/bundle-id-consistencyiOS, AndroidCapacitor appId corrisponde all'ID pacchetto nativo / applicationId—
IdPiattaformeCosa controllaApplicazione graduale
ios/p12-opensiOSApri .p12 iOS con la password fornita—
ios/p12-expiryiOSIl certificato di firma iOS non è scaduto—
ios/profile-expiryiOSIl profilo di provisioning non è scaduto—
ios/profile-bundle-matchiOSL'ID del bundle 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-sanityiOSInfo.plist contiene chiavi di versione/identità richieste—
ios/asc-key-validiOSIl campo chiave API di App Store Connect sembra valido—
ios/asc-key-accessiOSLa chiave ASC API può accedere all'app (remota)—
ios/plist-bundle-id-formatiOSLa formattazione di CFBundleIdentifier è validaSì
ios/plist-version-short-formatiOSCFBundleShortVersionString ha una formattazione validaSì
ios/plist-version-build-formatiOSIl formato di CFBundleVersion è validoSì
ios/plist-encryption-complianceiOSITSAppUsesNonExemptEncryption è dichiaratoSì
ios/plist-ats-arbitrary-loadsiOSNSAllowsArbitraryLoads non è abilitato per la produzioneSì
ios/plist-launch-storyboardiOSLa schermata di lancio è dichiarataSì
ios/plist-orientations-multitaskingiOSImpostazioni di orientamento / multitasking sono coerentiSì
ios/plist-orientations-presentiOSUISupportedInterfaceOrientations è dichiaratoSì
ios/plist-display-nameiOSIl nome di visualizzazione è impostatoSì
ios/plist-background-modes-sanityiOSI valori di UIBackgroundModes sembrano validiSì
ios/xcode-deployment-target-capacitoriOSiOS deployment target soddisfa i requisiti di Capacitor.Sì
ios/xcode-signing-teamiOSLa squadra di firma è impostataSì
ios/xcode-bundle-id-mismatch-across-configsiOSL'ID del bundle è coerente tra le configurazioni di XcodeSì
ios/xcode-enable-bitcode-leftoveriOSL'eredità di ENABLE_BITCODE è eliminataSì
ios/xcode-swift-version-sanityiOSLa configurazione della versione Swift sembra sanaSì
ios/xcode-no-app-targetiOSL'applicazione Xcode ha un obiettivo di applicazioneSì
ios/xcode-multiple-app-targetsiOSGli obiettivi di applicazione multipli sono gestiti intenzionalmenteSì
ios/entitlements-vs-profile-capabilityiOSLe entità corrispondono alle capacità del profiloSì
ios/entitlements-aps-environment-vs-modeiOSambiente APS corrisponde al modello di distribuzioneSì
ios/entitlements-associated-domains-formatiOSFormato dei domini associati è validoSì
ios/entitlements-app-groups-formatiOSFormato dei gruppi di applicazione è validoSì
ios/capacitor-server-url-shippediOSserver.url non viene lasciato come endpoint di caricamento live o shell remoto per le costruzioni di storeSì
ios/capacitor-server-cleartextiOSserver.cleartext non è abilitato per la produzioneSì
ios/capacitor-allow-navigation-wildcardiOSserver.allowNavigation non è un wildcard generaleSì
ios/pods-not-installediOSCocoaPods Pods / workspace sono presenti quando si utilizzano PodsSì
ios/pods-lock-missingiOSPodfile.lock blocca le versioni del podSì
ios/pods-capacitor-missingiOSIl Podfile collega CapacitorSì
ios/spm-package-resolved-missingiOSIl Package.resolved di SPM è presenteSì
ios/spm-capacitor-dependency-missingiOSIl Package.swift dichiara CapacitorSì
ios/appicon-empty-or-placeholderiOSL'app iconset esiste e non è vuotoSì
ios/appicon-referenced-file-missingiOSEsistono file icon Contents.json sul discoSì
ios/appicon-marketing-missingiOSEsiste un'icona di marketing 1024×1024Sì
ios/spm-deployment-target-consistencyiOSLa destinazione di distribuzione SPM è coerenteSì
IdPiattaformeCosa controllaApplicazione graduale
android/keystore-opensandroidVerifica la presenza di un certificato Android non scaduto—
android/keystore-expiryandroidCertificato di firma Android non è scaduto—
android/cordova-vars-presentandroidIl certificato di firma Android non è scaduto—
android/gradle-props-heuristicsandroidProprietà di gradle.properties per problemi di build comuni—
android/play-sa-jsonandroidIl file JSON del servizio account è presente quando configurato—
android/flavor-existsandroidIl sapore del prodotto richiesto esiste—
android/agp8-package-attrandroidIl sapore del prodotto richiesto esiste—
android/manifest-well-formedandroidAndroidManifest.xml analizza—
android/manifest-tag-typoandroidIl file AndroidManifest.xml si esegue correttamente—
android/manifest-namespace-uriandroidGli errori di ortografia dei tag del manifesto comuni—
android/manifest-missing-prefixandroidAttributi Android utilizzano il prefisso android:—
android/manifest-exported-missingandroidandroid:esportato è impostato dove richiesto—
android/manifest-multiple-uses-sdkandroidSolo un elemento utilizza-sdk—
android/manifest-duplicate-componentandroidSolo un elemento uses-__CAPGO_KEEP_0__—
android/manifest-unique-permissionandroidNessun componente duplicato—
android/manifest-hardcoded-debuggableandroidI permessi personalizzati sono unici—
android/manifest-mock-locationandroidACCESS_MOCK_LOCATION non spedito—
android/manifest-exported-unprotectedandroidLa posizione di mock non viene spedita—
android/manifest-query-all-packagesandroidComponenti esportati sono protetti—
android/manifest-deeplink-validandroidIntent-filters dei deeplink sembrano validi—
android/applicationid-presentandroidI filtri di intent per il deeplink sembrano validi—
android/capacitor-build-gradle-appliedandroidcapacitor.build.gradle esiste quando applicato—
android/gradle-wrapper-presentandroidSono presenti file wrapper Gradle—
android/flavor-dimensionsandroidLe dimensioni dei gusti sono dichiarate quando esistono gusti—
android/google-services-fileandroidgoogle-services.json presente quando il plugin viene applicato—
android/local-properties-committedandroidlocal.properties non è stato commesso con le informazioni riservate—
android/sdk-floorsandroidmin/compile/target SDK piani sembrano validi—
android/target-sdk-playandroidtargetSdk soddisfa i requisiti di Play—
android/min-sdk-capacitorandroidminSdk soddisfa Capacitor requisiti—
android/version-fieldsandroidla versione del sistema operativo—
android/play-sa-accessandroidConto del servizio può accedere all'app (remota)—

Esempio: shell remoto Next.js / server.url

Esempio: shell remoto Next.js / server.url

Esempio: shell remoto Next.js / server.url server.url E' un pattern Capacitor supportato. Bandiere di prescan ios/capacitor-server-url-shipped è un modello di prescan supportato. I flag di prescan

perché spesso è un residuo di live-reload.

Riconoscerlo senza disabilitare altre verifiche:
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