더 많은 포스팅 보기 자세히보기

프론트엔드/트러블슈팅

[리액트 네이티브] Xcode 12.5 =< folly flipper 사용 시 빌드에러 해결

유도혁 2021. 10. 2. 23:16

😱 상황

리액트 네이티브 flipper를 사용 시 xcode12.5이상의 빌드를 진행할 경우 Facebook에서 개발한 디버깅 도구인 flipper가 네이티브 코드에 종속적이어서 Swift 컴파일러가 업데이트될 때마다 빈번하게 에러가 발생한다. 이번 경우에는 Pods 폴더 내부에 있는 Flipper-Folly와  RCT-Folly에 DistributedMutex-inl.h파일에서 발생하였는데 해결 방법은 아래와 같다.

 

👍 해결 방법

# ios/Podfile

# Enables Flipper.
#
# Note that if you have use_frameworks! enabled, Flipper will not work and
# you should disable these next few lines.
  use_flipper!({ 'Flipper-Folly' => '2.5.3', 'Flipper' => '0.87.0', 'Flipper-RSocket' => '1.3.1' })
  	post_install do |installer|
    flipper_post_install(installer)
    	find_and_replace("Pods/Headers/Private/RCT-Folly/folly/synchronization/DistributedMutex-inl.h",
      "atomic_notify_one(state)", "folly::atomic_notify_one(state)")
    	find_and_replace("Pods/Flipper-Folly/folly/synchronization/DistributedMutex-inl.h",
      "atomic_wait_until(&state, previous | data, deadline)", "folly::atomic_wait_until(&state, previous | data, deadline)")
  end

 

✍️ 설명

cocoapods는 ios에서 라이브러리들을 import해주는 의존성 관리 매니저이다.

 

Podfile은 하나 이상의 Xcode 프로젝트 대상의 종속성을 설명하는 주문서 같은 역할을 하고 있다.

 

pod install을 해주면, Podfile의 내용을 참조하여 Pods디렉터리에 필요한 라이브러리들이 설치해 준다.

 

"post_install"hook은 마지막에 Xcode project를 변경하거나, 원하는 추가동작을 할 수 있도록 해준다.

 

"post_install" 안에 "flipper_post_install(installer)"의 역할은 수동으로 Flipper를 React Native 0.62+ 앱에 추가하는 경우 사용하게 됩니다.

 

Flipper를 수동설치 도중 pods를 업데이트하였지만, RCT-Folly가 아니라 Flipper-folly를 사용하는 것으로 업데이트되었기 때문에 "find_and_replace"를 사용하여 에러가 있는 코드 앞에 "folly::"를 붙여 문제를 해결 할 수 있었다.