Skip to content

๐Ÿ”น ๋นŒ๋“œ

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

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

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

__CAPGO_KEEP_0__ ์„œ๋ฒ„์— ๋นŒ๋“œ ์ž๊ฒฉ ์ฆ๋ช…์ด ์ €์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋นŒ๋“œ ์ž๊ฒฉ ์ฆ๋ช…์€ ๋นŒ๋“œ๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค. ๋นŒ๋“œ ์ถœ๋ ฅ์€ ์˜ต์…˜์œผ๋กœ ์‹œ๊ฐ„ ์ œํ•œ๋œ ๋‹ค์šด๋กœ๋“œ ๋งํฌ์™€ ํ•จ๊ป˜ ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ธ์ฆ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜์„ธ์š”
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 ์บก์ฒ˜ --output-record to persist the download URL and QR code, then use 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 ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ฒฝ๋กœ (์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„)
โ€”verbosebooleanverbose ๋กœ๊ทธ๋ฅผ ์ž์„ธํžˆ ์ถœ๋ ฅํ•˜๋„๋ก ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.
โ€”supa-hoststring์ž์ฒด ํ˜ธ์ŠคํŒ… ๋˜๋Š” ๊ฐœ๋ฐœ์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” Supabase ํ˜ธ์ŠคํŠธ URL (๊ธฐ๋ณธ๊ฐ’: Capgo)
โ€”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). ์ƒ๋žต ์‹œ, ios์™€ android ํด๋” ์ค‘ ํ•˜๋‚˜๋งŒ ์กด์žฌํ•  ๋•Œ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์‚ฌ์šฉ์ž์—๊ฒŒๆ็คบํ•ฉ๋‹ˆ๋‹ค.
โ€”supa-hoststring์‚ฌ์šฉ์ž ์ •์˜ Supabase ํ˜ธ์ŠคํŠธ URL (์ž์ฒด ํ˜ธ์ŠคํŒ… ๋˜๋Š” Capgo ๊ฐœ๋ฐœ์šฉ)
โ€”no-analyticsboolean์ด ์‹คํ–‰์— ๋Œ€ํ•ด ๋นŒ๋“œ ์˜จ๋ณด๋”ฉ ๋ถ„์„ ๋ฐ ํ„ฐ๋ฏธ๋„ ์žฌ์ƒ์„ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”น Request

๐Ÿ”น ์š”์ฒญ
ํ„ฐ๋ฏธ๋„ ์ฐฝ
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 .

์˜ต์…˜:

