React Native iOS 빌드 에러: CocoaPods와 Ruby 버전 충돌 완벽 해결

[Troubleshooting] React Native iOS 빌드 에러: CocoaPods와 Ruby 충돌 완벽 해결

"오랜만에 React Native 프로젝트를 열고 cd ios && pod install을 쳤는데, LoadError - cannot load such file -- ffi_c 같은 정체불명의 에러 메시지가 쏟아지며 iOS 빌드가 완전히 박살 났습니다."

맥북(Apple Silicon M1/M2) 환경에서 리액트 네이티브나 iOS 앱을 개발하는 프론트엔드 엔지니어들이 수시로 겪는 악몽입니다. 코드는 한 줄도 건드리지 않았는데, OS 업데이트를 한 번 했다는 이유만으로 어제까지 잘 되던 빌드가 터져버립니다.

초보자들은 구글링을 통해 sudo gem install cocoapodsarch -x86_64 pod install 같은 검증되지 않은 명령어들을 터미널에 무작위로 때려 박으며 시스템 환경을 되돌릴 수 없는 스파게티로 만들어 버립니다. 본 가이드에서는 이 빌드 지옥의 근본 원인인 맥(Mac) 내장 Ruby 시스템의 구조적 결함을 해체하고, 의존성을 완벽하게 격리하는 rbenv 기반의 무결점 빌드 아키텍처를 단호하게 제시합니다.

📌 이 글의 핵심 포인트

  • 에러의 본질: Apple macOS에 내장된 System Ruby 권한 충돌과 애플 실리콘(ARM) 아키텍처 호환성 문제
  • 의존성 격리(Isolation): 시스템 Ruby를 버리고 rbenv를 통해 독립적인 가상 Ruby 환경 구축하기
  • CocoaPods 정상화: Bundler를 활용한 프로젝트별 종속성 고정 및 무결점 pod install 실행법

1단계: 핵심 원인 분석 - 건드려서는 안 될 System Ruby

iOS 프로젝트의 네이티브 라이브러리를 관리하는 CocoaPods는 Ruby 언어로 만들어져 있습니다. 맥(Mac)을 사면 기본적으로 Ruby가 설치되어 있지만, 이것은 애플(Apple)이 macOS 시스템을 굴리기 위해 넣어둔 '시스템 전용 성역'입니다.

개발자가 이 시스템 Ruby 위에 sudo 권한을 억지로 부여하여 패키지(Gem)를 설치하려고 하면 권한 에러가 발생하거나 ffi 라이브러리와 애플 실리콘(ARM64) 칩셋 간의 C언어 컴파일 충돌이 일어나며 환경이 완전히 망가집니다. 해결책은 시스템 Ruby를 철저히 무시하고, 개발 전용 Ruby 환경을 따로 구축하는 것입니다.

2단계: 완벽한 트러블슈팅 - rbenv를 통한 Ruby 환경 격리

가장 우아한 해결책은 파이썬의 가상환경(venv)이나 노드의 nvm처럼, Ruby 버전을 독립적으로 관리해 주는 rbenv를 도입하는 것입니다.

터미널을 열고 Homebrew를 통해 아래의 아키텍처를 순서대로 구축하십시오.


# 1. rbenv 및 ruby-build 설치
brew install rbenv ruby-build

# 2. 최신 안정화 버전의 Ruby 설치 (시간이 조금 걸립니다)
rbenv install 3.2.2

# 3. 설치한 버전을 시스템 전역의 기본값으로 설정
rbenv global 3.2.2

# 4. 터미널이 시스템 Ruby 대신 rbenv를 먼저 바라보도록 경로(PATH) 주입
# (사용 중인 쉘 환경에 맞게 적용: ~/.zshrc)
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(rbenv init -)"' >> ~/.zshrc
source ~/.zshrc

위 과정을 거친 후 ruby -v를 쳤을 때 애플 시스템 버전이 아닌 3.2.2가 출력된다면, 드디어 성역에서 벗어나 당신만의 완벽한 통제권을 쥔 것입니다.

3단계: 종속성 방어 - Bundler를 통한 CocoaPods 설치

이제 sudo 없이도 안전하게 CocoaPods를 설치할 수 있습니다. gem install cocoapods를 쳐도 되지만, 프로젝트마다 요구하는 CocoaPods 버전이 다를 수 있으므로 Bundler를 사용하는 것이 엔터프라이즈 정석입니다.


# 1. 의존성 관리자 Bundler 설치
gem install bundler

# 2. React Native 프로젝트의 ios 폴더로 이동
cd ios

# 3. Gemfile에 명시된 버전에 맞춰 안전하게 패키지 설치
bundle install

# 4. 아키텍처 충돌 없는 무결점 pod install 실행
bundle exec pod install

이제 ffi 에러나 권한 부족 경고창 없이, 녹색 글씨로 아름답게 iOS 패키지들이 설치되는 쾌감을 맛볼 수 있습니다.

🙋‍♂️ 자주 묻는 질문 (FAQ)

Q. M1 맥북인데 arch -x86_64 pod install 로 강제 실행하면 안 되나요?
A. 인텔 맥 시절의 호환성 모드(Rosetta)로 강제 실행하는 안티 패턴(Anti-pattern)입니다. 당장 에러는 넘길 수 있지만, 추후 앱을 빌드(Archive)할 때 아키텍처 불일치로 더 끔찍한 빌드 에러를 마주하게 됩니다. 네이티브 ARM 환경에서 올바르게 컴파일되도록 Ruby 환경을 바로잡는 것이 정석입니다.

💡 핵심 정리 및 마무리

프론트엔드 프레임워크가 고도화되어도, 결국 그 밑바탕을 지탱하는 것은 OS 레벨의 네이티브(Native) 컴파일러와 의존성 도구들입니다. 에러가 났을 때 블로그에 복사된 파편적인 명령어들을 맹목적으로 타이핑하지 마십시오. 시스템 환경(System)과 개발 환경(User)을 엄격하게 분리하는 아키텍트의 시선을 갖출 때, 빌드 에러의 공포에서 영원히 해방될 수 있습니다.

댓글

이 블로그의 인기 게시물

Zapier & Make.com 자동화의 덫: 무한 루프(Infinite Loop) 에러 완벽 방어 아키텍처

엑셀 보고서의 종말: 구글 스프레드시트와 루커 스튜디오(Looker Studio)로 실시간 대시보드 구축하기

Docker OOMKilled (Exit Code 137) 에러의 진실: 컨테이너 메모 누수 방어 및 리소스 최적화 아키텍처