내용으로 건너뛰기

빌드 전 검사

Capgo Cloud Build가 프로젝트를 업로드하기 전에 CLI가 실행됩니다. prescan 또한 독립적으로 실행됩니다:

터미널 창

클립보드 복사
npx @capgo/cli@latest build prescan <appId> --platform ios

오늘은 80 개별 체크 아이디를 무시하는 것보다 전체 스캔을 끄는 것보다 좋습니다.

특정 체크 무시

제목: 특정 체크 무시
터미널 창
# 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

독립된 별명 build prescan:

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

알 수 없는 체크 아이디는 빠른 오류와 함께 실패합니다.

모든 다른 체크가 여전히 빌드 보호합니다.

전역 탈출 (적극 사용하지 않음)
Flag플래그
--no-prescan효과
--prescan-ignore-fatal 스캔 전체 생략 --ignore-fatal (또는 build prescan)페이지
--fail-on-warnings스캔 실행, 보고서 출력, 블록하지 않음

--no-prescan 및 --prescan-ignore-fatal 숨기거나 피하기 모두 남은 체크를 숨기거나 피합니다. 하나의 규칙에 대해만 불합치할 때는 체크별로 오버라이드를 사용하세요.

체크 카탈로그

체크 카탈로그

정확한 id를 사용하세요 --prescan-skip / --prescan-warn.

점진적 강제 의사결정은 정보만 제공할 때까지 2026-08-14그런 다음 빌드가 중단될 수 있습니다.

공유

공유
ID플랫폼체크하는 내용점진적 강제
shared/apikey-permissioniOS, 안드로이드API 키가 네이티브 빌드를 요청할 수 있습니다—
shared/app-existsiOS, 안드로이드API 키가 앱 ID가 존재하고 앱 ID가 API 키에 표시되어야 함—
shared/credentials-savediOS, 안드로이드iOS/Android 인증 정보가 로컬에 저장되어야 함—
shared/cap-sync-staleiOS, 안드로이드웹 자산이 빌드되고 Capacitor 플러그인이 동기화—
shared/node-linker-layoutiOS, 안드로이드node_modules 레이아웃은 Capacitor 네이티브 경로와 함께 작동합니다.—
shared/bundle-id-consistencyiOS, 안드로이드Capacitor 앱 아이디는 네이티브 번들 아이디 / applicationId와 일치합니다.—
ID플랫폼체크하는 내용점진적 강제
ios/p12-opensiOSiOS .p12은 제공된 비밀번호로 열립니다.—
ios/p12-expiryiOSiOS 인증서가 만료되지 않았습니다.—
ios/profile-expiryiOS배포 프로파일이 만료되지 않았습니다.—
ios/profile-bundle-matchiOS앱의 Bundle ID와 일치하는 배포 프로파일이 있습니다.—
ios/profile-type-vs-modeiOS앱 스토어 / 어드혹 모드와 일치하는 프로파일 타입이 있습니다.—
ios/cert-profile-pairingiOS배포 프로파일에 인증서가 포함되어 있습니다.—
ios/targets-coverediOS모든 iOS 대상에 배포 프로파일이 있습니다.—
ios/infoplist-sanityiOSInfo.plist에 필요 version / identity 키가 있습니다.—
ios/asc-key-validiOSApp Store Connect API 키 필드는 유효합니다.—
ios/asc-key-accessiOSASC API 키는 앱에 접근할 수 있습니다 (remote)—
ios/plist-bundle-id-formatiOSCFBundleIdentifier 형식은 유효합니다.Yes
ios/plist-version-short-formatiOSCFBundleShortVersionString 형식은 유효합니다.Yes
ios/plist-version-build-formatiOSCFBundleVersion 형식이 유효합니다.네
ios/plist-encryption-complianceiOSITSAppUsesNonExemptEncryption이 선언되었습니다.네
ios/plist-ats-arbitrary-loadsiOSNSAllowsArbitraryLoads는 프로덕션에서 비활성화되었습니다.네
ios/plist-launch-storyboardiOS시작 화면이 선언되었습니다.네
ios/plist-orientations-multitaskingiOS설정 / 멀티태스킹 설정은 일관적입니다.네
ios/plist-orientations-presentiOSUISupportedInterfaceOrientations이 선언되었습니다.네
ios/plist-display-nameiOS표시 이름이 설정되었습니다.네
ios/plist-background-modes-sanityiOSUIBackgroundModes의 값이 유효합니다.네
ios/xcode-deployment-target-capacitoriOSCapacitor iOS 배포 대상이 요구 사항을 충족합니다.네
ios/xcode-signing-teamiOS인증 팀이 설정되었습니다네
ios/xcode-bundle-id-mismatch-across-configsiOSXcode 구성에서 Bundle id가 일관적입니다네
ios/xcode-enable-bitcode-leftoveriOSENABLE_BITCODE이 남아 있지 않습니다네
ios/xcode-swift-version-sanityiOSSwift 버전 설정이 정상적입니다.Yes
ios/xcode-no-app-targetiOSiOSYes
ios/xcode-multiple-app-targetsiOSXcode 프로젝트에 애플리케이션 목표가 있습니다.Yes
ios/entitlements-vs-profile-capabilityiOS다중 앱 목표는 의도적으로 처리됩니다. Yes
ios/entitlements-aps-environment-vs-modeiOSAPS 환경이 배포 모드와 일치합니다.네
ios/entitlements-associated-domains-formatiOSAssociated Domains 형식이 유효합니다.네
ios/entitlements-app-groups-formatiOSApp Groups 형식이 유효합니다.네
ios/capacitor-server-url-shippediOS서버 URL은 스토어 빌드용으로 라이브 리로드 / 원격 셸 엔드포인트로 남겨지지 않습니다.네
ios/capacitor-server-cleartextiOS생산 환경에서 server.cleartext 가 비활성화되어 있습니다.네
ios/capacitor-allow-navigation-wildcardiOSserver.allowNavigation 은 전체적인 wildcard가 아닙니다.네
ios/pods-not-installediOSCocoaPods Pods / workspace는 Pods를 사용할 때 존재합니다.네
ios/pods-lock-missingiOSPodfile.lock는 pod 버전을 고정합니다.네
ios/pods-capacitor-missingiOSPodfile wires Capacitor네
ios/spm-package-resolved-missingiOSSPM Package.resolved이 존재합니다네
ios/spm-capacitor-dependency-missingiOSPackage.swift에서 Capacitor이 선언됩니다네
ios/appicon-empty-or-placeholderiOSAppIcon.appiconset이 존재하고 비어있지 않습니다네
ios/appicon-referenced-file-missingiOS디스크에 Contents.json 아이콘 파일이 존재합니다.네
ios/appicon-marketing-missingiOS1024×1024 마케팅 아이콘 존재네
ios/spm-deployment-target-consistencyiOSSPM 배포 대상이 일관적입니다.네

