Saltar al contenido

Verifica prescan de construcción

Antes de que Capgo Cloud Build suba su proyecto, el CLI ejecuta un escaneo previo que detecta problemas de credenciales, proyectos y configuración de almacenamiento localmente.

También se ejecuta de forma independiente:

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

Hay 80 verificaciones hoy. Es preferible ignorar IDs de verificación individuales en lugar de desactivar la escaneo completa.

Ventana 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 de ejecución independiente activado build prescan:

Ventana de terminal
npx @capgo/cli@latest build prescan <appId> --platform ios \
--skip ios/capacitor-server-url-shipped \
--warn ios/capacitor-server-cleartext

Los identificadores de verificación desconocidos fallan rápidamente con un error claro.

BanderaEfecto
--no-prescanSaltar la escaneo completo
--prescan-ignore-fatal o --ignore-fatal en build prescan)Ejecutar escaneo, imprimir informe, nunca bloquear
--fail-on-warningsTratar advertencias como fatales (CI)

--no-prescan y --prescan-ignore-fatal ocultar o saltar todos los controles restantes. Utilice sobrescripciones por control en lugar de esto cuando solo discrepe con una regla.

Utilice el id exacto en --prescan-skip / --prescan-warn.

Aplicar gradualmente significa que el resultado es solo información hasta que 2026-08-14entonces puede bloquear la compilación.

