Skip to content

๐Ÿ”น ๋นŒ๋“œ

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

๋„ค์ดํ‹ฐ๋ธŒ ํด๋ผ์šฐ๋“œ ๋นŒ๋“œ ์š”์ฒญ์€ ํ˜„์žฌ ์ œํ•œ๋œ ๋ฒ ํƒ€ ์ƒํƒœ์ด๋ฉฐ ์ ‘๊ทผ์ด ์ œํ•œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋นŒ๋“œ ์ž๊ฒฉ ์ฆ๋ช…์€ 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

CI์—์„œ ์ถœ๋ ฅ URL์„ ์บก์ฒ˜ํ•˜์„ธ์š”

CI ์ถœ๋ ฅ URL ์บก์ฒ˜

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

ํ„ฐ๋ฏธ๋„ ์ฐฝ
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

์˜ต์…˜:

ParamType์„ค๋ช…
-astringAPI ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ„์ •์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
-cstringCapacitorUpdater.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 ์ฝ˜์†” ์ดˆ๋Œ€

Options:

ParamType์„ค๋ช…
-astringAPI ๊ณ„์ •์— ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ํ‚ค
-pstring์˜จ๋ณด๋”ฉํ•  ํ”Œ๋žซํผ (ios ๋˜๋Š” android). ์ƒ๋žต ์‹œ, ํ•˜๋‚˜์˜ ๋„ค์ดํ‹ฐ๋ธŒ ํด๋”๋งŒ ์กด์žฌํ•  ๋•Œ ์ž๋™์œผ๋กœ ๊ฐ์ง€; ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํ”„๋กฌํ”„ํŠธํ•ฉ๋‹ˆ๋‹ค.
โ€”__CAPGO_KEEP_0__-ํ˜ธ์ŠคํŠธstringCapgo ์ž์ฒด ํ˜ธ์ŠคํŒ… ๋˜๋Š” ๊ฐœ๋ฐœ์„์œ„ํ•œ ์‚ฌ์šฉ์ž ์ •์˜ Supabase ํ˜ธ์ŠคํŠธ URL
โ€”__CAPGO_KEEP_0__ ๋ถ„์„boolean์ด ์‹คํ–‰์— ๋Œ€ํ•ด ๋นŒ๋“œ ์˜จ๋ณด๋”ฉ ๋ถ„์„ ๋ฐ ํ„ฐ๋ฏธ๋„ ์žฌ์ƒ์„ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”น ์š”์ฒญ

๐Ÿ”น ์š”์ฒญ
ํ„ฐ๋ฏธ๋„ ์ฐฝ
npx @capgo/cli@latest build request

Capgo Cloud์—์„œ ์›์‹œ ๋นŒ๋“œ๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์€ ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์••์ถ•ํ•˜๊ณ  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 .

์„ค์ •:

