๋‚ด์šฉ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

๐Ÿ”น ๋นŒ๋“œ

๐Ÿ—๏ธ Capgo Cloud๋ฅผ ํ†ตํ•ด ๋„ค์ดํ‹ฐ๋ธŒ iOS/Android ๋นŒ๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜์„ธ์š”.

๋นŒ๋“œ ์ ‘๊ทผ ๋ฐ ์ถœ๋ ฅ

๊ตฌ์ถ• ์ ‘๊ทผ ๋ฐ ์ถœ๋ ฅ ์„น์…˜

๋„ค์ดํ‹ฐ๋ธŒ ํด๋ผ์šฐ๋“œ ๋นŒ๋“œ๋Š” ๋ชจ๋“  Capgo ๊ณ„ํš์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋นŒ๋“œ ์ž๊ฒฉ ์ฆ๋ช…์€ Capgo ์„œ๋ฒ„์— ์ €์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค: ๋นŒ๋“œ๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค. ๋นŒ๋“œ ์ถœ๋ ฅ์€ ์˜ต์…˜์œผ๋กœ ์‹œ๊ฐ„ ์ œํ•œ๋œ ๋‹ค์šด๋กœ๋“œ ๋งํฌ์™€ ํ•จ๊ป˜ ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž๊ฒฉ ์ฆ๋ช… ์ €์žฅํ•˜๊ธฐ

ํ„ฐ๋ฏธ๋„ ์ฐฝ
ํด๋ฆฝ๋ณด๋“œ์— ๋ณต์‚ฌ
npx @capgo/cli build credentials save --appId YOUR_APP_ID --platform ios
npx @capgo/cli build credentials save --appId YOUR_APP_ID --platform android

Pass --output-record ๋‹ค์šด๋กœ๋“œ URL ๋ฐ QR ์ฝ”๋“œ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด code์„ ์‚ฌ์šฉํ•˜์„ธ์š”. build last-output ์ฝ๊ธฐ ์œ„ํ•ด์„œ๋Š”

ํด๋ฆฝ๋ณด๋“œ์— ๋ณต์‚ฌ
npx @capgo/cli build request APP_ID --platform android --output-upload --output-record /tmp/build.json
npx @capgo/cli build last-output --path /tmp/build.json --field outputUrl

๐Ÿ”น ํ•„์š”ํ•œ ํ•ญ๋ชฉ

โ€œ ๐Ÿ”น ํ•„์š” ํ•ญ๋ชฉโ€ ์ œ๋ชฉ
ํ„ฐ๋ฏธ๋„ ์ฐฝ
npx @capgo/cli@latest build needed

๐Ÿงญ native ๋นŒ๋“œ๊ฐ€ ํ•„์š”ํ•˜๋ฉด โ€œyesโ€๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  code 1๋กœ ์ข…๋ฃŒ; ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด โ€œnoโ€๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  code 0์œผ๋กœ ์ข…๋ฃŒ. ๋ช…๋ น์–ด ์‹คํŒจ๋Š” code 2๋กœ ์ข…๋ฃŒ.

์˜ˆ์‹œ:

ํ„ฐ๋ฏธ๋„ ์ฐฝ
npx @capgo/cli@latest build needed com.example.app --channel production --verbose

์˜ต์…˜:

ํŒŒ๋ผ๋ฏธํ„ฐํƒ€์ž…์„ค๋ช…
-astringAPI ๊ณ„์ •์— ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ํ‚ค
-cstring๋น„๊ตํ•  ์ฑ„๋„. ๊ธฐ๋ณธ๊ฐ’์€ CapacitorUpdater.defaultChannel ๋˜๋Š” ๊ณต๊ณต ๊ธฐ๋ณธ ์ฑ„๋„
โ€”package-jsonstring๋ชจ๋…ธ๋ ˆํฌ์˜ package.json ํŒŒ์ผ ๊ฒฝ๋กœ (์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„)
โ€”node-modulesstring๋ชจ๋…ธ๋ ˆํฌ์˜ node_modules ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ (์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„)
โ€”verboseboolean์„ธ๋ถ€ ๋กœ๊น…๊ณผ ํ•จ๊ป˜ ์ž์„ธํ•œ ์ถœ๋ ฅ์„ ํ™œ์„ฑํ™”
โ€”supa-hoststringCustom Supabase host URL (for self-hosting or Capgo development)
โ€”supa-anonstring๊ฐœ์ธ ํ˜ธ์ŠคํŒ…์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์ปค์Šคํ…€ Supabase anon ํ‚ค

๐Ÿš€ Init

Init

Alias: onboarding

ํ„ฐ๋ฏธ๋„ ์ฐฝ
npx @capgo/cli@latest build init

iOS: ์ธ์ฆ์„œ + ํ”„๋กœํŒŒ์ผ ์ž๋™ํ™”; Android: ํ‚ค์Šคํ† ์–ด + Google OAuth GCP ์„œ๋น„์Šค ๊ณ„์ • ๋ฐ Play Console ์ดˆ๋Œ€

Options:

ParamType์„ค๋ช…
-astringAPI ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ„์ •์— ์—ฐ๊ฒฐ
-pstring์˜จ๋ณด๋”ฉํ•  ํ”Œ๋žซํผ (ios ๋˜๋Š” android). ์ƒ๋žต ์‹œ, ํ•˜๋‚˜์˜ ๋„ค์ดํ‹ฐ๋ธŒ ํด๋”๋งŒ ์กด์žฌํ•  ๋•Œ ์ž๋™์œผ๋กœ ๊ฐ์ง€; ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํ”„๋กฌํ”„ํŠธ
โ€”supa-hoststring์‚ฌ์šฉ์ž ์ง€์ • Supabase ํ˜ธ์ŠคํŠธ URL (์ž์ฒด ํ˜ธ์ŠคํŒ… ๋˜๋Š” Capgo ๊ฐœ๋ฐœ์šฉ)
โ€”no-analyticsboolean์ด ์‹คํ–‰์— ๋Œ€ํ•ด ๋นŒ๋“œ ์˜จ๋ณด๋”ฉ ๋ถ„์„ ๋ฐ ํ„ฐ๋ฏธ๋„ ์žฌ์ƒ์„ ๋น„ํ™œ์„ฑํ™”
ํ„ฐ๋ฏธ๋„ ์ฐฝ
npx @capgo/cli@latest build request

Capgo ํด๋ผ์šฐ๋“œ์—์„œ ๋„ค์ดํ‹ฐ๋ธŒ ๋นŒ๋“œ๋ฅผ ์š”์ฒญํ•˜์‹ญ์‹œ์˜ค. ์ด ๋ช…๋ น์–ด๋Š” ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์••์ถ•ํ•˜์—ฌ Capgo์— ์—…๋กœ๋“œํ•˜๊ณ  ๋นŒ๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋นŒ๋“œ๋Š” ์•ฑ ์Šคํ† ์–ด๋กœ ์ง์ ‘ ์ „์†ก๋ฉ๋‹ˆ๋‹ค. Capgo ์„œ๋ฒ„์— ์ธ์ฆ ์ •๋ณด๊ฐ€ ์ €์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋นŒ๋“œ๊ฐ€ ์™„๋ฃŒ๋œ ํ›„์— ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค. ๋นŒ๋“œ๋ฅผ ์š”์ฒญํ•˜๊ธฐ ์ „์— ์ €์žฅํ•ด ์ฃผ์‹ญ์‹œ์˜ค.

ํ„ฐ๋ฏธ๋„ ์ฐฝ
npx @capgo/cli build credentials save --appId APP_ID --platform ios

์˜ˆ์‹œ:

ํ„ฐ๋ฏธ๋„ ์ฐฝ
npx @capgo/cli@latest build request com.example.app --platform ios --path .

์˜ต์…˜:

