Build-Prescan-Checks
Kopiere einen Setup-Prompt mit den Installationsschritten und dem vollständigen Markdown-Guide für dieses Plugin.
Bevor Capgo Cloud Build dein Projekt hochlädt, führt der CLI einen Prescan durch, der Probleme mit Credentials, dem Projekt oder der Store-Konfiguration lokal erkennt.
Es kann auch standalone ausgeführt werden:
npx @capgo/cli@latest build prescan <appId> --platform iosEs gibt 80 Checks heute. Es ist besser, einzelne Check-IDs zu ignorieren, anstatt den gesamten Scan zu deaktivieren.
Bestimmte Checks ignorieren
Abschnitt mit dem Titel „Bestimmte Checks ignorieren“# 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-separatednpx @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-loadsStandalone-Aliase auf build prescan:
npx @capgo/cli@latest build prescan <appId> --platform ios \ --skip ios/capacitor-server-url-shipped \ --warn ios/capacitor-server-cleartextUnbekannte Check-IDs führen sofort zu einem klaren Fehler.
Globale Escapes (sparsam verwenden)
Abschnitt mit dem Titel „Globale Escapes (sparsam verwenden)“| Flag | Effekt |
|---|---|
--no-prescan | Den gesamten Scan überspringen |
--prescan-ignore-fatal (oder --ignore-fatal auf build prescan) | Scan ausführen, Report erstellen, nie blockieren |
--fail-on-warnings | Warnungen als Fehler behandeln (CI) |
--no-prescan und --prescan-ignore-fatal ausblenden oder umgehen alle verbleibende Checks. Nutze stattdessen Overrides pro Check, wenn du nur mit einer Regel nicht einverstanden bist.
Check-Katalog
Abschnitt mit dem Titel „Check-Katalog“Verwende die exakte ID in --prescan-skip / --prescan-warn.
Schrittweise Durchsetzung bedeutet, dass der Befund nur zur Information dient, bis 2026-08-14, was Builds blockieren kann.
| ID | Plattformen | Prüfungsinhalt | Schrittweise Durchsetzung |
|---|---|---|---|
shared/apikey-permission | iOS, Android | API Key kann Native Builds anfordern | — |
shared/app-exists | iOS, Android | App-ID existiert und ist für den API Key sichtbar | — |
shared/credentials-saved | iOS, Android | Erforderliche iOS/Android-Credentials werden lokal gespeichert | — |
shared/cap-sync-stale | iOS, Android | Web-Assets gebaut und Capacitor Plugins synchronisiert | — |
shared/node-linker-layout | iOS, Android | node_modules-Layout kompatibel mit Capacitor nativen Pfaden | — |
shared/bundle-id-consistency | iOS, Android | Capacitor appId stimmt mit nativem Bundle ID / applicationId überein | — |
| ID | Plattformen | Prüfungsinhalt | Schrittweise Erzwingung |
|---|---|---|---|
ios/p12-opens | iOS | iOS .p12 lässt sich mit dem Passwort öffnen | — |
ios/p12-expiry | iOS | iOS Signing-Zertifikat ist nicht abgelaufen | — |
ios/profile-expiry | iOS | Provisioning Profile ist nicht abgelaufen | — |
ios/profile-bundle-match | iOS | Provisioning Profile Bundle ID stimmt mit der App überein | — |
ios/profile-type-vs-mode | iOS | Profiltyp passt zu app_store / ad_hoc Modus | — |
ios/cert-profile-pairing | iOS | Zertifikat ist im Provisioning Profile eingebettet | — |
ios/targets-covered | iOS | Alle iOS-Targets haben ein Provisioning Profile | — |
ios/infoplist-sanity | iOS | Info.plist enthält erforderliche Version- und Identity-Keys | — |
ios/asc-key-valid | iOS | App Store Connect API Key-Felder sehen gültig aus | — |
ios/asc-key-access | iOS | ASC API Key kann auf die App zugreifen (remote) | — |
ios/plist-bundle-id-format | iOS | CFBundleIdentifier-Format ist gültig | Ja |
ios/plist-version-short-format | iOS | CFBundleShortVersionString-Format ist gültig | Ja |
ios/plist-version-build-format | iOS | CFBundleVersion-Format ist gültig | Ja |
ios/plist-encryption-compliance | iOS | ITSAppUsesNonExemptEncryption ist deklariert | Ja |
ios/plist-ats-arbitrary-loads | iOS | NSAllowsArbitraryLoads ist nicht für Production aktiviert | Ja |
ios/plist-launch-storyboard | iOS | Launch Screen ist deklariert | Ja |
ios/plist-orientations-multitasking | iOS | Ausrichtung / Multitasking-Einstellungen sind konsistent | Ja |
ios/plist-orientations-present | iOS | UISupportedInterfaceOrientations ist deklariert | Ja |
ios/plist-display-name | iOS | Anzeigename ist gesetzt | Ja |
ios/plist-background-modes-sanity | iOS | UIBackgroundModes-Werte scheinen gültig | Ja |
ios/plist-scene-lifecycle-xcode27 | iOS | Die App nutzt den UIScene-Lifecycle beim Build mit Xcode 27+ (erforderlich für den iOS 27 SDK) | Ja |
ios/xcode-deployment-target-capacitor | iOS | iOS Deployment Target erfüllt Capacitor Anforderungen | Ja |
ios/xcode-signing-team | iOS | Signing Team ist gesetzt | Ja |
ios/xcode-bundle-id-mismatch-across-configs | iOS | Bundle-ID ist in allen Xcode-Configs konsistent | Ja |
ios/xcode-enable-bitcode-leftover | iOS | Überbleibsel von ENABLE_BITCODE wurden entfernt | Ja |
ios/xcode-swift-version-sanity | iOS | Swift-Versionseinstellung ist korrekt | Ja |
ios/xcode-no-app-target | iOS | Xcode-Projekt enthält ein Application Target | Ja |
ios/xcode-multiple-app-targets | iOS | Mehrere App-Targets werden bewusst behandelt | Ja |
ios/entitlements-vs-profile-capability | iOS | Entitlements stimmen mit den Profil-Capabilities überein | Ja |
ios/entitlements-aps-environment-vs-mode | iOS | aps-environment passt zum Distribution-Modus | Ja |
ios/entitlements-associated-domains-format | iOS | Format der Associated Domains ist gültig | Ja |
ios/entitlements-app-groups-format | iOS | App-Groups-Format ist gültig | Ja |
ios/capacitor-server-url-shipped | iOS | server.url ist kein Live-Reload / Remote-Shell-Endpunkt für Store-Builds | Ja |
ios/capacitor-server-cleartext | iOS | server.cleartext ist nicht für Production aktiviert | Ja |
ios/capacitor-allow-navigation-wildcard | iOS | server.allowNavigation ist kein pauschaler Wildcard | Ja |
ios/pods-not-installed | iOS | CocoaPods Pods / workspace sind vorhanden, wenn Pods genutzt werden | Ja |
ios/pods-lock-missing | iOS | Podfile.lock fixiert die Pod-Versionen | Ja |
ios/pods-capacitor-missing | iOS | Podfile verknüpft Capacitor | Ja |
ios/spm-package-resolved-missing | iOS | SPM Package.resolved ist vorhanden | Ja |
ios/spm-capacitor-dependency-missing | iOS | Package.swift deklariert Capacitor | Ja |
ios/appicon-empty-or-placeholder | iOS | AppIcon.appiconset ist vorhanden und nicht leer | Ja |
ios/appicon-referenced-file-missing | iOS | Contents.json Icon-Dateien existieren auf der Festplatte | Ja |
ios/appicon-marketing-missing | iOS | 1024×1024 Marketing-Icon ist vorhanden | Ja |
ios/spm-deployment-target-consistency | iOS | SPM-Deployment-Target ist konsistent | Ja |
| ID | Plattformen | Prüfungsinhalt | Schrittweise Erzwingung |
|---|---|---|---|
android/keystore-opens | Android | Android Keystore öffnet sich mit den angegebenen Passwörtern | — |
android/keystore-expiry | Android | Android-Signaturzertifikat ist nicht abgelaufen | — |
android/cordova-vars-present | Android | cordova.variables.gradle ist nach cap sync vorhanden | — |
android/gradle-props-heuristics | Android | gradle.properties-Heuristiken für häufige Build-Fehler | — |
android/play-sa-json | Android | Play-Service-Account-JSON ist vorhanden, wenn konfiguriert | — |
android/flavor-exists | Android | Angeforderter Product Flavor existiert | — |
android/agp8-package-attr | Android | package=-Attribut im Manifest für AGP 8+ entfernt | — |
android/manifest-well-formed | Android | AndroidManifest.xml wird geparst | — |
android/manifest-tag-typo | Android | Häufige Tippfehler in Manifest-Tags | — |
android/manifest-namespace-uri | Android | xmlns:android Namespace-URI ist korrekt | — |
android/manifest-missing-prefix | Android | Android-Attribute nutzen das android:-Präfix | — |
android/manifest-exported-missing | Android | android:exported ist dort gesetzt, wo nötig | — |
android/manifest-multiple-uses-sdk | Android | Nur ein Element nutzt sdk | — |
android/manifest-duplicate-component | Android | Keine doppelten Komponenten | — |
android/manifest-unique-permission | Android | Eigene Berechtigungen sind eindeutig | — |
android/manifest-hardcoded-debuggable | Android | debuggable=true nicht enthalten | — |
android/manifest-mock-location | Android | ACCESS_MOCK_LOCATION nicht enthalten | — |
android/manifest-exported-unprotected | Android | Exportierte Komponenten sind geschützt | — |
android/manifest-query-all-packages | Android | Begründung für QUERY_ALL_PACKAGES | — |
android/manifest-deeplink-valid | Android | Deeplink-Intent-Filter scheinen gültig zu sein | — |
android/applicationid-present | Android | applicationId ist in app/build.gradle definiert | — |
android/capacitor-build-gradle-applied | Android | capacitor.build.gradle ist vorhanden | — |
android/gradle-wrapper-present | Android | Gradle-Wrapper-Dateien sind vorhanden | — |
android/flavor-dimensions | Android | Flavor-Dimensionen sind definiert, falls Flavors existieren | — |
android/google-services-file | Android | google-services.json ist vorhanden, wenn Plugin aktiv ist | — |
android/local-properties-committed | Android | local.properties wurde nicht mit Secrets committet | — |
android/sdk-floors | Android | min/compile/target SDK Floors scheinen valide | — |
android/target-sdk-play | Android | targetSdk erfüllt Play-Anforderungen | — |
android/min-sdk-capacitor | Android | minSdk erfüllt Capacitor Anforderungen | — |
android/version-fields | Android | versionCode / versionName sind vorhanden | — |
android/play-sa-access | Android | Play Service Account hat Zugriff auf die App (remote) | — |
Beispiel: remote Next.js / server.url Shell
Abschnitt: „Beispiel: Remote Next.js / server.url Shell“Versand eines Native Build Shells, das eine Produktion lädt server.url ist ein unterstütztes Capacitor Pattern. Prescan schlägt dies vor, ios/capacitor-server-url-shipped da es sich oft um ein Überbleibsel von Live-Reload handelt.
Bestätigen Sie dies, ohne andere Checks zu deaktivieren:
npx @capgo/cli@latest build request <appId> --platform ios \ --prescan-skip ios/capacitor-server-url-shippedOder behalten Sie die Sichtbarkeit als Warnung bei:
npx @capgo/cli@latest build request <appId> --platform ios \ --prescan-warn ios/capacitor-server-url-shipped