ํŒŒ๋ผ๋ฏธํ„ฐํƒ€์ž…์„ค๋ช…
--pathstringํ”„๋กœ์ ํŠธ ๋นŒ๋“œ์— ์‚ฌ์šฉํ•  ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ (๊ธฐ๋ณธ๊ฐ’: ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ)
--node-modulesstring๋ชจ๋…ธ๋ ˆํฌ์˜ node_modules ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ (์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„)
--platformstring๋Œ€์ƒ ํ”Œ๋žซํผ: ios ๋˜๋Š” android (ํ•„์ˆ˜)
โ€”build-modestring๋นŒ๋“œ ๋ชจ๋“œ: ๋””๋ฒ„๊ทธ ๋˜๋Š” ๋ฆด๋ฆฌ์ฆˆ (๊ธฐ๋ณธ๊ฐ’: ๋ฆด๋ฆฌ์ฆˆ)
โ€”build-certificate-base64stringiOS: Base64๋กœ ์ธ์ฝ”๋”ฉ๋œ .p12 ์ธ์ฆ์„œ
โ€”p12-passwordstringiOS: ์ธ์ฆ์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ (์ธ์ฆ์„œ์— ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์—†์œผ๋ฉด ์„ ํƒ ์‚ฌํ•ญ)
โ€”apple-idstringiOS: ์•ฑ ์Šคํ† ์–ด ์—ฐ๊ฒฐ API ํ‚ค ๋Œ€์ฒด๋ฅผ ์œ„ํ•œ ์• ํ”Œ ID ์ด๋ฉ”์ผ
โ€”apple-app-specific-passwordstringiOS: ํ…Œ์ŠคํŠธ ํ”Œ๋ผ์ดํŠธ ์—…๋กœ๋“œ๋ฅผ ์œ„ํ•œ ์•ฑ ์ŠคํŒŒ์‹œํ”ฝ ๋น„๋ฐ€๋ฒˆํ˜ธ (xxxx-xxxx-xxxx-xxxx)
โ€”apple-app-idstringiOS: ์•ฑ ์Šคํ† ์–ด ์—ฐ๊ฒฐ ์•ฑ ์•„์ด๋”” (โ€”apple-id์™€ โ€”apple-app-specific-password์™€ ํ•จ๊ป˜ ํ•„์š”)
โ€”apple-key-idstringiOS App Store Connect API ID
โ€”apple-issuer-idstringiOS App Store Connect ๋ฐœ๊ธ‰์ž ID
โ€”apple-key-contentstringiOS App Store Connect API ํ‚ค (.p8) Base64 ์ธ์ฝ”๋”ฉ
โ€”app-store-connect-team-idstringiOS App Store Connect ํŒ€ ID
โ€”ios-schemestringiOS Xcode ๋นŒ๋“œ ์Šคํ‚ค๋งˆ (๊ธฐ๋ณธ: App)
โ€”ios-targetstringiOS Xcode ๋นŒ๋“œ ์„ค์ •์„ ์ฝ๊ธฐ ์œ„ํ•œ ๋Œ€์ƒ (๊ธฐ๋ณธ: ์Šคํ‚ค๋งˆ์™€ ๋™์ผ)
โ€”iOS ๋ฐฐํฌ ๋ชจ๋“œstringiOS ๋ฐฐํฌ ๋ชจ๋“œ
โ€”iOS ์ž๋™ ๋ฐฐํฌ ํ”„๋กœํŒŒ์ผ ๊ฒฝ๋กœstringiOS ์ž๋™ ๋ฐฐํฌ ํ”„๋กœํŒŒ์ผ ๊ฒฝ๋กœ ๋˜๋Š” bundleId=path ๋งคํ•‘ (๋ฐ˜๋ณต ๊ฐ€๋Šฅ)
โ€”Android ํ‚ค์Šคํ† ์–ด ํŒŒ์ผstringAndroid: Base64-encoded ํ‚ค์Šคํ† ์–ด ํŒŒ์ผ
โ€”Android ํ‚ค์Šคํ† ์–ด ํ‚ค ๋ณ„์นญstringAndroid: ํ‚ค์Šคํ† ์–ด ํ‚ค ๋ณ„์นญ
โ€”Android ํ‚ค์Šคํ† ์–ด ํ‚ค ๋น„๋ฐ€๋ฒˆํ˜ธstringAndroid: ํ‚ค์Šคํ† ์–ด ํ‚ค ๋น„๋ฐ€๋ฒˆํ˜ธ
โ€”Android ํ‚ค์Šคํ† ์–ด ์ €์žฅ์†Œ ๋น„๋ฐ€๋ฒˆํ˜ธstringAndroid: ํ‚ค์Šคํ† ์–ด ์ €์žฅ์†Œ ๋น„๋ฐ€๋ฒˆํ˜ธ
โ€”play-config-jsonstring์•ˆ๋“œ๋กœ์ด๋“œ: Google Play ์„œ๋น„์Šค ๊ณ„์ • JSON
โ€”android-flavorstring์•ˆ๋“œ๋กœ์ด๋“œ: ์ œํ’ˆ ํ”Œ๋ž˜๋ฒ„๋ฅผ ๋นŒ๋“œํ•  ๋•Œ (์˜ˆ: ํ”„๋กœ๋•์…˜). ํ”„๋กœ์ ํŠธ๊ฐ€ ์—ฌ๋Ÿฌ ํ”Œ๋ž˜๋ฒ„๋ฅผ ๊ฐ€์งˆ ๊ฒฝ์šฐ ํ•„์ˆ˜.
โ€”in-app-update-prioritystring์•ˆ๋“œ๋กœ์ด๋“œ: Google Play ๋‚ด ์•ฑ ์—…๋ฐ์ดํŠธ ์šฐ์„ ์ˆœ์œ„ (0-5; ๋” ๋†’์€ ์ˆ˜์น˜ = ๋” ๊ธ‰๋ฐ•). https://developer.android.com/guide/playcore/in-app-updates. ์šฐ์„ ์ˆœ์œ„: CLI > ํ™˜๊ฒฝ๋ณ€์ˆ˜ > ์ €์žฅ๋œ ์ธ์ฆ์„œ
โ€”no-playstore-uploadboolean์ด ๋นŒ๋“œ์— ๋Œ€ํ•ด ์Šคํ† ์–ด ์—…๋กœ๋“œ๋ฅผ ์ƒ๋žต (์ €์žฅ๋œ ํ”Œ๋ ˆ์ด ๊ตฌ์„ฑ null๋กœ ์„ค์ •). โ€”output-upload ํ•„์š”.
โ€”submit-to-store-reviewboolean์—…๋กœ๋“œ ํ›„ ์Šคํ† ์–ด ๋ฆฌ๋ทฐ์— ์ œ์ถœํ•˜๋Š” ๋Œ€์‹ , ๋นŒ๋“œ ์ƒํƒœ๋ฅผ ๋ฏธ๋ฆฌ๋ณด๊ธฐ/๋น„ํ™œ์„ฑํ™”๋กœ ๋‚จ๊ฒจ๋‘”๋‹ค. ์•ˆ๋“œ๋กœ์ด๋“œ๋Š” ํ”Œ๋ ˆ์ด ๋ฆด๋ฆฌ์ฆˆ๋ฅผ ์™„๋ฃŒํ•˜๊ณ , iOS๋Š” ์ฒ˜๋ฆฌ๋œ ํ…Œ์ŠคํŠธ ํ”Œ๋ผ์ดํŠธ ๋นŒ๋“œ๋ฅผ ์•ฑ ์Šคํ† ์–ด ๋ฆฌ๋ทฐ์— ์ œ์ถœํ•œ๋‹ค.
โ€”์Šคํ† ์–ด ๋ฆด๋ฆฌ์ฆˆ ์ด๋ฆ„string์Šคํ† ์–ด ๋ฆด๋ฆฌ์ฆˆ ์ด๋ฆ„/๋ฒ„์ „ ๋ ˆ์ด๋ธ”. ์•ˆ๋“œ๋กœ์ด๋“œ๋Š” ์ด ๊ฐ’์„ Google Play์˜ version_name์œผ๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค. iOS๋Š” ํŽธ์ง‘ ๊ฐ€๋Šฅํ•œ ๋ฒ„์ „์„ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์žฌ์‚ฌ์šฉํ•  ๋•Œ App Store์˜ ๋ฒ„์ „์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
โ€”์Šคํ† ์–ด ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธstring๋””ํดํŠธ ์Šคํ† ์–ด ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ. ์•ˆ๋“œ๋กœ์ด๋“œ๋Š” ์ด ๊ฐ’์„ Play์˜ changelog๋กœ ์‚ฌ์šฉํ•˜๊ณ  iOS๋Š” App Store์˜ fallback Whatโ€™s New ํ…์ŠคํŠธ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
โ€”์Šคํ† ์–ด ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ-๋กœ์ผ€์ผstring๋กœ์ผ€์ผํ™”๋œ ์Šคํ† ์–ด ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ(๋ฐ˜๋ณต ๊ฐ€๋Šฅ), ์˜ˆ๋ฅผ ๋“ค์–ด โ€”์Šคํ† ์–ด ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ-๋กœ์ผ€์ผ en-US=โ€œ๋ฒ„๊ทธ ์ˆ˜์ •โ€ โ€”์Šคํ† ์–ด ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ-๋กœ์ผ€์ผ fr-FR=โ€œ์ˆ˜์ •โ€.
โ€”iOS ํ…Œ์ŠคํŠธ ํ”Œ๋ผ์ดํŠธ ๊ทธ๋ฃนstringiOS: ์˜ต์…˜์œผ๋กœ ์™ธ๋ถ€ ๋ฒ ํƒ€ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ์™ธ๋ถ€ ๊ทธ๋ฃน ์ด๋ฆ„ ๋˜๋Š” ID๋ฅผ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
โ€”iOS ์ž๋™ ๋ฆด๋ฆฌ์ฆˆbooleaniOS: ์• ํ”Œ ์Šน์ธ ํ›„ App Store ๋ฒ„์ „์„ ์ž๋™์œผ๋กœ ๋ฆด๋ฆฌ์ฆˆํ•ฉ๋‹ˆ๋‹ค. ๋””ํดํŠธ๋Š” ์ˆ˜๋™ ๋ฆด๋ฆฌ์ฆˆ์ž…๋‹ˆ๋‹ค.
โ€”no-iOS ์ž๋™ ๋ฆด๋ฆฌ์ฆˆbooleaniOS: ์• ํ”Œ ์Šน์ธ ํ›„ App Store ๋ฒ„์ „์„ ์ˆ˜๋™์œผ๋กœ ๋ฆด๋ฆฌ์ฆˆํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.
โ€”์ถœ๋ ฅ ์—…๋กœ๋“œboolean์ด ๋นŒ๋“œ๋งŒ์„ ์œ„ํ•œ ์ถœ๋ ฅ ์—…๋กœ๋“œ ๋™์ž‘์„ ์˜ค๋ฒ„๋ผ์ด๋“œํ•ฉ๋‹ˆ๋‹ค. ์šฐ์„ ์ˆœ์œ„: CLI > ํ™˜๊ฒฝ > ์ €์žฅ๋œ ์ธ์ฆ์„œ
โ€”์ถœ๋ ฅ ์—…๋กœ๋“œ ๋น„ํ™œ์„ฑํ™”boolean์ด ๋นŒ๋“œ๋งŒ์„ ์œ„ํ•œ ์ถœ๋ ฅ ์—…๋กœ๋“œ ๋™์ž‘์„ ์˜ค๋ฒ„๋ผ์ด๋“œํ•˜์—ฌ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ์šฐ์„ ์ˆœ์œ„: CLI > ํ™˜๊ฒฝ > ์ €์žฅ๋œ ์ธ์ฆ์„œ
โ€”์ถœ๋ ฅ ๋ณด์กดstring์ด ๋นŒ๋“œ๋งŒ์„ ์œ„ํ•œ ์ถœ๋ ฅ ๋งํฌ TTL์„ ์˜ค๋ฒ„๋ผ์ด๋“œํ•ฉ๋‹ˆ๋‹ค (1์‹œ๊ฐ„์—์„œ 7์ผ). ์˜ˆ์‹œ: 1์‹œ๊ฐ„, 6์‹œ๊ฐ„, 2์ผ. ์šฐ์„ ์ˆœ์œ„: CLI > ํ™˜๊ฒฝ > ์ €์žฅ๋œ ์ธ์ฆ์„œ
โ€”์ถœ๋ ฅ ๊ธฐ๋กstring์„ฑ๊ณต์ ์ธ ๋นŒ๋“œ ํ›„, JSON ๊ธฐ๋ก (jobId, ์ƒํƒœ, ์ถœ๋ ฅ URL, qrCodeAscii, qrCodePngPath, ์™„๋ฃŒ ์‹œ๊ฐ„) ์„ ๊ฒฝ๋กœ์— ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. PNG QR code๋„ ๊ทธ ๊ฒฝ๋กœ์— ๋ถ™์–ด์žˆ๋Š” PNG QR ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค. .qr.png โ€”suffix build last-output.
โ€”์ถœ๋ ฅ ๊ธฐ๋ก ๋น„ํ™œ์„ฑํ™”booleanโ€”์ž๋™ ๋นŒ๋“œ ๋ฒˆํ˜ธ ์ฆ๊ฐ€๋ฅผ ๋‹ค์‹œ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ €์žฅ๋œ ์ธ์ฆ์„œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œํ•ฉ๋‹ˆ๋‹ค.
โ€”๋นŒ๋“œ ๋ฒˆํ˜ธ ์ฆ๊ฐ€๋ฅผ ์ƒ๋žตboolean์ž๋™ ๋งˆ์ผ€ํŒ… ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ๋ฅผ ์•ฑ์ด ์ด๋ฏธ ์ถœ์‹œ๋œ ๊ฒฝ์šฐ CFBundleShortVersionString / versionName ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ๋ฅผ ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค.
โ€”iOS ๋ฒ„์ „ ๋™๊ธฐํ™”booleaniOS: Xcode MARKETING_VERSION์„ package.json์—์„œ ๋™๊ธฐํ™”ํ•˜๊ณ  ํ”„๋กœ์ ํŠธ๋ฅผ ์—…๋กœ๋“œํ•˜๊ธฐ ์ „์—.
โ€”AI ๋ถ„์„boolean๋นŒ๋“œ ์‹คํŒจ ์‹œ Capgo AI๋กœ ๋กœ๊ทธ๋ฅผ ์ „์†กํ•˜์—ฌ ์ง„๋‹จํ•ฉ๋‹ˆ๋‹ค. ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ํ„ฐ๋ฏธ๋„์—์„œ๋Š” ์‚ฌ์ „ ํ™•์ธ์„ ์ƒ๋žตํ•˜๊ณ  CI์—์„œ๋Š” ์ž๋™ ์—…๋กœ๋“œ ๋ฐ ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ stderr๋กœ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
โ€”๋นŒ๋“œ ์ „ ์Šค์บ” ์ƒ๋žตboolean์ž๋™ ๋นŒ๋“œ ์ „ ์Šค์บ”์„ ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค.
โ€”๋นŒ๋“œ ์ „ ์Šค์บ” ๋ฌด์‹œboolean๋นŒ๋“œ ์ „ ์Šค์บ”์„ ์‹คํ–‰ํ•˜์ง€๋งŒ ๋นŒ๋“œ๋ฅผ ์ฐจ๋‹จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค (๋ณด๊ณ ๋งŒ ํ•จ).
โ€”ํŠน์ • ์Šค์บ” ์ƒ๋žตstringํŠน์ • ์Šค์บ” ์ฒดํฌ๋ฅผ ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค (๋ฐ˜๋ณต ๋˜๋Š” ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„). ๋‹ค๋ฅธ ์ฒดํฌ๋Š” ์—ฌ์ „ํžˆ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
โ€”๋นŒ๋“œ ์ „ ์Šค์บ” ๊ฒฝ๊ณ stringํŠน์ • prescan ์ฒดํฌ๋ฅผ ๊ฒฝ๊ณ ๋กœ ๋‚ด๋ฆฌ๋ ค๋ฉด id (๋ฐ˜๋ณต ๋˜๋Š” ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„)๋กœ ์ž…๋ ฅํ•˜์„ธ์š”. ์ฒดํฌ๋Š” ์—ฌ์ „ํžˆ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
โ€”fail-on-warningsbooleanprescan ๊ฒฝ๊ณ ๋ฅผ ์น˜๋ช…์ ์ธ ๊ฒƒ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์„ธ์š”
โ€”send-logs-to-supportbooleanCI/CD ๋นŒ๋“œ ์‹คํŒจ ์‹œ ์ž๋™์œผ๋กœ ๋นŒ๋“œ ๋กœ๊ทธ๋ฅผ Capgo ์ง€์›์— ์—…๋กœ๋“œํ•˜์„ธ์š” (์ด๋ฉ”์ผ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค). Capgo ์ง€์›์€ ์ด๋ฉ”์ผ๋กœ ์—ฐ๋ฝ์„ ์ทจํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. โ€”ai-analytics์™€ ์ถ”๊ฐ€์ ์ธ ์˜ต์…˜์ž…๋‹ˆ๋‹ค.
โ€”send-logsbooleanโ€”send-logs-to-support์˜ deprecated alias
-astringAPI ๊ณ„์ •์— ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ํ‚ค
โ€”supa-hoststringSelf-hosting ๋˜๋Š” Capgo ๊ฐœ๋ฐœ์„ ์œ„ํ•œ Custom Supabase ํ˜ธ์ŠคํŠธ URL
โ€”supa-anonstring__CAPGO_KEEP_0__ (์ž์ฒด ํ˜ธ์ŠคํŒ…์šฉ)
__CAPGO_KEEP_1__boolean__CAPGO_KEEP_2__