ํŒŒ๋ผ๋ฏธํ„ฐํƒ€์ž…์„ค๋ช…
โ€”๊ฒฝ๋กœstringํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ์˜ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜์—ฌ ๋นŒ๋“œ (๊ธฐ๋ณธ๊ฐ’: ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ)
โ€”node-modulesstring๋ชจ๋…ธ๋ ˆํฌ์˜ node_modules ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ (์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„)
โ€”platformstring๋Œ€์ƒ ํ”Œ๋žซํผ: ios ๋˜๋Š” android (ํ•„์ˆ˜)
โ€”build-modestring๋นŒ๋“œ ๋ชจ๋“œ: debug ๋˜๋Š” release (๊ธฐ๋ณธ๊ฐ’: release)
โ€”build-certificate-base64stringiOS: Base64๋กœ ์ธ์ฝ”๋”ฉ๋œ .p12 ์ธ์ฆ์„œ
โ€”p12-passwordstringiOS: ์ธ์ฆ์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ (์ธ์ฆ์„œ์— ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์—†์œผ๋ฉด ์„ ํƒ ์‚ฌํ•ญ)
โ€”apple-idstringiOS: ์• ํ”Œ ID ์ด๋ฉ”์ผ (์•ฑ ์Šคํ† ์–ด ์—ฐ๊ฒฐ API ํ‚ค ์—…๋กœ๋“œ์˜ ๋Œ€์•ˆ)
โ€”apple-app-specific-passwordstringiOS: ํ…Œ์ŠคํŠธ ํ”Œ๋ผ์ดํŠธ ์—…๋กœ๋“œ๋ฅผ ์œ„ํ•œ ์•ฑ ์Šคํ† ์–ด ์—ฐ๊ฒฐ ์•ฑ ์Šคํ† ์–ด ID (xxxx-xxxx-xxxx-xxxx)
โ€”apple-app-idstringiOS: ์•ฑ ์Šคํ† ์–ด ์—ฐ๊ฒฐ ์•ฑ ID (์•ฑ ์Šคํ† ์–ด ์—ฐ๊ฒฐ โ€”apple-id ๋ฐ โ€”apple-app-specific-password์™€ ํ•จ๊ป˜ ํ•„์š”)
โ€”apple-key-idstringiOS: ์•ฑ ์Šคํ† ์–ด ์—ฐ๊ฒฐ API ํ‚ค ID
โ€”apple-issuer-idstringiOS: ์•ฑ ์Šคํ† ์–ด ์—ฐ๊ฒฐ ๋ฐœ๊ธ‰์ž ID
โ€”apple-key-contentstringiOS: Base64-์ธ์ฝ”๋”ฉ ์•ฑ ์Šคํ† ์–ด ์—ฐ๊ฒฐ API ํ‚ค (.p8)
โ€”app-store-connect-team-idstringiOS: App Store Connect ํŒ€ ID
โ€”ios-schemestringiOS: Xcode scheme์„ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ (๊ธฐ๋ณธ๊ฐ’: App)
โ€”ios-targetstringiOS: Xcode target์„ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ ์„ค์ •์„ ์ฝ๊ธฐ (๊ธฐ๋ณธ๊ฐ’: scheme๊ณผ ๋™์ผ)
โ€”ios-distributionstringiOS: ๋ฐฐํฌ ๋ชจ๋“œ
โ€”ios-provisioning-profilestringiOS: ๋ฐฐํฌ ํ”„๋กœํŒŒ์ผ ๊ฒฝ๋กœ ๋˜๋Š” bundleId=path mapping (๋ฐ˜๋ณต ๊ฐ€๋Šฅ)
โ€”android-keystore-filestringAndroid: Base64๋กœ ์ธ์ฝ”๋”ฉ๋œ ํ‚ค์Šคํ† ์–ด ํŒŒ์ผ
โ€”keystore-key-aliasstring์•ˆ๋“œ๋กœ์ด๋“œ: ํ‚ค์Šคํ† ์–ด ํ‚ค ๋ณ„์นญ
__CAPGO_KEEP_0__string์•ˆ๋“œ๋กœ์ด๋“œ: ํ‚ค์Šคํ† ์–ด ํ‚ค ๋น„๋ฐ€๋ฒˆํ˜ธ
__CAPGO_KEEP_0__string์•ˆ๋“œ๋กœ์ด๋“œ: ํ‚ค์Šคํ† ์–ด ์ €์žฅ์†Œ ๋น„๋ฐ€๋ฒˆํ˜ธ
__CAPGO_KEEP_0__string์•ˆ๋“œ๋กœ์ด๋“œ: Google Play ์„œ๋น„์Šค ๊ณ„์ • JSON (Base64 ์ธ์ฝ”๋”ฉ)
โ€”android-flavorstring์•ˆ๋“œ๋กœ์ด๋“œ: ์ œํ’ˆ ํ”Œ๋ž˜๋ฒ„๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ํ”Œ๋ž˜๋ฒ„ (์˜ˆ: ํ”„๋กœ๋•์…˜). ํ”„๋กœ์ ํŠธ์— ์—ฌ๋Ÿฌ ํ”Œ๋ž˜๋ฒ„๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค.
์•ˆ๋“œ๋กœ์ด๋“œ: ๋ฆด๋ฆฌ์ฆˆ ์ƒํƒœstringCLI
__CAPGO_KEEP_0__string์•ˆ๋“œ๋กœ์ด๋“œ: Google Play ๋ฐฐํฌ ์ƒํƒœ (draft, completed, inProgress, halted). โ€”submit-to-store-review ์˜ต์…˜ ์—†์œผ๋ฉด draft. โ€”submit-to-store-review ์˜ต์…˜๊ณผ ์ƒํƒœ ์„ค์ • ์—†์œผ๋ฉด completed. ์šฐ์„ ์ˆœ์œ„: CLI > env > ์ €์žฅ๋œ ์ธ์ฆ์„œ
โ€”in-app-update-prioritystring์•ˆ๋“œ๋กœ์ด๋“œ: Google Play ๋‚ด ์•ฑ ์—…๋ฐ์ดํŠธ ์šฐ์„ ์ˆœ์œ„ (์ •์ˆ˜ 0โ€“5; ๋” ๋†’์„์ˆ˜๋ก ๋” ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค). ์ž์„ธํ•œ ๋‚ด์šฉ์€ https://developer.android.com/guide/playcore/in-app-updates์„ ์ฐธ์กฐํ•˜์„ธ์š”. ์šฐ์„ ์ˆœ์œ„: CLI > env > ์ €์žฅ๋œ ์ธ์ฆ์„œ
โ€”no-playstore-uploadboolean์ด ๋นŒ๋“œ์— ๋Œ€ํ•œ Play Store ์—…๋กœ๋“œ๋ฅผ ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค (์ €์žฅ๋œ ํ”Œ๋ ˆ์ด ๊ตฌ์„ฑ null๋กœ ์„ค์ •). โ€”output-upload ์˜ต์…˜ ํ•„์š”
โ€”submit-to-store-reviewboolean์—…๋กœ๋“œ ํ›„ ์Šคํ† ์–ด ๋ฆด๋ฆฌ์ฆˆ๋ฅผ ๊ฒ€ํ†  ์š”์ฒญ ๋Œ€์‹  draft/inactive ๋นŒ๋“œ๋กœ ๋‚จ๊น๋‹ˆ๋‹ค. ์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ๋Š” ์ด ๊ธฐ๋ณธ๊ฐ’์€ ํ”„๋กœ๋•์…˜ ํŠธ๋ž™์— completed ์ƒํƒœ๋กœ (โ€”android-track / PLAY_STORE_TRACK ๋ฐ โ€”android-release-status / PLAY_STORE_RELEASE_STATUS๋กœ override) ์„ค์ •๋ฉ๋‹ˆ๋‹ค. iOS์—์„œ๋Š” ์ฒ˜๋ฆฌ๋œ TestFlight ๋นŒ๋“œ๋ฅผ App Store ๊ฒ€ํ† ์— ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค.
โ€”store-release-namestring์Šคํ† ์–ด ๋ฆด๋ฆฌ์ฆˆ ์ด๋ฆ„/๋ฒ„์ „ ๋ ˆ์ด๋ธ”. ์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ๋Š” Google Play ๋ฒ„์ „ ์ด๋ฆ„์œผ๋กœ ์ „์†กํ•˜๊ณ  iOS์—์„œ๋Š” App Store ๋ฒ„์ „์„ ๋งŒ๋“ค๊ฑฐ๋‚˜ ํŽธ์ง‘ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
โ€”store-release-notesstring๊ธฐ๋ณธ ์Šคํ† ์–ด ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ. ์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ๋Š” ์ด ๊ฒƒ์„ ํ”Œ๋ ˆ์ด ์ฐจํŠธ๋กœ๊ทธ๋กœ ์‚ฌ์šฉํ•˜๊ณ , iOS์—์„œ๋Š” ๊ธฐ๋ณธ ์•ฑ ์Šคํ† ์–ด '๋ฌด์—‡์ด ์ƒˆ๋กœ์šด๊ฐ€?' ํ…์ŠคํŠธ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
__CAPGO_KEEP_0__string์ง€์—ญํ™”๋œ ์Šคํ† ์–ด ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ (๋ฐ˜๋ณต ๊ฐ€๋Šฅ), ์˜ˆ๋ฅผ ๋“ค์–ด โ€”store-release-notes-locale en-US=โ€œ๋ฒ„๊ทธ ์ˆ˜์ •โ€ โ€”store-release-notes-locale fr-FR=โ€œ์ˆ˜์ •โ€.
__CAPGO_KEEP_0__stringiOS: ์™ธ๋ถ€ ๋ฒ ํƒ€ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ์™ธ๋ถ€ ๊ทธ๋ฃน ์ด๋ฆ„ ๋˜๋Š” ID์˜ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„๋œ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.
__CAPGO_KEEP_0__booleaniOS: ์• ํ”Œ ์Šน์ธ ํ›„ ์ž๋™์œผ๋กœ ์•ฑ ์Šคํ† ์–ด ๋ฒ„์ „์„ ๋ฆด๋ฆฌ์ฆˆํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ ์ˆ˜๋™ ๋ฆด๋ฆฌ์ฆˆ์ž…๋‹ˆ๋‹ค.
__CAPGO_KEEP_0__booleaniOS: ์• ํ”Œ ์Šน์ธ ํ›„ ์ˆ˜๋™ ๋ฆด๋ฆฌ์ฆˆ๋ฅผ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.
__CAPGO_KEEP_0__boolean์ด ๋นŒ๋“œ๋งŒ์„ ์œ„ํ•œ ์ถœ๋ ฅ ์—…๋กœ๋“œ ๋™์ž‘์„ ์˜ค๋ฒ„๋ผ์ด๋“œํ•ฉ๋‹ˆ๋‹ค (ํ™œ์„ฑํ™”). ์šฐ์„ ์ˆœ์œ„: CLI > ํ™˜๊ฒฝ๋ณ€์ˆ˜ > ์ €์žฅ๋œ ์ž๊ฒฉ์ฆ๋ช…
__CAPGO_KEEP_0__boolean์ด ๋นŒ๋“œ๋งŒ์— ๋Œ€ํ•œ ์ถœ๋ ฅ ์—…๋กœ๋“œ ๋™์ž‘์„ ์˜ค๋ฒ„๋ผ์ด๋“œํ•ฉ๋‹ˆ๋‹ค (๋น„ํ™œ์„ฑํ™”). ์šฐ์„ ์ˆœ์œ„: CLI > ํ™˜๊ฒฝ๋ณ€์ˆ˜ > ์ €์žฅ๋œ ์ธ์ฆ์„œ
โ€”์ถœ๋ ฅ ๋ณด์กดstring์ด ๋นŒ๋“œ๋งŒ์— ๋Œ€ํ•œ ์ถœ๋ ฅ ๋งํฌ TTL์„ ์˜ค๋ฒ„๋ผ์ด๋“œํ•ฉ๋‹ˆ๋‹ค (1์‹œ๊ฐ„์—์„œ 7์ผ). ์˜ˆ์‹œ: 1์‹œ๊ฐ„, 6์‹œ๊ฐ„, 2์ผ. ์šฐ์„ ์ˆœ์œ„: CLI > ํ™˜๊ฒฝ๋ณ€์ˆ˜ > ์ €์žฅ๋œ ์ธ์ฆ์„œ
โ€”์ถœ๋ ฅ ๊ธฐ๋กstring์„ฑ๊ณตํ•œ ๋นŒ๋“œ ํ›„, JSON ๊ธฐ๋ก (jobId, ์ƒํƒœ, ์ถœ๋ ฅ URL, QR ์ฝ”๋“œ ASCII, QR ์ฝ”๋“œ PNG ๊ฒฝ๋กœ, ์™„๋ฃŒ ์‹œ๊ฐ„)์„ ๊ฒฝ๋กœ์— ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. PNG QR code๋„ ๊ทธ ๊ฒฝ๋กœ์— ๋ถ™์–ด์žˆ๋Š” suffix์™€ ํ•จ๊ป˜ ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค. .qr.png suffix๋ฅผ ์ฝ์–ด์˜ค๋ ค๋ฉด build last-output.
โ€”์บ์‹œ ๋ฌดํšจํ™”boolean๋นŒ๋“œ ์บ์‹œ ๋ณต์› ์ƒ๋žต and โ€”์บ์‹œ ํ‚ค
โ€”cache-keystringโ€” prod, staging. ์•ฑ๋‹น ํ•˜๋‚˜์˜ ๊ณต์œ  ๊ธฐ๋ณธ ์บ์‹œ๋ฅผ ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค.
โ€”no-skip-build-number-bumpboolean์ด ๋นŒ๋“œ๋งŒ์„ ์œ„ํ•ด ์ž๋™ ๋นŒ๋“œ ๋ฒˆํ˜ธ ์ฆ๊ฐ€๋ฅผ ์žฌ ํ™œ์„ฑํ™” ํ•˜๊ธฐ ์œ„ํ•ด ์ €์žฅ๋œ ์ž๊ฒฉ ์ฆ๋ช…์„ ์žฌ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
โ€”skip-marketing-version-bumpboolean์•ฑ์ด ์ด๋ฏธ ์ถœ์‹œ๋œ ๊ฒฝ์šฐ ์ž๋™ ๋งˆ์ผ€ํŒ… ๋ฒ„์ „ (CFBundleShortVersionString / versionName) ์ฆ๊ฐ€๋ฅผ ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค.
โ€”sync-ios-versionbooleaniOS: package.json์—์„œ Xcode MARKETING_VERSION์„ sync ํ•˜๊ธฐ ์ „์— ํ”„๋กœ์ ํŠธ๋ฅผ ์—…๋กœ๋“œํ•˜๊ธฐ ์ „์—.
โ€”ai-analyticsboolean๋นŒ๋“œ ์‹คํŒจ ์‹œ, Capgo AI๋กœ ๋กœ๊ทธ๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ํ„ฐ๋ฏธ๋„์—์„œ ์ด ์˜ต์…˜์€ ์‚ฌ์ „ ํ™•์ธ์„ ์ƒ๋žตํ•˜๊ณ  CI์—์„œ ์ด ์˜ต์…˜์€ ์ž๋™ ์—…๋กœ๋“œ ๋ฐ ์—๋Ÿฌ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
โ€”no-prescanboolean์ž๋™ํ™”๋œ ์ „ ๋นŒ๋“œ ์Šค์บ”์„ ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค.
โ€”prescan-ignore-fatalboolean๋นŒ๋“œ ์ „ ์Šค์บ”์„ ์‹คํ–‰ํ•˜์ง€๋งŒ ๋นŒ๋“œ๋ฅผ ๋ง‰์ง€ ์•Š์Šต๋‹ˆ๋‹ค (๋ณด๊ณ ์„œ๋งŒ)
โ€”prescan-skipstringํŠน์ • prescan ์ฒดํฌ๋ฅผ id (๋ฐ˜๋ณต ๋˜๋Š” ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„)์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ์‹ญ์‹œ์˜ค. ๋‹ค๋ฅธ ์ฒดํฌ๋Š” ์—ฌ์ „ํžˆ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
โ€”prescan-warnstringํŠน์ • prescan ์ฒดํฌ๋ฅผ id (๋ฐ˜๋ณต ๋˜๋Š” ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„)์œผ๋กœ ๊ฒฝ๊ณ ๋กœ ๋‚ด๋ฆฌ์‹ญ์‹œ์˜ค. ์ฒดํฌ๋Š” ์—ฌ์ „ํžˆ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
โ€”fail-on-warningsbooleanprescan ๊ฒฝ๊ณ ๋ฅผ ์น˜๋ช…์ ์ธ ๊ฒƒ์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
โ€”send-logs-to-supportbooleanCI/CD ๋นŒ๋“œ ์‹คํŒจ ์‹œ ์ž๋™์œผ๋กœ ๋นŒ๋“œ ๋กœ๊ทธ๋ฅผ Capgo ์ง€์›ํŒ€์— ์—…๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค (์ด๋ฉ”์ผ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค). Capgo ์ง€์›ํŒ€์€ ์ด๋ฉ”์ผ๋กœ ์—ฐ๋ฝ์„ ์ทจํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. โ€”ai-analytics์™€ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.
โ€”send-logsbooleanโ€”send-logs-to-support์˜ deprecated alias์ž…๋‹ˆ๋‹ค.
-astringAPI ๊ณ„์ •์— ์—ฐ๊ฒฐํ•˜๋Š” ํ‚ค
โ€”supa-hoststringCustom Supabase host URL (for self-hosting or Capgo development)
โ€”supa-anonstring์‚ฌ์šฉ์ž ํ˜ธ์ŠคํŒ…์„ ์œ„ํ•œ ์ปค์Šคํ…€ Supabase anon ํ‚ค
โ€”verboseboolean์„ธ๋ถ€ ๋กœ๊น…๊ณผ ํ•จ๊ป˜ ์ž์„ธํ•œ ์ถœ๋ ฅ์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค

