Skip to main content

Capgo에서 Live 업데이트가 작동하는 방법

Capgo의 Live 업데이트에 대한 기술적 구현에 대한 깊은 분석입니다. iOS와 Android 모두의 하드웨어 아래에서 작동하는 방법을 이해합니다.

기사 기여자

마틴 도나디우

작가

발레리아

리뷰어

조던

Editor

Capgo의 리얼타임 업데이트 기능

Capgo의 리얼타임 업데이트 이해

Capacitor 앱에서 리얼타임 업데이트 기능은 앱 스토어 제출 없이 실시간 업데이트 기능을 제공합니다. Capgo이 이 기능을 구현하는 방식에 대해 깊게 알아보겠습니다.

기본 개념

Capacitor 앱은 두 개의 주요 층으로 구성됩니다.

  1. 웹 층: HTML, CSS, JavaScript 파일이 WebView에서 로드됩니다.
  2. 네이티브 층: Android(Java/Kotlin)와 iOS(Swift)용 플랫폼별 code

Capgo의 리얼타임 업데이트 시스템은 웹 층을 런타임에 교체하여, 이 파일들이 앱 바이너리에 컴파일되지 않기 때문입니다.

기술적 구현

Server Paths in Capacitor

Capgo은 두 가지 중요한 경로를 관리합니다.

  • 현재 서버 경로: 현재 WebView에서 로드된 파일을 참조합니다.
  • 다음 서버 경로: 다음 앱 재시작 시 로드될 파일을 참조합니다.

안드로이드 Implementation

안드로이드에서 Capgo은 경로를 다음과 같이 관리합니다.

// Store next server path
private void setNextCapacitorServerPath(String path) {
    SharedPreferences prefs = context.getSharedPreferences("CapWebViewSettings", Activity.MODE_PRIVATE);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putString("serverBasePath", path);
    editor.apply();
}

// Update current path and reload
private void setCurrentCapacitorServerPath(String path) {
    bridge.setServerBasePath(path);
    bridge.reload();
}

iOS Implementation

iOS에서 경로는 다음과 같이 관리됩니다.

// Store next server path
private func setNextCapacitorServerPath(path: String) {
    KeyValueStore.standard["serverBasePath"] = path
}

// Update current path
private func setCurrentCapacitorServerPath(path: String) {
    bridge.viewController.setServerBasePath(path: path)
}

보안 조치

Capgo은 개발에서 배포까지 앱 업데이트가 완전히 안전하도록 군사급 보안을 제공하는 종단 간 암호화 구현을 통해 보안을 강화합니다. 우리의 암호화 시스템은 전통적인 code 서명보다 더 나은 진실한 zero-knowledge 보안을 제공합니다.

Capacitor Live Update 아키텍처

  1. Capacitor Live Update (E2EE)개발 환경을 떠나기 전에 모든 업데이트 패키지는 AES-256-GCM 암호화를 사용하여 암호화됩니다. 이 군사급 암호화는 앱 업데이트가 전달 과정의 모든 단계에서 완전히 개인적이고 안전하도록 보장합니다.

  2. Zero-Knowledge 아키텍처: Unlike other OTA update solutions that only sign updates, Capgo employs true zero-knowledge encryption. This means:

    • 업데이트 내용은 업로드하기 전에 암호화됩니다.
    • Capgo servers only store encrypted data
    • 엔드 사용자 기기에서만 암호화가 발생합니다.
    • 업데이트 내용에 대한 중간 매체가 접근할 수 없습니다.
  3. Secure Key 관리:

    • 암호화 키는 CI/CD 환경에서 안전하게 생성되고 저장됩니다.
    • Private keys never touch Capgo’s servers
    • 각 앱 버전은 고유한 암호화 키를 사용할 수 있습니다.
    • 키 회전 지원을 위한 보안 강화

__CAPGO_KEEP_0__ Live Updates의 종단 간 암호화에 대해 자세히 알아보세요. End-to-End Encryption in Capgo Live Updates