๐Ÿ”น __CAPGO_KEEP_3__

๐Ÿ”น __CAPGO_KEEP_3__
__CAPGO_KEEP_4__
npx @capgo/cli@latest build sync-ios-version

__CAPGO_KEEP_6__

๋กœ์ปฌ iOS Xcode MARKETING_VERSION์„ package.json์—์„œ Syncํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ:
npx @capgo/cli@latest build sync-ios-version --path .

__CAPGO_KEEP_5__

ParamType์„ค๋ช…
โ€”pathstringํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ (๊ธฐ๋ณธ: ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ)
โ€”checkboolean์ฒดํฌ๋งŒ; MARKETING_VERSION์ด ๋™๊ธฐํ™”๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ 0์ด ์•„๋‹Œ ๊ฐ’์„ ๋ฐ˜ํ™˜
ํ„ฐ๋ฏธ๋„ ์ฐฝ
npx @capgo/cli@latest build prescan

ํ”„๋กœ์ ํŠธ์™€ ์ €์žฅ๋œ ์ž๊ฒฉ ์ฆ๋ช…์—์„œ ํด๋ผ์šฐ๋“œ ๋นŒ๋“œ๊ฐ€ ์‹คํŒจํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ์Šค์บ”ํ•˜๊ณ , ์—…๋กœ๋“œํ•˜๊ธฐ ์ „์— ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ž๊ฒฉ ์ฆ๋ช…(๋งŒ๋ฃŒ, ๋น„๋ฐ€๋ฒˆํ˜ธ, ํ”„๋กœํ•„ pair๋ง), ํ”„๋กœ์ ํŠธ ์ƒํƒœ(cap sync, node_modules ๋ ˆ์ด์•„์›ƒ), ํ”Œ๋žซํผ ๊ตฌ์„ฑ์ด ํ™•์ธ๋ฉ๋‹ˆ๋‹ค. ์ž๋™์œผ๋กœ ๋‚ด๋ถ€์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. build request; ์ด ๋ช…๋ น์–ด๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฉฐ (์˜ˆ: CI์—์„œ). See Prescan ๊ฒ€์‚ฌ ์ „์ฒด ๊ฒ€์‚ฌ ์นดํƒˆ๋กœ๊ทธ ๋ฐ ๊ฐœ๋ณ„ ๊ทœ์น™์— ๋Œ€ํ•œ ๋ฐฉ๋ฒ•์„ --skip / --warn ๊ฐœ๋ณ„ ๊ทœ์น™.

