Saltar al contenido

Verifica construcción 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 los 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 de pie de página habilitado 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.

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

--no-prescan y --prescan-ignore-fatal ocultar o saltar todos los controles restantes. Utiliza sobrescripciones 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 la búsqueda es información hasta que 2026-08-14, entonces puede bloquear las compilaciones.

IdPlataformasQué verificaAplicar gradualmente
shared/apikey-permissionios, androidAPI puede solicitar compilaciones nativas
shared/app-existsios, androidEl identificador de la aplicación existe y está 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 configuración de provisionamiento coincide con la aplicación
ios/profile-type-vs-modeiosEl tipo de perfil coincide con el modo app_store / ad_hoc de la aplicación
ios/cert-profile-pairingiosEl certificado está integrado en el perfil de configuración de provisionamiento
ios/targets-coverediosTodos los objetivos de iOS tienen un perfil de configuración de provisionamiento
ios/infoplist-sanityiosEl archivo Info.plist tiene las claves de versión y identidad requeridas
ios/asc-key-validiosLas claves de la clave de App Store Connect API parecen válidas
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 / multitasking son consistentes
ios/plist-orientations-presentiosSe declara la interfaz de orientación de la UI
ios/plist-display-nameiosSe ha establecido el nombre de la interfaz de usuario
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 ENABLE_BITCODE sobrante
ios/xcode-swift-version-sanityiosLa configuración de la versión de Swift parece razonable
ios/xcode-no-app-targetiosEl proyecto de Xcode tiene una aplicación objetivo
ios/xcode-multiple-app-targetsiosSe manejan intencionalmente múltiples 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-shippediosserver.url no se deja como un punto de conexión de recarga en vivo / consola remota para compilaciones de tienda
ios/capacitor-server-cleartextiosserver.cleartext no está habilitado 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 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 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 de manera gradual
android/keystore-opensAndroidEl keystore de Android se abre con las contraseñas proporcionadas
android/keystore-expiryandroidEl certificado de firma de Android no ha expirado
android/cordova-vars-presentandroidcordova.variables.gradle está presente después de sincronizar cap
android/gradle-props-heuristicsandroidHeurísticas de gradle.properties para problemas de compilación comunes
android/play-sa-jsonandroidEl archivo JSON de cuenta de servicio de Play está presente cuando está configurado
android/flavor-existsandroidEl producto flavor solicitado existe
android/agp8-package-attrandroidEl paquete de manifiesto attribute= eliminado para AGP 8+
android/manifest-well-formedAndroidAndroidManifest.xml se parsea
android/manifest-tag-typoAndroidTipos de etiquetas de manifiesto comunes
android/manifest-namespace-uriAndroidEl URI de espacio de nombres android: es correcto
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 se permite un elemento sdk
android/manifest-duplicate-componentandroidNo se permiten componentes duplicados
android/manifest-unique-permissionandroidLos 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 deeplinks de la intención-filtro 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-presentandroidSe encuentran 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 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