IdPlataformasQué verificaAplicar gradualmente
shared/apikey-permissionios, androidAPI puede solicitar compilaciones nativas
shared/app-existsios, androidEl identificador de la aplicación existe y es visible para la clave API
shared/credentials-savedios, androidLos credenciales de iOS/Android requeridas se guardan localmente
shared/cap-sync-staleios, androidLos activos web se construyen y se sincronizan los plugins Capacitor
shared/node-linker-layoutios, androidLa estructura de node_modules funciona con los caminos nativos Capacitor
shared/bundle-id-consistencyios, androidEl appId de Capacitor coincide con el identificador de paquete nativo / applicationId
IdPlataformas¿Qué verifica?Aplicar gradualmente
ios/p12-opensiosEl archivo .p12 de iOS se abre con la contraseña proporcionada
ios/p12-expiryiosEl certificado de firma de iOS no ha expirado
ios/profile-expiryiosEl perfil de configuración de iOS no ha expirado
ios/profile-bundle-matchiosEl identificador de paquete del perfil de provisión coincide con la aplicación
ios/profile-type-vs-modeiosEl tipo de perfil coincide con el modo app_store / ad_hoc
ios/cert-profile-pairingiosEl certificado está integrado en el perfil de provisión
ios/targets-coverediosTodos los objetivos de iOS tienen un perfil de provisión
ios/infoplist-sanityiosInfo.plist tiene las claves de versión / identidad requeridas
ios/asc-key-validiosLos campos de la clave API de App Store Connect parecen válidos
ios/asc-key-accessiosLa clave ASC API puede acceder a la aplicación (remota)
ios/plist-bundle-id-formatiosEl formato de CFBundleIdentifier es válido
ios/plist-version-short-formatiosEl formato de CFBundleShortVersionString es válido
ios/plist-version-build-formatiosEl formato de CFBundleVersion es válido
ios/plist-encryption-complianceiosSe declara ITSAppUsesNonExemptEncryption
ios/plist-ats-arbitrary-loadsiosNo se habilita NSAllowsArbitraryLoads para producción
ios/plist-launch-storyboardiosSe declara pantalla de arranque
ios/plist-orientations-multitaskingiosLos ajustes de orientación / multitarea son consistentes
ios/plist-orientations-presentiosSe declara la interfaz de orientación de la UI
ios/plist-display-nameiosSe ha establecido el nombre de visualización
ios/plist-background-modes-sanityiosLos valores de UIBackgroundModes parecen válidos
ios/xcode-deployment-target-capacitoriosEl objetivo de despliegue de iOS cumple con los requisitos de Capacitor
ios/xcode-signing-teamiosEl equipo de firmas está configurado
ios/xcode-bundle-id-mismatch-across-configsiosEl identificador de paquete es consistente en las configuraciones de Xcode
ios/xcode-enable-bitcode-leftoveriosSe elimina el resto de ENABLE_BITCODE
ios/xcode-swift-version-sanityiosLa configuración de la versión de Swift parece razonable
ios/xcode-no-app-targetiosEl proyecto de Xcode tiene un objetivo de aplicación
ios/xcode-multiple-app-targetsiosSe manejan intencionalmente varios objetivos de aplicación
ios/entitlements-vs-profile-capabilityiosLas facultades de entitlements coinciden con las capacidades del perfil
ios/entitlements-aps-environment-vs-modeiosaps-environment coincide con el modo de distribución
ios/entitlements-associated-domains-formatiosEl formato de Dominios Asociados es válido
ios/entitlements-app-groups-formatiosEl formato de App Groups es válido
ios/capacitor-server-url-shippediosNo se deja server.url como un punto de conexión de carga dinámica / consola remota para compilaciones de tienda
ios/capacitor-server-cleartextiosNo se habilita server.cleartext para producción
ios/capacitor-allow-navigation-wildcardiosserver.allowNavigation no es un wildcard general
ios/pods-not-installediosLos CocoaPods Pods / workspace están presentes cuando se utilizan Pods
ios/pods-lock-missingiosEl archivo Podfile.lock pincha versiones de pods
ios/pods-capacitor-missingiosEl archivo Podfile configura Capacitor
ios/spm-package-resolved-missingiosEl paquete SPM Package.resolved está presente
ios/spm-capacitor-dependency-missingiosPackage.swift declara Capacitor
ios/appicon-empty-or-placeholderiosEl archivo AppIcon.appiconset existe y no está vacío
ios/appicon-referenced-file-missingiosLos archivos de icono de Contents.json existen en el disco
ios/appicon-marketing-missingiosicono de marketing de 1024×1024 existe
ios/spm-deployment-target-consistencyiOSEl objetivo de despliegue de SPM es consistente
IdPlataformas¿Qué verifica?Aplicar gradualmente
android/keystore-opensAndroidEl keystore de Android se abre con las contraseñas proporcionadas
android/keystore-expiry__CAPGO_KEEP_0__El certificado de firma de Android no ha expirado
android/cordova-vars-present__CAPGO_KEEP_0__Se encuentra el archivo cordova.variables.gradle después de sincronizar cap
android/gradle-props-heuristics__CAPGO_KEEP_0__Heurísticas de gradle.properties para problemas de compilación comunes
android/play-sa-json__CAPGO_KEEP_0__Se encuentra el archivo JSON de servicio de Play cuando está configurado
android/flavor-exists__CAPGO_KEEP_0__El sabor del producto solicitado existe
android/agp8-package-attr__CAPGO_KEEP_0__El paquete de manifiesto attribute= eliminado para AGP 8+
android/manifest-well-formedandroidSe parsea AndroidManifest.xml
android/manifest-tag-typoandroidTipos de etiquetas de manifiesto comunes
android/manifest-namespace-uriandroidLa URI de espacio de nombres android:android es correcta
android/manifest-missing-prefixandroidLas atributos de Android utilizan la prefija android:
android/manifest-exported-missingandroidSe establece android:exported donde es necesario
android/manifest-multiple-uses-sdkandroidSolo un elemento sdk se utiliza
android/manifest-duplicate-componentandroidNo se permiten componentes duplicados
android/manifest-unique-permissionandroidLas permisos personalizados son únicos
android/manifest-hardcoded-debuggableandroiddebuggable=true no se envía
android/manifest-mock-locationandroidNo se envía ACCESS_MOCK_LOCATION
android/manifest-exported-unprotectedandroidLos componentes exportados están protegidos
android/manifest-query-all-packagesandroidQUERY_ALL_PACKAGES justificación
android/manifest-deeplink-validandroidLos intent-filters de deeplink parecen válidos
android/applicationid-presentandroidSe ha declarado la aplicaciónId en app/build.gradle
android/capacitor-build-gradle-appliedandroidcapacitor.build.gradle existe cuando se aplica
android/gradle-wrapper-presentandroidEstán presentes los archivos del wrapper de Gradle
android/flavor-dimensionsandroidSe han declarado las dimensiones de sabor cuando existen sabores
android/google-services-fileandroidgoogle-services.json presente cuando se aplica el plugin
android/local-properties-committedandroidlocal.properties no está comprometido con secretos
android/sdk-floorsandroidmin/compile/target SDK pisos parecen válidos
android/target-sdk-playandroidtargetSdk cumple con los requisitos de Play
android/min-sdk-capacitorandroidminSdk cumple con Capacitor requisitos
android/version-fieldsandroidversionCode / versionName están presentes
android/play-sa-accessandroidLa cuenta de servicio de Play puede acceder a la aplicación (remota)

Enviar un shell nativo que carga una producción server.url es un patrón Capacitor admitido. Las banderas de prescan ios/capacitor-server-url-shipped porque a menudo es un resto de live-reload en vivo.

Reconózcalo sin deshabilitar otras comprobaciones:

Ventana de terminal
npx @capgo/cli@latest build request <appId> --platform ios \
--prescan-skip ios/capacitor-server-url-shipped

O mantener la visibilidad como una advertencia:

Ventana de terminal
npx @capgo/cli@latest build request <appId> --platform ios \
--prescan-warn ios/capacitor-server-url-shipped