๋นŒ๋“œ ์บ์‹œ: Capgo๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์•ฑ๋‹น ์ปดํŒŒ์ผ๋œ ๋„ค์ดํ‹ฐ๋ธŒ ์•„ํ‹ฐํŒฉํŠธ (CocoaPods, Gradle ๋ฐ ๊ด€๋ จ ์ถœ๋ ฅ)๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค. Capgo๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ RC ๋ฐ ํ”„๋กœ๋•์…˜ ์บ์‹œ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ  Capgo๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•œ ๋ฒˆ๋งŒ ๋นŒ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. --cache-key or --no-cache CLI ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•œ ๋ฒˆ๋งŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊นจ๋—ํ•œ ๋นŒ๋“œ๋ฅผ ์œ„ํ•ด. API ํ†ตํ•ฉ์€ ํ†ต๊ณผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. cache_key or cache_enabled: false ๋นŒ๋“œ ์š”์ฒญ ํŽ˜์ด๋กœ๋“œ์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํžˆ ๋ณด๊ธฐ ๋นŒ๋“œ ์บ์‹œ ๊ทธ๋ฆฌ๊ณ  ์˜ค๋ฅ˜ ํ•ด๊ฒฐ: ์ž˜๋ชป๋œ ์บ์‹œ ๋ณต์›.

