Saltare al contenuto

Verifica di costruzione prescan

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

Eseguibile autonomamente:

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

Esistono 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 attivati 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 chiaro errore.

così ogni altro controllo protegge ancora la tua build.

Sezione intitolata “Evasioni globali (utilizzate 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 gli override per controllo quando disprezzi solo 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 di node_modules funziona con le vie native Capacitor
shared/bundle-id-consistencyiOS, AndroidL'ID dell'app Capacitor corrisponde all'ID del pacchetto nativo / applicationId
IdPiattaformeCosa controllaApplicazione dell'obbligo 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 avvio è 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-sanityiosIl valore di UIBackgroundModes sembra valido
ios/xcode-deployment-target-capacitoriosL'obiettivo di distribuzione iOS soddisfa i requisiti di Capacitor
ios/xcode-signing-teamiosL'equipe di firma è impostata
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 entità di autorizzazione 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 in tempo reale / 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-missingiOSPodfile.lock blocca le versioni dei pod
ios/pods-capacitor-missingiOSPodfile 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-expiryandroidLa certificazione di firma Android non è scaduta
android/cordova-vars-presentandroidIl file cordova.variables.gradle è presente dopo la sincronizzazione con cap
android/gradle-props-heuristicsandroidLe heuristici di gradle.properties per i comuni errori di build
android/play-sa-jsonandroidIl file JSON del servizio Play è presente quando configurato
android/flavor-existsandroidIl flavor del prodotto richiesto esiste
android/agp8-package-attrandroidIl pacchetto del manifesto package= è stato rimosso per AGP 8+
android/manifest-well-formedandroidSi analizza AndroidManifest.xml
android/manifest-tag-typoandroidTipi comuni di tag del manifesto
android/manifest-namespace-uriandroidL'URI del namespace xmlns:android è corretto
android/manifest-missing-prefixandroidLe proprietà Android utilizzano il prefisso android:
android/manifest-exported-missingandroidSi imposta android:exported dove richiesto
android/manifest-multiple-uses-sdkandroidSolo un elemento sdk utilizzato
android/manifest-duplicate-componentandroidNessun componente duplicato
android/manifest-unique-permissionandroidI permessi personalizzati sono unici
android/manifest-hardcoded-debuggableandroiddebuggable=true non spedito
android/manifest-mock-locationandroidACCESS_MOCK_LOCATION non spedito
android/manifest-exported-unprotectedandroidI componenti esportati sono protetti
android/manifest-query-all-packagesandroidQUERY_ALL_PACKAGES giustificazione
android/manifest-deeplink-validandroidI filtri di intent viste tramite Deeplink sembrano validi
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-dimensionsandroidLe dimensioni dei gusti sono dichiarate quando esistono gusti
android/google-services-fileandroidgoogle-services.json presente quando plugin applicato
android/local-properties-committedAndroidlocal.properties non è commesso con segreti
android/sdk-floorsAndroidmin/compile/target SDK piani sembrano validi
android/target-sdk-playAndroidtargetSdk soddisfa le richieste di Play
android/min-sdk-capacitorAndroidminSdk soddisfa le Capacitor richieste
android/version-fieldsAndroidversionCode / versionName sono presenti
android/play-sa-accessAndroidAccount del servizio Play può accedere all'applicazione (remota)

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

Riconosciarlo senza disabilitare altre verifiche:

Fermata dei comandi
npx @capgo/cli@latest build request <appId> --platform ios \
--prescan-skip ios/capacitor-server-url-shipped

O mantieni la visibilità come avviso:

Fermata dei comandi
npx @capgo/cli@latest build request <appId> --platform ios \
--prescan-warn ios/capacitor-server-url-shipped