업로드 전에 암호화

  1. 업데이트는 CI/CD pipeline에서 파일별로 암호화됩니다.:

    • 각 파일은 개별적으로 암호화됩니다.
    • 메타데이터도 완전한 개인정보 보호를 위해 암호화됩니다.
    • 안전한 저장소
  2. __CAPGO_KEEP_0__의 글로벌 CDN에 암호화된 패키지가 저장됩니다.:

    • Encrypted bundles are stored on Capgo’s global CDN
    • __CAPGO_KEEP_0__ Live Updates의 종단 간 암호화에 대해 자세히 알아보세요.
    • 서버 침해에도 데이터는 안전합니다.
  3. 안전한 배포:

    • 업데이트는 암호화된 채널을 통해 전달됩니다.
    • 각 앱 인스턴스는 암호화의 무결성을 검증합니다.
    • 암호화 실패 시 자동 재시도 메커니즘
  4. 클라이언트 측 보안:

    • 업데이트는 설치 전에 검증됩니다.
    • 암호화 실패 시 자동 롤백
    • 앱의 보호된 저장소에서 안전한 키 저장

이 종합적인 보안 접근 방식은 앱 업데이트가 다음 공격에 안전하도록 보장합니다.

  • 인간 공격
  • 서버 측 침해
  • 권한이 없는 수정
  • 재생 공격
  • 콘텐츠 조작

업데이트 라이프 사이클

Capgo의 업데이트 프로세스는 기본적으로 자동화되어 있습니다. 자동화된 프로세스는 다음과 같이 작동합니다:

1. 자동 업데이트 확인

플러그인은 다음 상황에서 업데이트를 자동으로 확인합니다:

  • 앱이 시작될 때

이 동작은 다음 설정에 의해 제어됩니다: autoUpdate 또한 수동으로 확인할 수 있습니다.

// capacitor.config.json
{
  "plugins": {
    "CapacitorUpdater": {
      "autoUpdate": true // Enable automatic updates
    }
  }
}

2. 자동 다운로드 getLatest()

__CAPGO_KEEP_0__

새로운 버전이 감지되면, autoUpdate 이 설정이

  1. 자동으로 다운로드가 시작됩니다.
  2. 내부적으로 다운로드 진행률을 추적합니다.
  3. 다운로드가 실패하면 앱을 열 때마다 자동으로 재시도합니다.
  4. 다운로드가 성공하면 앱 저장소에 저장됩니다.

이 프로세스를 이벤트를 통해 모니터링할 수 있습니다.

CapacitorUpdater.addListener('download', (info: DownloadEvent) => {
  console.log('Auto-download progress:', info.percent);
});

CapacitorUpdater.addListener('downloadComplete', (info: DownloadCompleteEvent) => {
  console.log('Auto-download complete:', info.bundle);
});

3. 자동 설치

설치 시간은 다음과 같은 설정에 따라 달라집니다:

// capacitor.config.json
{
  "plugins": {
    "CapacitorUpdater": {
      "autoUpdate": true,
      "directUpdate": false // install update on app backgrounding
      "resetWhenUpdate": true, // reset live updates on native update (true by default)
      "autoDeleteFailed": true, // Auto cleanup failed updates (true by default)
      "autoDeletePrevious": true // Auto cleanup old versions (true by default)
    }
  }
}

설치가

  • 즉시 directUpdate true이면 즉시
  • On 다음 앱 백그라운드 상태일 때 directUpdate is false
  • 설치 실패 시 자동 롤백

플러그인은 자동으로 저장소를 관리합니다:

  • 업데이트 실패 시 제거 autoDeleteFailed is true
  • 기존 버전 정리 autoDeletePrevious is true

업데이트 지연

업데이트 지연 조건을 사용하여 업데이트 설치 시기를 제어할 수 있습니다:

// Delay until app goes to background
await CapacitorUpdater.setDelay({
  kind: 'background'
});

// Delay until specific date
await CapacitorUpdater.setDelay({
  kind: 'date',
  value: '2024-03-20T10:00:00.000Z'
});

// Delay until next native version
await CapacitorUpdater.setDelay({
  kind: 'nativeVersion'
});

// Multiple conditions
await CapacitorUpdater.setMultiDelay({
  delayConditions: [
    {
      kind: 'background'
    },
    {
      kind: 'date',
      value: '2024-03-20T10:00:00.000Z'
    }
  ]
});

지연 조건:

  • 백그라운드 : 앱이 백그라운드에 있을 때 설치
  • : 날짜: 특정 날짜/시간 이후에 설치
  • : 다음 네이티브 업데이트 이후에 설치: 앱이 종료되었을 때 설치
  • : 앱이 종료되었을 때 설치: 업데이트를 위해 사용할 수 있는 방법입니다.

