사용자의 원본 앱 버전에 따라 호환 가능한 업데이트 자동 배포 - __CAPGO_KEEP_0__ 앱의 업데이트 관리를 실시간으로 하려면 저장소 문제 없이...

버전 목표 설정

이 가이드는 사용자의 원시 앱 버전에 따라 최신 호환 가능한 번들을 자동으로 제공하는 방법을 설명합니다. 이것은 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 Works

Capgo은 사용자들을 호환 가능한 업데이트와 매치하기 위해 다중 층 구조를 사용합니다:

  1. Native Version Constraints: 호환되지 않는 네이티브 버전으로 배포되는 패키지를 차단합니다.
  2. Channel-Based Routing: 앱 버전을 다르게 업데이트 채널로 라우팅합니다.
  3. Semantic Versioning Controls: 메이저/마이너/패치 경계를 자동으로 차단하여 업데이트를 막습니다.
  4. __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 builds
import { 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 builds
const 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 builds
const 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 version
npx @capgo/cli channel create production
npx @capgo/cli channel create v2
npx @capgo/cli channel create v3
# Enable self-assignment so apps can switch channels
npx @capgo/cli channel set production --self-assign
npx @capgo/cli channel set v2 --self-assign
npx @capgo/cli channel set v3 --self-assign

Step 3: 버전별로 업로드할 패키지

Step 3: 버전별로 업로드할 패키지
터미널 창
# For v1.x users (from v1-maintenance branch)
git checkout v1-maintenance
npm run build
npx @capgo/cli bundle upload --channel production
# For v2.x users (from v2-maintenance or main branch)
git checkout main
npm run build
npx @capgo/cli bundle upload --channel v2
# For v3.x users (from beta/v3 branch)
git checkout beta
npm run build
npx @capgo/cli bundle upload --channel v3

혜택

혜택
  • Zero code 변경 - 채널 라우팅이 자동으로 발생합니다.
  • 분리 - 각 버전에는 자신의 업데이트 PIPELINE이 있습니다.
  • flexible targeting - 특정 버전 그룹에 푸시 업데이트를 전송합니다.
  • 안전한 롤아웃 - 불일치 버전으로 가는 변경 사항은 절대 도달하지 않습니다

버전 제어 전략 2: 의미 있는 버전

버전 제어 전략 2: 의미 있는 버전

Capgo의 내장 의 의미 있는 버전 제어를 사용하여 업데이트가 버전 경계를 넘지 않도록 방지합니다.

주요 버전에서 자동 업데이트 비활성화

주요 버전에서 자동 업데이트 비활성화
터미널 창
# Create a channel that blocks major version updates
npx @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 updates
npx @capgo/cli channel set stable --disable-auto-update none

Strategy 3: Native Version Constraints

Strategy 3: Native 버전 제한

Native 버전 제한을 지정하여 배달을 불일치하는 기기에 방지합니다.

Using nativeVersion Delay Condition

Native 버전 Delay 조건 사용

업로드할 때, 배달을 불일치하는 기기에 방지하기 위해 Native 버전의 최소값을 지정할 수 있습니다.

터미널 창
# This bundle requires native version 2.0.0 or higher
npx @capgo/cli bundle upload \
--channel production \
--native-version "2.0.0"

사용 사례

사용 사례
  1. 새로운 원시 플러그인이 필요합니다

    터미널 창
    # Bundle needs Camera plugin added in v2.0.0
    npx @capgo/cli bundle upload --native-version "2.0.0"
  2. 원시 API 변경 사항

    터미널 창
    # Bundle uses new Capacitor 6 APIs
    npx @capgo/cli bundle upload --native-version "3.0.0"
  3. 점진적인 마이그레이션

    터미널 창
    # Test bundle only on latest native version
    npx @capgo/cli bundle upload \
    --channel beta \
    --native-version "2.5.0"

Strategy 4: Auto-Downgrade Prevention

Strategy 4: Auto-Downgrade Prevention 섹션

사용자가 현재 사용 중인 네이티브 버전보다 이전 버전의 패키지를 받는 것을 방지합니다.

Capgo 대시보드에서:

  1. Go to 채널 → 채널을 선택하세요
  2. Enable “자연어 버전에서 자동 다운그레이드를 비활성화하세요”
  3. 변경 사항 저장

또는 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 channel
async function assignBetaTesters() {
const deviceId = await CapacitorUpdater.getDeviceId()
// Check if user is beta tester
if (isBetaTester(userId)) {
await CapacitorUpdater.setChannel({ channel: 'v3' })
}
}

기기 Override 대시보드

대시보드 기기 우선순위

Capgo 대시보드에서:

  1. 로 이동하세요 기기 → 기기를 찾으세요
  2. 클릭 채널 설정 또는 버전 설정
  3. 특정 채널 또는 패키지 버전으로 우선순위 설정
  4. 기기는 우선순위 설정된 소스에서 업데이트를 받습니다

완전한 AppFlow-Style 워크플로

제목 '완전한 AppFlow-Style 워크플로'

다음 예제는 모든 전략을 combination하는 완전한 예제입니다.

1. 초기 설정 (App v1.0.0)

제목 '1. 초기 설정 (App v1.0.0)'
터미널 창
# Create production channel with semver controls
npx @capgo/cli channel create production \
--disable-auto-update major \
--disable-downgrade
capacitor.config.ts
const config: CapacitorConfig = {
plugins: {
CapacitorUpdater: {
autoUpdate: 'atBackground',
defaultChannel: 'production',
}
}
};
터미널 창
# Create v2 channel for new version
npx @capgo/cli channel create v2 \
--disable-auto-update major \
--disable-downgrade \
--self-assign
# Create git branch for v1 maintenance
git checkout -b v1-maintenance
git push origin v1-maintenance
// capacitor.config.ts for v2.0.0
const 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 changes
npx @capgo/cli bundle upload \
--channel production \
--native-version "1.0.0"
# Update v2.x users (new feature)
git checkout main
# Make changes
npx @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 branch
git branch -d v1-maintenance
# Move all remaining users to default
# (They'll need to update via app store)

채널 우선순위

채널 우선순위

여러 채널 설정이 존재할 때, Capgo는 이 우선순위 순서를 사용합니다:

  1. 디바이스 오버라이드 (대시보드 또는 API) - 우선순위가 가장 높고 디바이스 오버라이드 UI에서 표시됩니다.
  2. 로컬 플러그인 채널 via setChannel() - 장치에만 저장되어 Device Override UI에 표시되지 않습니다.
  3. 기본 채널 capacitor.config.ts에
  4. 기본 채널 (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 manually

2. 의미 있는 버전 관리

제목: 2. 의미 있는 버전 관리
터미널 창
# ✅ Good
1.0.0 1.0.1 1.1.0 2.0.0
# ❌ Bad
1.0 1.1 2 2.5

3. 분리된 branch를 유지하세요

3. 분리된 branch를 유지하세요
터미널 창
# ✅ Good: Separate branches per major version
main (v3.x)
v2-maintenance (v2.x)
v1-maintenance (v1.x)
# ❌ Bad: Single branch for all versions

4. 배포 전 테스트하세요

4. 배포 전 테스트하세요
터미널 창
# Test on beta channel first
npx @capgo/cli bundle upload --channel beta
# Monitor for issues, then promote to production
npx @capgo/cli bundle upload --channel production

5. 버전 분포를 모니터링하세요

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를 통해 전체 제어
다운그레이드 예방YesYes via --disable-downgrade
다중 버전 유지수동 branch/channel 관리채널 우선순위로 자동화
자체 호스팅NoYes (full control)
버전 분석기본세부 버전 메트릭

사용자가 업데이트를 받지 못하는 경우

사용자들이 업데이트를 받지 못하는 문제

다음 사항을 확인하세요:

  1. 채널 assignments: 장치가 올바른 채널에 있는지 확인하세요

    const channel = await CapacitorUpdater.getChannel()
    console.log('Current channel:', channel)
  2. 버전 제약 조건: 번들에 네이티브 버전 요구 사항이 있는지 확인하세요

    • 대시보드 → 번들 → '네이티브 버전' 열람
  3. Semver Settings: 채널의 disable-auto-update 설정

    터미널 창
    npx @capgo/cli channel list
  4. 기기 우선순위: 기기에서 우선순위를 수동으로 설정했는지 확인

    • 대시보드 → 기기 → 기기를 검색 → 채널/버전 확인

잘못된 버전으로 패키지 전달

잘못된 버전으로 패키지 전달
  1. 기본 채널 검토: 올바른 채널을 capacitor.config.ts
  2. 패키지 업로드 확인: 올바른 채널로 패키지를 업로드했는지 확인
  3. 네이티브 버전 검사: 올바른 버전인지 확인 --native-version __CAPGO_KEEP_0__

__CAPGO_KEEP_1__

__CAPGO_KEEP_2__
  1. __CAPGO_KEEP_3____CAPGO_KEEP_4__
    • __CAPGO_KEEP_5__
  2. __CAPGO_KEEP_6____CAPGO_KEEP_7__
  3. __CAPGO_KEEP_8____CAPGO_KEEP_9__

__CAPGO_KEEP_10__

__CAPGO_KEEP_11__

If you’re migrating from Ionic AppFlow, Capgo 버전이 매우 유사합니다. 더 많은 유연성을 제공합니다:

개념 매핑

개념 매핑
AppFlow ConceptCapgo 개념주석
배포 채널Capgo 채널같은 개념, 더 강력합니다
네이티브 버전 잠금--native-version 국기더 세부적인 제어
채널 우선순위채널 우선순위 (override → cloud → default)더 투명한 우선순위
배포 대상채널 + semver 제어여러 전략이 사용 가능
생산 채널production 채널 (또는 임의의 이름)이름이 유연한
Git 기반 배포CLI 분할 업로드 (branch) Same workflow
자동 버전 일치defaultChannel 버전 제약 조건 추가다중 전략을 지원하는 강화

AppFlow 사용자들을 위한 주요 차이점

AppFlow 사용자들을 위한 주요 차이점
  1. 더 많은 제어Capgo은 여러 전략 (채널, semver, 네이티브 버전)을 combination할 수 있습니다.
  2. 더 나은 시각화__CAPGO_KEEP_0__은 버전 분포 및 호환성 문제를 보여주는 대시보드를 제공합니다.
  3. API 접근: __targetLanguage__에서 프로그램의 버전을 완전히 제어할 수 있습니다.
  4. Self-Hosting: __targetLanguage__에서 업데이트를 관리하는 옵션입니다.
  1. AppFlow 채널을 __CAPGO_KEEP_0__ 채널로 매핑하세요 (일반적으로 1:1) to Capgo channels (usually 1:1)
  2. 버전 defaultChannel 버전별로 capacitor.config.ts 버전 규칙을 설정하세요
  3. 버전 경계에서 자동으로 차단하고 싶다면 버전 규칙
  4. __CAPGO_KEEP_0__ 버전별 패키지 업로드 __CAPGO_KEEP_0__를 사용하여 --native-version __CAPGO_KEEP_0__
  5. __CAPGO_KEEP_0__ 버전 분포를 모니터링 Capgo 대시보드에서

__CAPGO_KEEP_0__

__CAPGO_KEEP_0__
// Gradually migrate v1 users to v2
async 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 version
async 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()
}
}
// Run A/B tests within same native version
async 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:

  1. __CAPGO_KEEP_0__ 버전별 업데이트 전달을 위한 여러 전략을 제공합니다:: 자동 버전 분리 defaultChannel
  2. Semantic Versioning: 메이저/마이너/패치 버전 경계를 넘지 않도록 업데이트를 방지
  3. Native Version Constraints: 번들에 대한 최소 네이티브 버전을 요구
  4. Auto-Downgrade Prevention: 최신 네이티브 버전으로 업데이트된 번들을 이전 네이티브 버전으로 전달하지 않도록
  5. Device Overrides: 테스트 및 목표 설정을 위해 수동 제어

이러한 전략을结合하면 AppFlow-style 자동 업데이트 전달과 더 많은 유연성과 제어가 가능합니다. 앱의 버전 관리 및 배포 워크플로에 가장 적합한 방법을 선택하세요.

자세한 정보는 특정 기능에 대한 문서를 참조하세요:

버전 목표 지속

버전 목표 지속 섹션

버전 목표 지속 섹션 버전 목표 지속을 사용하여 채널 라우팅과 스테이지드 롤아웃을 계획하고 채널을 연결하여 채널 관리 채널 채널 구현 세부 정보에 대한 채널 채널 채널 구현 세부 정보에 대한 채널 베타 테스트 솔루션 베타 테스트 솔루션의 제품 워크플로에 대한 버전 대상 솔루션 버전 대상 솔루션의 제품 워크플로에 대한