S E P H ' S

[약속] 다시 만난 React Native (M1 Mac에서 React Native 실행시 xCode 오류) 본문

잡담 && 회고

[약속] 다시 만난 React Native (M1 Mac에서 React Native 실행시 xCode 오류)

yoseph0310 2023. 4. 18. 22:57

알다가도 모르겠는 React Native

얼마전 유지보수 중인 앱 <약속>의 백엔드 부분을 계획했던 부분을 모두 리팩토링했다. 앞으로 리팩토링할 것들이 계속 있을거라고 예상은 하지만 적어도 급한 부분들, 공부한 부분은 모두 깔끔하게 적용해서 배포까지 완료한 상태다. 저녁 약속이 있어 이동하던 중에 코감기 때문에 주변 약국을 찾으려고 약속 앱을 켠 순간,

??????

끝없는 로딩스피너를 보여주고 있었다. 최근 백엔드 리팩토링 버전을 배포했으니 당연히 백엔드 문제겠거니 생각했다. 약국을 들린 후 급하게 카페에 들어가서 상황을 확인하기로 했다. 먼저 예상 지점을 짚었다. 

 

문제 예상 지점은 두 가지 였다.

  • SpringSecurity 설정을 토큰 에러를 Custom Exception의 statusCode, response를 HttpServletResponse 객체에 담아 보내는 구조로 변경했는데 이걸 프론트에서 읽어내지 못하는 것.
  • 에러 응답을 읽어서 refreshToken을 요청하는 reissue api 요청은 제대로 보냈으나 바뀐 SpringSecurity 설정으로 인해 제대로 된 응답을 못하는 것. 

사실 클라이언트와 함께 테스트 해본다고 Security 관련 설정을 변경하고 API 테스트를 모두 포스트 맨에서 진행해서 이런 문제가 생길 수 있었던 것을 간과했다. 어쩌겠는가. 지금이라도 우연히 문제를 발견했으니 다행이다. 로컬에서 앱을 실행시켜서 디버깅을 해보려고 했다.

 

수많은 에러메시지가 많았지만 그냥 결론은 이거였다. 그래도 비교적 에러는 간단했다. 앱에서 차트를 사용하기 위해 install 했던 RN Charts 라이브러리가 현재 호환되지 않는 버전이어서 (RN은 정말 이런일이 다반사다.) 에러를 내고 있었던 것. 앱을 디벨롭하면서 차트 페이지는 현재 사용하지 않는 기능이어서 삭제하고 새로 pod install 을 진행하고 다시 실행했다.


React Native Chart Wrapper (링크

더보기

안드로이드와 iOS에서 차트를 사용하기 위해 만들어진 라이브러리. 현재 0.5.11 버전까지 publish 되어있다.

 

Pod install

더보기

iOS 앱은 빌드를 실행하기 위한 의존성 관리를 cocoapod이라는 것으로 관리한다. cocoapod은 더 자세히 말하자면 Objective-C, Swift 및 외부 라이브러리 관리를 위해 표준 형식을 제공하는 RubyMotion과 같이 Objective-C 런타임에서 실행되는 기타 언어에 대한 애플리케이션 수준 종속성 관리자이다. (위키피디아 인용)

 

npm 과 비슷하다. Podfile에 기록되고 pod install 을 실행하면 podfile.lock이 만들어진다.


그런데 이제는 arm 64 기반을 위한 버전이 필요하다는 에러를 냈다. 여러 해결 방법을 찾다가 (간단히 썼지만 2시간이나 썼다..) M1 기반 Mac 에서는 다음 명령어로 수행하면 정상적으로 react-native 앱을 빌드하고 실행시킬 수 있다.

 

$ arch -x86_64 react-native run-ios

결론은 arm 기반 맥에서는 위 명령어를 사용해야 정상적인 빌드가 가능하다는 것이다. 물론 arm 지원이 되는 라이브러리들만 사용했다면 상관 없을 수도 있고 다른 방법이 있을 수도 있지만 적어도 몇 시간 노가다를 해본 결과 이 방법밖에는 없는 것 같다. 이제 다시 본 목적이었던 문제를 해결해야 한다.