Cordova 핫 code push 대안을 찾고 계신다면, 아마도 cordova-hot-code-push-plugin 와 Microsoft의 CodePush for Cordova가 모두 작동하지 않거나 유지보수가 중단되었기 때문일 것입니다. 현재 유지보수되는 옵션은 @capgo/cordova-updater입니다. Cordova 플러그인으로, Capacitor로 먼저 마이그레이션하지 않아도 Capgo 라이브 업데이트를 Cordova Android 13+ 및 Cordova iOS 7+ 앱에 적용할 수 있으며, 채널, 롤백, 암호화 번들을 지원합니다.
2026년 Cordova 라이브 업데이트 현황
cordova-hot-code-push는 아카이브되었습니다
이 nordnet/cordova-hot-code-push 리포지토리가 GitHub에서 아카이브되었습니다. 마지막 code 변경은 2018년 9월이었고, 마지막 npm 릴리스는 cordova-hot-code-push-plugin 의 1.5.3입니다. 당시 Cordova 플랫폼과 파일 기반 WebView 로딩을 위해 설계되었습니다. 최신 Cordova Android는 https://localhost 경로 핸들러를 통해 앱을 서빙하고, Cordova iOS는 WKWebView 을(를) 사용하며 app:// 스키마를 사용합니다. 이를 전제로 하는 플러그인은 file:// loading은 그 모델에 맞지 않고, 아무도 업데이트하지 않고 있습니다.
Cordova 플랫폼을 한 번도 업데이트하지 않으면 기존 설치본은 여전히 작동하는 것처럼 보일 수 있습니다. 함정은 여기 있습니다. 업데이트 메커니즘을 위험에 빠뜨리지 않고는 최신 Cordova Android나 Xcode로 옮겨갈 수 없습니다.
Cordova용 CodePush는 사라졌습니다
Microsoft는 아카이브했고 cordova-plugin-code-push2022년에 App Center의 Cordova 지원을 종료했으며, 2025년 3월 31일에는 build, distribution, CodePush를 포함한 App Center 핵심 서비스를 중단했습니다. 이 플러그인은 App Center의 CodePush 서비스와 통신하므로 이제 업데이트를 제공할 백엔드가 남아 있지 않습니다. CodePush 서버를 직접 호스팅하도록 옮겼더라도 여전히 아카이브된 클라이언트 플러그인에 의존합니다.
Ionic Appflow는
cordova-plugin-ionic Cordova 앱을 Ionic Appflow live updates에 연결했습니다. Ionic이 Appflow 서비스 종료를 발표하면서 이를 사용하던 팀들도 대체제를 찾고 있습니다. 그 방법은 Appflow 대체 가이드에서 다룹니다..
대체 서비스의 필수 조건
도구를 고르기 전에 다음 요구 사항을 충족하는지 확인하세요:
| 요구 사항 | 왜 중요한가 |
|---|---|
| 현재 Cordova Android 및 iOS와 호환될 것 | 스토어 요구 사항 때문에 플랫폼 업그레이드가 필요합니다: 2026년 4월부터 App Store 업로드에는 Xcode 26, Google Play에서는 매년 Android target API 상향. |
의존성 없음 cordova-plugin-ionic-webview |
해당 플러그인은 구식이며 최신 스킴 핸들러와 충돌합니다 |
| 자동 롤백 | 잘못된 번들로 인해 앱이 먹통이 되면 안 됩니다 |
| 채널 | 전체 배포 전 내부 사용자에게 먼저 테스트하세요 |
| 서명 또는 암호화된 번들 | 네트워크로 전달되는 code의 변조를 방지합니다 |
| 버전 타겟팅 | 더 새로운 네이티브 셸이 필요한 JavaScript를 보내지 마세요 |
| CI 친화적인 CLI | 릴리스는 파이프라인에서 명령어 하나로 끝나야 합니다 |
| 유지보수 중 | 별점만 보지 말고 최근 릴리스를 확인하세요 |
Cordova용 Capgo
@capgo/cordova-updater 와 동일한 JavaScript API를 사용합니다 @capgo/capacitor-updater 그리고 동일한 Capgo 클라우드 백엔드를 사용합니다. 번들, 채널, 통계 및 서명은 Cordova, Capacitor 및 Electron 클라이언트 모두에서 동일한 방식으로 작동합니다.
요구 사항
- Cordova CLI 12+
- Cordova Android 13+ (기본
https://localhost/스킴) - Cordova iOS 7+ (기본
app://localhost/scheme) cordova-plugin-ionic-webview제거
플랫폼 확인:
cordova platform ls
필요 시 업그레이드:
cordova platform rm android && cordova platform add android@latest
cordova platform rm ios && cordova platform add ios@latest
설치
Capgo (dashboard 또는 CLI)에서 앱을 생성한 후 앱 ID와 함께 플러그인을 추가하세요:
bunx @capgo/cli@latest login
bunx @capgo/cli@latest app add com.example.app --name "My Cordova App"
cordova plugin add @capgo/cordova-updater --variable APP_ID=com.example.app
cordova prepare android ios
설치 시 더 많은 옵션을 설정할 수 있습니다. 이들은 플러그인 변수이므로 변경 후 cordova prepare 을 실행하세요:
cordova plugin add @capgo/cordova-updater \
--variable APP_ID=com.example.app \
--variable DEFAULT_CHANNEL=production \
--variable AUTO_UPDATE=atBackground \
--variable APP_READY_TIMEOUT=10000
AUTO_UPDATE 기본값은 atBackground, 백그라운드에서 업데이트를 다운로드하고 앱이 백그라운드로 전환될 때 적용합니다. 다른 모드에는 atInstall, onLaunch 및 off 완전 수동 제어가 있습니다.
플러그인에 앱이 정상적으로 시작되었음을 알립니다
이 한 줄은 절대 건너뛰면 안 됩니다. 다음을 호출하세요 notifyAppReady() 모든 시작 시점에 deviceready이후. 새 번들이 APP_READY_TIMEOUT 밀리초 이내에 이를 호출하지 않으면, 플러그인은 실패로 표시하고 마지막으로 작동했던 번들로 롤백합니다.
document.addEventListener('deviceready', async () => {
const { Updater } = cordova.plugins;
await Updater.notifyAppReady();
}, false);
앱이 실제로 렌더링된 후에 호출하세요. 스크립트 맨 위에 두지 마세요. 이렇게 해야 시작 중 크래시하는 번들을 감지할 수 있습니다.
수동 업데이트 플로우
다음으로 설정하면 AUTO_UPDATE=off확인, 다운로드 및 적용 시점을 직접 제어할 수 있습니다:
document.addEventListener('deviceready', async () => {
const { Updater } = cordova.plugins;
await Updater.notifyAppReady();
const latest = await Updater.getLatest();
if (latest.url && !latest.error) {
const bundle = await Updater.download({
url: latest.url,
version: latest.version,
checksum: latest.checksum,
});
// Applied on next background/restart
await Updater.next({ id: bundle.id });
}
});
TypeScript 타입은 패키지와 함께 제공됩니다:
import type { UpdaterPlugin } from '@capgo/cordova-updater';
declare const cordova: { plugins: { Updater: UpdaterPlugin } };
업데이트 게시
다음 빌드: www 폴더를 업로드하세요:
bun run build
bunx @capgo/cli@latest bundle upload com.example.app --path ./www --channel production
테스트 후 CI에 이걸 넣으세요. Live Update 페이지 에서 채널 롤아웃, 통계 및 롤백을 대시보드에서 확인할 수 있습니다.
cordova-hot-code-push에서 마이그레이션
- 기존 플러그인과 설정을 제거하세요. 삭제
cordova-hot-code-push-plugin,chcp섹션에서config.xml, 그리고cordova-hcpCLI 및chcp.json/chcp.manifest빌드에서 생성을 - 제거
cordova-plugin-ionic-webview존재하는 경우, 앱이 기본 Cordova WebView에서 실행되는지 테스트합니다. - Cordova 플랫폼 업그레이드 Android 13+ 및 iOS 7+까지.
- 설치
@capgo/cordova-updater그리고 추가notifyAppReady(). - 새 스토어 빌드를 릴리스하세요. 기존 설치본은 이전 플러그인을 유지합니다. 새 바이너리에만 Capgo updater가 포함됩니다.
- 첫 번째 번들을 업로드하세요 테스트 채널에 업로드하여 기기에서 확인한 후, 프로덕션으로 승격하세요.
스토어에서 업데이트하지 않은 사용자는 업데이트할 때까지 기존 방식을 유지합니다. 전환 기간 동안 기존 업데이트 서버가 계속 작동한다면 온라인 상태로 두거나, 해당 사용자가 새 바이너리를 설치할 때까지 OTA 업데이트를 받지 못한다는 점을 감수하세요.
Cordova용 CodePush에서 마이그레이션하기
- 교체
codePush.sync()호출을 ...로notifyAppReady()그리고 자동 모드 또는getLatest/download/next흐름을 검증하세요. - 배포 키 대신 채널 사용 (
DEFAULT_CHANNEL). - 교체
code-push release-cordova포함bunx @capgo/cli@latest bundle upload. - 다음을 제거하세요:
CodePushDeploymentKey설정에서 가져오기config.xml.
App Center 사용자를 위한 단계별 가이드는 App Center 마이그레이션 가이드.
보안 및 스토어 규칙
- 암호화 및 서명. 설정
PUBLIC_KEY설치 시점에 CLI의 암호화 키를 사용하여, 기기가 해당 앱에 서명된 번들만 수락하도록 합니다. - Apple 및 Google 정책. 두 플랫폼 모두 앱의 목적을 변경하거나 리뷰가 필요한 기능을 추가하지 않는 한, JavaScript와 같은 해석형 code를 OTA로 업데이트할 수 있습니다. 네이티브 code, 새 플러그인 및 권한 변경은 스토어 릴리스가 필요합니다.
- 버전 타겟팅. 번들이 더 새로운 바이너리에만 존재하는 네이티브 플러그인을 필요로 하는 경우, 해당 네이티브 버전을 타겟으로 지정하세요. Capgo 문서의 live update 호환성 에서 방법을 설명합니다.
문제 해결
번들이 다운로드되었지만 앱에 이전 버전이 표시됩니다. 아직도 사용 중이거나 cordova-plugin-ionic-webview, 또는 커스텀 스킴입니다. 이를 제거하고 기본값을 사용하세요.
업데이트할 때마다 앱이 롤백됩니다. notifyAppReady() 호출되지 않거나 에러 발생 후 호출됩니다. 디바이스 콘솔을 확인하여 앱 시작 시마다 호출되는지 확인하세요.
플랫폼 업그레이드 후 iOS 빌드가 실패합니다. Cordova iOS 7+ 버전은 최신 Xcode가 필요합니다. App Store 업로드를 위해서는 Xcode 26이 필요하며, 다음을 사용해 서명 자산을 생성할 수 있습니다: iOS 인증서 생성기. Capacitor로 전환하면, Capgo 빌드 로컬 Mac 없이도 클라우드에서 서명된 iOS 빌드를 생성할 수 있습니다.
Android에서는 업데이트가 작동하지만 iOS에서는 작동하지 않습니다. iOS 스킴이 다음에서 config.xml 기본값인지 확인하세요 app 스킴과 localhost 호스트 이름.
Capacitor로 전환해야 할까요?
꼭 그럴 필요는 없습니다. Capgo for Cordova가 있으니 결정하는 동안에도 계속 배포할 수 있습니다. Capacitor는 유지보수되는 네이티브 레이어, iOS의 Swift Package Manager, 더 넓은 플러그인 생태계를 제공합니다. 준비가 되면 동일한 Capgo 앱 ID와 채널을 유지한 채 클라이언트 플러그인만 교체하세요. 저희 Cordova에서 Capacitor로의 마이그레이션 가이드가 그 과정을 안내합니다.