Saltar al contenido

Comprobaciones de prescan de construcción

Antes de que Capgo Cloud Build suba su proyecto, el CLI ejecuta un prescaneo que detecta problemas de credenciales, proyecto 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. Prefiere ignorar los IDs individuales de verificación en lugar de desactivar toda la escaneo.

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

Unknown check ids fail fast with a clear error.

Evita el uso excesivo de escapes globales

Escapadas globales (utilízalas con moderación)
FlagBandera
--no-prescanSaltarse la escaneo completa
--prescan-ignore-fatal (or --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 verificaciones restantes. Utilice las sobrescrituras por verificación cuando solo discrepe con una regla.

Sección titulada “Ver catálogo de verificaciones” --prescan-skip / --prescan-warn.

Usar el id exacto en Significa que la detección es solo informativa hasta 2026-08-14, entonces puede bloquear las compilaciones.

IdPlataformas¿Qué verifica?Aplicar gradualmente
shared/apikey-permissionios, androidAPI key can request native builds—
shared/app-existsios, androidExiste un id de aplicación y es visible para la clave API—
shared/credentials-savedios, androidLos credenciales de iOS/Android se guardan localmente—
shared/cap-sync-staleios, androidActividades web construidas y Capacitor plugins sincronizados—
shared/node-linker-layoutios, androidLa estructura de node_modules funciona con Capacitor rutas nativas—
shared/bundle-id-consistencyios, androidEl appId de Capacitor coincide con el id de paquete nativo / applicationId—
IdPlataformas¿Qué se verifica?Cumplimiento gradual
ios/p12-opensiosiOS .p12 se abre con la contraseña proporcionada—
ios/p12-expiryiosEl certificado de firma de iOS no ha expirado—
ios/profile-expiryiosEl perfil de provisión no ha expirado—
ios/profile-bundle-matchiosProvisioning profile bundle id matches the app—
ios/profile-type-vs-modeiosTipo de perfil coincide con 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 claves de versión / identidad requeridas.—
ios/asc-key-validiOSApp Store Connect API campos de la clave 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.Sí
ios/plist-version-short-formatiosEl formato de CFBundleShortVersionString es válidoSí
ios/plist-version-build-formatiosEl formato de CFBundleVersion es válidoSí
ios/plist-encryption-complianceiosSe declara ITSAppUsesNonExemptEncryptionSí
ios/plist-ats-arbitrary-loadsiosNo se habilita NSAllowsArbitraryLoads para producciónSí
ios/plist-launch-storyboardiOSLa pantalla de arranque está declaradaSí
ios/plist-orientations-multitaskingiOSLas configuraciones de orientación y multitarea son consistentesSí
ios/plist-orientations-presentiOSUISupportedInterfaceOrientations está declaradoSí
ios/plist-display-nameiOSEl nombre de la pantalla está configuradoSí
ios/plist-background-modes-sanityiOSLos valores de UIBackgroundModes parecen válidosSí
ios/xcode-deployment-target-capacitoriOSiOS deployment target cumple los requisitos de Capacitor.Sí
ios/xcode-signing-teamiOSEl equipo de firmas está configuradoSí
ios/xcode-bundle-id-mismatch-across-configsiOSEl id de paquete es consistente en las configuraciones de XcodeSí
ios/xcode-enable-bitcode-leftoveriOSSe elimina el resto de ENABLE_BITCODESí
ios/xcode-swift-version-sanityiOSLa configuración de la versión de Swift parece correctaSí
ios/xcode-no-app-targetiOSEl proyecto de Xcode tiene un objetivo de aplicaciónSí
ios/xcode-multiple-app-targetsiOSSe manejan intencionalmente múltiples objetivos de aplicaciónSí
ios/entitlements-vs-profile-capabilityiOSPermisos coinciden con capacidades del perfilSí
ios/entitlements-aps-environment-vs-modeiOSaps-environment coincide con el modo de distribuciónSí
ios/entitlements-associated-domains-formatiOSEl formato de Dominios Asociados es válidoSí
ios/entitlements-app-groups-formatiOSEl formato de Grupos de Aplicación es válidoSí
ios/capacitor-server-url-shippediosLa URL del servidor no se deja como un punto de conexión de recompilación remota / consola para ediciones de tiendaSí
ios/capacitor-server-cleartextiosserver.cleartext is not enabled for productionSí
ios/capacitor-allow-navigation-wildcardiosEl texto claro del servidor no está habilitado para producciónSí
ios/pods-not-installediosNo se permite la navegación del servidor como un wildcard generalizadoSí
ios/pods-lock-missingiosPodfile.lock fija versiones de podsSí
ios/pods-capacitor-missingiosPodfile conecta CapacitorSí
ios/spm-package-resolved-missingiosSPM Package.resolved está presenteSí
ios/spm-capacitor-dependency-missingiosPackage.swift declara CapacitorSí
ios/appicon-empty-or-placeholderiOSExiste AppIcon.appiconset y no está vacíoSí
ios/appicon-referenced-file-missingiOSExisten archivos de icono en Contents.json en discoSí
ios/appicon-marketing-missingiOSExiste icono de marketing de 1024×1024Sí
ios/spm-deployment-target-consistencyiOSEl objetivo de despliegue de SPM es consistenteSí
IdPlataformas¿Qué verifica?Aplicar gradualmente
android/keystore-opensandroidEl keystore de Android se abre con las contraseñas proporcionadas—
android/keystore-expiryandroidLa certificación de firma de Android no ha expirado—
android/cordova-vars-presentandroidcordova.variables.gradle está presente después de sincronizar con Capgo—
android/gradle-props-heuristicsandroidHeurísticas de gradle.properties para comunes errores de compilación—
android/play-sa-jsonandroidEl archivo JSON de servicio de Play está presente cuando está configurado—
android/flavor-existsandroidEl producto de sabor solicitado existe—
android/agp8-package-attrandroidEl paquete de manifiesto atributo package= eliminado para AGP 8+—
android/manifest-well-formedandroidAndroidManifest.xml se parsea correctamente—
android/manifest-tag-typoandroidTipos comunes de etiquetas de manifiesto—
android/manifest-namespace-uriandroidxmlns:android URI de espacio de nombres es correcto—
android/manifest-missing-prefixandroidLas atributos de Android utilizan la prefija android:—
android/manifest-exported-missingandroidandroid:exported se establece donde es necesario—
android/manifest-multiple-uses-sdkandroidSolo se utiliza un elemento uses-sdk—
android/manifest-duplicate-componentandroidNo hay componentes duplicados—
android/manifest-unique-permissionandroidLos permisos personalizados son únicos—
android/manifest-hardcoded-debuggableandroiddebuggable=true no se envía—
android/manifest-mock-locationandroidACCESS_MOCK_LOCATION no se envía—
android/manifest-exported-unprotectedandroidLos componentes exportados están protegidos—
android/manifest-query-all-packagesandroidJustificación de QUERY_ALL_PACKAGES—
android/manifest-deeplink-validandroidLos intent-filters de deeplink parecen válidos—
android/applicationid-presentandroidSe declara 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 de wrapper de Gradle—
android/flavor-dimensionsandroidSe declaran dimensiones de sabores cuando existen sabores—
android/google-services-fileandroidgoogle-services.json está presente cuando se aplica el plugin—
android/local-properties-committedandroidlocal.properties no está comprometido con secretos—
android/sdk-floorsandroidmin/compilar/directorio SDK pisos parecen válidos—
android/target-sdk-playandroidtargetSdk cumple los requisitos de Play—
android/min-sdk-capacitorandroidminSdk cumple los requisitos de Capacitor—
android/version-fieldsandroidversionCode / versionName están presentes—
android/play-sa-accessandroidEl servicio de Play puede acceder a la aplicación (remoto)—

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

Aceptar 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 advertencia:

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