Front-End/React + Native

[React Native] Xcode에서 자주 보는 에러 및 해결 방법

MS_developer 2023. 10. 24. 08:32

최근 RN 기반의 프로젝트들을 진행하고 있는데, 새 프로젝트를 열 때마다 빌드 과정에서 오류가 발생해 그동안 해당 문제에 대한 해결 방법들을 적어 놓으려고 한다. 

 

개인 경험 + 이전 검색 기록을 기반으로 하기 때문에 100% 정확하지는 않다.

 

1. unary function 오류

 

No template named 'unary_function' in namespace 'std'; did you mean '__unary_function'?

 

 

Xcode에서 프로젝트를 열면 한 번은 나오는 익숙한 오류다.

 

Xcode 업데이트가 이루어지면서 이전 버전에서 사용하던 기본 코드의 변경이 안 되는 것이 원인으로 추정되는데, 새 프로젝트를 열면 꼭 발생하는 오류인 것 같다. (2023.10.24 기준)

 

해당 오류는 Xcode에서 클릭하면 hash 파일로 이동하는데, 여기서 에러 코드의 제안을 받아들여 코드를 수정하면 된다. (Fix 버튼을 눌러도 간단히 해결 가능)

 

Xcode 업데이트 시 비슷한 오류가 가끔 발생하기 때문에 이런 특정 function에 관련된 오류는 해당 에러가 가이드하는 파일에서 선언 방식에 문제가 있는지 확인해 보도록 하자.

 

2. info.plist 오류

 

error: unable to read input file as a property list: The operation couldn’t be completed

 

또는

 

ERROR ITMS-90056: This bundle is invalid. The Info.plist file is missing the required key: CFBundleVersion

 

가 있는데, 이 외에도 비슷한 종류의 오류가 다양하게 있다.

 

결국에는 에러 로그를 읽어보고 직접 진단하는 방법밖에 없는데, 보편적으로 info.plist 관련된 에러의 경우 경로 설정 문제가 있어 해당 경로 수정을 통해 고칠 수 있다.

 

경로는 기존 프로젝트에서 ios 폴더 내에 존재하는 info.plist 파일의 경로를 복사한 후 Xcode에서 Targets - 프로젝트 선택 - Build Settings 탭 - Packaging 내 info.plist file 경로 변경을 통해 해결할 수 있다.

 

 

한 가지 주의할 점은 여기서 말하는 info.plist는 GoogleService-Info.plist가 아니다. 이 경우 관련된 환경 변수가 없다는 에러가 발생하니 올바른 파일의 경로를 복사했는지 확인하도록 하자.

 

3. 초기화

 

문제 해결을 위해 프로젝트의 이것저것을 만져보기 때문에 빌드가 정상적으로 되어도 에러가 발생할 수 있는데, 이 경우 로그의 제안대로 모든 데이터를 초기화해 주는 것이 좋다.

 

먼저 프로젝트 ios 폴더에서 CLI 명령어를 입력한다.

 

// 기존에 install된 pod 파일들을 삭제
pod deintegrate

// pod에 저장된 캐시 삭제
pod cache clean --all

 

이 외에도 Xcode에서 Product - Clean Build Folder를 통해 빌드 폴더도 깔끔하게 초기화시켜 주도록 하자.

 

그리고 현재실행 중인 시뮬레이터에서 빌드된 앱을 지워야 한다.

 

마지막으로 노드 버전도 확인해 주는 것이 좋다. 진행 중인 프로젝트에서 사용하고 있는 노드 버전을 확인하고 현재 사용 중인 버전을 NVM을 통해 통일시켜 주도록 하자.

 

 

 

 

// 혹시 모르니 dependencies도 재설정
npm install

// cd ios
pod install

 

모든 초기화 준비가 완료되었다면 이전의 CLI로 돌아가서 npm instal과 ios 폴더에서 pod install을 진행한다.

 

위 과정이 끝났다면 시뮬레이터를 종료하고 Xcode에서도 열었던 프로젝트를 메뉴에서 삭제시키도록 한다.

 

 

이후 Xcode를 재실행해보면 모든 디렉토리가 깔끔하게 삭제된 것을 알 수 있다. 여기서 프로젝트를 다시 열고, 다른 오류가 발생했던 부분만 조심스럽게 수정 후 다시 빌드해 보도록 하자.

 

그리고 이 모든 과정이 이루어졌는데 문제가 해결되지 않다면, 그리고 해당 프로젝트가 Expo를 사용하고 있다면... 다음과 같은 오류 코드가 발생할 것이다. 이 포스팅을 쓰게 된 결정적인 이유

 

No native splash screen registered for given view controller. Call 'SplashScreen.show' for given view controller first.

 

이에 대한 해결 방법을 갓택오버플로우에서 찾았는데, 해결 방법은 로딩 컴포넌트의 요소를 변경하는 것이다. Xcode 시뮬레이터에서는 Expo 사용 시 iOS 개발 환경에서는 로딩 컴포넌트로 인해 앱이 구동되지 않는 버그. 개발 중이라면 로딩 컴포넌트를 주석처리하며 테스트할 수 있고, 아니라면 해당 스레드에서 제시한 방법대로 컴포넌트의 구성 요소를 변경하는 방법이 있다.