팀들은 일반적으로 모바일 환경에 대한 세 가지 접근 방식 중 하나를 선택합니다.
- 두 개의 앱 ID (생산 + 미리 제작)
- 단일 앱 ID + 동적 런타임 환경switching
- 단일 앱 ID + Capgo 채널
첫 두 가지 방법은 작동할 수 있지만, 팀에서 장기적인摩擦를 일으키게 됩니다. 실제 팀에서는 Capgo 채널 모델이 일반적으로 가장 깨끗합니다.
중복된 앱 ID가 노이즈가 되는 이유
사용 com.myapp 및 com.myapp.beta 간단하게 보이지만, 빠르게 중복이 발생합니다:
- 두 개의 릴리스 PIPELINE
- 두 개의 푸시 ID, 깊은 링크 및 권한 매핑
- 두 개의 분석 및 충돌 식별자
- 환경 간에 일관성이 없는 동작과 다이버전트 구성
스토어 콘솔, 팀 및 내부 QA 지침을 관리하는 두 개의 제품으로 끝나게 됩니다.
런타임 Switching 구성이 종종 복잡한 이유
‘한 앱 ID + 런타임 Switch’ 패턴은 일반적으로 앱이 시작할 때 환경 변수 또는 플래그를 읽고 API, 키 및 업데이트 동작을 동적으로 재구성합니다.
이것은 다음까지 작동합니다.
- QA 팀이 의도하지 않은 흐름을 우회하기 시작할 때 구성 상태가陈舊해지면
- someone이 프로덕션에서 잘못된 엔드포인트를 사용할 때
- 환경 드리프트가 복잡한 버그를 일으키면
- 사용자 기기에서 “이 바이너리가 사용하는 구성 버전은 무엇인가?”를 디버그해야 할 때
그것의 복잡성이 각 릴리스마다 증가하고, 팀의 속도가 느려지는 곳입니다.
Capgo 방식: 하나의 앱 ID, 여러 채널
Capgo는 채널을 통해 환경 제어를 명확하게합니다.
- App Store / Play에서 하나의 프로덕션 앱 ID를 유지하세요.
- '쉘' (native 변경이 실제로 재빌드가 필요한 경우까지) 에 대한 한 개의 네이티브 바이너리를 배포하세요.
- 채널 대신 중복된 앱 식별성을 통해 동작을 라우팅하세요.
실제로 이것은 다음과 같습니다:
production: 모든 사용자staging: 내부 QA 및 릴리스 후보beta: 초대된 테스터hotfix:緊急 패치 트랙
TestFlight / Play 내부 테스트 앱은 여전히 __CAPGO_KEEP_0__에 머물 수 있습니다. 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) 테스트 플라이트는 '항상 전제 생산'으로 유지합니다.
iOS 워크플로우에서 이 의미는 테스트 플라이트 빌드가 전제 생산 업데이트와 연관되어 유지됩니다.
- JS 변경에 따라 자주 네이티브 제출을 하지 않습니다.
- QA는 실제 운영 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가 실제 바이너리를 받을 수 있고 (가짜 “스테이징 앱” 식별자 없이),
- 테스트 플라이트 경로가 안정적입니다.
- 팀이 “두 앱 ID 부채”를 피합니다.
- JS-만의 수정을 Capgo에서 빠르게 푸시할 수 있습니다.
결과적으로 simpler governance가 가능합니다: 더 적은 아티팩트, 더 깨끗한 테마트리, 그리고 릴리스 운영에서 더 적은 충격.