Langsung ke konten

Cek prescan build

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:

Jendela terminal
npx @capgo/cli@latest build prescan <appId> --platform ios

Ada 80 pengecekan hari ini. Lebih baik abaikan ID pengecekan tertentu daripada mematikan seluruh proses scan.

Jendela 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 standalone pada build prescan:

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

ID pengecekan yang tidak dikenal akan gagal dengan error yang jelas.

FlagEfek
--no-prescanLewati seluruh scan
--prescan-ignore-fatal (atau --ignore-fatal aktif build prescan)Jalankan scan, cetak laporan, tidak pernah memblokir
--fail-on-warningsAnggap 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.

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.

IDPlatformApa yang diperiksaPenerapan bertahap
shared/apikey-permissionios, androidkey API dapat meminta Native Buildโ€”
shared/app-existsios, androidApp id ada dan dapat dilihat oleh key APIโ€”
shared/credentials-savedios, androidKredensial iOS/Android yang diperlukan disimpan secara lokalโ€”
shared/cap-sync-staleios, androidAset Web di-build dan plugin Capacitor disinkronkanโ€”
shared/node-linker-layoutios, androidLayout node_modules kompatibel dengan path native Capacitorโ€”
shared/bundle-id-consistencyios, androidappId Capacitor cocok dengan bundle id / applicationId nativeโ€”
IDPlatformApa yang diperiksaPenerapan bertahap
ios/p12-opensiosiOS .p12 terbuka dengan password yang diberikanโ€”
ios/p12-expiryiossertifikat signing iOS belum kedaluwarsaโ€”
ios/profile-expiryiosProvisioning profile belum kedaluwarsaโ€”
ios/profile-bundle-matchiosbundle id pada Provisioning profile sesuai dengan appโ€”
ios/profile-type-vs-modeiosTipe profile sesuai dengan mode app_store / ad_hocโ€”
ios/cert-profile-pairingiosSertifikat tertanam dalam provisioning profileโ€”
ios/targets-coverediosSemua target iOS memiliki provisioning profileโ€”
ios/infoplist-sanityiosInfo.plist memiliki key version / identity yang diperlukanโ€”
ios/asc-key-validiosField kunci API App Store Connect terlihat validโ€”
ios/asc-key-accessiosKunci API ASC dapat mengakses aplikasi (remote)โ€”
ios/plist-bundle-id-formatiosFormat CFBundleIdentifier validYa
ios/plist-version-short-formatiosformat CFBundleShortVersionString validYa
ios/plist-version-build-formatiosformat CFBundleVersion validYa
ios/plist-encryption-complianceiosITSAppUsesNonExemptEncryption telah dideklarasikanYa
ios/plist-ats-arbitrary-loadsiosNSAllowsArbitraryLoads tidak diaktifkan untuk produksiYa
ios/plist-launch-storyboardiosLaunch screen sudah dideklarasikanYa
ios/plist-orientations-multitaskingiosPengaturan orientasi / multitasking sudah konsistenYa
ios/plist-orientations-presentiosUISupportedInterfaceOrientations sudah dideklarasikanYa
ios/plist-display-nameiosDisplay name sudah diaturYa
ios/plist-background-modes-sanityiosNilai UIBackgroundModes terlihat validYa
ios/plist-scene-lifecycle-xcode27iosApp menggunakan lifecycle UIScene saat build dengan Xcode 27+ (diperlukan oleh SDK iOS 27)Ya
ios/xcode-deployment-target-capacitoriosTarget deployment iOS memenuhi syarat CapacitorYa
ios/xcode-signing-teamiosSigning team sudah diaturYa
ios/xcode-bundle-id-mismatch-across-configsiOSBundle ID konsisten di seluruh konfigurasi XcodeYa
ios/xcode-enable-bitcode-leftoveriOSSisa ENABLE_BITCODE sudah dihapusYa
ios/xcode-swift-version-sanityiOSPengaturan versi Swift terlihat wajarYa
ios/xcode-no-app-targetiOSProyek Xcode memiliki target aplikasiYa
ios/xcode-multiple-app-targetsiOSBeberapa target aplikasi ditangani secara sengajaYa
ios/entitlements-vs-profile-capabilityiOSEntitlements sesuai dengan kapabilitas profilYa
ios/entitlements-aps-environment-vs-modeiOSaps-environment sesuai dengan mode distribusiYa
ios/entitlements-associated-domains-formatiOSFormat Associated Domains validYa
ios/entitlements-app-groups-formatiOSFormat App Groups validYa
ios/capacitor-server-url-shippediOSserver.url tidak dibiarkan sebagai endpoint live-reload / remote shell untuk build storeYa
ios/capacitor-server-cleartextiOSserver.cleartext tidak diaktifkan untuk produksiYa
ios/capacitor-allow-navigation-wildcardiOSserver.allowNavigation bukan wildcard umumYa
ios/pods-not-installediOSCocoaPods Pods / workspace tersedia saat menggunakan PodsYa
ios/pods-lock-missingiOSPodfile.lock mengunci versi podYa
ios/pods-capacitor-missingiOSPodfile menghubungkan CapacitorYa
ios/spm-package-resolved-missingiOSSPM Package.resolved tersediaYa
ios/spm-capacitor-dependency-missingiOSPackage.swift mendeklarasikan CapacitorYa
ios/appicon-empty-or-placeholderiOSAppIcon.appiconset ada dan tidak kosongYa
ios/appicon-referenced-file-missingiOSFile ikon di Contents.json ada di diskYa
ios/appicon-marketing-missingiOSIkon marketing 1024ร—1024 tersediaYa
ios/spm-deployment-target-consistencyiOSTarget deployment SPM konsistenYa
IDPlatformApa yang diperiksaPenerapan bertahap
android/keystore-opensandroidKeystore Android terbuka dengan password yang diberikanโ€”
android/keystore-expiryandroidSertifikat signing Android belum kedaluwarsaโ€”
android/cordova-vars-presentandroidcordova.variables.gradle ada setelah cap syncโ€”
android/gradle-props-heuristicsandroidHeuristik gradle.properties untuk masalah build umumโ€”
android/play-sa-jsonandroidJSON service-account Play ada jika dikonfigurasiโ€”
android/flavor-existsandroidProduct flavor yang diminta tersediaโ€”
android/agp8-package-attrandroidAtribut Manifest package= dihapus untuk AGP 8+โ€”
android/manifest-well-formedandroidParsing AndroidManifest.xmlโ€”
android/manifest-tag-typoandroidTypo umum pada tag manifestโ€”
android/manifest-namespace-uriandroidURI namespace xmlns:android sudah benarโ€”
android/manifest-missing-prefixandroidAtribut Android menggunakan prefix android:โ€”
android/manifest-exported-missingandroidandroid:exported sudah diatur sesuai kebutuhanโ€”
android/manifest-multiple-uses-sdkandroidHanya ada satu elemen uses-sdkโ€”
android/manifest-duplicate-componentandroidTidak ada komponen duplikatโ€”
android/manifest-unique-permissionandroidIzin kustom bersifat unikโ€”
android/manifest-hardcoded-debuggableandroiddebuggable=true tidak disertakanโ€”
android/manifest-mock-locationandroidACCESS_MOCK_LOCATION tidak disertakanโ€”
android/manifest-exported-unprotectedandroidKomponen yang diekspor terlindungiโ€”
android/manifest-query-all-packagesandroidjustifikasi QUERY_ALL_PACKAGESโ€”
android/manifest-deeplink-validandroidDeeplink intent-filter terlihat validโ€”
android/applicationid-presentandroidapplicationId sudah dideklarasikan di app/build.gradleโ€”
android/capacitor-build-gradle-appliedandroidcapacitor.build.gradle ada saat diterapkanโ€”
android/gradle-wrapper-presentandroidFile Gradle wrapper tersediaโ€”
android/flavor-dimensionsandroidFlavor dimensions dideklarasikan jika ada flavorโ€”
android/google-services-fileandroidgoogle-services.json ada saat plugin diterapkanโ€”
android/local-properties-committedandroidlocal.properties tidak di-commit bersama secretsโ€”
android/sdk-floorsandroidmin/compile/target SDK terlihat validโ€”
android/target-sdk-playandroidtargetSdk memenuhi persyaratan Playโ€”
android/min-sdk-capacitorandroidminSdk memenuhi persyaratan Capacitorโ€”
android/version-fieldsandroidversionCode / versionName tersediaโ€”
android/play-sa-accessandroidPlay service account dapat mengakses app (remote)โ€”

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:

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

Atau biarkan tetap terlihat sebagai peringatan:

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