사용자가 거의 알아채지 못하는 라이브 업데이트란 무엇인가?
그것은 일반적으로 세 가지를 의미한다.
- 다운로드가 작다.
- 롤아웃이 제어된다.
- 오류가 발생하면 즉시 복구된다.
Capgo은 Capacitor 팀에게 몇 가지 추가 조절 장치를 제공한다는 점에서 Capgo의 React Native 지구와는 다르다. 델타 업데이트, 채널, 자동 롤백, 버전 대상, 및 선택적 끝-to-끝 암호화.
만약에 그들을 함께 사용하면, 더 작은 패키지, 더 빠른 설치, 그리고 훨씬 적은 운영 메시지가 됩니다.
Lean은 MAU가 동일할 때도 중요합니다.
한 가지 유용한 Capgo-특정 세부사항: Capgo MAU는 30일 동안 업데이트 서비스에 접촉한 장치의 월간 활성 수입니다.
bundle을 얇게 만드는 것은 주로 MAU 카운팅을 줄이는 trick이 아닙니다. 그것은 사용자와 팀이 실제로 느낄 수 있는 부분을 개선하기 때문입니다:
- 셀룰러 또는 약한 Wi-Fi에서 더 빠른 다운로드
- 강한 Wi-Fi 환경에서 더 나은 경험 __CAPGO_KEEP_0__’s
- __CAPGO_KEEP_0__’s
- __CAPGO_KEEP_0__’s
__CAPGO_KEEP_0__’s
1. 기본적으로 델타 업데이트를 사용하십시오.
만약에 한 가지 일만 하신다면, 이 일만 하십시오.
Capgo’s 델타 업데이트 델타 업데이트는 버전 사이에 변경된 파일만 다운로드 받도록 하여, 전체 웹 패키지를 다시 다운로드 받지 않도록 합니다. 이는 일상적인 OTA 성능의 가장 큰 단일 이점입니다.
bun run build
bunx @capgo/cli@latest bundle upload --channel staging --delta
QA 테스트가 끝난 후:
bunx @capgo/cli@latest bundle upload --channel production --delta
CI가 엄격하게 유지되기를 원하신다면, --delta-only __CAPGO_KEEP_0__’s
bunx @capgo/cli@latest bundle upload --channel production --delta-only
Only use --delta-only when your production fleet supports Delta updates. On mixed plugin versions, older devices that do not support manifest-based delta delivery will not be able to download that update.
This matters even more if you use directUpdate, because the time between “update found” and “app reloaded” becomes visible to the user.
2. Assets를 asset처럼 다루세요, JavaScript의 짐처럼 다루지 마세요
Large assets는 OTA bundles가 조용히 불량해지기 때문입니다.
Some practical rules:
- Big한 이미지를 또는 미디어를 JavaScript 내부에 인라인하지 마세요. 일반 asset 파일이면 충분합니다.
- 자주 바뀌는 콘텐츠는 CDN나 API에 저장하세요. shipped app bundle안에 살펴야 하는 것은 아닙니다.
- 마케팅 이미지를, 온보딩 비디오, 그리고 한 번의 캠페인 asset를 사용하세요. 매번 릴리즈마다 바뀌는 asset는 주의하세요.
- stable한 asset는 stable하게 유지하세요. Delta updates에서는 변경되지 않은 파일은 다시 다운로드하지 않고 재사용합니다.
이것은 Capgo를 app이 커질수록 빠르게 유지하는 가장 쉬운 방법입니다. 가장 나쁜 패턴은 작은 UI 수정이 사용자가 다운로드해야 하는 무분별한 미디어의 쌓임입니다.
3. 원본 릴리즈를 실제 원본 변경 사항에 대해 유지하세요
Capgo은 런타임에 로드되는 HTML, CSS, JavaScript 및 자산을 업데이트합니다.
다음과 같은 경우에는 올바른 채널이 아닙니다:
- 새로운 원본 플러그인
- 권한 변경
capacitor.config.ts변경- iOS 또는 Android 원본 프로젝트 상태를 수정하는 모든 변경
그 라인은 성능에도 중요합니다. OTA 라인에 주요 구조적 변경을 계속 밀어 넣으면, 업데이트 전략이 시간이 지남에 따라 더 무거워지고 위험해집니다.
두 개의 릴리즈 라인을 의도적으로 사용하세요:
원본 라인
플러그인 변경, 권한 변경 및 원본 구성:
bun run build
bunx cap sync
그런 다음 일반 스토어 릴리즈를 배포하세요.
Capgo lane
웹層 반복을 안전하게 하기 위해:
bun run build
bunx @capgo/cli@latest bundle upload --channel production --delta
최근에 많은 수명이 긴 자산을 추가한 경우에는 자주 네이티브 베이스 라인도 갱신해 주세요. 새로운 스토어 빌드는 새로운 베이스 라인을 포함하고, 미래의 Capgo diff는 더 작아집니다.
4. 채널을 사용하여 롤아웃 크기를 작게 유지하세요
업데이트는 단순히 메가바이트만큼의 크기만큼 중요한 것이 아닙니다. 업데이트 전까지 좋은지 확인하기 전에 많은 장치가 업데이트를 받는 것입니다.
Capgo’s 채널 시스템 은 QA, 초대된 테스터, 모든 사용자, 또는緊急 복구를위한 가장 깨끗한 방법입니다.
stagingfor QAbetafor 초대된 테스터productionfor 모든 사용자hotfixfor緊急 복구
간단한 흐름은 다음과 같습니다.
- 업로드
staging. - 실제 기기에서 검증합니다.
- 건전한 채널 또는 퍼센티지 기반 롤아웃을 통해 점진적으로 배포합니다.
- 건전성 감소 시 즉시 롤백합니다.
실제 기기에서 검증하고, 버전별로 대상으로 하는 경우, 기존 바이너리에서 불필요한 또는 무거운 패키지를 제거합니다. PR 미리보기도 가능합니다. 제품, QA, 스태커들이 JS-만 변경사항을 테스트할 수 있습니다. 새로운 TestFlight 또는 Play 내부 빌드 기다리지 않아도 됩니다.5. 직접 업데이트를 활성화하면, 최적화된 시작을 위해
Capgo __CAPGO_KEEP_0____CAPGO_KEEP_0__
__CAPGO_KEEP_0__
The faster you want an update applied, the more disciplined your startup path needs to be.
Capgo’s 업데이트 동작 docs는 Delta 업데이트와 pair하는 것을 명확히 권장합니다. 그게 올바른 기본 설정입니다. directUpdate 두 번째 경계는
앱이 기본 10초 창구 내에서 또는 __CAPGO_KEEP_0__ 설정에서 지정한 시간 내에 준비되지 않으면 __CAPGO_KEEP_1__는 해당 번들을 무효화하고 이전에 잘 작동하던 버전으로 복원할 수 있습니다. 그 롤백 동작이 프로덕션에서 원하는 동작이지만, 또한 시작 시 정결한 상태를 유지해야 합니다: notifyAppReady().
import { CapacitorUpdater } from '@capgo/capacitor-updater'
CapacitorUpdater.notifyAppReady()
Call notifyAppReady() 올바른 위치에서 appReadyTimeout you set in your Capacitor config, Capgo can mark that bundle invalid and restore the previous good version. That rollback behavior is what you want in production, but it also means you should keep startup clean:
- __CAPGO_KEEP_1__
notifyAppReady()__CAPGO_KEEP_0__ - __CAPGO_KEEP_1__
- 재로드를 즉시하면 앱 상태를 신중히 저장하고 복원하세요.
- 너무 넓은 롤아웃 전에 나쁜 네트워크 및 저전력 장치 시나리오를 테스트하세요.
최근에 검토하지 않은 경우, "notifyAppReady" 가이드는 다시 읽어보는 것이 좋습니다. 앱이 준비되면 알림을 받기 위한 가이드 6. 내부 업데이트 채널을 사용하여 불필요한 네이티브 리빌드를 피하세요.
많은 모바일 팀이 변경이 명확히 웹 전용일 때도 바이너리를 빌드하는 시간을浪費합니다.
변경이:
복사:
- UI 폴리시:
- 온보딩 플로우:
- 가격화 화면 로직:
- placeholder__CAPGO_KEEP_0__
- __CAPGO_KEEP_0__ 분석 연결
- __CAPGO_KEEP_0__ 기능 플래그
- API 또는 API 응답 렌더링
그런 다음 Capgo 업데이트는 종종 더 빠른 검토 항목입니다.
이것은 Capgo의 가장 미사용된 이점 중 하나입니다: OTA 라인으로 리뷰 및 QA 작업을 더 많이 이동할 수 있습니다. native/web 경계를 깨뜨리지 않고.
__CAPGO_KEEP_0__에 대한 우리의 안내서 1개의 모바일 앱 ID를 사용하여 스테이징하는 방법 이것은 시간이 지남에 따라 이걸 유지하는 실제적인 방법을 다룹니다.
7. 가볍게 유지하고 secret를 분리하세요
작은 패키지와 안전한 패키지는 서로 다른 문제를 해결합니다.
채널은 승인 여부를 제어합니다. 채널 자체로만 패키지를 비밀로 만들지는 않습니다.
강한 전달 보증이 필요하다면:
- 활성화 실시간 업데이트 암호화,
- 사용 사용자 지정 저장소 또는 자체 호스팅 배포,
- CI 또는 보안된 운영자 워크플로우에서만 개인 키를 유지하십시오.
업데이트 크기가 무시되지 않는다는 것은 아니다. 단지 업데이트 크기를 무시하는 것이 아니라, 업데이트 크기와 배포 속도 모두를 최적화해야 한다는 것을 의미한다.
- 배포 속도에 최적화하십시오.
- 배포를 제어하기 위해 암호화하십시오.
- 롤아웃을 제어하기 위해 채널을 사용하십시오.
- 복구를 위해 롤백하십시오.
A practical “lean Capgo” workflow
간단한 기본 운영 모델을 원한다면 이 것을 사용하십시오.
- __CAPGO_KEEP_0__를 원본과 OTA 릴리스 경로로 분리하세요.
- __CAPGO_KEEP_0__ 업로드 JS 변경 사항을
--delta기본적으로. - __CAPGO_KEEP_0__ 및__CAPGO_KEEP_1__ 채널을 사용하기 전에
staging__CAPGO_KEEP_2__beta__CAPGO_KEEP_0__ 업데이트를 통한 통계 및 로그를production. - 릴리스 후, 단지 그것 전에만. __CAPGO_KEEP_0__ PR을 원본 빌드가 필요하지 않으면 설치 가능한 미리보기로 변환하세요. __CAPGO_KEEP_0__를 가능한 경우 큰, 자주 변경되는 미디어에서 번들에서 제외하세요.
- __CAPGO_KEEP_0__를 원본 변경 또는 원본 변경이 큰 자산 증가 후에 갱신하세요.
- __CAPGO_KEEP_0__
- __CAPGO_KEEP_1__
- 릴리즈 엔지니어링의 일부로 트리트하고 롤백 동작을 설정의 트리비아로 간주하십시오.
notifyAppReady()그 조합은 일반적인 '변경된 것만 업로드' 접근법보다 오래 빠르게 유지됩니다.
마무리 생각
__CAPGO_KEEP_0__ 팀에게서 'lean and fast'는 단순히 패키지 크기 문제만이 아닙니다.
For Capgo teams, “lean and fast” is not just a bundle-size problem.
델타 업데이트를 사용하여 페이로드 크기, 채널을 사용하여 롤아웃 크기, 롤백을 사용하여 실패 크기입니다. OTA를 그렇게 생각하면, 업데이트는 앱, 팀, 사용자 기반의 크기가 커져도 빠릅니다.
__CAPGO_KEEP_0__ 업데이트를 lean and fast하게 유지하는 방법에 대해 계속 진행하십시오.
Capgo을 사용하여 계획 채널 라우팅 및 스테이지드 롤아웃을 계획하고 있다면, 그것을 'Channels'와 연결하십시오.
릴리즈 엔지니어링의 일부로 트리트하고 롤백 동작을 설정의 트리비아로 간주하십시오. How to Keep Capgo Updates Lean and Fast __CAPGO_KEEP_0__ 팀에게서 'lean and fast'는 단순히 패키지 크기 문제만이 아닙니다. 그것은 릴리즈 디자인 문제입니다. Channels에 대한 구현 세부 정보에 대해 Channels Channels에 대한 구현 세부 정보에 대해 Channels Beta 테스트 솔루션 Beta 테스트 솔루션의 제품 워크플로에 대해, 그리고 버전 대상 솔루션 버전 대상 솔루션의 제품 워크플로에 대해. 작성자