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