๐Ÿ”น Sync-ios-version

Sync-ios-version
ํ„ฐ๋ฏธ๋„ ์ฐฝ
npx @capgo/cli@latest build sync-ios-version

iOS Xcode MARKETING_VERSION์„ package.json์—์„œ ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ:

ํ„ฐ๋ฏธ๋„ ์ฐฝ
npx @capgo/cli@latest build sync-ios-version --path .

์˜ต์…˜:

ํŒŒ๋ผ๋ฏธํ„ฐํƒ€์ž…์„ค๋ช…
โ€”๊ฒฝ๋กœstringํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ์˜ ๊ฒฝ๋กœ (๊ธฐ๋ณธ๊ฐ’: ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ)
โ€”์ฒดํฌboolean์ฒดํฌ๋งŒ; MARKETING_VERSION์ด ๋™๊ธฐํ™”๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ 0์ด ์•„๋‹Œ ๊ฐ’์„ ๋ฐ˜ํ™˜

๐Ÿ”น ํ”„๋ฆฌ ์Šค์บ”

ํ„ฐ๋ฏธ๋„ ์ฐฝ
ํด๋ฆฝ๋ณด๋“œ ๋ณต์‚ฌ
npx @capgo/cli@latest build prescan

ํ”„๋กœ์ ํŠธ์™€ ์ €์žฅ๋œ ์ž๊ฒฉ ์ฆ๋ช…์—์„œ ํด๋ผ์šฐ๋“œ ๋นŒ๋“œ๊ฐ€ ์‹คํŒจํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ์Šค์บ”ํ•˜๊ณ  ์—…๋กœ๋“œํ•˜๊ธฐ ์ „์— โ€” ์—…๋กœ๋“œํ•˜๊ธฐ ์ „์—. build request์ด ๋ช…๋ น์–ด๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฉฐ (์˜ˆ: CI์—์„œ). ์ด ๋ช…๋ น์–ด๋Š” ์ž๋™์œผ๋กœ ๋‚ด๋ถ€์—์„œ ์‹คํ–‰๋˜๋ฉฐ CI์—์„œ standalone๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. See --skip / --warn Prescan checks

Options:

ParamOptions:Param
Typestring์„ค๋ช…
โ€”pathstringํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ์˜ ๊ฒฝ๋กœ (๊ธฐ๋ณธ๊ฐ’: ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ)
-astringAPI ๊ณ„์ •์— ์—ฐ๊ฒฐํ•˜๋Š” ํ‚ค
--android-ํ”Œ๋ ˆ์ด์–ดstringAndroid: ๋นŒ๋“œํ•  ์ œํ’ˆ ํ”Œ๋ž˜๋ฒ„
--ios-๋ฐฐํฌstringiOS: ๋ฐฐํฌ ๋ชจ๋“œ๋ฅผ ๊ฒ€์ฆํ•  ๊ฒƒ
--jsonboolean๊ธฐ๊ณ„๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” JSON ๋ณด๊ณ ์„œ๋ฅผ ์ถœ๋ ฅ
--๊ฒฝ๊ณ -์—๋Ÿฌboolean๊ฒฝ๊ณ ๊ฐ€ ๋ฐœ๊ฒฌ๋˜๋ฉด 0์ด ์•„๋‹Œ ๊ฐ’์„ ๋ฐ˜ํ™˜ (CI)
--fatal-๋ฌด์‹œboolean์ง„๋‹จ ๋ชจ๋“œ: ๋ชจ๋“  ๊ฒƒ์„ ๋ณด๊ณ  ํ•ญ์ƒ 0์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
โ€”์Šคํ‚ตstringํŠน์ • ์ฒดํฌ๋ฅผ id๋กœ ์Šคํ‚ตํ•ฉ๋‹ˆ๋‹ค (๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•˜๊ฑฐ๋‚˜ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„)
โ€”๊ฒฝ๊ณ stringํŠน์ • ์ฒดํฌ๋ฅผ id๋กœ ๊ฒฝ๊ณ ๋กœ ๋‚ด๋ฆฌ๊ธฐ (๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•˜๊ฑฐ๋‚˜ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„)
โ€”verboseboolean์ƒ์„ธ ๋กœ๊น…๊ณผ ํ•จ๊ป˜ ์ž์„ธํ•œ ์ถœ๋ ฅ์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.
โ€”supa-hoststringCustom Supabase host URL (for self-hosting or Capgo development)
โ€”supa-anonstring์ž์ฒด ํ˜ธ์ŠคํŒ…์„์œ„ํ•œ ์ปค์Šคํ…€ Supabase anon ํ‚ค