ParamType์„ค๋ช…
โ€”pathstringํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ์˜ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜์—ฌ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค (๊ธฐ๋ณธ๊ฐ’: ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ)
โ€”node-modulesstring๋ชจ๋…ธ๋ ˆํฌ์˜ node_modules ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค (์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„)
โ€”platformstring๋ชฉํ‘œ ํ”Œ๋žซํผ: ios ๋˜๋Š” android (ํ•„์ˆ˜)
โ€”build-modestring๋นŒ๋“œ ๋ชจ๋“œ: debug ๋˜๋Š” release (๊ธฐ๋ณธ๊ฐ’: release)
โ€”build-certificate-base64stringiOS: Base64๋กœ ์ธ์ฝ”๋”ฉ๋œ .p12 ์ธ์ฆ์„œ
โ€”p12-passwordstringiOS: ์ธ์ฆ ๋น„๋ฐ€๋ฒˆํ˜ธ (์ธ์ฆ์„œ์— ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์—†์œผ๋ฉด ์„ ํƒ ์‚ฌํ•ญ)
โ€”apple-idstringiOS: ์•ฑ ์Šคํ† ์–ด ์—ฐ๊ฒฐ API ํ‚ค ๋Œ€์‹  ์•ฑ ์Šคํ† ์–ด ์—ฐ๊ฒฐ API ์ด๋ฉ”์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์•ฑ ์Šคํ† ์–ด ์—ฐ๊ฒฐ API ๋น„๋ฐ€๋ฒˆํ˜ธ ์—…๋กœ๋“œ (๋Œ€์•ˆ)
โ€”apple-app-specific-passwordstringiOS: ํ…Œ์ŠคํŠธ ํ”Œ๋ผ์ดํŠธ ์—…๋กœ๋“œ๋ฅผ ์œ„ํ•œ ์•ฑ ์Šคํ† ์–ด ์—ฐ๊ฒฐ __CAPGO_KEEP_0__ ์•ฑ ์Šคํ† ์–ด ์—ฐ๊ฒฐ __CAPGO_KEEP_0__ ๋น„๋ฐ€๋ฒˆํ˜ธ (xxxx-xxxx-xxxx-xxxx)
โ€”apple-app-idstringiOS: ์•ฑ ์Šคํ† ์–ด ์—ฐ๊ฒฐ __CAPGO_KEEP_0__ ์•ฑ id (์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์Šคํ† ์–ด ์—ฐ๊ฒฐ __CAPGO_KEEP_0__ id์™€ ํ•จ๊ป˜ ํ•„์š”)
โ€”apple-key-idstringiOS: ์•ฑ ์Šคํ† ์–ด ์—ฐ๊ฒฐ API ํ‚ค ID
โ€”apple-issuer-idstringiOS: ์•ฑ ์Šคํ† ์–ด ์—ฐ๊ฒฐ __CAPGO_KEEP_0__ ๋ฐœ๊ธ‰์ž ID
โ€”apple-key-contentstringiOS: Base64-encoded App Store Connect API key (.p8)
โ€”์• ํ”Œ ์Šคํ† ์–ด ์—ฐ๊ฒฐ ํŒ€ IDstringiOS: ์• ํ”Œ ์Šคํ† ์–ด ์—ฐ๊ฒฐ ํŒ€ ID
โ€”iOS ์Šคํ‚ค๋งˆstringiOS: Xcode ์Šคํ‚ค๋งˆ๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•ด (๊ธฐ๋ณธ: ์•ฑ)
โ€”iOS ๋นŒ๋“œ ๋Œ€์ƒstringiOS: Xcode ๋นŒ๋“œ ์„ค์ •์„ ์ฝ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์ƒ (๊ธฐ๋ณธ: ์Šคํ‚ค๋งˆ์™€ ๋™์ผ)
โ€”iOS ๋ฐฐํฌ ๋ชจ๋“œstringiOS: ๋ฐฐํฌ ๋ชจ๋“œ
โ€”iOS ๋ฐฐํฌ ํ”„๋กœํŒŒ์ผstringiOS: ๋ฐฐํฌ ํ”„๋กœํŒŒ์ผ ๊ฒฝ๋กœ ๋˜๋Š” bundleId=path ๋งคํ•‘ (๋ฐ˜๋ณต ๊ฐ€๋Šฅ)
โ€”์•ˆ๋“œ๋กœ์ด๋“œ ํ‚ค ์Šคํ† ์–ด ํŒŒ์ผstring์•ˆ๋“œ๋กœ์ด๋“œ: Base64 ์ธ์ฝ”๋”ฉ ํ‚ค์Šคํ† ์–ด ํŒŒ์ผ
__CAPGO_KEEP_0__string์•ˆ๋“œ๋กœ์ด๋“œ: ํ‚ค์Šคํ† ์–ด ํ‚ค ๋ณ„์นญ
__CAPGO_KEEP_0__string์•ˆ๋“œ๋กœ์ด๋“œ: ํ‚ค์Šคํ† ์–ด ํ‚ค ๋น„๋ฐ€๋ฒˆํ˜ธ
__CAPGO_KEEP_0__string์•ˆ๋“œ๋กœ์ด๋“œ: ํ‚ค์Šคํ† ์–ด ์ €์žฅ์†Œ ๋น„๋ฐ€๋ฒˆํ˜ธ
__CAPGO_KEEP_0__string์•ˆ๋“œ๋กœ์ด๋“œ: Base64 ์ธ์ฝ”๋”ฉ Google Play ์„œ๋น„์Šค ๊ณ„์ • JSON
__CAPGO_KEEP_0__string์•ˆ๋“œ๋กœ์ด๋“œ: ๋นŒ๋“œํ•  ์ œํ’ˆ ํ”Œ๋ž˜๋ฒ„ (์˜ˆ: ํ”„๋กœ๋•์…˜). ํ”„๋กœ์ ํŠธ์— ์—ฌ๋Ÿฌ ํ”Œ๋ž˜๋ฒ„๊ฐ€ ์žˆ๋‹ค๋ฉด ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค.
__CAPGO_KEEP_0__stringAndroid: Google Play in-app ์—…๋ฐ์ดํŠธ ์šฐ์„ ์ˆœ์œ„ (์ •์ˆ˜ 0โ€“5; ๋” ๋†’์€ ์šฐ์„ ์ˆœ์œ„) https://developer.android.com/guide/playcore/in-app-updates. ํ™˜๊ฒฝ > ์ €์žฅ๋œ ์ธ์ฆ์„œ > CLI
โ€”no-playstore-uploadboolean์ด ๋นŒ๋“œ์— ๋Œ€ํ•œ ํ”Œ๋ ˆ์ด ์Šคํ† ์–ด ์—…๋กœ๋“œ๋ฅผ ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค (์ €์žฅ๋œ ํ”Œ๋ ˆ์ด ๊ตฌ์„ฑ์ด null๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค). โ€”output-upload์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
โ€”submit-to-store-reviewboolean์—…๋กœ๋“œ ํ›„ ์Šคํ† ์–ด ๋ฆด๋ฆฌ์ฆˆ๋ฅผ ๋ฆฌ๋ทฐ์— ์ œ์ถœํ•˜๋Š” ๋Œ€์‹  draft/๋น„ํ™œ์„ฑํ™” ๋นŒ๋“œ๋กœ ๋‚จ๊น๋‹ˆ๋‹ค. Android๋Š” ํ”Œ๋ ˆ์ด ๋ฆด๋ฆฌ์ฆˆ๋ฅผ ์™„๋ฃŒ ํ‘œ์‹œํ•˜๊ณ  iOS๋Š” ์ฒ˜๋ฆฌ๋œ ํ…Œ์ŠคํŠธ ํ”Œ๋ผ์ดํŠธ ๋นŒ๋“œ๋ฅผ ์•ฑ ์Šคํ† ์–ด ๋ฆฌ๋ทฐ์— ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค.
โ€”store-release-namestring์Šคํ† ์–ด ๋ฆด๋ฆฌ์ฆˆ ์ด๋ฆ„/๋ฒ„์ „ ๋ ˆ์ด๋ธ”. Android๋Š” ์ด ๊ฐ’์„ Google Play์˜ version_name์œผ๋กœ ์ „์†กํ•˜๊ณ  iOS๋Š” ํŽธ์ง‘ ๊ฐ€๋Šฅํ•œ ๋ฒ„์ „์„ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์žฌ์‚ฌ์šฉํ•  ๋•Œ App Store์˜ ๋ฒ„์ „์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
โ€”store-release-notesstring๊ธฐ๋ณธ ์Šคํ† ์–ด ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ. Android๋Š” ์ด ๊ฐ’์„ ํ”Œ๋ ˆ์ด์˜ ๋ณ€๊ฒฝ ๋กœ๊ทธ๋กœ ์‚ฌ์šฉํ•˜๊ณ  iOS๋Š” ๊ธฐ๋ณธ App Store์˜ 'Whatโ€™s New' ํ…์ŠคํŠธ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
โ€”store-release-notes-localestring๊ตญ์ œํ™”๋œ ์Šคํ† ์–ด ๋ฆด๋ฆฌ์Šค ๋…ธํŠธ (๋ฐ˜๋ณต ๊ฐ€๋Šฅ), ์˜ˆ๋ฅผ ๋“ค์–ด โ€”store-release-notes-locale en-US=โ€œ๋ฒ„๊ทธ ์ˆ˜์ •โ€ โ€”store-release-notes-locale fr-FR=โ€œ์ˆ˜์ •โ€.
โ€”ios-testflight-๊ทธ๋ฃนstringiOS: ์™ธ๋ถ€ ๋ฒ ํƒ€ ๋ฐฐํฌ๋ฅผ ์œ„ํ•ด ์™ธ๋ถ€ ๊ทธ๋ฃน ์ด๋ฆ„ ๋˜๋Š” ID๋ฅผ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
โ€”ios-์ž๋™ ๋ฆด๋ฆฌ์ŠคbooleaniOS: ์• ํ”Œ ์Šน์ธ ํ›„ ์•ฑ ์Šคํ† ์–ด ๋ฒ„์ „์„ ์ž๋™์œผ๋กœ ๋ฆด๋ฆฌ์Šคํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ ์ˆ˜๋™ ๋ฆด๋ฆฌ์Šค์ž…๋‹ˆ๋‹ค.
โ€”no-ios-์ž๋™ ๋ฆด๋ฆฌ์ŠคbooleaniOS: ์• ํ”Œ ์Šน์ธ ํ›„ ์•ฑ ์Šคํ† ์–ด ๋ฒ„์ „์„ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ ์ˆ˜๋™ ๋ฆด๋ฆฌ์Šค๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
โ€”์ถœ๋ ฅ ์—…๋กœ๋“œboolean์ด ๋นŒ๋“œ๋งŒ์„ ์œ„ํ•ด ์ถœ๋ ฅ ์—…๋กœ๋“œ ๋™์ž‘์„ ์˜ค๋ฒ„๋ผ์ด๋“œํ•ฉ๋‹ˆ๋‹ค (ํ™œ์„ฑํ™”). ์šฐ์„ ์ˆœ์œ„: CLI > ํ™˜๊ฒฝ > ์ €์žฅ๋œ ์ž๊ฒฉ ์ฆ๋ช…
โ€”์ถœ๋ ฅ ์—…๋กœ๋“œ ๋น„ํ™œ์„ฑํ™”boolean์ด ๋นŒ๋“œ๋งŒ์„ ์œ„ํ•ด ์ถœ๋ ฅ ์—…๋กœ๋“œ ๋™์ž‘์„ ์˜ค๋ฒ„๋ผ์ด๋“œํ•ฉ๋‹ˆ๋‹ค (๋น„ํ™œ์„ฑํ™”). ์šฐ์„ ์ˆœ์œ„: CLI > ํ™˜๊ฒฝ > ์ €์žฅ๋œ ์ž๊ฒฉ ์ฆ๋ช…
โ€”์ถœ๋ ฅ ๋ณด์กดstring์ด ๋นŒ๋“œ๋งŒ์„ ์œ„ํ•ด ์ถœ๋ ฅ ๋งํฌ TTL์„ Overrideํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์‹œ: 1์‹œ๊ฐ„, 6์‹œ๊ฐ„, 2์ผ. ์šฐ์„ ์ˆœ์œ„: CLI > ํ™˜๊ฒฝ๋ณ€์ˆ˜ > ์ €์žฅ๋œ ์ธ์ฆ์„œ
โ€”output-recordstring๋นŒ๋“œ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜๋ฉด, JSON ๋ ˆ์ฝ”๋“œ(jobId, status, outputUrl, qrCodeAscii, qrCodePngPath, finishedAt)๋ฅผ ์ง€์ •๋œ ๊ฒฝ๋กœ์— ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. PNG QR code๋„ ๊ทธ ๊ฒฝ๋กœ์— ๋ถ™์–ด ์žˆ์Šต๋‹ˆ๋‹ค. .qr.png suffix. ๋ ˆ์ฝ”๋“œ ํ•„๋“œ๋ฅผ ๋‹ค์‹œ ์ฝ์œผ๋ ค๋ฉด build last-output.
โ€”no-skip-build-number-bumpboolean์ด ๋นŒ๋“œ๋งŒ์„ ์œ„ํ•ด ์ €์žฅ๋œ ์ธ์ฆ์„œ๋ฅผ ์žฌํ™œ์šฉํ•˜์—ฌ ์ž๋™ ๋นŒ๋“œ ๋ฒˆํ˜ธ ์ฆ๊ฐ€๋ฅผ ์žฌ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.
โ€”skip-marketing-version-bumpboolean์•ฑ์ด ์ด๋ฏธ ์ถœ์‹œ๋˜์—ˆ์„ ๋•Œ ์ž๋™ ๋งˆ์ผ€ํŒ… ๋ฒ„์ „(CFBundleShortVersionString / versionName) ์ฆ๊ฐ€๋ฅผ ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค.
โ€”sync-ios-versionbooleaniOS: ๋นŒ๋“œ ์ „ package.json์˜ MARKETING_VERSION์„ Xcode์—์„œ syncํ•ฉ๋‹ˆ๋‹ค.
โ€”ai-analyticsboolean๋นŒ๋“œ ์‹คํŒจ ์‹œ, Capgo AI๋กœ ๋กœ๊ทธ๋ฅผ ์ „์†กํ•˜์—ฌ ์ง„๋‹จํ•ฉ๋‹ˆ๋‹ค. ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ํ„ฐ๋ฏธ๋„์—์„œ๋Š” ์‚ฌ์ „ ํ™•์ธ์„ ์ƒ๋žตํ•˜๊ณ  CI์—์„œ๋Š” ์ž๋™ ์—…๋กœ๋“œ ๋ฐ ๋ถ„์„์„ stderr์— ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
โ€”no-prescanboolean์ž๋™ ๋นŒ๋“œ ์Šค์บ”์„ ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค.
โ€”prescan-ignore-fatalboolean๋นŒ๋“œ ์ค‘๋‹จ์„ ํ”ผํ•˜๋ฉด์„œ ๋นŒ๋“œ ์Šค์บ”์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
โ€”fail-on-warningsboolean๋นŒ๋“œ ์Šค์บ” ๊ฒฝ๊ณ ๋ฅผ ๋นŒ๋“œ ์‹คํŒจ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
โ€”send-logs-to-supportbooleanCI/CD ๋นŒ๋“œ ์‹คํŒจ ์‹œ ์ž๋™์œผ๋กœ Capgo ์ง€์›ํŒ€์— ๋นŒ๋“œ ๋กœ๊ทธ๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฉ”์ผ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Capgo ์ง€์›ํŒ€์€ ์ด๋ฉ”์ผ๋กœ ์—ฐ๋ฝ์„ ์ทจํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. โ€”ai-analytics์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
โ€”send-logsbooleanโ€”send-logs-to-support์˜ alias์ž…๋‹ˆ๋‹ค.
-astringAPI ๊ณ„์ •์— ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ํ‚ค์ž…๋‹ˆ๋‹ค.
โ€”supa-hoststringCustom Supabase host URL (for self-hosting or Capgo development)
โ€”supa-anonstring์‚ฌ์šฉ์ž ์ •์˜ Supabase ์ต๋ช… ํ‚ค (์ž์ฒด ํ˜ธ์ŠคํŒ…์šฉ)
โ€”verboseboolean์„ธ๋ถ€ ๋กœ๊น…๊ณผ ํ•จ๊ป˜ ์ž์„ธํ•œ ์ถœ๋ ฅ์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”น Sync-ios-version

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

