React Native 0.64 won't build iOS app after updating Xcode to 12.5 and iOS to 14.5 React Native 0.64 won't build iOS app after updating Xcode to 12.5 and iOS to 14.5 reactjs reactjs

React Native 0.64 won't build iOS app after updating Xcode to 12.5 and iOS to 14.5


There's a solution I found here.

Add this to your post_install in your Podfile:

post_install do |installer|  flipper_post_install(installer)  ## Fix for Flipper-Folly on iOS 14.5  find_and_replace("Pods/Flipper-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

You'll also need to add the function def for this find_and_replace function (you can put this function anywhere in the podfile):

def find_and_replace(dir, findstr, replacestr)  Dir[dir].each do |name|      text = File.read(name)      replace = text.gsub(findstr,replacestr)      if text != replace          puts "Fix: " + name          File.open(name, "w") { |file| file.puts replace }          STDOUT.flush      end  end  Dir[dir + '*/'].each(&method(:find_and_replace))end

Run pod install again and it should work. If you get an error relating to permissions while accessing the DistributedMutex-inl.h file, delete your /pods folder and run pod install again

You should see text print out that says Fix: Pods/Flipper-Folly/folly/synchronization/DistributedMutex-inl.h, etc. If you don't, double check the path in the find_and_replace call.


There is an open RN issue here: https://github.com/facebook/react-native/issues/31179

For me commenting out Flipper in the Podfile, pod install, and rebuild worked as a temp solution.

  # Enables Flipper.  #  # Note that if you have use_frameworks! enabled, Flipper will not work and  # you should disable these next few lines.  # use_flipper!  # post_install do |installer|  #   flipper_post_install(installer)  # end


Solution without losing Flipper functionality:

Define the upgraded dependencies for Flipper in the Podfile

React Native 62

def add_flipper_pods!(versions = {})  versions['Flipper'] ||= '~> 0.87.0' 👈  versions['DoubleConversion'] ||= '1.1.7'  versions['Flipper-Folly'] ||= '~> 2.5.3' 👈  versions['Flipper-Glog'] ||= '0.3.6'  versions['Flipper-PeerTalk'] ||= '~> 0.0.4'  versions['Flipper-RSocket'] ||= '~> 1.3.1' 👈

React Native 63

# 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' => '0.87.0' 👈, 'Flipper-Folly' => '2.5.3' 👈, 'Flipper-RSocket' => '1.3.1' 👈})  post_install do |installer|    flipper_post_install(installer)  end

cd ios && pod install and you should be good to go

React Native 64

Bump the version to 0.64.1 in the package.json

yarn install && pod install --repo-update && react-native run-ios

https://github.com/facebook/react-native/releases/tag/v0.64.1