๐Ÿ”น ์ตœ๊ทผ ์ถœ๋ ฅ

๐Ÿ”น ๋งˆ์ง€๋ง‰ ์ถœ๋ ฅ
ํ„ฐ๋ฏธ๋„ ์ฐฝ
npx @capgo/cli@latest build last-output

์ด์ „์˜ ๊ธฐ๋ก์— ์˜ํ•ด ์ž‘์„ฑ๋œ ๋นŒ๋“œ ์ถœ๋ ฅ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. build request --output-record. Prints the full JSON by default, a single field with โ€”field, or the ASCII QR code with โ€”qr. Useful in CI to grab the download URL or QR for posting back to a PR or issue. Examples: npx @capgo/cli build last-output โ€”path /tmp/build.json npx @capgo/cli build last-output โ€”path /tmp/build.json โ€”field outputUrl npx @capgo/cli build last-output โ€”path /tmp/build.json โ€”qr

์˜ต์…˜:

ํŒŒ๋ผ๋ฏธํ„ฐํƒ€์ž…์„ค๋ช…
โ€”pathstringJSON ๋ ˆ์ฝ”๋“œ์— ์˜ํ•ด โ€”output-record ์˜ต์…˜์œผ๋กœ ๊ธฐ๋ก๋œ ๊ฒฝ๋กœ (ํ•„์ˆ˜)
โ€”fieldstring๋‹จ์ผ field ์ถœ๋ ฅ (jobId, appId, platform, buildMode, status, outputUrl, qrCodeAscii, qrCodePngPath, finishedAt, schemaVersion ์ค‘ ํ•˜๋‚˜)
โ€”qrbooleanPrint the rendered ASCII QR code (shortcut for โ€”field qrCodeAscii)

๐Ÿ”’ ๋ณด์•ˆ:

  • ์ „์—ญ์ ์œผ๋กœ ~/.capgo-credentials/credentials.json ๋˜๋Š” ๋กœ์ปฌ๋กœ .capgo-credentials.json์— ์ €์žฅ๋œ ์ธ์ฆ ์ •๋ณด
  • ๋นŒ๋“œ ์‹œ Capgo๋กœ ์ „์†ก๋˜์ง€๋งŒ ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅ๋˜์ง€ ์•Š์Œ
  • ๋นŒ๋“œ ํ›„ ์ฆ‰์‹œ Capgo์—์„œ ์‚ญ์ œ
  • ๋นŒ๋“œ ์ถœ๋ ฅ์€ ์˜ต์…˜์œผ๋กœ ์‹œ๊ฐ„ ์ œํ•œ๋œ ๋‹ค์šด๋กœ๋“œ ๋งํฌ๋กœ ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ๐Ÿ“š ๋ฌธ์„œ: https://capgo.app/docs/cli/cloud-build/ios/ https://__CAPGO_KEEP_0__.app/docs/__CAPGO_KEEP_1__/cloud-build/ios/ https://capgo.app/docs/cli/cloud-build/android/

๐Ÿ”น __์• ํ”Œ ํ‚ค__

์• ํ”Œ ํ‚ค

Alias: asc-key

ํ„ฐ๋ฏธ๋„ ์ฐฝ
npx @capgo/cli@latest build credentials apple-key

Create an App Store Connect team API key with a guided macOS helper (macOS only). Opens a native window that walks you through Appleโ€™s App Store Connect UI in an embedded browser, auto-captures the Issuer ID + Key ID, intercepts the one-time .p8, validates it against Apple, and saves it to ~/.appstoreconnect/private_keys. Progress statistics are forwarded to Capgo analytics (disable with CAPGO_DISABLE_TELEMETRY). npx @capgo/cli build credentials apple-key โ€”appId com.example.app

Example:

ํ„ฐ๋ฏธ๋„ ์ฐฝ
Example:

Options:

Paramํƒ€์ž…์„ค๋ช…
-astringAPI ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ„์ •์— ์—ฐ๊ฒฐ
โ€”appIdstring์ด ์•ฑ iOS ๋นŒ๋“œ ์ธ์ฆ์„œ์— ์บก์ฒ˜ ํ‚ค๋ฅผ ์ €์žฅ
โ€”localbooleanํ”„๋กœ์ ํŠธ๋ณ„ capgo-credentials.json ํŒŒ์ผ์— ์ €์žฅ
โ€”jsonboolean์บก์ฒ˜ ํ‚ค ID / ๋ฐœ๊ธ‰์ž ID / .p8 ๊ฒฝ๋กœ๋ฅผ JSON ํ˜•์‹์œผ๋กœ ์ถœ๋ ฅ

๐Ÿ”น ์ €์žฅ

๐Ÿ”น ์ €์žฅ
ํ„ฐ๋ฏธ๋„ ์ฐฝ
npx @capgo/cli@latest build credentials save

iOS ๋˜๋Š” Android๋ฅผ ์œ„ํ•œ ๋นŒ๋“œ ์ธ์ฆ์„œ๋ฅผ ๋กœ์ปฌ ์ €์žฅ์†Œ์— ์ €์žฅํ•˜์„ธ์š”. ์ธ์ฆ์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์œ„์น˜์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

  • ~/.capgo-credentials/credentials.json (๊ธฐ๋ณธ, ๊ธ€๋กœ๋ฒŒ)
  • capgo-credentials.json (ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ, --local ํ”Œ๋ž˜๊ทธ ์‚ฌ์šฉ) โš ๏ธ ๋นŒ๋“œ ์š”์ฒญํ•˜๊ธฐ ์ „์— ์ธ์ฆ์„œ๋ฅผ ์ €์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ”’ ๋นŒ๋“œ๊ฐ€ ์™„๋ฃŒ๋œ ํ›„ Capgo ์„œ๋ฒ„์— ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฆ‰์‹œ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค. ๐Ÿ“š ์„ค์ • ๊ฐ€์ด๋“œ: iOS: https://capgo.app/docs/cli/cloud-build/ios/ Android: https://capgo.app/docs/cli/cloud-build/android/ npx @capgo/cli build credentials save --platform ios
    --certificate ./cert.p12 --p12-password โ€œpasswordโ€
    --ios-provisioning-profile ./profile.mobileprovision
    --apple-key ./AuthKey.p8 --apple-key-id โ€œKEY123โ€
    โ€”apple-issuer-id โ€œissuer-uuidโ€ โ€”apple-team-id โ€œteam-idโ€ Multi-target Example (app + widget extension): npn @capgo/cli build credentials save โ€”platform ios
    โ€”ios-์ธ์ฆ์„œ ๋ฐœ๊ธ‰ ํ”„๋กœํŒŒ์ผ ./App.mobileprovision
    โ€”ios-์ธ์ฆ์„œ ๋ฐœ๊ธ‰ ํ”„๋กœํŒŒ์ผ com.example.widget=./Widget.mobileprovision
    npn @capgo/cli build credentials save --platform android
    โ€”keystore ./release.keystore โ€”keystore-alias โ€œmy-keyโ€
    โ€”keystore-key-password โ€œkey-passโ€
    โ€”play-config ./service-account.json ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€ (ํ”„๋กœ์ ํŠธ ๋‹น) : npm @capgo/cli build credentials save --local --platform ios โ€ฆ

