Zum Inhalt springen

Prüfung von Build-Vorgängen

Bevor Capgo Cloud Build Ihr Projekt hochlädt, läuft der CLI eine Vorabscannung die lokale Probleme mit Anmeldeinformationen, Projekten und Store-Konfigurationen aufgreift.

Sie läuft auch standalone:

Terminal-Fenster
npx @capgo/cli@latest build prescan <appId> --platform ios

Es gibt 80 Überprüfungen heute. Es ist besser, einzelne Überprüfungs-IDs zu ignorieren, als die gesamte Scannung auszuschalten.

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

Standalone-Aliase aktiviert build prescan:

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

Unbekannte Check-IDs scheitern schnell mit einer klaren Fehlermeldung.

Globale Escape-Sequenzen (verwenden Sie sie sparsam)

Abschnitt mit dem Titel “Globale Ausnahmen (sorgfältig verwenden)”
FlaggeWirkung
--no-prescanDen gesamten Scan überspringen
--prescan-ignore-fatal oder --ignore-fatal auf build prescan)Skanne, Bericht drucken, nie blockieren
--fail-on-warningsWarnungen als fatal behandeln (CI)

--no-prescan und --prescan-ignore-fatal alle verbleibenden Prüfungen ausblenden. Verwenden Sie stattdessen per-Prüfungs-Überprüfungen, wenn Sie nur mit einer Regel unzufrieden sind. alle verbleibenden Prüfungen ausblenden hide or bypass

Verwenden Sie den genauen ID --prescan-skip / --prescan-warn.

Schrittweise durchsetzen bezeichnet, dass die Ergebnisse nur informell sind, bis 2026-08-14dann kann es die Builds blockieren.

