수많은 리액트 네이티브에 대한 오류가 있다. 모든 것을 알아야 할 필요는 없겠지만(물론 알면 좋겠쥬...😅), 한 번 경험한 오류에 대해서는 매번 다시 찾아보면서 해결하는 건 너무 힘든 작업이다. 해결책을 다 암기하면 좋겠지만 그것 또한 쉽지는 않다. 그래서 내가 경험한 오류에 대해서 기록해 놓고자 한다.
해결책에는 다양한 방법이 있겠지만, 내가 해결한 방법을 기록한다.
yarn start
or yarn ios
로 프로젝트 시작React Native CLI
로는 처음으로 리액트 네이티브 프로젝트를 생성한 것!(expo제외)vscode 터미널에서 빌드
xcode에서 확인
우선, 에러 로그 중에 unable to open configuration settings file
에 대한 해결책을 찾아보니, pod 관련 에러라는 것을 확인하였다. 그래서 아래와 같은 명령어를 실행해보았다.
pod deintegrate
pod install
그랬더니 pod
명령어 자체가 먹질 않았다. 처음 프로젝트를 생성했기 때문에 리액트 네이티브 앱개발에서 필요로하는 백그라운드 프로그램들이 설치가 잘 안되어있는 것 같다는 생각이 들었다.
sudo gem install cocoapods
기본적으로 위와 같이 명령어를 치면 루비 설치를 위해서 비밀번호 입력한 후에 설치 되는 것이 정상이다. 그런데 나는 아래 로그와 같은 에러가 나타났다.
ERROR: Error installing cocoapods:
The last version of activesupport (>= 5.0, < 8) to support your Ruby & RubyGems was x.x.x.x. Try installing it with `gem install activesupport -v x.x.x.x` and then running the current command again
activesupport requires Ruby version >= x.x.x. The current ruby version is 2.6.10.210.
맥북에 설치된 루비 버전과 ActiveSupport 되는 루비 버전을 맞춰 달라는 내용으로 이해했다. 그래서 루비의 최신 버전을 brew install ruby
를 통해서 루비를 설치했지만 여전히 루비가 최신버전이 아니였다.
(여기서 버전을 맞추는 방법은 루비를 최신버전으로 올리거나 기존에 설치된 버전을 downgrade 하는 방법도 있을 수 있다. 상황에 맞게 판단하면 된다.)
맥북에는 기본적으로 루비가 설치되어 있다. 기본적으로 설치된 루비가 아닌, 최신으로 설치된 루비를 사용할 수 있도록 수정을 해줘야했다.(마치 git도 맥북에는 기본적으로 설치되어있는데, 경로를 수정하여 내가 설치한 git을 사용하도록 만든 것과 비슷한 상황이다.)
이 때 필요한 것이 rbenv
이다. rbenv는 루비 버전 관리를 해주는 패키지이다. nvm과 비슷하다고 생각하면 된다. 아래와 같이 rbenv 설치해준다.
brew install rbenv
그리고 나서 루비의 버전을 확인하여 최신버전을 rbenv를 통해서 설치한다. (루비버전확인) 나는 현재 최신버전인 3.2.2를 설치하였다.
rbenv install 3.2.2
설치가 끝나면 아래처럼 확인이 필요하다.
rbenv versions
* system
3.2.2
*가 있는 것이 현재 사용 중인 루비 버전이다. 그런데 방금 설치한 최신 버전을 사용하고 있지 않는다. 아래 명령어를 통해서 설치된 루비를 바라보도록 수정한다.
rbenv global 3.2.2
다시 위에서 사용한 명령어로 루비 버전을 확인하여 잘 수정되었는지 확인해보면 된다.
그런데...여기서 끝이 아니다.
rbenv에서는 루비 버전이 바뀌었으나, ruby -v
으로는 여전히 예전 루비 버전을 바라보고 있는 경우가 있다.(그렇지 않다면 패스해도 된다.)
아래처럼 rbenv init
명령어를 사용하면 주석된 로그가 보인다. 로그에서 처럼 .zshrc
파일 맨 끝에 eval "$(rbenv init - zsh)"
를 넣어주고 .zshrc 파일을 다시 실행해준다. (source .zshrc
)
(참고. 자신이 사용하는 쉘 환경에 따라서 .zshrc
은 다르게 나올거 같은데, 환경에 맞는 실행 파일 하단에 넣어주면 될 것 같다.)
rbenv init
# Load rbenv automatically by appending
# the following to ~/.zshrc:
eval "$(rbenv init - zsh)"
이제 rbenv -v
와 ruby -v
에서 같은 버전의 루비를 바라보고 있는지 확인한다. 나는 이렇게 루비버전을 맞췄다.
이제는 sudo gem install cocoapods
명령어가 제대로 작동한다.
pod deintegrate
pod install
해당 프로젝트의 ios 폴더로 접근한 뒤 위 명령어를 통해서 프로젝트의 의존성을 제거하고 다시 프로젝트의 의존성을 설치하고 통합한다.
참고로 pod 관련 명령어에 대해서 살펴보자.
pod
pod는 CocoaPods을 실행하는 명령어로서, CocoaPods은 Swift와 Objective-C 프로젝트의 종속성 관리자 입니다.(like npm) iOS앱 안의 라이브러리들의 종속성을 관리한다고 생각하면 된다.
pod init
리액트 네이티브 프로젝트를 시작하면, ios 폴더로 이동하여 pod init
명령어를 친다. 그러면 Podfile이라는 것이 생성된다. 외부 라이브러리를 추가/수정하는 경우 해당 파일을 수정한 후 pod install
이라는 명령어를 통해서 의존성 관리를 진행하게 된다.
pod install
프로젝트를 시작할 때, 새로운 라이브러리를 설치하거나 수정할 때 사용되는 명령어로서 Podfile
을 분석하여 해당 라이브러리들 간의 의존성을 해결하고 설치하여 프로젝트에 통합하는 일련의 과정을 수행한다. 이 과정에서 의존성의 관계에 대한 정보를 담고 있는 Podfile.lock
을 생성한다. 이 Podfile.lock을 통해서 다른 개발자와의 일관성있는 개발환경을 제공한다.
pod deintegrate
의존성을 제거하는 명령어로서 프로젝트에서 CocoaPods를 통해 추가된 라이브러리 설정과 파일을 제거하고 프로젝트를 이전 상태로 돌린다.
yarn start
or
yarn ios
이후 빌드에서는 문제 없이 빌드가 완료되고 에뮬레이터가 실행되었다.
제가 마주한 에러는 최초로 프로젝트를 실행한 환경이여서 CocoaPods에 대한 설치가 제대로 안되어있어서 나타난 에러로 pod 설치를 제대로 한 이후에 빌드할때 문제는 발생하지 않았다. 나와 상황이 다른 경우는 아래 링크에 나온 다른 해결방법으로 해결하면 가능할듯 하다. 내용을 보면 궁극적으로 pod을 통한 의존성 관리를 클린하게 바꿔주는 것이 해결책으로 보인다.