안드로이드

안드로이드
ID플랫폼체크하는 내용점진적 강제
android/keystore-opens안드로이드안드로이드 키스토어는 제공된 비밀번호로 열립니다—
android/keystore-expiry안드로이드안드로이드 인증서가 만료되지 않았습니다—
android/cordova-vars-present안드로이드cordova.variables.gradle은 cap sync 후 존재합니다—
android/gradle-props-heuristics안드로이드gradle.properties는 일반적인 빌드 중단에 대한 힌트입니다—
android/play-sa-json안드로이드서비스 계정 JSON이 구성되면 존재합니다.—
android/flavor-exists안드로이드구성된 서비스 계정 JSON이 존재합니다.—
android/agp8-package-attr안드로이드요청된 제품 맛집이 존재합니다.—
android/manifest-well-formed안드로이드AGP 8+에서 Manifest package= 속성이 제거되었습니다.—
android/manifest-tag-typo안드로이드AndroidManifest.xml이 파싱됩니다.—
android/manifest-namespace-uri안드로이드일반적인 매니페스트 태그 오류—
android/manifest-missing-prefix안드로이드안드로이드 속성은 android: 접두사를 사용합니다.—
android/manifest-exported-missing안드로이드안드로이드:exported는 필요할 때 설정됩니다.—
android/manifest-multiple-uses-sdk안드로이드사용하는 sdk 요소는 하나만 사용됩니다.—
android/manifest-duplicate-component안드로이드중복된 컴포넌트는 없습니다.—
android/manifest-unique-permission안드로이드사용자 정의 권한은 고유합니다.—
android/manifest-hardcoded-debuggable안드로이드debuggable=true는 배포되지 않습니다.—
android/manifest-mock-location안드로이드ACCESS_MOCK_LOCATION not shipped—
android/manifest-exported-unprotected안드로이드수출된 컴포넌트는 보호됩니다.—
android/manifest-query-all-packages안드로이드Exported components are protected—
android/manifest-deeplink-valid안드로이드QUERY_ALL_PACKAGES 정당성—
android/applicationid-present안드로이드디플링크 인텐트 필터가 유효합니다.—
android/capacitor-build-gradle-applied안드로이드capacitor.build.gradle이 적용되었을 때 존재합니다.—
android/gradle-wrapper-present안드로이드Gradle wrapper 파일이 존재합니다.—
android/flavor-dimensions안드로이드플레이 스토어에서 요구하는 SDK 버전을 충족합니다.—
android/google-services-file안드로이드플레이어 서비스 JSON 파일이 플러그인이 적용되었을 때 존재합니다.—
android/local-properties-committed안드로이드로컬 속성 파일에 비밀을 포함하지 않습니다.—
android/sdk-floors안드로이드SDK 목적지의 min/compile/target 층이 유효합니다.—
android/target-sdk-play안드로이드플레이 스토어에서 요구하는 SDK 버전을 충족합니다.—
android/min-sdk-capacitor안드로이드minSdk가 Capacitor 요구 사항을 충족합니다.—
android/version-fields안드로이드버전 코드 / 버전 이름이 존재합니다.—
android/play-sa-access안드로이드앱에 접근할 수 있는 플레이 서비스 계정—

예시: remote Next.js / server.url shell

원격 Next.js / server.url shell 예시

운영 환경에서 네이티브 쉘을 로드하는 것은 __CAPGO_KEEP_0__ 지원 패턴입니다. server.url Capgo는 지원하는 Capacitor 패턴입니다. Prescan 플래그 ios/capacitor-server-url-shipped 다른 체크를 비활성화하지 않고도 이를 인식합니다:

터미널 창

운영 환경에서 네이티브 쉘을 로드하는 것은 지원되는 패턴입니다. Prescan 플래그
npx @capgo/cli@latest build request <appId> --platform ios \
--prescan-skip ios/capacitor-server-url-shipped

또는 경고로 시각성을 유지하세요:

터미널 창
npx @capgo/cli@latest build request <appId> --platform ios \
--prescan-warn ios/capacitor-server-url-shipped