IDPlattformenWas es überprüftSchrittweise durchsetzen
shared/apikey-permissioniOS, AndroidAPI-Schlüssel kann native Builds anfordern
shared/app-existsiOS, AndroidApp-ID existiert und ist für den API-Schlüssel sichtbar
shared/credentials-savediOS, AndroidBenötigte iOS/Android-Anmeldeinformationen werden lokal gespeichert
shared/cap-sync-staleiOS, AndroidWeb-Assets werden erstellt und Capacitor-Plugins synchronisiert
shared/node-linker-layoutiOS, Androidnode_modules-Layout funktioniert mit Capacitor-native Pfaden
shared/bundle-id-consistencyiOS, AndroidCapacitor-App-ID entspricht native Bundle-ID / ApplicationId
IdPlattformenWas es überprüftSchrittweise durchsetzen
ios/p12-opensiOSiOS-Zertifikat (.p12) öffnet sich mit der bereitgestellten Passwort
ios/p12-expiryiOSiOS-Zertifikat ist nicht abgelaufen
ios/profile-expiryiOSProvisioning-Profil ist nicht abgelaufen
ios/profile-bundle-matchiOSDie Bereitstellungsserverprofil-ID entspricht der App
ios/profile-type-vs-modeiOSDas Profiltyp entspricht der App-Store- / Ad-hoc-Modus
ios/cert-profile-pairingiOSDas Zertifikat ist im Bereitstellungsserverprofil eingebettet
ios/targets-coverediOSAlle iOS-Ziele haben ein Bereitstellungsserverprofil
ios/infoplist-sanityiOSInfo.plist hat die erforderlichen Version / Identitäts-Schlüssel
ios/asc-key-validiOSApp Store Connect API-Schlüsselfelder sehen gültig aus
ios/asc-key-accessiOSEin ASC API-Schlüssel kann auf die App (remote) zugreifen.
ios/plist-bundle-id-formatiOSDie CFBundleIdentifier-Formatierung ist gültig.Ja
ios/plist-version-short-formatiOSDie CFBundleShortVersionString-Formatierung ist gültig.Ja
ios/plist-version-build-formatiOSDie CFBundleVersion-Formatierung ist gültig.Ja
ios/plist-encryption-complianceiOSITSAppUsesNonExemptEncryption ist deklariertJa
ios/plist-ats-arbitrary-loadsiOSNSAllowsArbitraryLoads ist für die Produktion nicht aktiviertJa
ios/plist-launch-storyboardiOSDie Startbildschirm-Deklaration ist vorhandenJa
ios/plist-orientations-multitaskingiOSDie Orientierung- und Multitasking-Einstellungen sind konsistentJa
ios/plist-orientations-presentiOSUISupportedInterfaceOrientations wird deklariertJa
ios/plist-display-nameiOSDer Anzeigename ist gesetztJa
ios/plist-background-modes-sanityiOSDie UIBackgroundModes-Werte sehen gültig ausJa
ios/xcode-deployment-target-capacitoriOSDas iOS-Deploymentziel erfüllt die Anforderungen von CapacitorJa
ios/xcode-signing-teamiOSSignier-Team ist eingestelltJa
ios/xcode-bundle-id-mismatch-across-configsiOSBundle-ID ist konsistent über Xcode-KonfigurationenJa
ios/xcode-enable-bitcode-leftoveriOSENABLE_BITCODE-Überbleibsel werden entferntJa
ios/xcode-swift-version-sanityiOSSwift-Version-Einstellung sieht vernünftig ausJa
ios/xcode-no-app-targetiOSXcode-Projekt hat eine AnwendungszielJa
ios/xcode-multiple-app-targetsiOSMehrere Anwendungsziele werden absichtlich behandeltJa
ios/entitlements-vs-profile-capabilityiOSZugriffsrechte passen zu ProfilfähigkeitenJa
ios/entitlements-aps-environment-vs-modeiOSaps-Umgebung passt zu VerteilungsmodusJa
ios/entitlements-associated-domains-formatiOSDer Domains-Format ist gültigWahr
ios/entitlements-app-groups-formatiosDer App-Gruppen-Format ist gültigWahr
ios/capacitor-server-url-shippediosserver.url wird nicht als Live-Reload- / Remote-Shell-Endpunkt für Store-Builds belassenWahr
ios/capacitor-server-cleartextiosserver.cleartext ist für die Produktion nicht aktiviertWahr
ios/capacitor-allow-navigation-wildcardiosserver.allowNavigation ist kein allgemeiner WildcardJa
ios/pods-not-installediOSCocoaPods Pods / workspace sind vorhanden, wenn Pods verwendet werdenJa
ios/pods-lock-missingiOSPodfile.lock piniert Pod-VersionenJa
ios/pods-capacitor-missingiOSPodfile verbindet CapacitorJa
ios/spm-package-resolved-missingiOSSPM Paket.resolved ist vorhandenJa
ios/spm-capacitor-dependency-missingiOSPackage.swift deklariert CapacitorJa
ios/appicon-empty-or-placeholderiOSAppIcon.appiconset existiert und ist nicht leerJa
ios/appicon-referenced-file-missingiOSInhalt.json-Icon-Dateien existieren auf der FestplatteJa
ios/appicon-marketing-missingiOS1024×1024 Marketingikon existiertJa
ios/spm-deployment-target-consistencyiOSSPM-Deployziel ist konsistentJa
IDPlattformenWas es überprüftSchrittweise durchsetzen
android/keystore-opensandroidAndroid-Sicherheitsdatei öffnet sich mit den bereitgestellten Passwörtern
android/keystore-expiry__CAPGO_KEEP_0__Android
android/cordova-vars-presentDer Android-Signierungs-Zertifikat ist nicht abgelaufenAndroid
android/gradle-props-heuristicscordova.variables.gradle ist nach cap-Synchronisierung vorhandenAndroid
android/play-sa-jsonGradle-Eigenschaften-Heuristik für häufige Build-BrecherAndroid
android/flavor-existsPlay-Dienstkonten-JSON ist vorhanden, wenn konfiguriertAndroid
android/agp8-package-attrDas angeforderte Produktflavor existiertManifest Paket-Attribut entfernt für AGP 8+
android/manifest-well-formedAndroidAndroidManifest.xml wird geparst
android/manifest-tag-typoAndroidGemeinsame Manifest-Tagschreibfehler
android/manifest-namespace-uriAndroidxmlns:android ist der Namensraum-URI korrekt
android/manifest-missing-prefixAndroidAndroid-Attribute verwenden den Prefix android:
android/manifest-exported-missingAndroidandroid:exported wird an den erforderlichen Stellen gesetzt
android/manifest-multiple-uses-sdkAndroidNur ein sdk-Element wird verwendet
android/manifest-duplicate-componentandroidKeine duplizierten Komponenten
android/manifest-unique-permissionandroidBenutzerdefinierte Berechtigungen sind einzigartig
android/manifest-hardcoded-debuggableandroiddebuggable=true wird nicht verschickt
android/manifest-mock-locationandroidACCESS_MOCK_LOCATION wird nicht verschickt
android/manifest-exported-unprotectedandroidExportierte Komponenten sind geschützt
android/manifest-query-all-packagesandroidQUERY_ALL_PACKAGES Rechtfertigung
android/manifest-deeplink-validandroidDeeplinks sehen aus, als ob sie gültig sind
android/applicationid-presentandroidDie Anwendung-ID wird in app/build.gradle deklariert
android/capacitor-build-gradle-appliedandroidcapacitor.build.gradle existiert, wenn angewendet
android/gradle-wrapper-presentandroidGradle-Wrapper-Dateien sind vorhanden
android/flavor-dimensionsandroidFlavordimensionen werden deklariert, wenn Flavours existieren
android/google-services-fileandroidgoogle-services.json ist vorhanden, wenn Plugin angewendet wird
android/local-properties-committedAndroidlocal.properties enthält keine geheimen Daten, da diese nicht committet werden
android/sdk-floorsAndroidmin/compile/target SDK Ebenen sehen gültig aus
android/target-sdk-playAndroidtargetSdk erfüllt Play-Anforderungen
android/min-sdk-capacitorAndroidminSdk erfüllt Capacitor Anforderungen
android/version-fieldsAndroidversionCode / versionName sind vorhanden
android/play-sa-accessAndroidDer Dienstkonten kann auf die App zugreifen (remote)

Die Lieferung einer nativen Shell, die eine Produktionsumgebung lädt server.url ist ein unterstütztes Capacitor-Muster. Prescan-Flags ios/capacitor-server-url-shipped weil es oft ein Live-Reload-Ableger ist.

Bekräftigen Sie es ohne andere Überprüfungen zu deaktivieren:

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

Oder behalten Sie die Sichtbarkeit als Warnung:

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