package.json์˜ MARKETING_VERSION์„ ๋กœ์ปฌ iOS Xcode์™€ ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ:

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

์˜ต์…˜:

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

๐Ÿ”น ์ดˆ๊ธฐ ์Šค์บ”

๐Ÿ”น ์ดˆ๊ธฐ ์Šค์บ” ์„น์…˜
ํ„ฐ๋ฏธ๋„ ์ฐฝ
npx @capgo/cli@latest build prescan

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

์˜ต์…˜:

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

Options:

ParamType์„ค๋ช…
โ€”pathstringJSON ๊ธฐ๋ก์„ โ€”output-record๋กœ ๊ธฐ๋กํ•œ ๊ฒฝ๋กœ (ํ•„์ˆ˜)
โ€”fieldstring๋‹จ์ผ field๋ฅผ ์ถœ๋ ฅ (๋‹ค์Œ ์ค‘ ํ•˜๋‚˜: jobId, appId, platform, buildMode, status, outputUrl, qrCodeAscii, qrCodePngPath, finishedAt, schemaVersion)
โ€”qrbooleanASCII QR code๋ฅผ ์ถœ๋ ฅ (โ€”field qrCodeAscii์˜ ๋‹จ์ถ•)

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

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

__CAPGO_KEEP_0__

๐Ÿ”น __CAPGO_KEEP_0__.app/docs/__CAPGO_KEEP_1__/cloud-build/android/

