Skip to content

빌드 전처리 검사

Capgo Cloud Build가 프로젝트를 업로드하기 전에 CLI는 전처리 로컬에서 자격 증명, 프로젝트 및 스토어 구성 문제를 잡아내는 것을 포함합니다.

또한 독립적으로 실행됩니다:

터미널 창
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

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

기호효과
--no-prescan전체 스캔을 생략합니다
--prescan-ignore-fatal 또는 --ignore-fatal 스캔을 실행하고, 보고서를 출력하고, 차단하지 마세요 build prescan)경고를 치명적인 오류로 처리합니다 (CI)
--fail-on-warnings그리고

--no-prescan 숨기거나 생략 --prescan-ignore-fatal 모두 남은 검사들을 숨기거나 생략합니다. 단일 규칙에 대해 반대하는 경우에는 대신 per-check override를 사용하세요. 스캔을 실행하고, 보고서를 출력하고, 차단하지 마세요

Catalog 확인

Catalog 확인 섹션

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

점진적 강제 의미는 정보만 제공할 때까지 2026-08-14, 그 후에 빌드 차단이 가능합니다.

id플랫폼검사하는 내용Gradual enforce
shared/apikey-permissioniOS, 안드로이드API 키는 네이티브 빌드를 요청할 수 있습니다.
shared/app-existsiOS, 안드로이드API 키가 앱 아이디를 볼 수 있는지 확인합니다.
shared/credentials-savediOS, 안드로이드iOS/Android 인증 정보가 저장되어 있습니다.
shared/cap-sync-staleiOS, 안드로이드웹 자산이 빌드되고 Capacitor 플러그인이 동기화됩니다.
shared/node-linker-layoutiOS, 안드로이드node_modules 레이아웃은 Capacitor 네이티브 경로와 호환됩니다.
shared/bundle-id-consistencyiOS, 안드로이드Capacitor 앱 아이디는 네이티브 번들 아이디와 일치합니다.
Id플랫폼체크하는 내용점진적 적용
ios/p12-opensiosiOS .p12 파일이 제공된 비밀번호로 열립니다
ios/p12-expiryiosiOS 인증서가 만료되지 않았습니다
ios/profile-expiryios배포 프로파일이 만료되지 않았습니다
ios/profile-bundle-matchiOS설치 프로파일의 앱 아이디가 앱과 일치합니다.
ios/profile-type-vs-modeiOS설치 프로파일의 유형이 앱 스토어 / 어드혹 모드와 일치합니다.
ios/cert-profile-pairingiOS설치 프로파일에 인증서가 포함되어 있습니다.
ios/targets-coverediOS모든 iOS 대상에 설치 프로파일이 있습니다.
ios/infoplist-sanityiOSInfo.plist에 필수 버전 / 식별성 키가 있습니다.
ios/asc-key-validiOS앱 스토어 커넥트 API 키 필드는 유효합니다.
ios/asc-key-accessiOSASC API 키는 앱 (원격) 에 접근할 수 있습니다.
ios/plist-bundle-id-formatiOSCFBundleIdentifier 형식은 유효합니다.Yes
ios/plist-version-short-formatiOSCFBundleShortVersionString 형식은 유효합니다.Yes
ios/plist-version-build-formatiOSCFBundleVersion 형식은 유효합니다.Yes
ios/plist-encryption-complianceiOS__CAPGO_KEEP_0____CAPGO_KEEP_1__
ios/plist-ats-arbitrary-loads__CAPGO_KEEP_2____CAPGO_KEEP_3____CAPGO_KEEP_4__
ios/plist-launch-storyboard__CAPGO_KEEP_5____CAPGO_KEEP_6____CAPGO_KEEP_7__
ios/plist-orientations-multitasking__CAPGO_KEEP_8____CAPGO_KEEP_9____CAPGO_KEEP_10__
ios/plist-orientations-present__CAPGO_KEEP_11__UISupportedInterfaceOrientations이 선언되었습니다.
ios/plist-display-nameios표시 이름이 설정되었습니다.
ios/plist-background-modes-sanityiosUIBackgroundModes 값이 유효합니다.
ios/xcode-deployment-target-capacitoriosiOS 배포 대상이 Capacitor 요구 사항을 충족합니다.
ios/xcode-signing-teamios__CAPGO_KEEP_0____CAPGO_KEEP_0__
ios/xcode-bundle-id-mismatch-across-configsiOS__CAPGO_KEEP_0____CAPGO_KEEP_0__
ios/xcode-enable-bitcode-leftoveriOS__CAPGO_KEEP_0____CAPGO_KEEP_0__
ios/xcode-swift-version-sanityiOS__CAPGO_KEEP_0____CAPGO_KEEP_0__
ios/xcode-no-app-targetiOS__CAPGO_KEEP_0__ 프로젝트는 애플리케이션 목표를 가지고 있습니다.
ios/xcode-multiple-app-targetsios__CAPGO_KEEP_0__ 프로젝트는 여러 앱 목표를 의도적으로 처리합니다.
ios/entitlements-vs-profile-capabilityios__CAPGO_KEEP_0__ 프로젝트의 권한은 프로파일 기능과 일치합니다.
ios/entitlements-aps-environment-vs-modeios__CAPGO_KEEP_0__ 프로젝트의 aps-environment는 배포 모드와 일치합니다.
ios/entitlements-associated-domains-formatios관련 도메인 형식이 유효합니다.
ios/entitlements-app-groups-formatiosApp Groups 형식이 유효합니다.
ios/capacitor-server-url-shippediosserver.url은 스토어 빌드용으로 live-reload / remote shell 엔드포인트로 남겨지지 않습니다.
ios/capacitor-server-cleartextiosserver.cleartext는 프로덕션에서 사용되지 않습니다.
ios/capacitor-allow-navigation-wildcardios서버. allowNavigation은 전면적인 wildcard가 아닙니다.
ios/pods-not-installediOSCocoaPods Pods / workspace는 Pods를 사용할 때 존재합니다.
ios/pods-lock-missingiOSPodfile.lock은 pod 버전을 고정합니다.
ios/pods-capacitor-missingiOSPodfile은 Capacitor을 연결합니다.
ios/spm-package-resolved-missingiOSSPM 패키지.resolved가 존재합니다.
ios/spm-capacitor-dependency-missingiosPackage.swift에서 Capacitor이 선언됩니다.
ios/appicon-empty-or-placeholderiosAppIcon.appiconset이 존재하고 비어있지 않습니다.
ios/appicon-referenced-file-missingiosContents.json 아이콘 파일이 디스크에 존재합니다.
ios/appicon-marketing-missingios1024×1024 마케팅 아이콘 존재합니다.
ios/spm-deployment-target-consistencyiOSSPM 배포 대상이 일관적입니다.
ID플랫폼체크하는 것점진적 강제
android/keystore-opens안드로이드__CAPGO_KEEP_0__ 키스토어가 제공된 비밀번호로 열립니다.
android/keystore-expiry__CAPGO_KEEP_0____CAPGO_KEEP_0__ 인증서가 만료되지 않았습니다.
android/cordova-vars-present__CAPGO_KEEP_0__cap sync 후 cordova.variables.gradle이 존재합니다.
android/gradle-props-heuristics__CAPGO_KEEP_0__gradle.properties에서 일반적인 빌드 중단을 위한 가이드라인이 있습니다.
android/play-sa-json__CAPGO_KEEP_0__구성된 경우 Play 서비스 계정 JSON이 존재합니다.
android/flavor-exists__CAPGO_KEEP_0__요청된 제품 맛집이 존재합니다.
android/agp8-package-attr__CAPGO_KEEP_0__AGP 8+에서 Manifest 패키지 속성 제거
android/manifest-well-formed안드로이드AndroidManifest.xml이 파싱
android/manifest-tag-typo안드로이드일반적인 manifest 태그 오류
android/manifest-namespace-uri안드로이드xmlns:android namespace URI가 올바른지 확인
android/manifest-missing-prefix안드로이드Android 속성은 android: 접두사가 사용
android/manifest-exported-missing안드로이드android: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 배포되지 않습니다.
android/manifest-exported-unprotected안드로이드내보내진 컴포넌트는 보호됩니다.
android/manifest-query-all-packages안드로이드QUERY_ALL_PACKAGES justification
android/manifest-deeplink-valid안드로이드Deep Link intent 필터가 유효합니다.
android/applicationid-present안드로이드applicationId는 app/build.gradle에서 선언되어 있습니다.
android/capacitor-build-gradle-applied안드로이드capacitor.build.gradle이 적용되었을 때 존재합니다.
android/gradle-wrapper-present안드로이드Gradle wrapper 파일이 존재합니다.
android/flavor-dimensions안드로이드플레이버드 차원은 플레버드가 존재할 때 선언됩니다.
android/google-services-file안드로이드구글 서비스 JSON 파일이 플러그인이 적용되었을 때 존재합니다.
android/local-properties-committed안드로이드local.properties 파일에 비밀번호가 포함되지 않습니다.
android/sdk-floors안드로이드SDK 미니/컴파일/타겟 층이 유효합니다.
android/target-sdk-play안드로이드타겟 SDK가 플레이 요구 사항을 충족합니다.
android/min-sdk-capacitor안드로이드미니 SDK가 Capacitor 요구 사항을 충족합니다.
android/version-fields안드로이드버전 코드/버전 이름이 존재합니다.
android/play-sa-access안드로이드서비스 계정은 앱에 접근할 수 있습니다 (remote)

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

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

생산 환경에서 로드하는 네이티브 쉘을 배송하는 것은 지원되는 __CAPGO_KEEP_0__ 패턴입니다. server.url is a supported Capacitor pattern. Prescan flags ios/capacitor-server-url-shipped 다른 체크를 비활성화하지 않고 이를 인식하세요:

터미널 창

클립보드에 복사
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
관련 섹션