sync콜백 예외처리syncInternal (실제 sync 로직)syncOptions 오브젝트 구성syncStatusChangeCallback 호출업데이트 적용install 디테일sync 상태 변화
sync
syncInProgress
관리와, 콜백함수에try-catch
를 덛씌우는 것만 추가로 수행한다.
syncInternal
가 핵심 로직이다.
- 433 줄을 보면
syncInternal
에서 예외가 발생해도syncInProgress
를false
로 바꿀 뿐이다.

syncInProgress
변수 관리를 포함한 sync
함수의 전체적인 흐름을 먼저 보자.콜백 예외처리

인자로 전달받은 콜백함수에
try-catch
를 덛씌우며, 별도의 에러 핸들링은 없고 로깅만 한다.즉, 콜백함수에 의해서
syncInternal
과정에 차질이 생기지 않도록 하기 위한 작업이다.syncInternal (실제 sync 로직)
syncOptions 오브젝트 구성

default
옵션이 쭉 나열되어 있고, 인자로 전달받은 options
로 덮어쓰도록 되어 있다.타입 옵션에선 찾아볼 수 없는
ignoreFailedUpdates
옵션은 디폴트로 true
로 설정되어 있다.ignoreFailedUpdates
옵션은 shouldUpdateBeIgnored에서 중요한 프롭이다.syncStatusChangeCallback
호출
로직 시작 전에 상태를 업데이트 먼저 하고 실행하는 모습을 볼 수 있다.
각각의 상태가 어떤 조건일 때 설정되는 지도 알 수 있다.


업데이트 적용

notifyApplicationReady
checkForUpdates
로 업데이트 할 패키지가 있는지 검사한다
shouldUpdateBeIgnored
로 무시해야하는 업데이트인지 체크한다
downloadAndInstall
를 호출하여 업데이트를 다운로드 및 설치한다.
install 디테일

installUpdate
가 호출됨으로써 pendingUpdate 데이터 의isLoading=false
로 설정된다.
installMode
에 따라 즉시 앱을 재시작 시켜서 업데이트를 적용시키거나, 다음 재시작을 기다린다.
isPending=true
의 의미 : 다운로드 및 설치를 마치고, 적용을 위해 재시작을 기다리고 있는 상태sync 상태 변화
enum SyncStatus { /** * The app is up-to-date with the CodePush server. * 서버의 최신 버전과 동일한 상태 */ UP_TO_DATE, /** * An available update has been installed and will be run either immediately after the * syncStatusChangedCallback function returns or the next time the app resumes/restarts, * depending on the InstallMode specified in SyncOptions * 사용 가능한 업데이트가 설치되었으며 SyncOptions에 명시한 InstallMode에 따라, syncStatusChangedCallback 콜백이 호출된 직후 바로 업데이트를 하던지 혹은 앱 재시작 등 정책 이후에 실행하던지 한다.. * 즉, 업데이트 다운로드 및 설치까지 정상 완료하였고, 설정한 정책에 따른 적용을 위한 시기를 기다리는 상태. */ UPDATE_INSTALLED, /** * The app had an optional update which the end user chose to ignore. * (This is only applicable when the updateDialog is used) * 옵셔널한 업데이트 버전이며, 사용자가 업데이트를 거부한 경우 (mandatory 버전은 사용자가 거부할 수 없음) */ UPDATE_IGNORED, /** * The sync operation encountered an unknown error. */ UNKNOWN_ERROR, /** * There is an ongoing sync operation running which prevents the current call from being executed. */ SYNC_IN_PROGRESS, /** * The CodePush server is being queried for an update. */ CHECKING_FOR_UPDATE, /** * An update is available, and a confirmation dialog was shown * to the end user. (This is only applicable when the updateDialog is used) */ AWAITING_USER_ACTION, /** * An available update is being downloaded from the CodePush server. */ DOWNLOADING_PACKAGE, /** * An available update was downloaded and is about to be installed. * 업데이트 다운로드는 완료하였고, 설치 하려고 하는 중 */ INSTALLING_UPDATE }
업데이트를 다운로드 및 설치하는 것과 / 업데이트를 적용 하는 것이 별개의 과정임을 인지한다.
(적용은 재시작 필요함)
업데이트 시도 시 상태변화 플로우
# 업데이트가 있어서 시도할 때
LOG
CHECKING_FOR_UPDATE
LOG DOWNLOADING_PACKAGE
LOG INSTALLING_UPDATE
LOG UPDATE_INSTALLED
# 업데이트 설치 완료 후, 적용 위해 새로 켰을 때LOG
CHECKING_FOR_UPDATE
LOG [CodePush] Reporting CodePush update success (v218)
LOG UP_TO_DATE
# 업데이트가 이미 진행중인데, 또 업데이트 시도 하려는 경우
- ex) 업데이트 진행 중에 metro에서 저장 눌렀을 경우
LOG
SYNC_IN_PROGRESS