__CAPGO_KEEP_0__

__CAPGO_KEEP_1__ asc-key

__CAPGO_KEEP_0__
npx @capgo/cli@latest build credentials apple-key

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

์˜ˆ์‹œ:

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

์„ค์ •:

ํŒŒ๋ผ๋ฏธํ„ฐํƒ€์ž…์„ค๋ช…
-astringAPI ํ‚ค๋ฅผ ๊ณ„์ •์— ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด
appIdstring__CAPGO_KEEP_0__ ์•ฑ iOS ๋นŒ๋“œ ์ธ์ฆ์„œ์— ์ €์žฅ
โ€”localbooleancapgo-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/ ์•ˆ๋“œ๋กœ์ด๋“œ: https://capgo.app/docs/cli/cloud-build/android/ npx @capgo/cli build credentials save โ€”platform ios
    โ€”์ธ์ฆ์„œ ./cert.p12 โ€”p12-์•”ํ˜ธ โ€œpasswordโ€
    โ€”ios-๋ฐฐํฌ ํ”„๋กœํŒŒ์ผ ./profile.mobileprovision
    โ€”์• ํ”Œ ํ‚ค ./AuthKey.p8 โ€”์• ํ”Œ ํ‚ค ์•„์ด๋”” โ€œKEY123โ€
    โ€”apple-issuer-id โ€œissuer-uuidโ€ โ€”apple-team-id โ€œteam-idโ€ Multi-target Example (app + widget extension): npx @capgo/cli build credentials save โ€”platform ios
    ๋‹ค์ค‘ ๋Œ€์ƒ ์˜ˆ์‹œ (์•ฑ + ์œ„์ ฏ ํ™•์žฅ):
    npx @__CAPGO_KEEP_0__/__CAPGO_KEEP_1__ build credentials save โ€”platform ios
    โ€ฆ npx @capgo/cli build credentials save โ€”platform android
    โ€”ios-๋ฐฐํฌ ํ”„๋กœํŒŒ์ผ com.example.widget=./Widget.mobileprovision
    โ€”__CAPGO_KEEP_0__-key-password โ€œ__CAPGO_KEEP_1__โ€
    โ€”play-config ./service-account.json Local storage (per-project): npx @capgo/cli build credentials save โ€”local โ€”platform ios โ€ฆ

