Capgo에서 실시간 업데이트 이해
Capacitor 앱에서 실시간 업데이트 기능은 앱 스토어 제출 없이 실시간 업데이트 기능을 제공하는 가장 강력한 기능 중 하나입니다. Capgo이 이 기능을 구현하는 방식을 깊이 이해해 보겠습니다.
핵심 개념
Capacitor 앱은 iOS와 Android 모두에서 두 개의 주요 층으로 구성됩니다.
- 웹 Layer: WebView에 로드된 HTML, CSS, JavaScript 파일을 포함합니다.
- 네이티브 Layer: Android(Java/Kotlin) 또는 iOS(Swift)용 code을 포함합니다.
Capgo의 라이브 업데이트 시스템은 앱 바이너리에 컴파일되지 않은 파일을 런타임에 웹 Layer를 교체하여 작동합니다.
기술적 구현
Capacitor 서버 경로
Capgo은 두 가지 중요한 경로를 관리합니다.
- 현재 서버 경로: 현재 WebView에 로드된 파일을 가리킵니다.
- 다음 서버 경로: 다음 앱 재시작 시 로드될 파일을 가리킵니다.
Android 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)
}
Security Measures
Capgo implements military-grade security through end-to-end encryption, ensuring your app updates remain completely secure from development to deployment. Our encryption system goes beyond traditional code signing to provide true zero-knowledge security.
End-to-End Encryption Architecture
-
End-to-End Encryption (E2EE): 앱 업데이트 패키지는 개발 환경을 떠나기 전에 AES-256-GCM 암호화를 사용하여 암호화됩니다. 이 군사급 암호화는 앱 업데이트가 전적으로 개인적이고 안전한 상태를 유지합니다.
-
Zero-Knowledge Architecture: Capgo은 업데이트가 업로드되기 전에 업데이트 내용을 암호화합니다.
- Update contents are encrypted before upload
- Capgo 서버는 암호화된 데이터만 저장합니다.
- 암호화는 사용자 기기에서만 발생합니다.
- 업데이트 콘텐츠에 대한 중간 매체가 접근할 수 없습니다.
-
Secure Key Management:
- CI/CD 환경에서 암호화 키가 생성되고 안전하게 저장됩니다.
- Capgo 서버에 접근하지 않는다.
- 각 앱 버전은 고유한 암호화 키를 사용할 수 있습니다.
- 키 회전을 지원하여 보안을 강화합니다.
자세한 설명서에서 __CAPGO_KEEP_0__ Live Updates의 암호화 시스템에 대해 알아보세요. Capgo Live Updates의 업데이트 보안 프로세스
업로드 전에 암호화
-
CI/CD 환경에서 암호화 키가 생성되고 안전하게 저장됩니다.:
- CI/CD pipeline에서 업데이트가 암호화됩니다.
- 각 파일은 개별적으로 암호화됩니다.
- 메타데이터도 완전한 개인정보를 위해 암호화됩니다.
-
안전한 저장소:
- Capgo의 글로벌 CDN에서 암호화된 패키지가 저장됩니다.
- 서버에 평문 데이터가 절대 닿지 않습니다.
- 서버 침해의 경우에도 데이터가 안전하게 유지됩니다.
-
안전한 전달:
- 업데이트는 암호화된 채널을 통해 전달됩니다.
- 각 앱 인스턴스는 암호화의完整성을 검증합니다.
- 암호화 실패 시 자동으로 재시도 메커니즘
-
클라이언트 측 보안:
- 업데이트는 설치 전에 검증됩니다.
- 암호화 실패는 자동 롤백을 트리거합니다.
- 앱의 보호된 저장소에서 안전한 키 저장
This comprehensive security approach ensures that your app updates remain protected against:
- 중간자 공격
- 서버 측 취약점
- 권한이 없는 수정
- 재생 공격
- 콘텐츠 조작
업데이트 라이프 사이클
Capgo의 업데이트 프로세스는 기본적으로 자동화되어 있습니다. 자동화된 프로세스 작동 방식은 다음과 같습니다.
1. 자동 업데이트 확인
이 플러그인은 다음 상황에서 자동으로 업데이트를 확인합니다.
- 앱이 시작될 때
이 동작은 autoUpdate 설정에 의해 제어됩니다.
// capacitor.config.json
{
"plugins": {
"CapacitorUpdater": {
"autoUpdate": true // Enable automatic updates
}
}
}
또한 수동으로 확인할 수 있습니다. getLatest()
2. 자동 다운로드
새로운 버전이 감지되면, autoUpdate 가 활성화되어 있다면:
- 다운로드가 자동으로 시작됩니다.
- 다운로드 진행 상황은 내부적으로 추적됩니다.
- 다운로드 실패 시 각 앱 열기마다 자동으로 재시도됩니다.
- 다운로드 성공 시 앱 저장소에 저장됩니다.
You can monitor this process through events:
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
directUpdate다음 앱 백그라운드 시에 설치가 발생합니다: - 이 경우
false
- 설치 실패 시 자동 롤백이 발생합니다:
autoDeleteFailed플러그인은 또한 저장소를 자동으로 관리합니다: - __CAPGO_KEEP_0__ 버전을 업데이트할 때 삭제합니다.
autoDeletePrevious__CAPGO_KEEP_0__가 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'
}
]
});
업데이트 지연 조건:
- 배경: 앱이 배경으로 이동할 때 설치
- 날짜: 특정 날짜/시간 이후에 설치
- nativeVersion: 다음 네이티브 업데이트 이후에 설치
- kill: __CAPGO_KEEP_0__
This is useful for:
- Scheduling updates during off-peak hours
- 사용자 활동과 동기화하여 업데이트를 조율하는
- smooth update experience를 보장하는
- 중요한 작업 중에 중단을 예방하는
업데이트 상태
자동화 프로세스 중, 배포물은 이러한 상태를 거칩니다:
- 다운로드 중: 다운로드 중
- 대기: 다운로드 완료, 설치 대기
- 성공: 설치 및 활성화
- 오류: 업데이트 실패 (자동 롤백 트리거)
스토어 규정 준수
애플 앱 스토어 ✅
애플 앱 스토어 정책에 따라 Live Updates가 완전히 준수합니다. 애플 개발자 프로그램 라이선스 계약에 명시된 바와 같이:
“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 업데이트는 웹层만 수정하며 모든 플랫폼 보안 경계를 존중합니다.
구글 플레이 스토어 ✅
Live Updates는 Google Play 정책을 준수합니다. 기기 및 네트워크 방지 정책에 명시된 바와 같이:
“이 제한은 code가 가상 머신 또는 인터프리터에서 실행되는 경우에만 적용됩니다. 이 경우 JavaScript는 웹뷰 또는 브라우저에서 간접적으로 Android API에 접근할 수 있습니다.”
Capgo는 WebView 콘텐츠만 업데이트하므로 이러한 허용된 지침에 속합니다.
최선의 관행
- 구성 단계: 업데이트 점진적으로 배포
- 버전 관리: 배포된 모든 버전 추적
- 롤백 지원: 문제로부터 빠른 복구
- 델타 업데이트: 변경된 파일만 다운로드
라이브 업데이트 사용 시기
적합한 경우:
- 버그 수정
- UI 개선
- 내용 업데이트
- 기능 토글
적용하지 않는 경우:
- 자연스러운 code 변경
- 주 버전 업데이트
- 자연스러운 변경이 필요한 보안 패치
How Live Updates Work in Capgo에서 계속 진행하세요
__CAPGO_KEEP_0__을 사용 중인 경우 How Live Updates Work in Capgo 자연 플러그인 작업을 계획하고 연결하려면 Capgo 플러그인 디렉토리 Capgo 플러그인 디렉토리에서 제품 워크플로우를 위해 Capacitor 플러그인들에 의해 Capgo Capacitor 플러그인들에 의해 Capgo의 구현 세부 정보를 위해 플러그인 추가 또는 업데이트 플러그인 추가 또는 업데이트의 구현 세부 정보를 위해 아이오닉 엔터프라이즈 플러그인 대체 아이오닉 엔터프라이즈 플러그인 대체의 제품 워크플로우를 위해, 그리고 Capgo 네이티브 빌드 Capgo 네이티브 빌드의 제품 워크플로우를 위해