์˜ต์…˜:

ParamType์„ค๋ช…
โ€”platformstring๋ชฉํ‘œ ํ”Œ๋žซํผ: ios ๋˜๋Š” android (ํ•„์ˆ˜)
โ€”pathstringํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ (๊ธฐ๋ณธ: ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ)
-astringAPI ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ„์ •์— ์—ฐ๊ฒฐํ•˜์„ธ์š”.
โ€”android-flavorstringAndroid: ๋นŒ๋“œํ•  ์ œํ’ˆ์˜ ๋ง›์„ ์ง€์ •ํ•˜์„ธ์š”.
โ€”ios-diststringiOS: ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉํ•  ๋ฐฐํฌ ๋ชจ๋“œ๋ฅผ ์ง€์ •ํ•˜์„ธ์š”.
โ€”jsonboolean๊ธฐ๊ณ„๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” JSON ๋ณด๊ณ ์„œ๋ฅผ ์ถœ๋ ฅํ•˜์„ธ์š”.
โ€”fail-on-warningsboolean๊ฒฝ๊ณ ๊ฐ€ ๋ฐœ๊ฒฌ๋˜๋ฉด 0์ด ์•„๋‹Œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์„ธ์š” (CI)
โ€”ignore-fatalboolean๋””๋ฒ„๊ทธ ๋ชจ๋“œ: ํ•ญ์ƒ 0์„ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ ๋ชจ๋“  ๊ฒƒ์„ ๋ณด๊ณ ํ•˜์„ธ์š”.
โ€”์Šคํ‚ตstringํŠน์ • ์ฒดํฌ๋ฅผ id (๋ฐ˜๋ณต ๋˜๋Š” ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„)์œผ๋กœ ์Šคํ‚ตํ•ฉ๋‹ˆ๋‹ค.
โ€”๊ฒฝ๊ณ stringํŠน์ • ์ฒดํฌ๋ฅผ id (๋ฐ˜๋ณต ๋˜๋Š” ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„)์œผ๋กœ ๊ฒฝ๊ณ ๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ•ฉ๋‹ˆ๋‹ค.
โ€”verboseboolean์ƒ์„ธ ๋กœ๊น…๊ณผ ํ•จ๊ป˜ ์ž์„ธํ•œ ์ถœ๋ ฅ์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.
โ€”supa-hoststring์ž์ฒด ํ˜ธ์ŠคํŒ… ๋˜๋Š” ๊ฐœ๋ฐœ์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์ปค์Šคํ…€ Supabase ํ˜ธ์ŠคํŠธ URL (๊ฐœ๋ฐœ์„ ์œ„ํ•ด Capgo)
โ€”supa-anonstring์ž์ฒด ํ˜ธ์ŠคํŒ…์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์ปค์Šคํ…€ Supabase anon ํ‚ค

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