์˜ˆ์‹œ:

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

์˜ต์…˜:

ํŒŒ๋ผ๋ฏธํ„ฐํƒ€์ž…์„ค๋ช…
โ€”appIdstring์•ฑ ID (์˜ˆ: com.example.app) (ํ•„์ˆ˜)
โ€”ํ”Œ๋žซํผstringํ”Œ๋žซํผ: ios ๋˜๋Š” android (ํ•„์ˆ˜)
โ€”์ธ์ฆ์„œstringiOS: .p12 ์ธ์ฆ์„œ ํŒŒ์ผ ๊ฒฝ๋กœ
โ€”ios-๋ฐฐํฌ ํ”„๋กœํŒŒ์ผstringiOS: ๋ฐฐํฌ ํ”„๋กœํŒŒ์ผ ๊ฒฝ๋กœ ๋˜๋Š” bundleId=path (๋ฐ˜๋ณต ๊ฐ€๋Šฅ)
โ€”p12-๋น„๋ฐ€๋ฒˆํ˜ธstringiOS: ์ธ์ฆ์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ (์ธ์ฆ์„œ์— ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์—†์œผ๋ฉด ์„ ํƒ ์‚ฌํ•ญ)
โ€”์• ํ”Œ-ํ‚คstringiOS: .p8 App Store Connect API ํ‚ค ๊ฒฝ๋กœ
โ€”์• ํ”Œ-ํ‚ค-์•„์ด๋””stringiOS: App Store Connect API Key ID
โ€”์• ํ”Œ-์ด์ˆ˜์–ด-์•„์ด๋””stringiOS: App Store Connect ๋ฐœ๊ธ‰์ž ID
__CAPGO_KEEP_0__stringiOS: App Store Connect ํŒ€ ID
โ€”ios-distributionstringiOS: ๋ฐฐํฌ ๋ชจ๋“œ
โ€”apple-idstringiOS: ์• ํ”Œ ID ์ด๋ฉ”์ผ (App Store Connect API ํ‚ค ๋Œ€์ฒด)
โ€”apple-app-specific-passwordstringiOS: ํ…Œ์ŠคํŠธ ํ”Œ๋ผ์ดํŠธ ์—…๋กœ๋“œ๋ฅผ ์œ„ํ•œ ์•ฑ ํŠน์ • ๋น„๋ฐ€๋ฒˆํ˜ธ (xxxx-xxxx-xxxx-xxxx)
โ€”apple-app-idstringiOS: App Store Connect ์•ฑ ID (์• ํ”Œ ID์™€ ์•ฑ ํŠน์ • ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ํ•จ๊ป˜ ํ•„์š”)
โ€”keystorestring์•ˆ๋“œ๋กœ์ด๋“œ: ํ‚ค ์Šคํ† ์–ด ํŒŒ์ผ ๊ฒฝ๋กœ (.keystore ๋˜๋Š” .jks)
__CAPGO_KEEP_0__string์•ˆ๋“œ๋กœ์ด๋“œ: ํ‚ค ์Šคํ† ์–ด ํ‚ค ๋ณ„์นญ
__CAPGO_KEEP_0__string์•ˆ๋“œ๋กœ์ด๋“œ: ํ‚ค ์Šคํ† ์–ด ํ‚ค ๋น„๋ฐ€๋ฒˆํ˜ธ
__CAPGO_KEEP_0__string์•ˆ๋“œ๋กœ์ด๋“œ: ํ‚ค ์Šคํ† ์–ด ์ €์žฅ์†Œ ๋น„๋ฐ€๋ฒˆํ˜ธ
__CAPGO_KEEP_0__string์•ˆ๋“œ๋กœ์ด๋“œ: ํ”Œ๋ ˆ์ด ์Šคํ† ์–ด ์„œ๋น„์Šค ๊ณ„์ • JSON ํŒŒ์ผ ๊ฒฝ๋กœ
__CAPGO_KEEP_0__string์•ˆ๋“œ๋กœ์ด๋“œ: ๋นŒ๋“œํ•  ์ œํ’ˆ ํ”Œ๋ž˜๋ฒ„ (์˜ˆ: ํ”„๋กœ๋•์…˜). ํ”„๋กœ์ ํŠธ์— ์—ฌ๋Ÿฌ ํ”Œ๋ž˜๋ฒ„๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ํ•„์ˆ˜
__CAPGO_KEEP_0__string์•ˆ๋“œ๋กœ์ด๋“œ: Google Play ๋‚ด ์•ฑ ์—…๋ฐ์ดํŠธ ์šฐ์„ ์ˆœ์œ„ (0โ€“5; ๋” ๋†’์„์ˆ˜๋ก ๋” ๊ธ‰ํ•จ). ์ƒ๋žตํ•˜๋ฉด Play์˜ ๊ธฐ์กด ๊ฐ’์ด ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.
โ€”localbooleanํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— .capgo-credentials.json ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๊ธฐ ๋Œ€์‹  ์ „์—ญ ~/.capgo-credentials/์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
โ€”output-uploadbooleanCapgo ์ €์žฅ์†Œ์— ๋นŒ๋“œ ์ถœ๋ ฅ๋ฌผ (IPA/APK/AAB)์„ ์—…๋กœ๋“œํ•˜๊ณ  ๋‹ค์šด๋กœ๋“œ ๋งํฌ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
โ€”no-output-uploadboolean๋นŒ๋“œ ์ถœ๋ ฅ๋ฌผ (IPA/APK/AAB)์„ Capgo ์ €์žฅ์†Œ์— ์—…๋กœ๋“œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
โ€”output-retentionstring์ถœ๋ ฅ ๋งํฌ 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 # ํŠน์ • ์•ฑ ๋ชฉ๋ก

