버전 목표 설정
설치 단계와 이 플러그인의 전체 마크다운 가이드를 포함한 설정 지시를 복사합니다.
이 가이드는 사용자의 원시 앱 버전에 따라 최신 호환 가능한 번들을 자동으로 제공하는 방법을 설명합니다. 이것은 Ionic AppFlow의 접근 방식과 유사합니다.이것은 업데이트를 단순화하고 빠른 롤아웃을 제공하며 호환성 문제를 방지합니다.
개요
개요Capgo의 버전 목표 시스템은 다음과 같은 기능을 제공합니다:
- 사용자에게 자동으로 호환 가능한 업데이트를 제공합니다. 사용자의 원본 앱 버전에 따라 업데이트를 제공합니다.
- 비호환 앱 버전에 도달하는 깨진 변경 사항을 방지합니다. 여러 앱 버전을 동시에 관리할 필요가 없습니다.
- 복잡한 논리를 사용하지 않고 여러 앱 버전을 동시에 관리할 수 있습니다. 특정 사용자 세그먼트에 업데이트를 무중단으로 제공합니다.
- 버전 목표가 왜 중요합니까 (특히 AppFlow 사용자에게)? 버전 목표가 왜 중요합니까 (특히 AppFlow 사용자에게)라는 제목의 섹션
버전 목표가 왜 중요합니까 (특히 AppFlow 사용자에게)라는 제목의 섹션
버전 목표가 왜 중요합니까 (특히 AppFlow 사용자에게)라는 제목의 섹션버전 목표가 왜 중요합니까 (특히 AppFlow 사용자에게)라는 제목의 섹션 Ionic AppFlow사용자가 호환되지 않은 업데이트만을 받는 것을 보장하기 위해, 사용자에게 호환되지 않은 업데이트만을 받는 것을 보장하기 위해 AppFlow는 라이브 업데이트 번들을 네이티브 앱 버전과 자동으로 매칭시켜 호환되지 않은 자바스크립트가 더 오래된 네이티브 code에 전달되는 것을 방지합니다.
Capgo은 동일한 안전 보장 조치를 제공합니다., 추가 기능:
- 버전 매칭에 대한 더 세밀한 제어
- 다중 전략 (채널, semver, 네이티브 제약)
- 버전 분포에 대한 더 나은 시야
- API과 CLI은 대시보드 관리와 함께 제어됩니다.
이 접근 방식은 특히 유용합니다:
- 사용자가 앱의 다른 주요 버전을 사용하고 있습니다 (예: v1.x, v2.x, v3.x)
- 파괴적인 변경 사항을 출시하는 동안 뒤로compatibility를 유지해야 할 때
- 새로운 번들을 더 오래된 네이티브 code에 깨뜨리지 않도록 방지하고 싶을 때
- You’re migrating users gradually from one version to another
- You’re migrating from AppFlow and want to maintain the same update safety
How It Works
How It WorksCapgo은 사용자들을 호환 가능한 업데이트와 매치하기 위해 다중 층 구조를 사용합니다:
- Native Version Constraints: 호환되지 않는 네이티브 버전으로 배포되는 패키지를 차단합니다.
- Channel-Based Routing: 앱 버전을 다르게 업데이트 채널로 라우팅합니다.
- Semantic Versioning Controls: 메이저/마이너/패치 경계를 자동으로 차단하여 업데이트를 막습니다.
- __CAPGO_KEEP_0__: __CAPGO_KEEP_0__를 대상으로 하거나 사용자 그룹을 대상으로 하세요
__CAPGO_KEEP_1__
: __CAPGO_KEEP_1__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]__CAPGO_KEEP_3__:__CAPGO_KEEP_4__
__CAPGO_KEEP_5__: __CAPGO_KEEP_6__:__CAPGO_KEEP_7__ __CAPGO_KEEP_8__ : __CAPGO_KEEP_9__
- App v1.x (100,000 사용자) →
production채널 - App v2.x (50,000 사용자와 버그修정) →
v2채널 - App v3.x (10,000 베타 사용자) →
v3채널
구현
구현1단계: 각 주요 버전의 채널을 구성하십시오
Step 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 } }};Step 2: 채널 생성하기
Step 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-assignStep 3: 버전별로 업로드할 패키지
Step 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 v3혜택
혜택- Zero code 변경 - 채널 라우팅이 자동으로 발생합니다.
- 분리 - 각 버전에는 자신의 업데이트 PIPELINE이 있습니다.
- flexible targeting - 특정 버전 그룹에 푸시 업데이트를 전송합니다.
- 안전한 롤아웃 - 불일치 버전으로 가는 변경 사항은 절대 도달하지 않습니다
버전 제어 전략 2: 의미 있는 버전
버전 제어 전략 2: 의미 있는 버전Capgo의 내장 의 의미 있는 버전 제어를 사용하여 업데이트가 버전 경계를 넘지 않도록 방지합니다.
주요 버전에서 자동 업데이트 비활성화
주요 버전에서 자동 업데이트 비활성화# Create a channel that blocks major version updatesnpx @capgo/cli channel create stable --disable-auto-update major이 구성은 다음과 같습니다:
- 앱 버전의 사용자 1.2.3 __CAPGO_KEEP_0__ 버전까지의 업데이트를 받을 것입니다. 1.9.9
- 사용자는 아니오 __CAPGO_KEEP_0__ 버전을 2.0.0 자동으로
- 오래된 네이티브 code 에서 발생하는 깨지는 변경 사항을 막습니다.
- 비교는 __CAPGO_KEEP_0__ 버전의 네이티브 베이스 라인으로 전송된 것을 사용합니다.
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 noneStrategy 3: Native Version Constraints
Strategy 3: Native 버전 제한Native 버전 제한을 지정하여 배달을 불일치하는 기기에 방지합니다.
Using nativeVersion Delay Condition
Native 버전 Delay 조건 사용업로드할 때, 배달을 불일치하는 기기에 방지하기 위해 Native 버전의 최소값을 지정할 수 있습니다.
# This bundle requires native version 2.0.0 or highernpx @capgo/cli bundle upload \ --channel production \ --native-version "2.0.0"사용 사례
사용 사례-
새로운 원시 플러그인이 필요합니다
터미널 창 # Bundle needs Camera plugin added in v2.0.0npx @capgo/cli bundle upload --native-version "2.0.0" -
원시 API 변경 사항
터미널 창 # Bundle uses new Capacitor 6 APIsnpx @capgo/cli bundle upload --native-version "3.0.0" -
점진적인 마이그레이션
터미널 창 # Test bundle only on latest native versionnpx @capgo/cli bundle upload \--channel beta \--native-version "2.5.0"
Strategy 4: Auto-Downgrade Prevention
Strategy 4: Auto-Downgrade Prevention 섹션사용자가 현재 사용 중인 네이티브 버전보다 이전 버전의 패키지를 받는 것을 방지합니다.
채널 설정에서 활성화
Strategy 4: Auto-Downgrade Prevention 섹션Capgo 대시보드에서:
- Go to 채널 → 채널을 선택하세요
- Enable “자연어 버전에서 자동 다운그레이드를 비활성화하세요”
- 변경 사항 저장
또는 CLI:를 통해
npx @capgo/cli channel set production --disable-downgrade- 사용자의 기기: 네이티브 버전 1.2.5
- 채널 번들: 버전 1.2.3
- 결과: __CAPGO_KEEP_0__ (최신 버전으로 다운그레이드 될 것입니다.)
This is useful when:
- 앱스토어에서 사용자가 최신 버전을 수동으로 설치했습니다.
- 사용자가 항상 최신 보안 패치를 받을 수 있도록 보장해야 할 때
- 회귀 버그를 방지하고 싶을 때
전략 5: 기기 수준 타겟팅
기기 수준 타겟팅특정 기기 또는 사용자 그룹에 대한 채널 할당을 강제로 Override합니다.
테스트를 위해 특정 버전 강제
테스트를 위해 특정 버전 강제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' }) }}기기 Override 대시보드
대시보드 기기 우선순위Capgo 대시보드에서:
- 로 이동하세요 기기 → 기기를 찾으세요
- 클릭 채널 설정 또는 버전 설정
- 특정 채널 또는 패키지 버전으로 우선순위 설정
- 기기는 우선순위 설정된 소스에서 업데이트를 받습니다
완전한 AppFlow-Style 워크플로
제목 '완전한 AppFlow-Style 워크플로'다음 예제는 모든 전략을 combination하는 완전한 예제입니다.
1. 초기 설정 (App v1.0.0)
제목 '1. 초기 설정 (App v1.0.0)'# Create production channel with semver controlsnpx @capgo/cli channel create production \ --disable-auto-update major \ --disable-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 channel create v2 \ --disable-auto-update major \ --disable-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 } }};2. 버전 1과 버전 2 모두에 업데이트를 푸시합니다.
버전 2. Push Updates to Both Versions# Update v1.x users (bug fix)git checkout v1-maintenance# Make changesnpx @capgo/cli bundle upload \ --channel production \ --native-version "1.0.0"
# Update v2.x users (new feature)git checkout main# Make changesnpx @capgo/cli bundle upload \ --channel v2 \ --native-version "2.0.0"3. 버전 1과 버전 2의 분포를 모니터링합니다.
버전 1과 버전 2의 분포를 모니터링합니다.Capgo 대시보드를 사용하여 추적하세요.
- 버전 1과 버전 2의 사용자 수를 비교하세요.
- 버전별로 사용률
- 버전별로 오류 또는 충돌
5. 사용 중인 버전을 폐기
5. 사용 중인 버전을 폐기v1 사용률이 임계값 이하로 떨어지면:
# 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()- 장치에만 저장되어 Device Override UI에 표시되지 않습니다. - 기본 채널 capacitor.config.ts에
- 기본 채널 (Cloud 설정) - 우선순위가 가장 낮습니다.
최선의 방법
제목: 최선의 방법1. 메이저 버전에서 기본 채널을 항상 설정하십시오
제목: 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. 배포 전 테스트하세요# Test on beta channel firstnpx @capgo/cli bundle upload --channel beta
# Monitor for issues, then promote to productionnpx @capgo/cli bundle upload --channel production5. 버전 분포를 모니터링하세요
5. 버전 분포를 모니터링하세요정기적으로 대시보드를 확인하세요:
- 사용자가 최신 네이티브 버전으로 업그레이드하고 있나요?
- 어떤 버전은 여전히 높은 트래픽을 받고 있나요?
- 어떤 채널은 deprecated 해야 하나요?
Ionic AppFlow와의 비교
Ionic AppFlow와의 비교 섹션Ionic AppFlow에서 팀이 이주할 때 __CAPGO_KEEP_0__의 버전 대상 설정은 어떻게 비교되나요?, here’s how Capgo’s version targeting compares:
| Ionic AppFlow | __CAPGO_KEEP_0__ | Capgo |
|---|---|---|
| 자연스럽게 native 버전에 따라 자동 설정 | __CAPGO_KEEP_0__ | 자동화된 방법 defaultChannel 다중 전략을 통해 |
| Semantic 버전 | 기본 지원 | 고급 --disable-auto-update (major/minor/patch) |
| 원본 버전 제약 | AppFlow 대시보드에서 수동 설정 | 내장 --native-version CLI 플래그 |
| 채널 관리 | 웹 UI + CLI | 웹 UI + CLI + API |
| 기기 오버라이드 | 기기 수준 제한 | API를 통해 전체 제어 |
| 다운그레이드 예방 | Yes | Yes via --disable-downgrade |
| 다중 버전 유지 | 수동 branch/channel 관리 | 채널 우선순위로 자동화 |
| 자체 호스팅 | No | Yes (full control) |
| 버전 분석 | 기본 | 세부 버전 메트릭 |
‘문제 해결’ 섹션
사용자가 업데이트를 받지 못할 때사용자가 업데이트를 받지 못하는 경우
사용자들이 업데이트를 받지 못하는 문제다음 사항을 확인하세요:
-
채널 assignments: 장치가 올바른 채널에 있는지 확인하세요
const channel = await CapacitorUpdater.getChannel()console.log('Current channel:', channel) -
버전 제약 조건: 번들에 네이티브 버전 요구 사항이 있는지 확인하세요
- 대시보드 → 번들 → '네이티브 버전' 열람
-
Semver Settings: 채널의
disable-auto-update설정터미널 창 npx @capgo/cli channel list -
기기 우선순위: 기기에서 우선순위를 수동으로 설정했는지 확인
- 대시보드 → 기기 → 기기를 검색 → 채널/버전 확인
잘못된 버전으로 패키지 전달
잘못된 버전으로 패키지 전달- 기본 채널 검토: 올바른 채널을
capacitor.config.ts - 패키지 업로드 확인: 올바른 채널로 패키지를 업로드했는지 확인
- 네이티브 버전 검사: 올바른 버전인지 확인
--native-version__CAPGO_KEEP_0__
__CAPGO_KEEP_1__
__CAPGO_KEEP_2__- __CAPGO_KEEP_3____CAPGO_KEEP_4__
- __CAPGO_KEEP_5__
- __CAPGO_KEEP_6____CAPGO_KEEP_7__
- __CAPGO_KEEP_8____CAPGO_KEEP_9__
__CAPGO_KEEP_10__
__CAPGO_KEEP_11__If you’re migrating from Ionic AppFlow, Capgo 버전이 매우 유사합니다. 더 많은 유연성을 제공합니다:
개념 매핑
개념 매핑| AppFlow Concept | Capgo 개념 | 주석 |
|---|---|---|
| 배포 채널 | Capgo 채널 | 같은 개념, 더 강력합니다 |
| 네이티브 버전 잠금 | --native-version 국기 | 더 세부적인 제어 |
| 채널 우선순위 | 채널 우선순위 (override → cloud → default) | 더 투명한 우선순위 |
| 배포 대상 | 채널 + semver 제어 | 여러 전략이 사용 가능 |
| 생산 채널 | production 채널 (또는 임의의 이름) | 이름이 유연한 |
| Git 기반 배포 | CLI 분할 업로드 (branch) | Same workflow |
| 자동 버전 일치 | defaultChannel 버전 제약 조건 추가 | 다중 전략을 지원하는 강화 |
AppFlow 사용자들을 위한 주요 차이점
AppFlow 사용자들을 위한 주요 차이점- 더 많은 제어Capgo은 여러 전략 (채널, semver, 네이티브 버전)을 combination할 수 있습니다.
- 더 나은 시각화__CAPGO_KEEP_0__은 버전 분포 및 호환성 문제를 보여주는 대시보드를 제공합니다.
- API 접근: __targetLanguage__에서 프로그램의 버전을 완전히 제어할 수 있습니다.
- Self-Hosting: __targetLanguage__에서 업데이트를 관리하는 옵션입니다.
Migration Steps
버전 업그레이드 방법- AppFlow 채널을 __CAPGO_KEEP_0__ 채널로 매핑하세요 (일반적으로 1:1) to Capgo channels (usually 1:1)
- 버전
defaultChannel버전별로capacitor.config.ts버전 규칙을 설정하세요 - 버전 경계에서 자동으로 차단하고 싶다면 버전 규칙
- __CAPGO_KEEP_0__ 버전별 패키지 업로드 __CAPGO_KEEP_0__를 사용하여
--native-version__CAPGO_KEEP_0__ - __CAPGO_KEEP_0__ 버전 분포를 모니터링 Capgo 대시보드에서
__CAPGO_KEEP_0__
__CAPGO_KEEP_0____CAPGO_KEEP_0__ 버전별로 점진적인 롤아웃
__CAPGO_KEEP_0__ 버전별 업데이트 전달을 위한 여러 전략을 제공합니다:// 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' }) }}버전별 특징 플래그
__CAPGO_KEEP_0__ 버전별 특징 플래그// 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 테스트
__CAPGO_KEEP_0__ 버전별 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 provides multiple strategies for version-specific update delivery:
- __CAPGO_KEEP_0__ 버전별 업데이트 전달을 위한 여러 전략을 제공합니다:: 자동 버전 분리
defaultChannel - Semantic Versioning: 메이저/마이너/패치 버전 경계를 넘지 않도록 업데이트를 방지
- Native Version Constraints: 번들에 대한 최소 네이티브 버전을 요구
- Auto-Downgrade Prevention: 최신 네이티브 버전으로 업데이트된 번들을 이전 네이티브 버전으로 전달하지 않도록
- Device Overrides: 테스트 및 목표 설정을 위해 수동 제어
이러한 전략을结合하면 AppFlow-style 자동 업데이트 전달과 더 많은 유연성과 제어가 가능합니다. 앱의 버전 관리 및 배포 워크플로에 가장 적합한 방법을 선택하세요.
자세한 정보는 특정 기능에 대한 문서를 참조하세요:
- Breaking Changes Guide - __CAPGO_KEEP_0__ 채널 버전 관리 전략
- 채널 관리 - __CAPGO_KEEP_1__ 채널 구성 매뉴얼
- 업데이트 동작 - __CAPGO_KEEP_2__ 네이티브 버전 지연 및 조건
버전 목표 지속
버전 목표 지속 섹션버전 목표 지속 섹션 버전 목표 지속을 사용하여 채널 라우팅과 스테이지드 롤아웃을 계획하고 채널을 연결하여 채널 관리 채널 채널 구현 세부 정보에 대한 채널 채널 채널 구현 세부 정보에 대한 채널 베타 테스트 솔루션 베타 테스트 솔루션의 제품 워크플로에 대한 버전 대상 솔루션 버전 대상 솔루션의 제품 워크플로에 대한