버전 목표 설정
이 플러그인의 설치 지시어와 전체 마크다운 가이드를 포함한 설정 지시어를 복사하세요.
이 안내서에서는 사용자의 원본 앱 버전에 따라 최신 호환 가능한 번들을 자동으로 전달하는 방법을 설명합니다. Ionic AppFlow와 유사하게. 이로 인해 업데이트 관리가 단순화되고 롤아웃 속도가 빠르며 호환성 문제가 발생하지 않습니다.
Step-by-step 마이그레이션 지침을 참조하세요.
개요Capgo’s version targeting system allows you to:
- __CAPGO_KEEP_0__의 버전 대상 시스템은 사용자에게 다음을 제공합니다: 사용자에게 그들의 네이티브 앱 버전에 따라 제공
- 파괴적인 변경을 방지 일치하지 않는 앱 버전에 도달하는 것을 방지
- 여러 앱 버전을 관리 복잡한 논리를 사용하지 않고 동시에
- 업데이트를 무사히 배포 특정 사용자 세그먼트에
버전 타겟팅의 중요성 (특히 AppFlow 사용자에게 특히 중요합니다.)
버전 타겟팅의 중요성 (특히 AppFlow 사용자에게 특히 중요합니다.)이 섹션은 “버전 타겟팅의 중요성 (특히 AppFlow 사용자에게 특히 중요합니다.)”입니다. Ionic AppFlow를 사용해 보셨다면, 사용자가만한 호환 가능한 업데이트만 받도록 보장하는 것이 얼마나 중요하다는 것을 아실 것입니다. AppFlow는 네이티브 앱 버전과 일치하는 라이브 업데이트 패키지를 자동으로 매칭하여, 더 오래된 네이티브 code에 불일치하는 자바스크립트가 전달되는 것을 방지했습니다.
Capgo은 동일한 안전 보장 보장을 제공합니다., 추가 기능이 있습니다:
- 버전 일치에 대한 더 세부적인 제어
- 다중 전략 (채널, semver, 네이티브 제약)
- 버전 분포에 대한 더 나은 시야
- API과 CLI은 대시보드 관리와 함께 제어됩니다.
이 접근 방식은 특히 유용합니다:
- 사용자가 앱의 다른 주요 버전 (예: v1.x, v2.x, v3.x)에 있습니다.
- 파괴적인 변경 사항을 출시하는 동안 뒤로compatibility를 유지해야 할 때
- 새로운 번들을 사용하여 더 오래된 네이티브 code을 깨뜨리지 않도록 방지하고 싶을 때
- 사용자를 하나의 버전에서 다른 버전으로 점진적으로 마이그레이션할 때
- AppFlow에서 마이그레이션하는 경우 업데이트 안전성을 유지하고 싶습니다.
How It Works
How It WorksCapgo uses a multi-layered approach to match users with compatible updates:
- __CAPGO_KEEP_0__은 사용자와 호환 가능한 업데이트와 매칭하기 위해 다중 층 구조를 사용합니다:Native Version Constraints
- : 호환되지 않는 네이티브 버전으로 배포되는 패키지를 차단합니다.Channel-Based Routing
- : 앱 버전을 다중 채널로 라우팅합니다.Semantic Versioning Controls
- : 메이저/마이너/패치 경계를 자동으로 차단합니다.Device-Level Overrides
버전 일치 흐름
버전 일치 흐름 섹션graph TD A[User Opens App] --> B{Check Device Override} B -->|Override Set| C[Use Override Channel] B -->|No Override| D{Check local plugin channel} D -->|setChannel value| E[Use local setChannel channel] D -->|No local channel| F{Check defaultChannel in App} F -->|Has defaultChannel| G[Use App's defaultChannel] F -->|No defaultChannel| H[Use Cloud Default Channel] C --> I{Check Version Constraints} E --> I G --> I H --> I I -->|Compatible| J[Deliver Update] I -->|Incompatible| K[Skip Update]채널 기반 버전 라우팅 전략 1
채널 기반 버전 라우팅 전략 1 섹션이것은 권장하는 방법 파괴적인 변경과 주요 버전 업데이트 관리를 위한
앱플로우의 전달 모델과 유사합니다.
예시 시나리오- 예시 시나리오 섹션 앱 v1.x (100,000 명의 사용자) →
production채널 - App v2.x (50,000 사용자와 버그가 있는 변경 사항) →
v2채널 - App v3.x (10,000 베타 사용자) →
v3채널
구현
구현1단계: 각 주요 버전의 채널을 구성하십시오
1단계: 각 주요 버전의 채널을 구성하십시오// capacitor.config.ts for version 1.x buildsimport { CapacitorConfig } from '@capacitor/cli';
const config: CapacitorConfig = { appId: 'com.example.app', appName: 'Example App', plugins: { CapacitorUpdater: { autoUpdate: 'atBackground', defaultChannel: 'production', // or omit for default } }};
export default config;// capacitor.config.ts for version 2.x buildsconst config: CapacitorConfig = { appId: 'com.example.app', appName: 'Example App', plugins: { CapacitorUpdater: { autoUpdate: 'atBackground', defaultChannel: 'v2', // Routes v2 users automatically } }};// capacitor.config.ts for version 3.x buildsconst config: CapacitorConfig = { appId: 'com.example.app', appName: 'Example App', plugins: { CapacitorUpdater: { autoUpdate: 'atBackground', defaultChannel: 'v3', // Routes v3 users automatically } }};2단계: 채널 생성
2단계: 채널 생성# Create channels for each major versionnpx @capgo/cli channel create productionnpx @capgo/cli channel create v2npx @capgo/cli channel create v3
# Enable self-assignment so apps can switch channelsnpx @capgo/cli channel set production --self-assignnpx @capgo/cli channel set v2 --self-assignnpx @capgo/cli channel set v3 --self-assign3단계: 버전별 패키지 업로드
3단계: 버전별 패키지 업로드# For v1.x users (from v1-maintenance branch)git checkout v1-maintenancenpm run buildnpx @capgo/cli bundle upload --channel production
# For v2.x users (from v2-maintenance or main branch)git checkout mainnpm run buildnpx @capgo/cli bundle upload --channel v2
# For v3.x users (from beta/v3 branch)git checkout betanpm run buildnpx @capgo/cli bundle upload --channel v3Benefits
장점- Zero code changes Zero __CAPGO_KEEP_0__ changes
- 자동으로 __CAPGO_KEEP_0__ 변경이 필요하지 않습니다. - 채널 라우팅이 자동으로 발생합니다.
- - 각 버전은 자신의 업데이트 PIPELINE을 가집니다. - 특정 버전 그룹에 업데이트를 푸시합니다.
- - 불일치 버전에 영향을 주지 않는 브레이킹 변경이 안전하게 롤아웃됩니다. Clear separation
전략 2: 의미적 버전 제어
전략 2: 의미적 버전 제어Capgo의 내장 의미적 버전 제어를 사용하여 버전 경계를 넘어서 업데이트를 막습니다.
주 버전 간 자동 업데이트를 비활성화
터미널 창# Create a channel that blocks major version updatesnpx @capgo/cli channel create stable --disable-auto-update major앱 버전
- 업데이트를 받을 수 있습니다. 1.2.3 버전 1.9.9
- 사용자는 NOT 버전을 2.0.0 자동으로
- Prevents breaking changes from reaching older native code
- 버전 비교는 네이티브 베이스 라인으로 전송된
version_build
세부 조정 옵션
세부 조정 옵션# Block target bundles outside the native major.minor line (1.2.x won't get 1.3.0)npx @capgo/cli channel set stable --disable-auto-update minor
# Block target bundles outside the exact native MAJOR.MINOR.PATCH core (1.2.3 won't get 1.2.4)npx @capgo/cli channel set stable --disable-auto-update patch
# Allow all updatesnpx @capgo/cli channel set stable --disable-auto-update none전략 3: 네이티브 버전 제약
전략 3: 네이티브 버전 제약네이티브 앱 버전의 최소 버전 (min_update_version)을 각 번들을 통해 지정하여 Capgo은 네이티브 바이너리가 최신 버전인지 확인한 후에만 해당 기기에게 전달합니다.
이 전략은 채널 메타데이터 전략 (--disable-auto-update metadata)을 사용합니다. --min-update-version 또는 --auto-min-update-version __CAPGO_KEEP_0__ --native-version CLI flag.
채널에서 메타데이터 목표 설정
터미널 창# one-time: require min_update_version metadata on uploads to this channelnpx @capgo/cli@latest channel set production --disable-auto-update metadata최소 네이티브 버전을 업로드 시 설정
배포할 때는 받을 수 있는 가장 낮은 네이티브 버전을 전달하세요:터미널 창
# This bundle requires native version 2.0.0 or highernpx @capgo/cli@latest bundle upload \ --channel production \ --min-update-version "2.0.0"또는 Capgo이 원시 패키지 호환성으로부터 floor를 설정하십시오:
npx @capgo/cli@latest bundle upload \ --channel production \ --auto-min-update-version어떻게 작동하는가
Section titled “사용 사례”-
새로운 네이티브 플러그인 필요
터미널 창 # Bundle needs Camera plugin added in v2.0.0npx @capgo/cli@latest bundle upload \--channel production \--min-update-version "2.0.0" -
네이티브 API 변경 사항
터미널 창 # Bundle uses new Capacitor 6 APIsnpx @capgo/cli@latest bundle upload \--channel production \--min-update-version "3.0.0" -
점진적인 마이그레이션
터미널 창 # one-time: enable metadata gating on betanpx @capgo/cli@latest channel set beta --disable-auto-update metadata# Test bundle only on latest native versionnpx @capgo/cli@latest bundle upload \--channel beta \--min-update-version "2.5.0"
전략 4: 자동 다운그레이드 방지
Section titled “전략 4: 자동 다운그레이드 방지”최신 네이티브 버전보다 이전 버전의 패키지를 사용자에게 제공하지 않도록 방지합니다.
채널 설정에서 활성화
채널 설정에서 활성화Capgo 대시보드에서:
- 으로 이동 채널 채널
- → 채널을 선택하세요 활성화
- 네이티브 버전 하향 조정 자동 비활성화
Or via CLI:
npx @capgo/cli@latest channel set production --no-downgrade예시
제목 ‘예시’- 사용자의 기기: 네이티브 버전 1.2.5
- 채널 번들: 버전 1.2.3
- 결과: 업데이트가 차단됨 (다운그레이드일 경우)
이것은 유용할 때 사용합니다:
- 사용자가 앱 스토어에서 최신 버전을 수동으로 설치한 경우
- 보안 패치의 최신 버전을 항상 사용하도록 보장해야 하는 경우
- 회귀 버그를 방지하고 싶은 경우
전략 5: 기기 수준 타겟팅
‘기기 수준 타겟팅 전략 5’ 제목특정 기기 또는 사용자 그룹에 대한 채널 할당을 강제로 변경합니다.
테스트를 위해 특정 버전 강제
‘테스트를 위해 특정 버전 강제’ 제목import { CapacitorUpdater } from '@capgo/capacitor-updater'
// Force beta testers to use v3 channelasync function assignBetaTesters() { const deviceId = await CapacitorUpdater.getDeviceId()
// Check if user is beta tester if (isBetaTester(userId)) { await CapacitorUpdater.setChannel({ channel: 'v3' }) }}대시보드 기기 강제
‘대시보드 기기 강제’ 제목Capgo 대시보드에서:
- 가기 기기 → 기기를 찾기
- 클릭 채널 설정 또는 채널을 설정하거나 특정 채널 또는 버전을 오버라이드하세요
- 오버라이드한 소스에서 업데이트를 받는 장치
- 테스트 업데이트하기
완벽한 AppFlow-Style 워크플로우
다음은 모든 전략을结合한 완벽한 예시입니다:1. 초기 설정 (App v1.0.0)
1. App v1.0.0의 초기 설정
1. 초기 설정 (App v1.0.0)# Create production channel, then enable metadata min-version gatingnpx @capgo/cli@latest channel add productionnpx @capgo/cli@latest channel set production \ --disable-auto-update metadata \ --no-downgradeconst config: CapacitorConfig = { plugins: { CapacitorUpdater: { autoUpdate: 'atBackground', defaultChannel: 'production', } }};2. 릴리스 브레이킹 변경 (App v2.0.0)
제목: 2. 릴리스 브레이킹 변경 (App v2.0.0)# Create v2 channel for new versionnpx @capgo/cli@latest channel add v2npx @capgo/cli@latest channel set v2 \ --disable-auto-update metadata \ --no-downgrade \ --self-assign
# Create git branch for v1 maintenancegit checkout -b v1-maintenancegit push origin v1-maintenance// capacitor.config.ts for v2.0.0const config: CapacitorConfig = { plugins: { CapacitorUpdater: { autoUpdate: 'atBackground', defaultChannel: 'v2', // New users get v2 channel } }};3. 두 버전 모두에 업데이트를 푸시
제목: 3. 두 버전 모두에 업데이트를 푸시# Update v1.x users (bug fix)git checkout v1-maintenance# Make changesnpx @capgo/cli@latest bundle upload \ --channel production \ --min-update-version "1.0.0"
# Update v2.x users (new feature)git checkout main# Make changesnpx @capgo/cli@latest bundle upload \ --channel v2 \ --min-update-version "2.0.0"4. 버전 분포 모니터링
4. 버전 분포 모니터링 섹션Capgo 대시보드를 사용하여 다음과 같은 항목을 추적합니다:
- 버전 1과 버전 2의 사용자 수
- 버전별 패키지 채택률
- 버전별 오류 또는 충돌 횟수
5. 오래된 버전 폐지
5. 오래된 버전 폐지 섹션버전 1 사용량이 임계값 이하로 떨어질 때:
# Stop uploading to production channel# Optional: Delete v1 maintenance branchgit branch -d v1-maintenance
# Move all remaining users to default# (They'll need to update via app store)채널 우선순위
채널 우선순위여러 채널 구성이 존재할 때, Capgo은 이 우선순위 순서를 사용합니다.
- 디바이스 오버라이드 (대시보드 또는 API) - 우선순위가 가장 높고 디바이스 오버라이드 UI에서 표시됩니다.
- 로컬 플러그인 채널 via
setChannel()- 디바이스에만 저장되고 디바이스 오버라이드 UI에서 표시되지 않습니다. - defaultChannel in capacitor.config.ts
- 기본 채널 (Cloudflare 설정) - 가장 낮은 우선순위
최선의 방법
제목: 최선의 방법1. 항상 Major 버전의 defaultChannel을 설정하세요.
1. 항상 메이저 버전에서 기본 채널을 설정하세요// ✅ Good: Each major version has explicit channel// v1.x → production// v2.x → v2// v3.x → v3
// ❌ Bad: Relying on dynamic channel switching// All versions → production, switch manually2. 의미론적 버전 관리 사용
2. 의미론적 버전 관리 사용# ✅ Good1.0.0 → 1.0.1 → 1.1.0 → 2.0.0
# ❌ Bad1.0 → 1.1 → 2 → 2.53. 별도의 branch 유지
3. 별도의 branch 유지# ✅ Good: Separate branches per major versionmain (v3.x)v2-maintenance (v2.x)v1-maintenance (v1.x)
# ❌ Bad: Single branch for all versions4. 배포 전 테스트
4. 배포 전 테스트# one-time: create beta and enable metadata gating# (production is set up in the complete workflow above)npx @capgo/cli@latest channel add betanpx @capgo/cli@latest channel set beta --disable-auto-update metadata
# Test on beta channel firstnpx @capgo/cli@latest bundle upload \ --channel beta \ --auto-min-update-version
# Monitor for issues, then promote to productionnpx @capgo/cli@latest bundle upload \ --channel production \ --auto-min-update-version5. 버전 분포 확인
5. 버전 분포 확인 섹션정기적으로 대시보드를 확인하세요:
- 사용자가 최신 네이티브 버전으로 업그레이드하고 있는지 확인하세요?
- 고래 버전이 여전히 높은 트래픽을 받고 있는지 확인하세요?
- 고래 채널을 deprecated 해야 하나요?
Capacitor와 Ionic AppFlow의 비교
Capacitor와 Ionic AppFlow의 비교 섹션Ionic AppFlow로 이전하는 팀에게 Ionic AppFlow로 이전하는 팀에게버전 대상 설정은 Capgo의 버전 대상 설정과 어떻게 다른가요?
| 기능 | Ionic AppFlow | Capgo |
|---|---|---|
| 버전 기반 라우팅 | 자연스러운 버전 | 자연스러운 버전 defaultChannel via |
| + 여러 전략 | Semantic 버전 | 기본 지원 --disable-auto-update 고급에 의해 |
| 자연스러운 버전 제한 | 앱 플로우 대시보드에서 수동 구성 | 내장 --min-update-version / --auto-min-update-version 메타데이터 채널과 함께 |
| 채널 관리 | 웹 UI + CLI | 웹 UI + CLI + API |
| 기기 오버라이드 | 기기 수준 제한 | Full control via Dashboard/API |
| 다운그레이드 방지 | 예 | 네, 채널을 통해 --no-downgrade |
| 다중 버전 유지 | 수동 채널/branch 관리 | 채널 우선 순위로 자동화 |
| 자체 호스팅 | 아니오 | 네 (전체 제어) |
| 버전 분석 | 기본 | 버전별 상세 메트릭 |
__CAPGO_KEEP_0__의 "문제 해결"
사용자가 업데이트를 받지 않는다__CAPGO_KEEP_0__의 "사용자가 업데이트를 받지 않는다"
다음 사항을 확인하세요:채널 assignments
-
: 디바이스가 올바른 채널에 있는지 확인하세요클립보드 복사
const channel = await CapacitorUpdater.getChannel()console.log('Current channel:', channel) -
__CAPGO_KEEP_0__은 제공합니다.: 버전 요구 사항이 있는 번들을 확인하세요.
- 대시보드 → 번들 → '자연어 버전' 열을 확인하세요.
-
Semver 설정: 채널의
disable-auto-update설정터미널 창 npx @capgo/cli channel list -
장치 오버라이드: 장치가 수동 오버라이드를 가지고 있는지 확인하세요.
- 대시보드 → 장치 → 장치 검색 → 채널/버전 확인
잘못된 버전으로 번들이 전달된 경우
잘못된 버전으로 번들이 전달된 경우- 기본 채널 검토: 올바른 채널이
capacitor.config.ts - 배포 패키지 확인: 올바르게 업로드된 패키지를 확인합니다.
- 최소 업데이트 버전 검사: 확인합니다.
--min-update-version(또는--auto-min-update-version)이 설정되어 있으며 채널이--disable-auto-update metadata
기존 버전에 영향을 미치는 변경 사항
기존 버전에 영향을 미치는 변경 사항- 즉시 수정: 영향을 받은 기기를 안전한 패키지로 업그레이드합니다.
- 대시보드 → 기기 → bulk 선택 → 버전 설정
- 장기적인 해결책: 버전별 채널을 만들고 별도의 branch를 유지합니다.
- 예방: 업데이트 테스트를 대표 기기에서 rollout하기 전에 항상 수행합니다.
Ionic AppFlow에서 마이그레이션
Ionic AppFlow에서 마이그레이션하는 경우버전 타겟팅은 __CAPGO_KEEP_0__에서 개선된 유연성을 제공하는 Ionic AppFlow와 매우 유사합니다. 개념 매핑, version targeting works very similarly in Capgo, with improved flexibility:
If you’re migrating from
Ionic AppFlow| 앱 플로우 개념 | Capgo 동등 | 주석 |
|---|---|---|
| 배포 채널 | Capgo 채널 | 같은 개념, 더 강력한 기능 |
| 자연스러운 버전 잠금 | --min-update-version / --auto-min-update-version | 더 세분화된 제어 |
| 채널 우선순위 | 채널 우선순위 (override → 클라우드 → 기본) | 더 투명한 우선순위 |
| 배포 대상 | __CAPGO_KEEP_0__ | __CAPGO_KEEP_0__ |
| __CAPGO_KEEP_0__ | production __CAPGO_KEEP_0__ | __CAPGO_KEEP_0__ |
| __CAPGO_KEEP_0__ | CLI | __CAPGO_KEEP_0__ |
| __CAPGO_KEEP_0__ | defaultChannel __CAPGO_KEEP_0__ | __CAPGO_KEEP_0__ |
__CAPGO_KEEP_0__
Section titled “AppFlow 사용자에 대한 주요 차이점”- 더 많은 제어: Capgo은 여러 전략 (채널, semver, 네이티브 버전)을 제공하여 combination
- 더 나은 시각화: __CAPGO_KEEP_0__ Dashboard는 버전 분포 및 호환성 문제를 보여줍니다.
- API 접근: 버전 타겟팅에 대한 전체 프로그래밍 제어
- 자체 호스팅: 동일한 버전 로직으로 업데이트 서버를 운영하는 옵션
- AppFlow 채널을 맵핑하세요 Capgo 채널 (일반적으로 1:1)
- 설정
defaultChannel에서capacitor.config.ts각 메이저 버전 - semver 규칙 구성 버전 경계에서 자동 차단을 원한다면
- 버전별 패키지를 업로드 using
--min-update-version(채널은 메타데이터 전략을 사용해야 함) - 버전 분포를 모니터링 에서 Capgo 대시보드
고급 패턴
고급 패턴버전별 점진적인 출시
버전별 점진적인 출시// Gradually migrate v1 users to v2async function migrateUsers() { const deviceId = await CapacitorUpdater.getDeviceId() const rolloutPercentage = 10 // Start with 10%
// Hash device ID to get deterministic percentage const hash = hashCode(deviceId) % 100
if (hash < rolloutPercentage) { // User is in rollout group - migrate to v2 await CapacitorUpdater.setChannel({ channel: 'v2' }) }}버전별 기능 플래그
버전별 기능 플래그// Enable features based on native versionasync function checkFeatureAvailability() { const info = await CapacitorUpdater.getDeviceId() const nativeVersion = info.nativeVersion
if (compareVersions(nativeVersion, '2.0.0') >= 0) { // Enable features requiring v2.0.0+ enableNewCameraFeature() }}버전 간 A/B 테스트
버전별 테스트를 위해 ‘A/B 테스트’// Run A/B tests within same native versionasync function assignABTest() { const nativeVersion = await getNativeVersion()
if (nativeVersion.startsWith('2.')) { // Only A/B test on v2 users const variant = Math.random() < 0.5 ? 'v2-test-a' : 'v2-test-b' await CapacitorUpdater.setChannel({ channel: variant }) }}개요
개요Capgo은 여러 전략을 제공하여 버전별 업데이트 전달을 지원합니다:
- 채널 기반 라우팅: 버전을 자동으로 분리하는
defaultChannel - Semantic Versioning: 메이저/마이너/패치 경계를 넘어서 업데이트를 방지합니다
- 네이티브 버전 제약: 네이티브 버전의 최소 버전을 요구합니다
- 자동 다운그레이드 방지: 새로운 버전의 네이티브로 전달되는 더 오래된 번들을 절대 전송하지 마세요.
- 기기 우선순위: 테스트 및 목표를 위해 수동 제어
이러한 전략을结合하면 더 많은 유연성과 제어가 있는 AppFlow-style 자동 업데이트 전달을 달성할 수 있습니다. 앱의 버전 및 배포 워크플로에 가장 적합한 방법을 선택하세요.
특정 기능에 대한 자세한 내용은 다음과 같습니다:
버전 목표화에서 계속
Section titled “Version Targeting에서 계속하기”버전 타겟팅을 사용 중이라면 버전 타겟팅 버전 타겟팅 채널 라우팅과 스테이지드 롤아웃을 계획하고 채널 채널 채널 채널 채널 베타 테스트 솔루션 베타 테스트 솔루션의 제품 워크플로우에서 버전 목표 솔루션 버전 목표 솔루션의 제품 워크플로우에 대한