์˜ต์…˜:

ํŒŒ๋ผ๋ฏธํ„ฐ:ํƒ€์ž…์„ค๋ช…
โ€”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

์˜ต์…˜:

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

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

โ€˜ ๐Ÿ”น Updateโ€™ ์„น์…˜
ํ„ฐ๋ฏธ๋„ ์ฐฝ
npx @capgo/cli@latest build credentials update

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

์˜ต์…˜:

ParamType์„ค๋ช…
โ€”appIdstring์•ฑ ID (์ž๋™์œผ๋กœ capacitor.config์—์„œ ๊ฐ์ง€๋ฉ๋‹ˆ๋‹ค. ์ƒ๋žต ์‹œ)
โ€”platformstringํ”Œ๋žซํผ: ios ๋˜๋Š” android (์ž๋™์œผ๋กœ ๊ฐ์ง€๋ฉ๋‹ˆ๋‹ค. ์ œ๊ณตํ•œ ์˜ต์…˜)
โ€”localboolean์ „์—ญ ๋Œ€์‹  ๋กœ์ปฌ .capgo-credentials.json์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
โ€”์ธ์ฆ์„œstring__CAPGO_KEEP_0__ ์ธ์ฆ์„œ ํŒŒ์ผ ๊ฒฝ๋กœ
โ€”ios-๋ฐฐํฌ ํ”„๋กœํŒŒ์ผstring๋ฐฐํฌ ํ”„๋กœํŒŒ์ผ ๊ฒฝ๋กœ ๋˜๋Š” bundleId=path (๋ฐ˜๋ณต ๊ฐ€๋Šฅ, ๊ธฐ๋ณธ์ ์œผ๋กœ ์ถ”๊ฐ€)
โ€”overwrite-ios-๋ฐฐํฌ ํ”„๋กœํŒŒ์ผ ๋งตboolean๋ฐฐํฌ ํ”„๋กœํŒŒ์ผ ๋งต์„ ๋ชจ๋‘ ๋Œ€์ฒดํ•˜๋Š” ๋Œ€์‹  ๋ณ‘ํ•ฉ (๊ธฐ๋ณธ: ๋ณ‘ํ•ฉ)
โ€”p12-์•”ํ˜ธstringP12 ์ธ์ฆ์„œ ์•”ํ˜ธ
โ€”์• ํ”Œ ํ‚คstringAPI App Store Connect ํ‚ค (.p8 ํŒŒ์ผ ๊ฒฝ๋กœ)
โ€”์• ํ”Œ ํ‚ค ์•„์ด๋””stringApp Store Connect API ํ‚ค ์•„์ด๋””
โ€”apple-issuer-idstring์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์Šคํ† ์–ด ์—ฐ๊ฒฐ ๋ฐœ๊ธ‰์ž ID
โ€”apple-team-idstring์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์Šคํ† ์–ด ์—ฐ๊ฒฐ ํŒ€ ID
โ€”apple-idstringiOS: ์•ฑ๋ณ„ ์•”ํ˜ธ ์—…๋กœ๋“œ๋ฅผ ์œ„ํ•œ ์• ํ”Œ ID ์ด๋ฉ”์ผ (์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์Šคํ† ์–ด ์—ฐ๊ฒฐ API ํ‚ค ๋Œ€์ฒด)
โ€”apple-app-specific-passwordstringiOS: ํ…Œ์ŠคํŠธ ํ”Œ๋ผ์ดํŠธ ์—…๋กœ๋“œ๋ฅผ ์œ„ํ•œ ์•ฑ๋ณ„ ์•”ํ˜ธ (xxxx-xxxx-xxxx-xxxx)
โ€”apple-app-idstringiOS: ์•ฑ ์Šคํ† ์–ด ์—ฐ๊ฒฐ ์•ฑ ID (์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์Šคํ† ์–ด ์—ฐ๊ฒฐ ID์™€ โ€”apple-id, โ€”apple-app-specific-password ํ•„์š”)
โ€”ios-distributionstringiOS: ๋ฐฐํฌ ๋ชจ๋“œ
โ€”ํ‚ค์Šคํ† ์–ดstringํ‚ค์Šคํ† ์–ด ํŒŒ์ผ ๊ฒฝ๋กœ (.keystore or .jks)
โ€”ํ‚ค์Šคํ† ์–ด-aliasstringํ‚ค์Šคํ† ์–ด ํ‚ค ๋ณ„์นญ
โ€”ํ‚ค์Šคํ† ์–ด-ํ‚ค-ํŒจ์Šค์›Œ๋“œstringํ‚ค์Šคํ† ์–ด ํ‚ค ํŒจ์Šค์›Œ๋“œ
โ€”ํ‚ค์Šคํ† ์–ด-์Šคํ† ์–ด-ํŒจ์Šค์›Œ๋“œstringํ‚ค์Šคํ† ์–ด ์ €์žฅ์†Œ ํŒจ์Šค์›Œ๋“œ
โ€”ํ”Œ๋ ˆ์ด-๊ตฌ์„ฑstring๊ตฌ๊ธ€ ํ”Œ๋ ˆ์ด ์„œ๋น„์Šค ๊ณ„์ • JSON ๊ฒฝ๋กœ
โ€”์•ˆ๋“œ๋กœ์ด๋“œ-ํ”Œ๋ ˆ์ด๋ฒ„string์•ˆ๋“œ๋กœ์ด๋“œ: ์ œํ’ˆ ํ”Œ๋ ˆ๋ฒ„๋ฅผ ๋นŒ๋“œ (์˜ˆ: ํ”„๋กœ๋•์…˜). ํ”„๋กœ์ ํŠธ์— ์—ฌ๋Ÿฌ ํ”Œ๋ ˆ๋ฒ„๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ํ•„์ˆ˜.
์•ฑ ๋‚ด ์—…๋ฐ์ดํŠธ ์šฐ์„ ์ˆœ์œ„string์•ˆ๋“œ๋กœ์ด๋“œ: Google Play ์•ฑ ๋‚ด ์—…๋ฐ์ดํŠธ ์šฐ์„ ์ˆœ์œ„ (0-5; ๋” ๋†’์„์ˆ˜๋ก ๋” ๊ธ‰ํ•จ)
์ถœ๋ ฅ ์—…๋กœ๋“œboolean๋นŒ๋“œ ์ถœ๋ ฅ (IPA/APK/AAB)์„ Capgo ์ €์žฅ์†Œ์— ์—…๋กœ๋“œํ•˜๊ณ  ๋‹ค์šด๋กœ๋“œ ๋งํฌ ์ถœ๋ ฅ
์ถœ๋ ฅ ์—…๋กœ๋“œ ๋ฏธ์—…๋กœ๋“œboolean๋นŒ๋“œ ์ถœ๋ ฅ (IPA/APK/AAB)์„ Capgo ์ €์žฅ์†Œ์— ์—…๋กœ๋“œํ•˜์ง€ ์•Š์Œ
์ถœ๋ ฅ ์œ ํšจ ์‹œ๊ฐ„string์ถœ๋ ฅ ๋งํฌ ์œ ํšจ ์‹œ๊ฐ„: 1์‹œ๊ฐ„์—์„œ 7์ผ. ์˜ˆ์‹œ: 1์‹œ๊ฐ„, 6์‹œ๊ฐ„, 2์ผ
๋นŒ๋“œ ๋ฒˆํ˜ธ ์ฆ๊ฐ€ ๊ฑด๋„ˆ๋›ฐ๊ธฐboolean๋ฏธ๋ž˜ ๋นŒ๋“œ์—์„œ ์ž๋™ ๋นŒ๋“œ ๋ฒˆํ˜ธ/๋ฒ„์ „ code ์ฆ๊ฐ€๋ฅผ ๊ฑด๋„ˆ๋œ€
๋นŒ๋“œ ๋ฒˆํ˜ธ ์ฆ๊ฐ€ ๊ฑด๋„ˆ๋›ฐ๊ธฐ ํ•ด์ œboolean์ž๋™ ๋นŒ๋“œ ๋ฒˆํ˜ธ ์ฆ๊ฐ€๋ฅผ ์žฌ ํ™œ์„ฑํ™” (๊ธฐ๋ณธ ๋™์ž‘)
โ€”์ž๋™ ๋งˆ์ผ€ํŒ… ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ๋ฅผ ๊ฑด๋„ˆ ๋›ฐ๊ธฐboolean์•ฑ์ด ์ด๋ฏธ ์ถœ์‹œ๋˜์—ˆ์„ ๋•Œ ๋ฏธ๋ž˜ ๋นŒ๋“œ์—์„œ ์ž๋™ ๋งˆ์ผ€ํŒ… ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ๋ฅผ ๊ฑด๋„ˆ ๋›ฐ์„ธ์š”
โ€”๋งˆ์ผ€ํŒ… ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ๋ฅผ ๊ฑด๋„ˆ ๋›ฐ๊ธฐboolean๋ฏธ๋ž˜ ๋นŒ๋“œ์—์„œ ์ž๋™ ๋งˆ์ผ€ํŒ… ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ๋ฅผ ์žฌ ํ™œ์„ฑํ™” (๊ธฐ๋ณธ ๋™์ž‘)

๐Ÿ”น ๊ด€๋ฆฌ

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

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

ํŒŒ๋ผ๋ฏธํ„ฐ

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

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

์˜ˆ์‹œ:

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

์˜ต์…˜:

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