한글파일.jpg 등의 asset파일들을 인식할 수 없으므로 절대 절대 한글 파일명을 쓰지 말자.CodePush는 Microsoft Appcenter에서 지원하는 Expo OTA updates의 상위호환 서비스로 다양한 방법의 앱 사이드 설치 로직, 버전 관리, 업데이트 상황 모니터링 등을 진행해주어서 아주 좋다.
공식 Docs에서는 설치할때 Appcenter Analytics등도 함께 설치해야될 것만 같이 설명해주고 있는데, 실제로는 yarn global add appcenter-cli 와 yarn add react-native-code-push 만 설치해줘도 모든 기능을 사용할 수 있는 것 같다. Analytics의 경우 Attribution Tracking등의 한계로 다른 툴(Adjust, Appsflyer)을 사용하는게 좋아보이며, Appcenter에서는 build기능과 codepush만으로도 충분해 보인다.
Appcenter Cli, 콘솔이 함께 지원되며 간편하게 Staging/Release 관리를 진행할 수 있다.
하지만 처음 사용하게 된다면 당연히 예상되는 Behavior와 다르게 작동되는 경우가 있다.
Staging 와 Production 두 프로세스로 나뉜다. 개발자 입장에서는 Debug까지 있으니 총 3가지의 앱 Status가 있을 수 있다.
appcenter codepush release-react 명령어를 통한 codepush는 Staging 으로의 Push를 해주기 때문에, 항상 appcenter 콘솔에 들어가서 Promote 버튼을 통해 해당 버전을 Production 으로 올려주는 작업이 꼭 필요하다.직접 codepush를 통한 로직 관리를 하고자 할때 필요한 정보이다.
codePush는 버전 비교 및 코드푸시 자체 버전 비교를 통해 신규 js bundle을 다운받고, 차후 또는 당장 실행시켜주는 원리이다. custom logic을 짜기위해 이해가 필요한 함수/변수이름은 다음과 같다.
localPackage
현재 로컬에 다운받아져있는 codepush 관련 각종 정보와 js bundle이 있는 패키지
remotePackage
신규 업데이트가 있을 경우 있는 codePush에 버전 조건을 만족한 codepush 각종 정보가 있는 패키지 (js bundle은 없음. 다운로드 받아야함)
codePush.checkForUpdate()
codePush로 신규 업데이트 번들이 있는지 요청한다. 신규 업데이트가 있을 경우 remotePackage를 주고 없을 경우 null을 준다
remotePackage.download()
checkForUpdate등의 함수를 통해 remotePackage를 가져왔을 경우, 실제 js bundle을 다운로드 할 수 잇는 download() 함수를 함께 준다. 이 함수에서 콜백 함수를 넣어줘서 다운로드 사이즈와 현황 정보를 받을 수 있다.