Saltar al contenido

Verificar construcción de prescan

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 completo.

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 independientes en modo de ejecución 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 IDs de verificación desconocidos fallan rápidamente con un error claro.

Escapadas globales (utilízalas con moderación)

Sección titulada “Escapadas globales (utilízalas con moderación)”
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. Utiliza sobreescripciones por control en lugar de esto cuando solo estás en desacuerdo 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 key can request native builds
shared/app-existsios, androidEl id de la aplicación existe y es visible para la clave API
shared/credentials-savedios, androidLos credenciales de iOS/Android necesarias 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 id 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 configuración de proveedor 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 configuración de proveedor
ios/targets-coverediosTodos los objetivos de iOS tienen un perfil de configuración de proveedor
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 UISupportedInterfaceOrientations
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 entidades de permiso 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 Pods CocoaPods / workspace están presentes cuando se utilizan Pods
ios/pods-lock-missingiosEl archivo Podfile.lock fija 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 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 de manera gradual
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 producto de sabor 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 comunes de etiquetas de manifiesto
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 hay 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-presentandroidEl applicationId se declara en app/build.gradle
android/capacitor-build-gradle-appliedandroidcapacitor.build.gradle existe cuando se aplica
android/gradle-wrapper-presentandroidLos archivos de wrapper de Gradle están presentes
android/flavor-dimensionsandroidLas dimensiones de sabor se declaran 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 de compilación 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 una caja nativa 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