README
bxuip-ionic-live-update
bxuip-ionic-live-update 는 모바일 스토어에 배포하지않고, 앱을 업데이트할 수 있는 기능을 제공합니다.
지원 플랫폼
iOS, Android
설치하기
npm 을 통해, 패키지를 설치합니다.
npm i --D bxuip-ionic-live-update
파일 생성
아래 명령을 통해, 업데이트를 위한, zip 파일을 생성합니다.
bxuip build --liveupdate
파일명 규칙
생성된 zip 파일명은 아래 규칙을 따릅니다.
[메이저 버전].[마이너 버전]-[env].zip
[메이저 버전].[마이너 버전]-[env]-full.zip
버전은 반드시 메이저 버전과 마이너 버전으로만 나뉩니다.
// [메이저 버전].[마이너 버전]-[env].zip
1.0-dev.zip
1.0-dev-full.zip
1.1-dev.zip
1.1-dev-full.zip
...
1.15-dev.zip
1.15-dev-full.zip
여기서 env 는, 파일이 생성된 빌드 환경을 나타냅니다.
// [메이저 버전].[마이너 버전]-[env].zip
1.0-dev.zip
1.0-prod.zip
full 은, 전체 압축 파일을 나타냅니다.
// [메이저 버전].[마이너 버전]-[env]-full.zip
1.0-dev-full.zip
버저닝 규칙
리소스 버전
리소스 버전은 사용자 디바이스 버전과의 차이를 비교하기위해 사용됩니다.
리소스 버전은 ./config.xml 파일의
resource-version
속성 값을 따릅니다.리소스 버전은 반드시
1.0
이상부터 시작해야합니다.// config.xml 파일 <?xml version='1.0' encoding='utf-8'?> <widget xmlns:cdv="http://cordova.apache.org/ns/1.0" id="" resource-version="1.0" version="1.0.0" xmlns="http://www.w3.org/ns/widgets"> <name>ionicExample</name> <description> BWG APP </description> ...
liveupdate.json 파일
사용자 디바이스 버전과 리소스 버전 차이를 체크하기위해, ./liveupdate.json 파일을 사용합니다.
[ "1.1-dev", "1.5-dev", ... ]
메이저 버전
- 메이저 버전이 올라갈 경우, [version]-[env]-full.zip(전체 압축 파일) 파일을 다운받아 앱을 업데이트합니다.
마이너 버전
마이너 버전이 올라갈 경우,
BxLiveUpdate
모듈에 설정된versionInterval
값에 따라, 여러개의 [version]-[env].zip 또는 [version]-[env]-full.zip 파일을 다운받아 앱을 업데이트합니다.만약 사용자 디바이스 버전과 리소스 버전과의 차이가
versionInterval 값 미만
인 경우, 그 차이 만큼의 [version]-[env].zip 파일들을 다운받아 앱을 업데이트합니다.사용자 디바이스 버전: 1.1 liveupdate.json 버전: 1.5 versionInterval 값: 5 1.2-[env].zip ~ 1.5-[env].zip 파일들을 다운받아 앱을 업데이트합니다.
만약 사용자 디바이스 버전과, 리소스 버전과의 차이가
versionInterval 값 이상
인 경우, 리소스 버전의 [version]-[env]-full.zip 파일을 다운받아 앱을 업데이트합니다.사용자 디바이스 버전: 1.1 liveupdate.json 버전: 1.6 versionInterval 값: 5 1.6-[env]-full.zip 파일을 다운받아 앱을 업데이트합니다.
프로세스 실행 순서
리소스 파일 생성 프로세스
- 프로젝트에서
bxuip build --liveupdate
명령을 통해 빌드를 진행합니다. - 프로젝트 ROOT 경로에 liveupdate.json 및 업데이트를 위한, zip 파일이 생성됩니다.
Liveupdate 실행 프로세스
- 앱을 실행하면 앱 내부 소스에 포함된 liveupdate 모듈을 통해 liveupdate가 실행됩니다.
- 먼저, 디바이스의 현재 리소스 버전과, 서버의
liveupdate.json
파일을 통해 버전을 비교합니다. - 버전을 비교하여 업데이트가 되었을 경우,
onBeforeUpdate()
callback을 실행합니다. - 버전 업데이트에 따라 전체설치/부분설치가 진행됩니다.
전체설치
Major 버전이 업데이트 된 경우 (ex. 1.0 -> 2.0)
versionInterval
의 값 보다 Minor 버전 차이 값이 큰 경우. (ex. versionInterval = 5, 1.0 -> 1.6)
- 전체 리소스가 포함된 [resource-version]-[env]-full.zip 파일을 서버에서 다운로드합니다.
- 다운로드가 진행되는 동안,
onProgressUpdate()
callback이 실행됩니다. - 다운로드가 완료되면, zip 파일을 설치(압축 해제)합니다.
- 설치가 진행되는 동안,
onProgressUnzip()
callback이 실행됩니다. - 설치가 완료되면, 다운받은 zip 파일 및 기타 필요없는 파일들을 삭제됩니다.
onAfterUpdate()
callback이 실행되고, 설치된 리소스로 앱을 새로고침합니다.
부분설치
Minor 버전이 업데이트 된 경우 (ex. 1.0 -> 1.1)
- 전체 리소스가 포함된 [resource-version]-[env].zip 파일을 서버에서 다운로드합니다.
- 다운로드가 진행되는 동안,
onProgressUpdate()
callback이 실행됩니다. - 다운로드가 완료되면, zip 파일을 설치(압축 해제)합니다.
- 설치가 진행되는 동안,
onProgressUnzip()
callback이 실행됩니다. - 설치가 완료되면, 다운받은 zip 파일 및 기타 필요없는 파일들을 삭제합니다.
- 버전 차이만큼 4-1 ~ 4-5 프로세스가 반복됩니다. (ex. 1.0 ~> 1.2의 경우 1.1, 1.2를 업데이트하기 위해 2번 반복된다)
onAfterUpdate()
callback이 실행되고, 설치된 리소스로 앱을 새로고침합니다.