모바일 환경에 대한 팀은 일반적으로 세 가지 방법 중 하나를 선택합니다.
- 두 개의 앱 ID (프로덕션 + 프리 프로덕션)
- 한 앱 ID + 동적 런타임 환경 전환
- 한 앱 ID + Capgo 채널
Capgo 채널 모델은 실제 팀에서 가장 깨끗한 모델입니다.
중복된 앱 ID가 노이즈가 되는 이유
사용 com.myapp 그것은 간단해 보이지만, 빠르게 중복이 발생합니다. com.myapp.beta 두 개의 릴리스 PIPELINE
- 두 개의 푸시 ID, 깊이 링크, 권한 매핑
- 두 개의 분석 및 충돌 식별
- 환경 간에 분산된 구성 및 불일치하는 동작
- 마침내, 스토어 콘솔, 팀 및 내부 QA 지침을 관리하는 두 개의 제품이 있습니다.
Using duplicated app IDs becomes noisy.
Why runtime-switching config is often messy
‘한 앱 ID + 런타임 switch’ 패턴은 일반적으로 앱이 시작할 때 환경 변수 또는 플래그를 읽고 API, 키 및 업데이트 동작을 동적으로 재구성합니다.
This works until:
- QA가 의도하지 않은 흐름을 우회하기 시작하면 config 상태가陈舊해지기 때문에
- someone이 프로덕션에서 잘못된 엔드포인트를 사용한다.
- 환경 드리프트가 복잡한 버그를 일으키기 때문에 재현하기 어렵습니다.
- 사용자 기기에서 ‘이 바이너리가 어떤 config 버전을 사용하는지’를 디버그해야 합니다.
이 복잡성은 각 릴리스와 함께 증가하고 팀이 속도를 잃습니다.
Capgo 방법: 한 앱 ID, 여러 채널
Capgo는 채널을 통해 환경 제어를 명시적으로합니다.
- 앱 스토어 / 플레이에서 한 프로덕션 앱 ID를 유지하세요.
- ‘쉘’ (native 변경이 진정한 재빌드가 필요할 때까지) 에 대한 한 네이티브 바이너리를 배포하세요.
- __CAPGO_KEEP_0__ 채널에 따라 라우팅 동작을 결정합니다. 동일한 앱 ID가 중복되지 않습니다.
실제로 이는 다음과 같습니다:
production: 모든 사용자staging: 내부 QA 및 릴리스 후보beta: 초대된 테스터hotfix:緊急 패치 트랙
TestFlight/Play 내부 테스트 앱은 staging 영구적으로 유지될 수 있습니다.
JS/CSS/자산 업데이트 작업을 Capgo에서 반복적으로 수행할 수 있습니다. 새로운 네이티브 앱을 배포하지 않고도.
실제 사용 사례에서 권장하는 구조는 다음과 같습니다.
1) 네이티브 릴리스 기준
마지막 네이티브 바이너리는 JS 반복 횟수에 관계없이 동일하게 유지됩니다.
bun run build
bunx cap sync
# generate Xcode/Android Studio archives as usual
네이티브 표면 영역이 실제로 변경된 경우에만 네이티브 바이너리를 다시 빌드합니다.
2) 환경별 전용 채널을 사용하세요
업데이트를 채널에 게시하세요:
bun run build
bunx @capgo/cli deploy --channel staging
QA에서 테스트, 문제를 해결한 후 승격하세요:
bunx @capgo/cli promote vX.Y.Z --channel production
버전을 명시적으로 관리하는 경우:
bunx @capgo/cli deploy vX.Y.Z --channel staging
bunx @capgo/cli promote vX.Y.Z --channel production
3) 테스트 플라이트는 항상 'always pre-prod'로 유지하세요
iOS 워크플로우에서 이 말은 테스트 플라이트 빌드는 항상 전제 생산 업데이트와 연관이 있음을 의미합니다:
- 자바스크립트 변경 사항에 대해 자주 네이티브 제출을 하지 마세요.
- QA에서는 근처의 생산 code를 스테이징 채널을 통해 항상 유효성 검사합니다.
- 제품 사용자는 승격된 생산 채널 패키지를만 받습니다.
4) 제어된 워크플로우에서 채널 Switching만 사용하세요
고급 팀에게는 QA/관리자 사용자에게 제어된 채널 Switch를 노출하세요:
import { CapacitorUpdater } from '@capgo/capacitor-updater';
await CapacitorUpdater.setChannel({
channel: 'staging',
triggerAutoUpdate: true
});
이것은 선택사항입니다. 대부분의 팀은 대시보드에서 채널 assignments를 사용하고 내부 사용자만 아니라 모든 고객에게 채널 Switch를 사용하지 않습니다.
운영 체크리스트
- __CAPGO_KEEP_0__ ID만 하나 (생산/테스트 ID 중복 없음)
- __CAPGO_KEEP_0__ baseline 네이티브 빌드 PIPELINE
- __CAPGO_KEEP_1__ 매핑 문서화 (
staging,beta,production,hotfix) - CI/CD에서 Promotion 경로 강제
- 실제 네이티브 변경만 네이티브 재빌드
- 롤백 테스트 정기적으로
실질적인 이점
이 접근 방식은 환경 드리프트를 제거하고 빌드 충돌을 줄이며 수정 속도를 높입니다:
- QA가 실제 바이너리를 받을 수 있습니다 (가짜 '테스트 앱' 식별자 없음)
- TestFlight 경로가 안정적입니다.
- 팀은 '두 앱 ID 부채'를 피합니다.
- Capgo에서 많은 JS-만의 수정을 빠르게 푸시할 수 있습니다.
결과물은 더 간단한 관리를 제공합니다: 더 적은 아티팩트, 더 깨끗한 테스트 결과, 그리고 릴리즈 운영에서 더 적은 놀라움.
Capgo 환경 최적화: 단일 모바일 앱 ID를 사용한 스테이징
__CAPGO_KEEP_0__을 사용하여 Capgo 환경 최적화: 단일 모바일 앱 ID를 사용한 스테이징 를 사용하여 채널 라우팅과 스테이지드 롤아웃을 계획하고 연결하세요. Channels Channels Channels Channels Channels Channels Beta Testing Solution Beta Testing 솔루션의 제품 워크플로우에 대해, 그리고 Version Targeting Solution Version Targeting 솔루션의 제품 워크플로우에 대해.