์˜ˆ์‹œ:

ํ„ฐ๋ฏธ๋„ ์ฐฝ
iOS Example:

์„ค์ •:

ํŒŒ๋ผ๋ฏธํ„ฐํ˜•์‹์„ค๋ช…
โ€”์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•„์ด๋””string์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•„์ด๋”” (์˜ˆ: com.example.app) (ํ•„์ˆ˜)
โ€”ํ”Œ๋žซํผstringํ”Œ๋žซํผ: ios ๋˜๋Š” android (ํ•„์ˆ˜)
โ€”์ธ์ฆ์„œstringiOS: ์ธ์ฆ์„œ ํŒŒ์ผ(.p12) ๊ฒฝ๋กœ
โ€”iOS ๋ฐฐํฌ ํ”„๋กœํŒŒ์ผstringiOS: ๋ฐฐํฌ ํ”„๋กœํŒŒ์ผ ๊ฒฝ๋กœ ๋˜๋Š” bundleId=path (๋ฐ˜๋ณต ๊ฐ€๋Šฅ)
โ€”์ธ์ฆ์„œ ๋น„๋ฐ€๋ฒˆํ˜ธstringiOS: ์ธ์ฆ์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ (์ธ์ฆ์„œ์— ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์—†์œผ๋ฉด ์„ ํƒ ์‚ฌํ•ญ)
โ€”apple-keystringiOS: App Store Connect API ํ‚ค ์œ„์น˜
โ€”apple-key-idstringiOS: App Store Connect API ํ‚ค ID
โ€”apple-issuer-idstringiOS: App Store Connect ๋ฐœ๊ธ‰์ž ID
โ€”apple-team-idstringiOS: App Store Connect ํŒ€ ID
โ€”ios-distributionstringiOS: ๋ฐฐํฌ ๋ชจ๋“œ
โ€”apple-idstringiOS: ์• ํ”Œ ID ์ด๋ฉ”์ผ (์•ฑ ์Šคํ† ์–ด ์—ฐ๊ฒฐ API ํ‚ค ๋Œ€์ฒด)
โ€”apple-app-specific-passwordstringiOS: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŠน์ • ๋น„๋ฐ€๋ฒˆํ˜ธ (xxxx-xxxx-xxxx-xxxx) ํ…Œ์ŠคํŠธ ํ”Œ๋ผ์ดํŠธ ์—…๋กœ๋“œ
โ€”apple-app-idstringiOS: ์•ฑ ์Šคํ† ์–ด ์—ฐ๊ฒฐ ์•ฑ ID (์• ํ”Œ ID์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŠน์ • ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ํ•จ๊ป˜ ํ•„์š”)
โ€”keystorestringAndroid: Keystore ํŒŒ์ผ ๊ฒฝ๋กœ (.keystore ๋˜๋Š” .jks)
โ€”keystore-aliasstringAndroid: Keystore ํ‚ค ๋ณ„์นญ
โ€”keystore-key-passwordstringAndroid: Keystore ํ‚ค ๋น„๋ฐ€๋ฒˆํ˜ธ
โ€”keystore-store-passwordstringAndroid: Keystore ์ €์žฅ์†Œ ๋น„๋ฐ€๋ฒˆํ˜ธ
โ€”play-configstring์•ˆ๋“œ๋กœ์ด๋“œ: Play ์Šคํ† ์–ด ์„œ๋น„์Šค ๊ณ„์ • JSON ๊ฒฝ๋กœ
โ€”android-flavorstring์•ˆ๋“œ๋กœ์ด๋“œ: ์ œํ’ˆ ํ”Œ๋ž˜๋ฒ„๋ฅผ ๋นŒ๋“œ (์˜ˆ: ํ”„๋กœ๋•์…˜). ํ”„๋กœ์ ํŠธ๊ฐ€ ์—ฌ๋Ÿฌ ํ”Œ๋ž˜๋ฒ„๋ฅผ ๊ฐ€์งˆ ๊ฒฝ์šฐ ํ•„์ˆ˜.
โ€”in-app-update-prioritystring์•ˆ๋“œ๋กœ์ด๋“œ: Google Play ๋‚ด ์•ฑ ์—…๋ฐ์ดํŠธ ์šฐ์„ ์ˆœ์œ„ (์ •์ˆ˜ 0โ€“5; ๋” ๋†’์„์ˆ˜๋ก ๋” ๊ธ‰๋ฐ•). ์ƒ๋žตํ•˜๋ฉด Play์˜ ๊ธฐ์กด ๊ฐ’์ด ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.
โ€”localbooleanํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— .capgo-credentials.json์œผ๋กœ ์ €์žฅํ•˜๊ธฐ ๋Œ€์‹  ๊ธ€๋กœ๋ฒŒ ~/.capgo-credentials/์— ์ €์žฅ
โ€”output-uploadbooleanCapgo ์ €์žฅ์†Œ์— ๋นŒ๋“œ ์ถœ๋ ฅ๋ฌผ (IPA/APK/AAB)์„ ์—…๋กœ๋“œํ•˜๊ณ  ๋‹ค์šด๋กœ๋“œ ๋งํฌ๋ฅผ ์ถœ๋ ฅ
โ€”no-output-uploadboolean๋นŒ๋“œ ์ถœ๋ ฅ๋ฌผ (IPA/APK/AAB)์„ Capgo ์ €์žฅ์†Œ์— ์—…๋กœ๋“œํ•˜์ง€ ์•Š์Œ
โ€”์ถœ๋ ฅ ๋ณด์กดstring์ถœ๋ ฅ ๋งํฌ TTL: 1์‹œ๊ฐ„์—์„œ 7์ผ (๊ธฐ๋ณธ๊ฐ’: 1์‹œ๊ฐ„). ์˜ˆ์‹œ: 1์‹œ๊ฐ„, 6์‹œ๊ฐ„, 2์ผ
โ€”๋นŒ๋“œ ๋ฒˆํ˜ธ ์ฆ๊ฐ€ ์ƒ๋žตboolean๋ฏธ๋ž˜ ๋นŒ๋“œ์—์„œ ์ž๋™ ๋นŒ๋“œ ๋ฒˆํ˜ธ/๋ฒ„์ „ code ์ฆ๊ฐ€๋ฅผ ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค.
โ€”no-skip-build-number-bumpboolean๋ฏธ๋ž˜ ๋นŒ๋“œ์—์„œ ์ž๋™ ๋นŒ๋“œ ๋ฒˆํ˜ธ ์ฆ๊ฐ€๋ฅผ ๋‹ค์‹œ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. (๊ธฐ๋ณธ ๋™์ž‘)
โ€”๋งˆ์ผ€ํŒ… ๋ฒ„์ „ ์ฆ๊ฐ€ ์ƒ๋žตboolean๋ฏธ๋ž˜ ๋นŒ๋“œ์—์„œ ์•ฑ์ด ์ด๋ฏธ ์ถœ์‹œ๋œ ๊ฒฝ์šฐ ์ž๋™ ๋งˆ์ผ€ํŒ… ๋ฒ„์ „ ์ฆ๊ฐ€๋ฅผ ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค.
โ€”no-skip-marketing-version-bumpboolean์ž๋™ ๋งˆ์ผ€ํŒ… ๋ฒ„์ „ ์ฆ๊ฐ€๋ฅผ ๋‹ค์‹œ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. (๊ธฐ๋ณธ ๋™์ž‘)

๐Ÿ“‹ ๋ชฉ๋ก

๋ชฉ๋ก
ํ„ฐ๋ฏธ๋„ ์ฐฝ
npx @capgo/cli@latest build credentials list