์ œ๋ชฉ โ€˜ ๐Ÿ”น Last-outputโ€™
ํ„ฐ๋ฏธ๋„ ์ฐฝ
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

์˜ต์…˜:

ํŒŒ๋ผ๋ฏธํ„ฐํƒ€์ž…์„ค๋ช…
โ€”pathstring์ด์ „์œผ๋กœ ๊ธฐ๋ก๋œ โ€”output-record์˜ JSON ๊ธฐ๋ก์— ๋Œ€ํ•œ ๊ฒฝ๋กœ (ํ•„์ˆ˜)
โ€”fieldstring๋‹จ์ผ field (jobId, appId, platform, buildMode, status, outputUrl, qrCodeAscii, qrCodePngPath, finishedAt, schemaVersion ์ค‘ ํ•˜๋‚˜)๋ฅผ ์ถœ๋ ฅ
โ€”qrbooleanASCII QR ์ฝ”๋“œ๋ฅผ ๋ Œ๋”๋งํ•˜์—ฌ code (โ€”field qrCodeAscii์˜ ๋‹จ์ถ•)์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”น ์ธ์ฆ ์ •๋ณด

์ธ์ฆ ์ •๋ณด

์ธ์ฆ ์ •๋ณด

๐Ÿ”น Apple-ํ‚ค