: 업데이트를 스케줄링하는 데 사용할 수 있습니다.

  • : 사용자 활동과 업데이트를 동기화하는 데 사용할 수 있습니다.
  • : 업데이트가MOOTH한 경험을 제공하는 데 사용할 수 있습니다.
  • : 중요한 작업 중에 업데이트가 방해되지 않도록 방지하는 데 사용할 수 있습니다.
  • This is useful for:

업데이트 상태

자동화 프로세스 중인 동안, 배ंडल은 이러한 상태를 거쳐갑니다:

  1. 다운로드 중: 다운로드 진행 중
  2. 대기 중: 다운로드 완료, 설치 대기
  3. 성공: 업데이트 설치 및 활성화
  4. 오류: 업데이트 실패 (자동 롤백 트리거)

스토어 준수

애플 앱 스토어 ✅

실시간 업데이트는 애플 앱 스토어 정책과 완전히 호환됩니다. 애플 개발자 프로그램 라이선스 계약에서 명시된 바와 같이:

“Interpreted code may be downloaded to an Application but only so long as such code: (a) does not change the primary purpose of the Application by providing features or functionality that are inconsistent with the intended and advertised purpose of the Application as submitted to the App Store, (b) does not create a store or storefront for other code or applications, and (c) does not bypass signing, sandbox, or other security features of the OS.”

Capgo 업데이트는 웹层만 수정하며 플랫폼 보안 경계를 존중합니다.

구글 플레이 스토어 ✅

실시간 업데이트는 구글 플레이 정책과 호환됩니다. 기기 및 네트워크 방지 정책에서 명시된 바와 같이:

“이 제한은 code가 가상 머신 또는 인터프리터에서 실행되는 경우, 또는 두 가지가 Android API에 대한 간접 접근을 제공하는 경우에만 적용되지 않습니다.”

Capgo가 웹뷰 또는 브라우저에서 자바스크립트를 실행하는 경우에만 해당되는 guideline입니다.

최선의 방법

  1. 구성된 업데이트를 여러 단계로 진행합니다.버전 관리
  2. : 모든 배포된 버전을 추적합니다.__CAPGO_KEEP_0__
  3. 롤백 지원: 문제 해결에 대한 빠른 회복
  4. 델타 업데이트context

페이지/영역: Live updates 제품 페이지. 역할: 섹션 또는 페이지 제목. 메시지 키 `live_update_delta_title` (Live Update Delta Title).

: 변경된 파일만 다운로드

  • 라이브 업데이트 사용 시기
  • 적합한 경우:
  • 버그 수정
  • UI 개선

콘텐츠 업데이트

  • Native code changes
  • 주요 버전 업데이트
  • 자연스럽게 변경이 필요한 보안 패치

Capgo에서 Live Updates가 어떻게 작동하는지 계속 진행하세요.

Capacitor를 사용 중이라면 Capgo에서 Live Updates가 어떻게 작동하는지 자연 플러그인 작업을 계획하고 연결하려면 __CAPGO_KEEP_0__ Plugin Directory Capacitor 제품 워크플로우에서 Capgo Plugin Directory Capgo의 __CAPGO_KEEP_1__에서 플러그인 Capacitor Plugins by Capgo for the implementation detail in Capacitor Plugins by Capgo, 플러그인 워크플로우의 구현 세부 사항 플러그인을 추가하거나 업데이트 Ionic Enterprise Plugin Alternatives Ionic Enterprise Plugin Alternatives를 대체하는 제품 워크플로우 Capgo Native Builds Capgo Native Builds를 위한 제품 워크플로우

Capacitor 앱에 대한 라이브 업데이트스

Capgo를 통해 웹层 버그가 활성화된 경우, 앱 스토어 승인까지 며칠 기다리지 않고修정 내용을 배포하세요. 사용자는 배경에서 업데이트를 받으면서 네이티브 변경 사항은 일반적인 검토 경로에 남아 있습니다.

__CAPGO_KEEP_0__에서 인간 지원을 받습니다.

시작하기

최신 블로그

Capgo은 전문적인 모바일 앱을 만들기 위해 필요한 최고의洞察력을 제공합니다.