모바일 환경에 대한 접근 방식으로는 세 가지가 있습니다.
- 두 개의 앱 ID (생산 + 미리 제작)
- 한 개의 앱 ID + 동적 런타임 환경switching
- 한 개의 앱 ID + Capgo 채널
첫 두 가지 방법은 작동하지만, 장기적인摩擦를 유발합니다. 실제 팀에서는 Capgo 채널 모델이 일반적으로 가장 깨끗합니다.
중복된 앱 ID가 왜 소음이 되는지
Using com.myapp and com.myapp.beta duplication이 간단하게 보이지만, 빠르게 중복이 발생합니다.
- 두 개의 릴리스 PIPELINE
- 두 개의 push ID, deep link, 그리고 권한 매핑
- 두 개의 분석 및 충돌 ID
- 다양한 환경 설정과 불일치하는 동작
스토어 콘솔, 팀, 내부 QA 지침을 관리하는 두 개의 제품을 관리합니다.
런타임 Switching config의 문제점
앱 ID + 런타임 Switch 패턴은 일반적으로 앱이 시작할 때 환경 변수 또는 플래그를 읽고 API, 키, 업데이트 동작을 동적으로 재구성합니다.
이것은 다음까지 작동합니다.
- QA 팀이 의도하지 않은 흐름을 우회하는 경우
- someone이 프로덕션에서 잘못된 엔드포인트를 사용하는 경우
- 환경 드리프트가 복잡한 버그를 일으키는 경우
- 사용자 장치에서
이러한 복잡성은 각 릴리스와 함께 증가하고 팀의 속도는 느려집니다.
The Capgo way: one app ID, many channels
Capgo makes environment control explicit through channels:
- 1대 프로덕션 앱 ID만 App Store / Play에 유지하세요.
- ‘쉘’ (자연스러운 변경이 재빌드가 필요할 때까지) 에 대한 한 개의 네이티브 바이너리를 배포하세요.
- 채널에 따라 동작을 라우팅하세요, 앱 식별성을 중복하여 사용하지 마세요.
이것은 실제로 의미를 갖습니다:
production모든 사용자staging내부 QA 및 릴리즈 후보beta초대된 테스터hotfix긴급 패치 트랙
테스트 플라이트 / 플레이 내부 테스트 앱은 영구적으로 유지할 수 있습니다.
__CAPGO_KEEP_0__를 통해 JS/CSS/자산 업데이트를 반복적으로 수행할 수 있습니다. 새로운 네이티브 앱을 배포하지 않고도. staging forever.
You do JS/CSS/asset updates there repeatedly through Capgo without publishing a new native app.
1) 네이티브 릴리즈 베이스 라인
2) Channel 별로 분리된 자원
JS 반복으로 많은 native 바이너리가 변경되지 않습니다:
bun run build
bunx cap sync
# generate Xcode/Android Studio archives as usual
실제로 native surface area가 변경된 경우에만 native 바이너리를 재빌드합니다.
2) 환경별로 전용 채널을 사용하세요.
채널을 사용하여 업데이트를 공개하세요.
bun run build
bunx @capgo/cli deploy --channel staging
테스트를 QA에서 진행하고 문제를 해결한 후에 프로모션하세요.
bunx @capgo/cli promote vX.Y.Z --channel production
explicit 버전 관리를 선호하시면:
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 빌드는 pre-production 업데이트와 연관되어 있음을 의미합니다.
- JS 변경으로 인한 빈번한 native 제출이 없습니다.
- QA는 staging 채널을 통해 near-production code을 항상 유효성 검사합니다.
- 프로덕션 사용자는 프로모션된 프로덕션 채널 배포만 받습니다.
4) 제어된 워크플로우에서만 채널 Switching을 사용하세요.
고급 팀에게는 QA / 관리자 사용자에게 제어된 채널 Switch를 노출하세요:
import { CapacitorUpdater } from '@capgo/capacitor-updater';
await CapacitorUpdater.setChannel({
channel: 'staging',
triggerAutoUpdate: true
});
이것은 선택 사항입니다. 대부분의 팀은 채널 assignments를 대시보드에서 사용하고 내부 사용자만 아니라 모든 고객에게 채널 Switch를 사용하지 않습니다.
운영 체크리스트
- 한 개의 앱 ID만 (중복된 프로덕션 / 스테이징 ID가 없음)
- 한 개의 기본 네이티브 빌드 PIPELINE
- 채널 매핑 문서화 (
staging,beta,production,hotfix) - CI / CD에서 승격 경로가 강제됩니다
- 네이티브 리빌드만 네이티브 변경에 따라
- 롤백이 정기적으로 테스트됩니다
실용적인 이점
이 접근 방식은 환경漂移을 제거하고 빌드 충돌을 줄이고修정을 가속화합니다:
- QA가 실제 바이너리를 받을 수 있습니다 (가짜 "스테이징 앱" 식별자가 없음)
- TestFlight 경로가 안정적입니다.
- 팀은 "두 개의 앱 ID 부담"을 피합니다.
- Capgo에서 많은 JS-만의 수정을 빠르게 푸시할 수 있습니다.
결과는 더 간단한 관리: 더 적은 artifact, 더 깨끗한 모니터링, 릴리스 운영에서 더 적은 놀라움입니다.
Capgo 환경 최적화: 단일 모바일 앱 ID를 사용한 스테이징
__CAPGO_KEEP_0__ 환경 최적화: 단일 모바일 앱 ID를 사용한 스테이징 Capgo을 사용하여 채널 라우팅과 스테이지드 롤아웃을 계획하고 연결하세요. 채널 채널 채널 채널 채널 채널 Channels의 구현 세부 정보를 위해 Beta 테스트 솔루션 Beta 테스트 솔루션의 제품 워크플로우를 위해 버전 목표 솔루션 버전 목표 솔루션의 제품 워크플로우를 위해