__CAPGO_KEEP_0__ 환경 최적화 방법: 단일 모바일 앱 ID를 사용한 스테이징
- 모바일 환경을 위한 팀은 일반적으로 세 가지 방법 중 하나를 선택합니다.
- 두 개의 앱 ID(프로덕션 + 프리 프로덕션)
- One app ID + Capgo channels
첫 두 가지는 작동하지만, 그들은 장기적인摩擦를 일으킵니다. 실제 팀에서 Capgo 채널 모델은 일반적으로 가장 깨끗합니다.
중복된 앱 ID가 왜 소음이 되는지
Using com.myapp 및 com.myapp.beta 보여지는 것처럼 간단해 보이지만, 빠르게 중복이 발생합니다.
- 두 개의 릴리스 PIPELINE
- 두 개의 PUSH ID, 깊은 링크, 그리고 권한 매핑
- 두 개의 분석 및 충돌 ID
- 환경 간에 다소한 구성 및 불일치된 동작
마지막으로, 두 개의 제품을 스토어 콘솔, 팀 및 내부 QA 지침을 관리해야 합니다.
Why 런타임-switching config가 종종 지저분한지
'한 앱 ID + 런타임 switch' 패턴은 일반적으로 앱이 시작할 때 환경 변수 또는 플래그를 읽고 API, 키 및 업데이트 동작을 동적으로 재구성합니다.
이것은 다음까지 작동합니다:
- QA는 의도하지 않은 흐름을 우회하기 시작합니다. (config 상태가 오래되어)
- someone은 프로덕션에서 잘못된 엔드포인트를 사용합니다.
- 환경의 변화로 복잡한 버그가 발생합니다.
- 사용자 기기에서 “이 바이너리가 어떤 config 버전을 사용하는지?”를 디버깅해야 합니다.
이 복잡성은 각 릴리즈마다 증가하고 팀의 속도는 느려집니다.
The Capgo way: one app ID, many channels
Capgo makes environment control explicit through channels:
- App Store / Play에서 하나의 프로덕션 앱 ID를 유지합니다.
- “쉘” (native 변경이真的 재빌드가 필요할 때까지) 에 대한 한 개의 네이티브 바이너리를 배포합니다.
- 채널에 따라 동작을 라우팅하고, 중복된 앱 식별자에 따라하지 않습니다.
이것은 실제로 의미합니다:
production: 모든 사용자staging: 내부 QA 및 릴리즈 후보자beta: 초대된 테스터hotfix:緊急 패치 트랙
Your 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) TestFlight “always pre-prod”를 항상 유지하세요
iOS 워크플로우에서 이 말은 TestFlight 빌드가 미리 제작 업데이트와 연관이 유지되도록 해줍니다:
- JS 변경에 따라 자주 네이티브 제출이 필요하지 않습니다.
- QA는 근처의 프로덕션 code를 스테이징 채널을 통해 검증합니다.
- 프로덕션 사용자는 승격된 프로덕션 채널 배포만 받습니다.
4) 제어된 워크플로우에서 채널 Switching만 사용하세요
고급 팀에게는 제어된 채널 Switching을 QA/관리자 사용자에게 노출하세요:
import { CapacitorUpdater } from '@capgo/capacitor-updater';
await CapacitorUpdater.setChannel({
channel: 'staging',
triggerAutoUpdate: true
});
이것은 선택사항입니다. 대부분의 팀은 대시보드에서 채널 assignments를 사용하고 내부 사용자만 아니라 모든 고객에게 채널 Switching을 사용하지 않습니다.
운영 체크리스트
- 한 앱 ID만 사용하세요 (중복된 프로덕션/스테이징 ID가 없습니다)
- 원본 네이티브 빌드 PIPELINE
- 채널 매핑 문서화 (
staging,beta,production,hotfix) - CI/CD에서 프로모션 경로 강제
- 실제 네이티브 변경만 재빌드
- 롤백 정기적으로 테스트
실용적인 이점
이 접근 방식은 환경漂移을 제거하고 빌드 충돌을 줄이고修정을 가속화합니다:
- QA가 실제 바이너리를 받을 수 있고 (가짜 '스테이징 앱' 식별자가 없음),
- 테스트 플라이트 경로가 안정적이므로
- 팀이 '두 앱 ID 부채'를 피할 수 있습니다
- JS-만의 수정을 Capgo에서 빠르게 푸시할 수 있습니다.
결과적으로, 관리가 더 단순화됩니다: fewer artifacts, cleaner telemetry, 그리고 릴리스 운영에서 더 많은驚き가 있습니다.
Capgo 환경 최적화: 단일 모바일 앱 ID를 사용한 스테이징
__CAPGO_KEEP_0__ 환경 최적화: 단일 모바일 앱 ID를 사용한 스테이징 Capgo 환경 최적화: 단일 모바일 앱 ID를 사용한 스테이징 __CAPGO_KEEP_0__ 환경 최적화: 단일 모바일 앱 ID를 사용한 스테이징 채널 채널 채널 채널 베타 테스트 솔루션 제품 워크플로우 __CAPGO_KEEP_0__ 환경 최적화: 단일 모바일 앱 ID를 사용한 스테이징 __CAPGO_KEEP_0__ 환경 최적화: 단일 모바일 앱 ID를 사용한 스테이징 버전 목표 솔루션 버전 목표 솔루션을 위한 제품 워크플로우