본문 바로가기
리액트 네이티브

9시간동안 에러를 고민했다

by auther_soo 2023. 2. 20.

 

우리 글로디 어플리케이션의 프로필 UI 작업이 끝나가고 있다.

 

API가 개발되고 있는 만큼, 더미데이터를 사용하되

 

컴포넌트 내에서 API에 요청하면 돌아올 그 객체의 형태로 객체로 더미데이터를 만든다.

 

 

그리고, 필요한 API가 있다면 API 요청 명세서를 작성한다. 

 

( 이부분은 구글 스프레드 시트로 하고 있는데, 아무래도 부적합하다. 스웨거 API라는 것을 최근에 알았는데, 이런게 좋은 것 같다 ) 

 

 

어쨋든 9시간동안 별 이상한 에러 해결하는데 시간을 썼다.

 

전말은 이러하다.

 

어플 내의 개인정보처리방침과 이용약관은 글이 좀 길다. 

 

그런데 이걸 어플리케이션 내에서 아예 놓고 쓸까 싶기도 해서 지연로딩으로 해볼까 싶었는데, 

 

그렇게 하는 어플리케이션을 본적이 없는 것 같은 것이다.

 

 

그래서 그냥 PDF로 보여주자 해서 react-native-pdf 라이브러리를 가져다가 깔았다가 충돌이 일어났다.

 

의존성 트리를 보니까 문제는 없는데? 싶었는데 일단 지웠다.

 

지웠는데, 이게 리액트 네비게이션의 아류 라이브러리의 버전을 건드린 것인지

 

Invariant Violation: requireNativeComponent: “RNSScreen” was not found in the UIManager

 

이런 에러가 뜨는 것이다.

 

RNS 스크린이 뭔지 봤더니, react-native-screens 라이브러리였는데, 

 

일단 에러를 해결해야하니까.. 

 

스택오버플로우도 찾아보고, chatGpt한테도 물어봤다.

 

 

스택 오버플로우에서는

 

1. 링크문제다 일일히 MainActivity.java에 들어가서 임포트하고 링크해줘야한다 라고 하는 의견이 많았다.

--> 근데 리액트 네이티브 지금 쓰는 버전은 링크를 자동으로 해준다. 이 답변은 도움이 되지 않았다.

 

2. chatGpt도 아무래도 웹에 존재하는 정보를 갖다가 정제하고 조합해서 학습하는 애다 보니까, 애초에 웹에 올라온 답변들이 유효하지 않다보니 유효하지 않은 답변을 내놨다.

 

 

 

그래서 몇가지 시도해봤다.

 

1. 프로젝트 파일 지우고, 레파지토리에서 이전꺼 다시 가져오자

--> 왠걸? 안되는 것이다! 엥 그러면 단순히 react-native-pdf 를 가져와서 생기는 문제가 아니라는 것이다.

2. 그래서 원인을 유동적으로 놓고 한번 리액트 네비게이션과 관련한 라이브러리를 지우면서 확인해보았다.

 

확실히 safeAreaContext 와 reactNativeScreens 에서 나온 에러가 맞다.

 

그럼 그 둘 간에 버전충돌 문제일 것이다.

 

그래서 다운그레이드를 해보니 역시.. 버전 충돌이었다.

 

뭐지? 라이브러리 개발자가 다른 라이브러리와의 충돌 가능성을 생각하지 않고 배포를 한건가 싶었다.

 

 

어쨋든 9시간동안 고생은 했지만, 커밋을 주요 Phase마다 해야하고

 

RN의 라이브러리 충돌에 관한 에러를 어떻게 처리해야하는 지에 대해서 알게되는 계기가 되었다.

댓글