์ €์žฅ๋œ ๋นŒ๋“œ ์ž๊ฒฉ ์ฆ๋ช… ๋ชฉ๋ก (๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๊ฐ€๋ ค์ง). ํ˜„์žฌ ์ €์žฅ๋œ ์ž๊ฒฉ ์ฆ๋ช…(์ „์—ญ ๋ฐ ์ง€์—ญ ๋ชจ๋‘)์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์˜ˆ์‹œ: npx @capgo/cli build credentials list # ๋ชจ๋“  ์•ฑ ๋ชฉ๋ก npx @capgo/cli build credentials list โ€”appId com.example.app # ํŠน์ • ์•ฑ ๋ชฉ๋ก

์˜ต์…˜:

ํŒŒ๋ผ๋ฏธํ„ฐํƒ€์ž…์„ค๋ช…
โ€”appIdstring๋ฆฌ์ŠคํŠธํ•  ์•ฑ ID (์„ ํƒ ์‚ฌํ•ญ, ์ƒ๋žต ์‹œ ๋ชจ๋“  ์•ฑ์„ ๋ชฉ๋กํ™”)
โ€”localboolean์ง€์—ญ capgo-credentials.json ํŒŒ์ผ์—์„œ๋งŒ ์ž๊ฒฉ ์ฆ๋ช…์„ ๋ชฉ๋กํ™”

๐Ÿ”น ์ง€์šฐ๊ธฐ

๐Ÿ”น Clear
ํ„ฐ๋ฏธ๋„ ์ฐฝ
npx @capgo/cli@latest build credentials clear

์ €์žฅ๋œ ๋นŒ๋“œ ์ธ์ฆ ์ •๋ณด ์‚ญ์ œ. ์ €์žฅ๋œ ์ธ์ฆ ์ •๋ณด ์‚ญ์ œ. โ€”appId ๋ฐ โ€”platform๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์ธ์ฆ ์ •๋ณด๋ฅผ ๋Œ€์ƒ์œผ๋กœํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์‹œ: npx @capgo/cli build credentials clear # ๋ชจ๋“  ์•ฑ ์‚ญ์ œ (์ „์—ญ) npx @capgo/cli build credentials clear โ€”local # ๋กœ์ปฌ ์ธ์ฆ ์ •๋ณด ์‚ญ์ œ npx @capgo/cli build credentials clear โ€”appId com.example.app โ€”platform ios

์˜ต์…˜:

ํŒŒ๋ผ๋ฏธํ„ฐํƒ€์ž…์„ค๋ช…
โ€”appIdstring์‚ญ์ œํ•  ์•ฑ ID (์„ ํƒ ์‚ฌํ•ญ, ์ƒ๋žต ์‹œ ๋ชจ๋“  ์•ฑ ์‚ญ์ œ)
โ€”platformstring์‚ญ์ œํ•  ํ”Œ๋žซํผ: ios ๋˜๋Š” android (์„ ํƒ ์‚ฌํ•ญ, ์ƒ๋žต ์‹œ ๋ชจ๋“  ํ”Œ๋žซํผ ์‚ญ์ œ)
โ€”localboolean์ „์—ญ ์„ค์ • ๋Œ€์‹  ๋กœ์ปฌ capgo-credentials.json์—์„œ ์‚ญ์ œ

๐Ÿ”น ์—…๋ฐ์ดํŠธ

์—…๋ฐ์ดํŠธ ์„น์…˜
ํ„ฐ๋ฏธ๋„ ์ฐฝ
npx @capgo/cli@latest build credentials update

์—…๋ฐ์ดํŠธํ•  ํŠน์ • ์ธ์ฆ์„œ๋งŒ ์ œ๊ณตํ•˜์—ฌ ๋‹ค์‹œ ๋ชจ๋“  ์ธ์ฆ์„œ๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๋„๋ก ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ์ธ์ฆ์„œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•ด ์ œ๊ณตํ•˜๋Š” ํ•„๋“œ๋งŒ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ์ œ๊ณตํ•œ ์˜ต์…˜์—์„œ ํ”Œ๋žซํผ์ด ์ž๋™์œผ๋กœ ๊ฐ์ง€๋ฉ๋‹ˆ๋‹ค. ์˜ˆ์‹œ: npx @capgo/cli build credentials update โ€”ios-provisioning-profile ./new-profile.mobileprovision npx @capgo/cli build credentials update โ€”local โ€”keystore ./new-keystore.jks

์˜ต์…˜:

ํŒŒ๋ผ๋ฏธํ„ฐํƒ€์ž…์„ค๋ช…
์•ฑ IDstring์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ID (์ž๋™์œผ๋กœ capacitor.config์—์„œ ์ถ”์ถœ๋˜๋ฉฐ ์ƒ๋žต ์‹œ ์ž๋™์œผ๋กœ ์ถ”์ถœ๋จ)
โ€”ํ”Œ๋žซํผstringํ”Œ๋žซํผ: ios ๋˜๋Š” android (์˜ต์…˜์—์„œ ์ž๋™์œผ๋กœ ์ถ”์ถœ๋จ)
โ€”๋กœ์ปฌboolean์ „์—ญ ๋Œ€์‹  ๋กœ์ปฌ .capgo-credentials.json์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
โ€”์ธ์ฆ์„œstringP12 ์ธ์ฆ์„œ ํŒŒ์ผ ๊ฒฝ๋กœ
โ€”ios-๋ฐฐํฌ ํ”„๋กœํŒŒ์ผstring๋ฐฐํฌ ํ”„๋กœํŒŒ์ผ ๊ฒฝ๋กœ ๋˜๋Š” bundleId=path (๋ฐ˜๋ณต ๊ฐ€๋Šฅ, ๊ธฐ๋ณธ์ ์œผ๋กœ ์ถ”๊ฐ€๋จ)
โ€”overwrite-ios-๋ฐฐํฌ ํ”„๋กœํŒŒ์ผ ๋งตboolean์ „์ฒด ๋ฐฐํฌ ํ”„๋กœํŒŒ์ผ ๋งต์„ ๋Œ€์ฒดํ•˜๋Š” ๋Œ€์‹  ๋ณ‘ํ•ฉํ•ฉ๋‹ˆ๋‹ค (๊ธฐ๋ณธ: ๋ณ‘ํ•ฉ)
โ€”p12-์ธ์ฆ์„œ ๋น„๋ฐ€๋ฒˆํ˜ธstringP12 ์ธ์ฆ์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ
โ€”apple-keystringAPI ์•ฑ ์Šคํ† ์–ด ์—ฐ๊ฒฐ ๊ฒฝ๋กœ (.p8 ํŒŒ์ผ)
โ€”apple-key-idstringAPI ์•ฑ ์Šคํ† ์–ด ์—ฐ๊ฒฐ ํ‚ค ID
โ€”apple-issuer-idstring์•ฑ ์Šคํ† ์–ด ์—ฐ๊ฒฐ ๋ฐœ๊ธ‰์ž ID
โ€”apple-team-idstring์•ฑ ์Šคํ† ์–ด ์—ฐ๊ฒฐ ํŒ€ ID
โ€”apple-idstringiOS: ์•ฑ ์Šคํ† ์–ด ์—ฐ๊ฒฐ ํ‚ค ๋Œ€์‹  ์•ฑ ์Šคํ† ์–ด ์—ฐ๊ฒฐ API ํ‚ค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์•ฑ ์Šคํ† ์–ด ์—ฐ๊ฒฐ ID ์ด๋ฉ”์ผ
โ€”apple-app-specific-passwordstringiOS: ํ…Œ์ŠคํŠธ ํ”Œ๋ผ์ดํŠธ ์—…๋กœ๋“œ๋ฅผ ์œ„ํ•œ ์•ฑ ํŠน์ • ๋น„๋ฐ€๋ฒˆํ˜ธ (xxxx-xxxx-xxxx-xxxx)
โ€”apple-app-idstringiOS: __CAPGO_KEEP_0__ App Store Connect __CAPGO_KEEP_1__ (iOS: __CAPGO_KEEP_2__ ํ•„์š”ํ•˜๋ฉฐ โ€”apple-id ๋ฐ โ€”apple-app-specific-password์™€ ํ•จ๊ป˜)
โ€”ios-distributionstringiOS: ๋ฐฐํฌ ๋ชจ๋“œ
โ€”keystorestringKeystore file path (.keystore or .jks)
โ€”keystore-aliasstringKeystore key alias
โ€”keystore-key-passwordstringKeystore key password
โ€”keystore-store-passwordstringKeystore ์ €์žฅ์†Œ ์•”ํ˜ธ
โ€”play-configstringGoogle Play ์„œ๋น„์Šค ๊ณ„์ • JSON ํŒŒ์ผ ๊ฒฝ๋กœ
โ€”android-flavorstringAndroid: ์ œํ’ˆ ํ”Œ๋ž˜๋ฒ„๋ฅผ ๋นŒ๋“œ (์˜ˆ: ํ”„๋กœ๋•์…˜). ํ”„๋กœ์ ํŠธ์— ์—ฌ๋Ÿฌ ํ”Œ๋ž˜๋ฒ„๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ํ•„์ˆ˜.
โ€”in-app-update-prioritystringAndroid: Google Play ๋‚ด ์•ฑ ์—…๋ฐ์ดํŠธ ์šฐ์„ ์ˆœ์œ„ (0โ€“5; ๋” ๋†’์€ ์šฐ์„ ์ˆœ์œ„ = ๋” ๊ธ‰๋ฐ•).
โ€”output-uploadboolean๋นŒ๋“œ ์ถœ๋ ฅ (IPA/APK/AAB)์„ Capgo ์ €์žฅ์†Œ์— ์—…๋กœ๋“œํ•˜๊ณ  ๋‹ค์šด๋กœ๋“œ ๋งํฌ ์ถœ๋ ฅ
โ€”no-output-uploadboolean๋นŒ๋“œ ์ถœ๋ ฅ (IPA/APK/AAB)์„ Capgo ์ €์žฅ์†Œ์— ์—…๋กœ๋“œํ•˜์ง€ ์•Š์Œ
โ€”output-retentionstring์ถœ๋ ฅ ๋งํฌ TTL: 1์‹œ๊ฐ„์—์„œ 7์ผ๊นŒ์ง€. ์˜ˆ์‹œ: 1์‹œ๊ฐ„, 6์‹œ๊ฐ„, 2์ผ
---skip-build-number-bumpboolean๋ฏธ๋ž˜ ๋นŒ๋“œ์—์„œ ์ž๋™ ๋นŒ๋“œ ๋ฒˆํ˜ธ/๋ฒ„์ „ code ์ฆ๊ฐ€๋ฅผ ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค.
---no-skip-build-number-bumpboolean๋ฏธ๋ž˜ ๋นŒ๋“œ์—์„œ ์ž๋™ ๋นŒ๋“œ ๋ฒˆํ˜ธ ์ฆ๊ฐ€๋ฅผ ์žฌ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค (๊ธฐ๋ณธ ๋™์ž‘)
---skip-marketing-version-bumpboolean์•ฑ์ด ์ด๋ฏธ ์ถœ์‹œ๋œ ๊ฒฝ์šฐ ๋ฏธ๋ž˜ ๋นŒ๋“œ์—์„œ ์ž๋™ ๋งˆ์ผ€ํŒ… ๋ฒ„์ „ ์ฆ๊ฐ€๋ฅผ ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค.
---no-skip-marketing-version-bumpboolean์ž๋™ ๋งˆ์ผ€ํŒ… ๋ฒ„์ „ ์ฆ๊ฐ€๋ฅผ ์žฌ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค (๊ธฐ๋ณธ ๋™์ž‘)

๐Ÿ”น ๊ด€๋ฆฌ

๐Ÿ”น ๊ด€๋ฆฌ
ํ„ฐ๋ฏธ๋„ ์ฐฝ
npx @capgo/cli@latest build credentials manage

์ €์žฅ๋œ ๋นŒ๋“œ ์ธ์ฆ์„œ๋ฅผ ์ƒํ˜ธ ์ž‘์šฉ์ ์œผ๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ €์žฅ๋œ ์ธ์ฆ์„œ๋ฅผๆต่งˆํ•˜๊ณ  ๊ตฌ์„ฑ๋œ ํ•ญ๋ชฉ์„ ํ™•์ธํ•˜๊ฑฐ๋‚˜ CI/CD-์ค€๋น„๋œ .env ํŒŒ์ผ์„ ๋‚ด๋ณด๋‚ด๊ฑฐ๋‚˜ ํ”Œ๋žซํผ์˜ ์ธ์ฆ์„œ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์ผํ•œ TUI๋ฅผ ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. capgo init. ์˜ˆ์‹œ: npx @capgo/cli ๋นŒ๋“œ ์ธ์ฆ์„œ ๊ด€๋ฆฌ npx @capgo/cli ๋นŒ๋“œ ์ธ์ฆ์„œ ๊ด€๋ฆฌ โ€”appId com.example.app npx @capgo/cli ๋นŒ๋“œ ์ธ์ฆ์„œ ๊ด€๋ฆฌ โ€”appId com.example.app โ€”platform ios npx @capgo/cli ๋นŒ๋“œ ์ธ์ฆ์„œ ๊ด€๋ฆฌ โ€”local

์˜ต์…˜:

ParamType์„ค๋ช…
โ€”appIdstring๊ด€๋ฆฌํ•  ์•ฑ ID (์„ ํƒ ์‚ฌํ•ญ, ์ƒ๋žต ์‹œ ์„ ํƒํ•˜๋„๋ก ์œ ๋„)
โ€”platformstring๊ด€๋ฆฌํ•  ํ”Œ๋žซํผ: ios ๋˜๋Š” android (์„ ํƒ ์‚ฌํ•ญ, ์ƒ๋žต ์‹œ ์„ ํƒํ•˜๋„๋ก ์œ ๋„)
โ€”localbooleanOnly browse local .capgo-credentials.json
ํ„ฐ๋ฏธ๋„ ์ฐฝ
npx @capgo/cli@latest build credentials migrate

๊ธฐ์กด์˜ ๋ฉ€ํ‹ฐ-ํƒ€๊ฒŸ ํ˜•์‹์œผ๋กœ์˜ ์ œ๊ณต์ž ํ”„๋กœํŒŒ์ผ์„ ์ด๋™ํ•˜์„ธ์š”. BUILD_PROVISION_PROFILE_BASE64์„ CAPGO_IOS_PROVISIONING_MAP์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. Xcode ํ”„๋กœ์ ํŠธ์—์„œ ์ž๋™์œผ๋กœ ๋ฉ”์ธ ๋ฒˆ๋“ค ID๋ฅผ ๋ฐœ๊ฒฌํ•ฉ๋‹ˆ๋‹ค. npx @capgo/cli build credentials migrate โ€”platform ios

์˜ˆ์‹œ:

ํ„ฐ๋ฏธ๋„ ์ฐฝ
Example:

์˜ต์…˜:

ํŒŒ๋ผ๋ฏธํ„ฐํƒ€์ž…์„ค๋ช…
โ€”appIdstring์•ฑ ID (์ž๋™์œผ๋กœ capacitor.config์—์„œ ์ถ”์ถœ๋˜๋ฉฐ ์ƒ๋žต ์‹œ ์ž๋™์œผ๋กœ ์ถ”์ถœ)
โ€”platformstringํ”Œ๋žซํผ (ํ˜„์žฌ ios๋งŒ ์ง€์›)
โ€”localboolean๋กœ์ปฌ .capgo-credentials.json ๋Œ€์‹  ์ „ํ™˜