๐Ÿ”น Apple-ํ‚ค

๋ณ„์นญ: asc-key

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

App Store Connect ํŒ€ API ํ‚ค๋ฅผ macOS ๋„์šฐ๋ฏธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€์ด๋“œ (macOS ์ „์šฉ)๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. App Store Connect UI์˜ ๋‚ด์žฅ ๋ธŒ๋ผ์šฐ์ €์—์„œ Apple์˜ UI๋ฅผ walk-through ํ•ด์ฃผ๋ฉฐ Issuer ID + Key ID๋ฅผ ์ž๋™์œผ๋กœ ์บก์ฒ˜ํ•˜๊ณ , ํ•œ ๋ฒˆ๋งŒ ์‚ฌ์šฉ๋˜๋Š” .p8๋ฅผ ์ค‘๊ฐ„์—ๆˆช่Žทํ•˜๊ณ , Apple๊ณผ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•œ ํ›„ ~/.appstoreconnect/private_keys์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. progress statistics๋Š” Capgo ๋ถ„์„ (CAPGO_DISABLE_TELEMETRY๋กœ ๋น„ํ™œ์„ฑํ™”)๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. npx @capgo/cli build credentials apple-key โ€”appId com.example.app

์˜ˆ์‹œ:

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

์˜ต์…˜:

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

๐Ÿ”น ์ €์žฅ

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

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

  • ~/.capgo-credentials/credentials.json (๊ธฐ๋ณธ, ๊ธ€๋กœ๋ฒŒ)
  • .capgo-credentials.json in project root (with โ€”local flag) โš ๏ธ REQUIRED BEFORE BUILDING: You must save credentials before requesting a build. ๐Ÿ”’ These credentials are NEVER stored on Capgo servers permanently. They are deleted immediately after the build completes. ๐Ÿ“š Setup guides: iOS: https://capgo.app/docs/cli/cloud-build/ios/ ๐Ÿ”’ ์ด ์ธ์ฆ์„œ๋Š” __CAPGO_KEEP_1__ ์„œ๋ฒ„์— ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. https://capgo.app/docs/cli/cloud-build/android/ npx @capgo/cli build credentials save โ€”platform ios
    iOS:
    https://__CAPGO_KEEP_0__.app/docs/__CAPGO_KEEP_1__/cloud-build/ios/
    Android:
    https://capgo.app/docs/cli/cloud-build/android/
    โ€”iOS ๋ฐฐํฌ ํ”„๋กœํŒŒ์ผ ./App.mobileprovision
    โ€”iOS ๋ฐฐํฌ ํ”„๋กœํŒŒ์ผ com.example.widget=./Widget.mobileprovision
    npm @capgo/cli build credentials save โ€”platform android
    โ€”keystore ./release.keystore โ€”keystore-alias โ€œmy-keyโ€
    โ€”keystore-key-password โ€œkey-passโ€
    โ€”play-config ./service-account.json Local storage (per-project): npm @capgo/cli build credentials save โ€”local โ€”platform ios โ€ฆ

์˜ˆ์‹œ:

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

์„ค์ •:

๋งค๊ฐœ ๋ณ€์ˆ˜ํƒ€์ž…์„ค๋ช…
__CAPGO_KEEP_0__string์•ฑ ID (์˜ˆ: com.example.app) (ํ•„์ˆ˜)
__CAPGO_KEEP_0__stringํ”Œ๋žซํผ: ios ๋˜๋Š” android (ํ•„์ˆ˜)
__CAPGO_KEEP_0__stringiOS: .p12 ์ธ์ฆ์„œ ํŒŒ์ผ ๊ฒฝ๋กœ
__CAPGO_KEEP_0__stringiOS: ๋ฐฐํฌ ํ”„๋กœํŒŒ์ผ ๊ฒฝ๋กœ ๋˜๋Š” bundleId=path (๋ฐ˜๋ณต ๊ฐ€๋Šฅ)
__CAPGO_KEEP_0__stringiOS: ์ธ์ฆ์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ (์ธ์ฆ์„œ์— ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์—†์œผ๋ฉด ์„ ํƒ ์‚ฌํ•ญ)
__CAPGO_KEEP_0__stringiOS: API App Store Connect ๊ฒฝ๋กœ
โ€”apple-key-idstringiOS: App Store Connect API Key ID
โ€”apple-issuer-idstringiOS: App Store Connect Issuer ID
โ€”apple-team-idstringiOS: App Store Connect ํŒ€ ID
โ€”ios-distributionstringiOS: ๋ฐฐํฌ ๋ชจ๋“œ
โ€”apple-idstringiOS: ์• ํ”Œ ID ์ด๋ฉ”์ผ (App Store Connect API ํ‚ค ๋Œ€์ฒด)
โ€”apple-app-specific-passwordstringiOS: App-specific password (xxxx-xxxx-xxxx-xxxx) for TestFlight uploads
โ€”apple-app-idstringiOS: Numeric App Store Connect app id (required together with โ€”apple-id and โ€”apple-app-specific-password)
โ€”keystorestringAndroid: Keystore ํŒŒ์ผ ๊ฒฝ๋กœ (.keystore ๋˜๋Š” .jks)
--keystore-aliasstringAndroid: Keystore ํ‚ค ๋ณ„์นญ
--keystore-key-passwordstringAndroid: Keystore ํ‚ค ๋น„๋ฐ€๋ฒˆํ˜ธ
--keystore-store-passwordstringAndroid: Keystore ์ €์žฅ์†Œ ๋น„๋ฐ€๋ฒˆํ˜ธ
--play-configstring์•ˆ๋“œ๋กœ์ด๋“œ: Play Store ์„œ๋น„์Šค ๊ณ„์ • JSON ๊ฒฝ๋กœ
__CAPGO_KEEP_0__string์•ˆ๋“œ๋กœ์ด๋“œ: ๋นŒ๋“œํ•  ์ œํ’ˆ ํ”Œ๋ž˜๋ฒ„ (์˜ˆ: ํ”„๋กœ๋•์…˜). ํ”„๋กœ์ ํŠธ์— ์—ฌ๋Ÿฌ ํ”Œ๋ž˜๋ฒ„๊ฐ€ ์žˆ๋‹ค๋ฉด ํ•„์ˆ˜.
__CAPGO_KEEP_0__string์•ˆ๋“œ๋กœ์ด๋“œ: ๋ฏธ๋ž˜ ๋ฆด๋ฆฌ์Šค์— ๋Œ€ํ•œ Google Play ๋‚ด ์•ฑ ์—…๋ฐ์ดํŠธ ์šฐ์„ ์ˆœ์œ„ (์ •์ˆ˜ 0โ€“5; ๋†’์„์ˆ˜๋ก ๋” ๊ธ‰๋ฐ•). ์ƒ๋žตํ•˜๋ฉด Play์˜ ๊ธฐ์กด ๊ฐ’์ด ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.
๋กœ์ปฌbooleancapgo-credentials.json์„ ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— ์ €์žฅํ•˜๊ธฐ ๋Œ€์‹  ๊ธ€๋กœ๋ฒŒ ~/.capgo-credentials/์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
__CAPGO_KEEP_0__boolean๋นŒ๋“œ ์ถœ๋ ฅ (IPA/APK/AAB)์„ Capgo ์ €์žฅ์†Œ์— ์—…๋กœ๋“œํ•˜๊ณ  ๋‹ค์šด๋กœ๋“œ ๋งํฌ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
__CAPGO_KEEP_0__boolean๋นŒ๋“œ ์ถœ๋ ฅ (IPA/APK/AAB)์„ Capgo ์ €์žฅ์†Œ์— ์—…๋กœ๋“œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
__CAPGO_KEEP_0__string์ถœ๋ ฅ ๋งํฌ TTL: 1์‹œ๊ฐ„์—์„œ 7์ผ (๊ธฐ๋ณธ๊ฐ’: 1์‹œ๊ฐ„). ์˜ˆ์‹œ: 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 list

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

์˜ต์…˜:

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

์˜ต์…˜:

ParamType์„ค๋ช…
โ€”appIdstring์‚ญ์ œํ•  ์•ฑ ID (์„ ํƒ ์‚ฌํ•ญ, ์ƒ๋žต ์‹œ ๋ชจ๋“  ์•ฑ ์‚ญ์ œ)
โ€”platformstring์‚ญ์ œํ•  ํ”Œ๋žซํผ: ios ๋˜๋Š” android (์„ ํƒ ์‚ฌํ•ญ, ์ƒ๋žต ์‹œ ๋ชจ๋“  ํ”Œ๋žซํผ ์‚ญ์ œ)
โ€”localbooleancapgo-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-์ธ์ฆ์„œ.json์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋Œ€์‹  ์ „์—ญ
โ€”์ธ์ฆ์„œstringP12 ์ธ์ฆ์„œ ํŒŒ์ผ ๊ฒฝ๋กœ
โ€”ios-๋ฐฐํฌ ํ”„๋กœํŒŒ์ผstring๋ฐฐํฌ ํ”„๋กœํŒŒ์ผ ๊ฒฝ๋กœ ๋˜๋Š” bundleId=path (๋ฐ˜๋ณต ๊ฐ€๋Šฅ, ๊ธฐ๋ณธ์ ์œผ๋กœ ์ถ”๊ฐ€)
โ€”ios-๋ฐฐํฌ ํ”„๋กœํŒŒ์ผ ๋งคํ•‘์„ ๋ฎ์–ด์“ฐ๊ธฐboolean์ „์ฒด ๋ฐฐํฌ ํ”„๋กœํŒŒ์ผ ๋งคํ•‘์„ ๋Œ€์‹ ํ•˜์—ฌ ๋ณ‘ํ•ฉํ•˜๋Š” ๋Œ€์‹  (๊ธฐ๋ณธ: ๋ณ‘ํ•ฉ)
โ€”p12-์•”ํ˜ธstringP12 ์ธ์ฆ์„œ ์•”ํ˜ธ
โ€”apple-keystringPath to App Store Connect API key (.p8 file)
โ€”apple-key-idstringApp Store Connect API Key ID
โ€”apple-issuer-idstring๋ฐœ๊ธ‰์ž ID
โ€”apple-team-idstringํŒ€ ID
โ€”apple-idstringiOS: ์• ํ”Œ ID ์ด๋ฉ”์ผ (์• ํ”Œ ์Šคํ† ์–ด ์—ฐ๊ฒฐ API ํ‚ค ๋Œ€์ฒด)
โ€”apple-app-specific-passwordstringiOS: ์•ฑ ํŠน์ • ๋น„๋ฐ€๋ฒˆํ˜ธ (xxxx-xxxx-xxxx-xxxx)
โ€”apple-app-idstringiOS: ์• ํ”Œ ์Šคํ† ์–ด ์—ฐ๊ฒฐ ์•ฑ ์•„์ด๋”” (โ€”apple-id์™€ โ€”apple-app-specific-password ํ•จ๊ป˜ ํ•„์š”)
โ€”ios-distributionstringiOS: ๋ฐฐํฌ ๋ชจ๋“œ
โ€”keystorestringKeystore ํŒŒ์ผ ๊ฒฝ๋กœ (.keystore ๋˜๋Š” .jks)
โ€”keystore-aliasstringKeystore ํ‚ค ๋ณ„์นญ
โ€”keystore-key-passwordstringKeystore ํ‚ค ๋น„๋ฐ€๋ฒˆํ˜ธ
โ€”keystore-store-passwordstringKeystore ์ €์žฅ์†Œ ๋น„๋ฐ€๋ฒˆํ˜ธ
โ€”play-configstring๊ตฌ๊ธ€ ํ”Œ๋ ˆ์ด ์„œ๋น„์Šค ๊ณ„์ • JSON ํŒŒ์ผ ๊ฒฝ๋กœ
โ€”android-flavorstringAndroid: ํ”„๋กœ๋•์…˜ ๋“ฑ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๋กœ ๊ตฌ์„ฑ๋œ ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ๋‹ค๋ฉด, ๋นŒ๋“œํ•  Android ์ œํ’ˆ์˜ ๋ง›์„ ์„ ํƒํ•˜์„ธ์š”.
โ€”in-app-update-prioritystringAndroid: ๋ฏธ๋ž˜ ๋ฆด๋ฆฌ์Šค์˜ ๊ตฌ๊ธ€ ํ”Œ๋ ˆ์ด ์ธ์•ฑ ์—…๋ฐ์ดํŠธ ์šฐ์„ ์ˆœ์œ„ (0-5; ์ˆซ์ž; ์ˆซ์ž๊ฐ€ ๋†’์„์ˆ˜๋ก ๋” ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค).
โ€”output-uploadbooleanCapgo ์ €์žฅ์†Œ์— ๋นŒ๋“œ ์ถœ๋ ฅ๋ฌผ(IPA/APK/AAB)์„ ์—…๋กœ๋“œํ•˜๊ณ  ๋‹ค์šด๋กœ๋“œ ๋งํฌ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
โ€”no-output-uploadbooleanCapgo ์ €์žฅ์†Œ์— ๋นŒ๋“œ ์ถœ๋ ฅ๋ฌผ(IPA/APK/AAB)์„ ์—…๋กœ๋“œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
โ€”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

Interactively ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ €์žฅ๋œ ๋นŒ๋“œ ์ž๊ฒฉ ์ฆ๋ช… ๊ด€๋ฆฌ. ์ €์žฅ๋œ ์ž๊ฒฉ ์ฆ๋ช…ๆต่งˆ, ๊ตฌ์„ฑ๋œ ๊ฒƒ์„ ํ™•์ธ, 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 (์„ ํƒ ์‚ฌํ•ญ, ์ƒ๋žต ์‹œ ์„ ํƒํ•˜๋„๋ก ์œ ๋„)
โ€”localboolean๋กœ์ปฌ .capgo-credentials.json๋งŒ ๋ธŒ๋ผ์šฐ์ง•

๐Ÿ”น Migrate

๐Ÿ”น ์ „ํ™˜
ํ„ฐ๋ฏธ๋„ ์ฐฝ
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:

์˜ต์…˜:

ParamType์„ค๋ช…
โ€”์•ฑ ์•„์ด๋””string์•ฑ ์•„์ด๋”” (์ž๋™์œผ๋กœ capacitor.config์—์„œ ์ถ”์ถœ๋˜๋ฉฐ ์ƒ๋žต ์‹œ ์ž๋™์œผ๋กœ ์ถ”์ถœ๋จ)
โ€”ํ”Œ๋žซํผstringํ”Œ๋žซํผ (ํ˜„์žฌ ios๋งŒ ์ง€์›ํ•จ)
โ€”๋กœ์ปฌboolean๋กœ์ปฌ .capgo-credentials.json์—์„œ ๋Œ€์‹  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