react-native + code-push 사용후기

tip

(Jeff Kang) #1

코드 푸쉬는 MS에서 만든 오픈소스로서 앱을 심사없이도 실시간 업데이트를 가능하게 해주는 모듈입니다.
리엑트 네이티브에서는 네이티브 코드와 설정이 아닌 Javascript단의 코드와 assets(이미지, 폰트 등) 의 요소들을 앱 심사없이 바로 업데이트 할 수 있습니다.

UI 없이 (MS 에져프로젝트 관련 사이트가 있긴 한데 없다고 보시면 됩니다. ) CLI를 통해 관리가 가능하고
대략적인 프로세스는

  1. code-push에 앱 등록
  2. 발급된 키를 이용하여 React-native iOS, Android에 Codepush 설정 (네이티브 설정이 필요합니다. )
  3. Staging으로 실시간 릴리즈
  4. 확인 후 이상없으면 Production 버전으로 릴리즈

뭐 사용자의 25프로만 적용 이라던지 앱 실행시 강제 업데이트 후 재실행, 다음 앱 실행시 업데이트 등의 추가적인 옵션을 설정 가능합니다.

현재 스토어에 리엑트 네이티브로 제작된 안드로이드 앱에 javascript 소스상의 텍스트를 수정할 부분이 있어 적용을 해 보았는데 실시간으로 업데이트가 되는것을 확인하였습니다. 앱 실행후 백그라운드에서 업데이트 관련 소스들을 다운로드 한 후 재실행되는 과정이 초기 설정에 맞춰져 자동으로 수행됩니다.
특히 iOS는 심사가 최소 이틀 이상 걸리게 되어 있는데 급하게 수정해야하는 버그나 텍스트, 이미지 부분에 적용하기 좋아보입니다.

적용해보지 않으시겠습니까?

code-push documentation: https://microsoft.github.io/code-push/docs/cli.html


(InGrowth) #2

codepush는 정말 좋은서비스죠.

그런데 RN에서 패키징할 때 코드에서 사용하지 않았던 UI요소나 API도 codepush로 밀어넣었을 때 사용 가능한가요?

타이타늄은 한번도 사용하지 않는 모듈은 패키징 단계에서 빼버려서 주의를 해야하거든요.

그리고, Android 쪽에서는 한번도 사용하지 않았으면서 권한획득이 필요한 네이티브 API는 안될거에요.
이건 처음 패키징할 때 manifest에 필요한 요소라서 말이죠.


(이종은(Jong Lee)) #3

code push를 쓰면서 codepush.h를 찾을 수 없다는 에러는 잊을만 하면 한번씩 나오는데 이거 뭐 확실한 해결방법을 아시는 분?

다음 링크의 글들은 도움이 되지 않네요.

결국 정상 작동하던 commit으로 reset하면 되는데 왜 갑자기 안되는지 원인파악은 못했습니다.
diff를 해봐도 특이사항이 없어 보이거든요.


#4

브릿지가 대단히 말썽이어서 개발중에 적용하다가 빼버렸죠. ;;;
정말로 이상적으로 느껴지는 서비스이긴 합니다. ㅎㅎ


(Jeff Kang) #5

새로운 답변이 올라오긴 했네요. 요즘은 안뜨는데 전에는 계속 떠서 스트레스 받은 기억이 있습니다. 저도 원인이 궁금해요.


(Jeff Kang) #6

말씀하신대로 import를 안했던 라이브러리는 사용이 안될거 같습니다. 테스트는 안해봤네요.
안드로이드 부분 팁 감사합니다!


(Jeff Kang) #7

iOS는 단비같은 존재입니다 ㅎㅎ


(이종은(Jong Lee)) #8

지금은 iOS만 하고 있는데…
AlertIOS를 처음 넣어서 code-push해보니 되었었고 native 코드가 포함된 3rd-party 컴포넌트를 code-push로 넣으면 다들 예상하셨겠지만 앱이 죽어요. :slight_smile:


(김성욱) #9

앱 업데이트는 잘되는데 restart하면 앱이 계속 rollback합니다.
onNextRestart 모드도 처음 restart할 때는 잘 설치된 다음에 다시 restart하면 rollback 됩니다.
해당 이슈가 글은 봤는데 해결방법은 못찾겠네요
앱은 rn은 아니고 react로 개발한걸 cordova로 감싸서 서비스 하고 있습니다.


(이종은(Jong Lee)) #11

@crazywook 업데이트 후에 롤백이 되는 것은 업데이트 후 정상 구동이 되었다고 코드푸시에게 알리지 않았거나 실재 업데이트 후 실행에 실패했기 때문입니다. 코드푸시에게 정상으로 구도오디었다고 알리는 것은 설정에 따라 자동으로 알리기도합니다. 다음 함수를 확인해보세요.

codePush.notifyAppReady()