Cek prescan build
Salin prompt setup yang berisi langkah install dan panduan markdown lengkap untuk plugin ini.
Sebelum Capgo Cloud Build mengunggah proyek Anda, CLI akan menjalankan prescan untuk mendeteksi masalah kredensial, proyek, dan konfigurasi store secara lokal.
Bisa juga dijalankan secara standalone:
npx @capgo/cli@latest build prescan <appId> --platform iosAda 80 pengecekan hari ini. Lebih baik abaikan ID pengecekan tertentu daripada mematikan seluruh proses scan.
Abaikan pengecekan tertentu
Bagian berjudul โAbaikan pengecekan tertentuโ# 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-loadsAlias standalone pada build prescan:
npx @capgo/cli@latest build prescan <appId> --platform ios \ --skip ios/capacitor-server-url-shipped \ --warn ios/capacitor-server-cleartextID pengecekan yang tidak dikenal akan gagal dengan error yang jelas.
Global escapes (gunakan dengan bijak)
Bagian berjudul โGlobal escapes (gunakan dengan bijak)โ| Flag | Efek |
|---|---|
--no-prescan | Lewati seluruh scan |
--prescan-ignore-fatal (atau --ignore-fatal aktif build prescan) | Jalankan scan, cetak laporan, tidak pernah memblokir |
--fail-on-warnings | Anggap peringatan sebagai fatal (CI) |
--no-prescan dan --prescan-ignore-fatal sembunyikan atau bypass semua pemeriksaan lainnya. Gunakan override per pemeriksaan jika Anda hanya tidak setuju dengan satu aturan.
Katalog pemeriksaan
Bagian berjudul โKatalog pemeriksaanโGunakan id yang sama persis di --prescan-skip / --prescan-warn.
Penerapan bertahap berarti temuan hanya bersifat informasi sampai 2026-08-14, lalu bisa memblokir build.
| ID | Platform | Apa yang diperiksa | Penerapan bertahap |
|---|---|---|---|
shared/apikey-permission | ios, android | key API dapat meminta Native Build | โ |
shared/app-exists | ios, android | App id ada dan dapat dilihat oleh key API | โ |
shared/credentials-saved | ios, android | Kredensial iOS/Android yang diperlukan disimpan secara lokal | โ |
shared/cap-sync-stale | ios, android | Aset Web di-build dan plugin Capacitor disinkronkan | โ |
shared/node-linker-layout | ios, android | Layout node_modules kompatibel dengan path native Capacitor | โ |
shared/bundle-id-consistency | ios, android | appId Capacitor cocok dengan bundle id / applicationId native | โ |
| ID | Platform | Apa yang diperiksa | Penerapan bertahap |
|---|---|---|---|
ios/p12-opens | ios | iOS .p12 terbuka dengan password yang diberikan | โ |
ios/p12-expiry | ios | sertifikat signing iOS belum kedaluwarsa | โ |
ios/profile-expiry | ios | Provisioning profile belum kedaluwarsa | โ |
ios/profile-bundle-match | ios | bundle id pada Provisioning profile sesuai dengan app | โ |
ios/profile-type-vs-mode | ios | Tipe profile sesuai dengan mode app_store / ad_hoc | โ |
ios/cert-profile-pairing | ios | Sertifikat tertanam dalam provisioning profile | โ |
ios/targets-covered | ios | Semua target iOS memiliki provisioning profile | โ |
ios/infoplist-sanity | ios | Info.plist memiliki key version / identity yang diperlukan | โ |
ios/asc-key-valid | ios | Field kunci API App Store Connect terlihat valid | โ |
ios/asc-key-access | ios | Kunci API ASC dapat mengakses aplikasi (remote) | โ |
ios/plist-bundle-id-format | ios | Format CFBundleIdentifier valid | Ya |
ios/plist-version-short-format | ios | format CFBundleShortVersionString valid | Ya |
ios/plist-version-build-format | ios | format CFBundleVersion valid | Ya |
ios/plist-encryption-compliance | ios | ITSAppUsesNonExemptEncryption telah dideklarasikan | Ya |
ios/plist-ats-arbitrary-loads | ios | NSAllowsArbitraryLoads tidak diaktifkan untuk produksi | Ya |
ios/plist-launch-storyboard | ios | Launch screen sudah dideklarasikan | Ya |
ios/plist-orientations-multitasking | ios | Pengaturan orientasi / multitasking sudah konsisten | Ya |
ios/plist-orientations-present | ios | UISupportedInterfaceOrientations sudah dideklarasikan | Ya |
ios/plist-display-name | ios | Display name sudah diatur | Ya |
ios/plist-background-modes-sanity | ios | Nilai UIBackgroundModes terlihat valid | Ya |
ios/plist-scene-lifecycle-xcode27 | ios | App menggunakan lifecycle UIScene saat build dengan Xcode 27+ (diperlukan oleh SDK iOS 27) | Ya |
ios/xcode-deployment-target-capacitor | ios | Target deployment iOS memenuhi syarat Capacitor | Ya |
ios/xcode-signing-team | ios | Signing team sudah diatur | Ya |
ios/xcode-bundle-id-mismatch-across-configs | iOS | Bundle ID konsisten di seluruh konfigurasi Xcode | Ya |
ios/xcode-enable-bitcode-leftover | iOS | Sisa ENABLE_BITCODE sudah dihapus | Ya |
ios/xcode-swift-version-sanity | iOS | Pengaturan versi Swift terlihat wajar | Ya |
ios/xcode-no-app-target | iOS | Proyek Xcode memiliki target aplikasi | Ya |
ios/xcode-multiple-app-targets | iOS | Beberapa target aplikasi ditangani secara sengaja | Ya |
ios/entitlements-vs-profile-capability | iOS | Entitlements sesuai dengan kapabilitas profil | Ya |
ios/entitlements-aps-environment-vs-mode | iOS | aps-environment sesuai dengan mode distribusi | Ya |
ios/entitlements-associated-domains-format | iOS | Format Associated Domains valid | Ya |
ios/entitlements-app-groups-format | iOS | Format App Groups valid | Ya |
ios/capacitor-server-url-shipped | iOS | server.url tidak dibiarkan sebagai endpoint live-reload / remote shell untuk build store | Ya |
ios/capacitor-server-cleartext | iOS | server.cleartext tidak diaktifkan untuk produksi | Ya |
ios/capacitor-allow-navigation-wildcard | iOS | server.allowNavigation bukan wildcard umum | Ya |
ios/pods-not-installed | iOS | CocoaPods Pods / workspace tersedia saat menggunakan Pods | Ya |
ios/pods-lock-missing | iOS | Podfile.lock mengunci versi pod | Ya |
ios/pods-capacitor-missing | iOS | Podfile menghubungkan Capacitor | Ya |
ios/spm-package-resolved-missing | iOS | SPM Package.resolved tersedia | Ya |
ios/spm-capacitor-dependency-missing | iOS | Package.swift mendeklarasikan Capacitor | Ya |
ios/appicon-empty-or-placeholder | iOS | AppIcon.appiconset ada dan tidak kosong | Ya |
ios/appicon-referenced-file-missing | iOS | File ikon di Contents.json ada di disk | Ya |
ios/appicon-marketing-missing | iOS | Ikon marketing 1024ร1024 tersedia | Ya |
ios/spm-deployment-target-consistency | iOS | Target deployment SPM konsisten | Ya |
| ID | Platform | Apa yang diperiksa | Penerapan bertahap |
|---|---|---|---|
android/keystore-opens | android | Keystore Android terbuka dengan password yang diberikan | โ |
android/keystore-expiry | android | Sertifikat signing Android belum kedaluwarsa | โ |
android/cordova-vars-present | android | cordova.variables.gradle ada setelah cap sync | โ |
android/gradle-props-heuristics | android | Heuristik gradle.properties untuk masalah build umum | โ |
android/play-sa-json | android | JSON service-account Play ada jika dikonfigurasi | โ |
android/flavor-exists | android | Product flavor yang diminta tersedia | โ |
android/agp8-package-attr | android | Atribut Manifest package= dihapus untuk AGP 8+ | โ |
android/manifest-well-formed | android | Parsing AndroidManifest.xml | โ |
android/manifest-tag-typo | android | Typo umum pada tag manifest | โ |
android/manifest-namespace-uri | android | URI namespace xmlns:android sudah benar | โ |
android/manifest-missing-prefix | android | Atribut Android menggunakan prefix android: | โ |
android/manifest-exported-missing | android | android:exported sudah diatur sesuai kebutuhan | โ |
android/manifest-multiple-uses-sdk | android | Hanya ada satu elemen uses-sdk | โ |
android/manifest-duplicate-component | android | Tidak ada komponen duplikat | โ |
android/manifest-unique-permission | android | Izin kustom bersifat unik | โ |
android/manifest-hardcoded-debuggable | android | debuggable=true tidak disertakan | โ |
android/manifest-mock-location | android | ACCESS_MOCK_LOCATION tidak disertakan | โ |
android/manifest-exported-unprotected | android | Komponen yang diekspor terlindungi | โ |
android/manifest-query-all-packages | android | justifikasi QUERY_ALL_PACKAGES | โ |
android/manifest-deeplink-valid | android | Deeplink intent-filter terlihat valid | โ |
android/applicationid-present | android | applicationId sudah dideklarasikan di app/build.gradle | โ |
android/capacitor-build-gradle-applied | android | capacitor.build.gradle ada saat diterapkan | โ |
android/gradle-wrapper-present | android | File Gradle wrapper tersedia | โ |
android/flavor-dimensions | android | Flavor dimensions dideklarasikan jika ada flavor | โ |
android/google-services-file | android | google-services.json ada saat plugin diterapkan | โ |
android/local-properties-committed | android | local.properties tidak di-commit bersama secrets | โ |
android/sdk-floors | android | min/compile/target SDK terlihat valid | โ |
android/target-sdk-play | android | targetSdk memenuhi persyaratan Play | โ |
android/min-sdk-capacitor | android | minSdk memenuhi persyaratan Capacitor | โ |
android/version-fields | android | versionCode / versionName tersedia | โ |
android/play-sa-access | android | Play service account dapat mengakses app (remote) | โ |
Contoh: shell remote Next.js / server.url
Bagian berjudul โContoh: remote Next.js / server.url shellโMerilis native shell yang memuat production server.url adalah pola Capacitor yang didukung. Prescan menandai ios/capacitor-server-url-shipped karena sering kali ini sisa dari live-reload.
Akui saja tanpa menonaktifkan pengecekan lainnya:
npx @capgo/cli@latest build request <appId> --platform ios \ --prescan-skip ios/capacitor-server-url-shippedAtau biarkan tetap terlihat sebagai peringatan:
npx @capgo/cli@latest build request <appId> --platform ios \ --prescan-warn ios/capacitor-server-url-shipped